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