1*6777b538SAndroid Build Coastguard Worker // Copyright 2012 The Chromium Authors 2*6777b538SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be 3*6777b538SAndroid Build Coastguard Worker // found in the LICENSE file. 4*6777b538SAndroid Build Coastguard Worker 5*6777b538SAndroid Build Coastguard Worker #ifndef BASE_APPLE_BUNDLE_LOCATIONS_H_ 6*6777b538SAndroid Build Coastguard Worker #define BASE_APPLE_BUNDLE_LOCATIONS_H_ 7*6777b538SAndroid Build Coastguard Worker 8*6777b538SAndroid Build Coastguard Worker #include "base/base_export.h" 9*6777b538SAndroid Build Coastguard Worker #include "base/files/file_path.h" 10*6777b538SAndroid Build Coastguard Worker 11*6777b538SAndroid Build Coastguard Worker #if defined(__OBJC__) 12*6777b538SAndroid Build Coastguard Worker #import <Foundation/Foundation.h> 13*6777b538SAndroid Build Coastguard Worker #endif // __OBJC__ 14*6777b538SAndroid Build Coastguard Worker 15*6777b538SAndroid Build Coastguard Worker namespace base { 16*6777b538SAndroid Build Coastguard Worker class FilePath; 17*6777b538SAndroid Build Coastguard Worker } 18*6777b538SAndroid Build Coastguard Worker 19*6777b538SAndroid Build Coastguard Worker // NSBundle isn't thread-safe; all functions in this file must be called on the 20*6777b538SAndroid Build Coastguard Worker // main thread. 21*6777b538SAndroid Build Coastguard Worker 22*6777b538SAndroid Build Coastguard Worker namespace base::apple { 23*6777b538SAndroid Build Coastguard Worker 24*6777b538SAndroid Build Coastguard Worker // This file provides several functions to explicitly request the various 25*6777b538SAndroid Build Coastguard Worker // component bundles of Chrome. Please use these methods rather than calling 26*6777b538SAndroid Build Coastguard Worker // `+[NSBundle mainBundle]` or `CFBundleGetMainBundle()`. 27*6777b538SAndroid Build Coastguard Worker // 28*6777b538SAndroid Build Coastguard Worker // Terminology 29*6777b538SAndroid Build Coastguard Worker // - "Outer Bundle" - This is the main bundle for Chrome; it's what 30*6777b538SAndroid Build Coastguard Worker // `+[NSBundle mainBundle]` returns when Chrome is launched normally. 31*6777b538SAndroid Build Coastguard Worker // 32*6777b538SAndroid Build Coastguard Worker // - "Main Bundle" - This is the bundle from which Chrome was launched. 33*6777b538SAndroid Build Coastguard Worker // This will be the same as the outer bundle except when Chrome is launched 34*6777b538SAndroid Build Coastguard Worker // via an app shortcut, in which case this will return the app shortcut's 35*6777b538SAndroid Build Coastguard Worker // bundle rather than the main Chrome bundle. 36*6777b538SAndroid Build Coastguard Worker // 37*6777b538SAndroid Build Coastguard Worker // - "Framework Bundle" - This is the bundle corresponding to the Chrome 38*6777b538SAndroid Build Coastguard Worker // framework. 39*6777b538SAndroid Build Coastguard Worker // 40*6777b538SAndroid Build Coastguard Worker // Guidelines for use: 41*6777b538SAndroid Build Coastguard Worker // - To access a resource, the Framework bundle should be used. 42*6777b538SAndroid Build Coastguard Worker // - If the choice is between the Outer or Main bundles then please choose 43*6777b538SAndroid Build Coastguard Worker // carefully. Most often the Outer bundle will be the right choice, but for 44*6777b538SAndroid Build Coastguard Worker // cases such as adding an app to the "launch on startup" list, the Main 45*6777b538SAndroid Build Coastguard Worker // bundle is probably the one to use. 46*6777b538SAndroid Build Coastguard Worker 47*6777b538SAndroid Build Coastguard Worker // Methods for retrieving the various bundles. 48*6777b538SAndroid Build Coastguard Worker BASE_EXPORT FilePath MainBundlePath(); 49*6777b538SAndroid Build Coastguard Worker BASE_EXPORT FilePath OuterBundlePath(); 50*6777b538SAndroid Build Coastguard Worker BASE_EXPORT FilePath FrameworkBundlePath(); 51*6777b538SAndroid Build Coastguard Worker BASE_EXPORT std::string MainBundleIdentifier(); 52*6777b538SAndroid Build Coastguard Worker #if defined(__OBJC__) 53*6777b538SAndroid Build Coastguard Worker BASE_EXPORT NSBundle* MainBundle(); 54*6777b538SAndroid Build Coastguard Worker BASE_EXPORT NSURL* MainBundleURL(); 55*6777b538SAndroid Build Coastguard Worker BASE_EXPORT NSBundle* OuterBundle(); 56*6777b538SAndroid Build Coastguard Worker BASE_EXPORT NSURL* OuterBundleURL(); 57*6777b538SAndroid Build Coastguard Worker BASE_EXPORT NSBundle* FrameworkBundle(); 58*6777b538SAndroid Build Coastguard Worker #endif // __OBJC__ 59*6777b538SAndroid Build Coastguard Worker 60*6777b538SAndroid Build Coastguard Worker // Set the bundle that the preceding functions will return, overriding the 61*6777b538SAndroid Build Coastguard Worker // default values. Restore the default by passing in `nil` or an empty 62*6777b538SAndroid Build Coastguard Worker // `FilePath`. 63*6777b538SAndroid Build Coastguard Worker BASE_EXPORT void SetOverrideOuterBundlePath(const FilePath& file_path); 64*6777b538SAndroid Build Coastguard Worker BASE_EXPORT void SetOverrideFrameworkBundlePath(const FilePath& file_path); 65*6777b538SAndroid Build Coastguard Worker #if defined(__OBJC__) 66*6777b538SAndroid Build Coastguard Worker BASE_EXPORT void SetOverrideOuterBundle(NSBundle* bundle); 67*6777b538SAndroid Build Coastguard Worker BASE_EXPORT void SetOverrideFrameworkBundle(NSBundle* bundle); 68*6777b538SAndroid Build Coastguard Worker #endif // __OBJC__ 69*6777b538SAndroid Build Coastguard Worker 70*6777b538SAndroid Build Coastguard Worker } // namespace base::apple 71*6777b538SAndroid Build Coastguard Worker 72*6777b538SAndroid Build Coastguard Worker #endif // BASE_APPLE_BUNDLE_LOCATIONS_H_ 73