roll skia 1111->1115
[chromium-blink-merge.git] / base / mac / foundation_util.h
bloba7c525aac1d16fa0ace3ea65944b6e1511d7ed7b
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_
7 #pragma once
9 #include <string>
10 #include <vector>
12 #include "base/logging.h"
14 #if defined(__OBJC__)
15 #import <Foundation/Foundation.h>
16 @class NSBundle;
17 #else // __OBJC__
18 class NSBundle;
19 #endif // __OBJC__
21 class FilePath;
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;
27 #else
28 typedef unsigned int NSSearchPathDirectory;
29 typedef unsigned int NSSearchPathDomainMask;
30 #endif
32 namespace base {
33 namespace mac {
35 // Returns true if the application is running from a bundle
36 bool AmIBundled();
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
44 // aren't a bundle.
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,
72 FilePath* result);
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,
97 CFStringRef key,
98 CFTypeID expected_type);
100 // Retain/release calls for memory management in C++.
101 void NSObjectRetain(void* obj);
102 void NSObjectRelease(void* obj);
104 } // namespace mac
105 } // namespace base
107 #endif // BASE_MAC_FOUNDATION_UTIL_H_