1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #ifndef BASE_MAC_FOUNDATION_UTIL_H_
6 #define BASE_MAC_FOUNDATION_UTIL_H_
12 #include "base/logging.h"
15 #import <Foundation/Foundation.h>
23 // Adapted from NSPathUtilities.h and NSObjCRuntime.h.
24 #if __LP64__ || NS_BUILD_32_LIKE_64
25 typedef unsigned long NSSearchPathDirectory
;
26 typedef unsigned long NSSearchPathDomainMask
;
28 typedef unsigned int NSSearchPathDirectory
;
29 typedef unsigned int NSSearchPathDomainMask
;
35 // Returns true if the application is running from a bundle
37 void SetOverrideAmIBundled(bool value
);
39 // Returns true if this process is marked as a "Background only process".
40 bool IsBackgroundOnlyProcess();
42 // Returns the main bundle or the override, used for code that needs
43 // to fetch resources from bundles, but work within a unittest where we
45 NSBundle
* MainAppBundle();
46 FilePath
MainAppBundlePath();
48 // Returns the path to a resource within the MainAppBundle.
49 FilePath
PathForMainAppBundleResource(CFStringRef resourceName
);
51 // Set the bundle that MainAppBundle will return, overriding the default value
52 // (Restore the default by calling SetOverrideAppBundle(nil)).
53 void SetOverrideAppBundle(NSBundle
* bundle
);
54 void SetOverrideAppBundlePath(const FilePath
& file_path
);
56 // Returns the creator code associated with the CFBundleRef at bundle.
57 OSType
CreatorCodeForCFBundleRef(CFBundleRef bundle
);
59 // Returns the creator code associated with this application, by calling
60 // CreatorCodeForCFBundleRef for the application's main bundle. If this
61 // information cannot be determined, returns kUnknownType ('????'). This
62 // does not respect the override app bundle because it's based on CFBundle
63 // instead of NSBundle, and because callers probably don't want the override
64 // app bundle's creator code anyway.
65 OSType
CreatorCodeForApplication();
67 // Searches for directories for the given key in only the given |domain_mask|.
68 // If found, fills result (which must always be non-NULL) with the
69 // first found directory and returns true. Otherwise, returns false.
70 bool GetSearchPathDirectory(NSSearchPathDirectory directory
,
71 NSSearchPathDomainMask domain_mask
,
74 // Searches for directories for the given key in only the local domain.
75 // If found, fills result (which must always be non-NULL) with the
76 // first found directory and returns true. Otherwise, returns false.
77 bool GetLocalDirectory(NSSearchPathDirectory directory
, FilePath
* result
);
79 // Searches for directories for the given key in only the user domain.
80 // If found, fills result (which must always be non-NULL) with the
81 // first found directory and returns true. Otherwise, returns false.
82 bool GetUserDirectory(NSSearchPathDirectory directory
, FilePath
* result
);
84 // Returns the ~/Library directory.
85 FilePath
GetUserLibraryPath();
87 // Takes a path to an (executable) binary and tries to provide the path to an
88 // application bundle containing it. It takes the outermost bundle that it can
89 // find (so for "/Foo/Bar.app/.../Baz.app/..." it produces "/Foo/Bar.app").
90 // |exec_name| - path to the binary
91 // returns - path to the application bundle, or empty on error
92 FilePath
GetAppBundlePath(const FilePath
& exec_name
);
94 // Utility function to pull out a value from a dictionary, check its type, and
95 // return it. Returns NULL if the key is not present or of the wrong type.
96 CFTypeRef
GetValueFromDictionary(CFDictionaryRef dict
,
98 CFTypeID expected_type
);
100 // Retain/release calls for memory management in C++.
101 void NSObjectRetain(void* obj
);
102 void NSObjectRelease(void* obj
);
107 #endif // BASE_MAC_FOUNDATION_UTIL_H_