15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef BASE_MAC_BUNDLE_LOCATIONS_H_ 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define BASE_MAC_BUNDLE_LOCATIONS_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/base_export.h" 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/files/file_path.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(__OBJC__) 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#import <Foundation/Foundation.h> 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else // __OBJC__ 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class NSBundle; 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class NSString; 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // __OBJC__ 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace base { 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class FilePath; 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace mac { 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This file provides several functions to explicitly request the various 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// component bundles of Chrome. Please use these methods rather than calling 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// +[NSBundle mainBundle] or CFBundleGetMainBundle(). 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Terminology 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// - "Outer Bundle" - This is the main bundle for Chrome; it's what 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// +[NSBundle mainBundle] returns when Chrome is launched normally. 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// - "Main Bundle" - This is the bundle from which Chrome was launched. 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This will be the same as the outer bundle except when Chrome is launched 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// via an app shortcut, in which case this will return the app shortcut's 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// bundle rather than the main Chrome bundle. 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// - "Framework Bundle" - This is the bundle corresponding to the Chrome 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// framework. 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Guidelines for use: 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// - To access a resource, the Framework bundle should be used. 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// - If the choice is between the Outer or Main bundles then please choose 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// carefully. Most often the Outer bundle will be the right choice, but for 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// cases such as adding an app to the "launch on startup" list, the Main 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// bundle is probably the one to use. 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Methods for retrieving the various bundles. 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)BASE_EXPORT NSBundle* MainBundle(); 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)BASE_EXPORT FilePath MainBundlePath(); 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)BASE_EXPORT NSBundle* OuterBundle(); 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)BASE_EXPORT FilePath OuterBundlePath(); 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)BASE_EXPORT NSBundle* FrameworkBundle(); 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)BASE_EXPORT FilePath FrameworkBundlePath(); 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Set the bundle that the preceding functions will return, overriding the 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// default values. Restore the default by passing in |nil|. 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)BASE_EXPORT void SetOverrideOuterBundle(NSBundle* bundle); 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)BASE_EXPORT void SetOverrideFrameworkBundle(NSBundle* bundle); 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Same as above but accepting a FilePath argument. 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)BASE_EXPORT void SetOverrideOuterBundlePath(const FilePath& file_path); 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)BASE_EXPORT void SetOverrideFrameworkBundlePath(const FilePath& file_path); 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace mac 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace base 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // BASE_MAC_BUNDLE_LOCATIONS_H_ 68