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#include "base/apple/bundle_locations.h" 6*6777b538SAndroid Build Coastguard Worker 7*6777b538SAndroid Build Coastguard Worker#include "base/apple/foundation_util.h" 8*6777b538SAndroid Build Coastguard Worker#include "base/check.h" 9*6777b538SAndroid Build Coastguard Worker#include "base/strings/sys_string_conversions.h" 10*6777b538SAndroid Build Coastguard Worker 11*6777b538SAndroid Build Coastguard Workernamespace base::apple { 12*6777b538SAndroid Build Coastguard Worker 13*6777b538SAndroid Build Coastguard Workernamespace { 14*6777b538SAndroid Build Coastguard Worker 15*6777b538SAndroid Build Coastguard WorkerNSBundle* g_override_framework_bundle = nil; 16*6777b538SAndroid Build Coastguard WorkerNSBundle* g_override_outer_bundle = nil; 17*6777b538SAndroid Build Coastguard Worker 18*6777b538SAndroid Build Coastguard Worker} // namespace 19*6777b538SAndroid Build Coastguard Worker 20*6777b538SAndroid Build Coastguard WorkerNSBundle* MainBundle() { 21*6777b538SAndroid Build Coastguard Worker return NSBundle.mainBundle; 22*6777b538SAndroid Build Coastguard Worker} 23*6777b538SAndroid Build Coastguard Worker 24*6777b538SAndroid Build Coastguard WorkerNSURL* MainBundleURL() { 25*6777b538SAndroid Build Coastguard Worker return MainBundle().bundleURL; 26*6777b538SAndroid Build Coastguard Worker} 27*6777b538SAndroid Build Coastguard Worker 28*6777b538SAndroid Build Coastguard WorkerFilePath MainBundlePath() { 29*6777b538SAndroid Build Coastguard Worker return apple::NSStringToFilePath(MainBundle().bundlePath); 30*6777b538SAndroid Build Coastguard Worker} 31*6777b538SAndroid Build Coastguard Worker 32*6777b538SAndroid Build Coastguard Workerstd::string MainBundleIdentifier() { 33*6777b538SAndroid Build Coastguard Worker return base::SysNSStringToUTF8(MainBundle().bundleIdentifier); 34*6777b538SAndroid Build Coastguard Worker} 35*6777b538SAndroid Build Coastguard Worker 36*6777b538SAndroid Build Coastguard WorkerNSBundle* OuterBundle() { 37*6777b538SAndroid Build Coastguard Worker if (g_override_outer_bundle) { 38*6777b538SAndroid Build Coastguard Worker return g_override_outer_bundle; 39*6777b538SAndroid Build Coastguard Worker } 40*6777b538SAndroid Build Coastguard Worker return NSBundle.mainBundle; 41*6777b538SAndroid Build Coastguard Worker} 42*6777b538SAndroid Build Coastguard Worker 43*6777b538SAndroid Build Coastguard WorkerNSURL* OuterBundleURL() { 44*6777b538SAndroid Build Coastguard Worker return OuterBundle().bundleURL; 45*6777b538SAndroid Build Coastguard Worker} 46*6777b538SAndroid Build Coastguard Worker 47*6777b538SAndroid Build Coastguard WorkerFilePath OuterBundlePath() { 48*6777b538SAndroid Build Coastguard Worker return apple::NSStringToFilePath(OuterBundle().bundlePath); 49*6777b538SAndroid Build Coastguard Worker} 50*6777b538SAndroid Build Coastguard Worker 51*6777b538SAndroid Build Coastguard WorkerNSBundle* FrameworkBundle() { 52*6777b538SAndroid Build Coastguard Worker if (g_override_framework_bundle) { 53*6777b538SAndroid Build Coastguard Worker return g_override_framework_bundle; 54*6777b538SAndroid Build Coastguard Worker } 55*6777b538SAndroid Build Coastguard Worker return NSBundle.mainBundle; 56*6777b538SAndroid Build Coastguard Worker} 57*6777b538SAndroid Build Coastguard Worker 58*6777b538SAndroid Build Coastguard WorkerFilePath FrameworkBundlePath() { 59*6777b538SAndroid Build Coastguard Worker return apple::NSStringToFilePath(FrameworkBundle().bundlePath); 60*6777b538SAndroid Build Coastguard Worker} 61*6777b538SAndroid Build Coastguard Worker 62*6777b538SAndroid Build Coastguard Workernamespace { 63*6777b538SAndroid Build Coastguard Worker 64*6777b538SAndroid Build Coastguard WorkerNSBundle* BundleFromPath(const FilePath& file_path) { 65*6777b538SAndroid Build Coastguard Worker if (file_path.empty()) { 66*6777b538SAndroid Build Coastguard Worker return nil; 67*6777b538SAndroid Build Coastguard Worker } 68*6777b538SAndroid Build Coastguard Worker 69*6777b538SAndroid Build Coastguard Worker NSBundle* bundle = [NSBundle bundleWithURL:apple::FilePathToNSURL(file_path)]; 70*6777b538SAndroid Build Coastguard Worker CHECK(bundle) << "Failed to load the bundle at " << file_path.value(); 71*6777b538SAndroid Build Coastguard Worker 72*6777b538SAndroid Build Coastguard Worker return bundle; 73*6777b538SAndroid Build Coastguard Worker} 74*6777b538SAndroid Build Coastguard Worker 75*6777b538SAndroid Build Coastguard Worker} // namespace 76*6777b538SAndroid Build Coastguard Worker 77*6777b538SAndroid Build Coastguard Workervoid SetOverrideOuterBundle(NSBundle* bundle) { 78*6777b538SAndroid Build Coastguard Worker g_override_outer_bundle = bundle; 79*6777b538SAndroid Build Coastguard Worker} 80*6777b538SAndroid Build Coastguard Worker 81*6777b538SAndroid Build Coastguard Workervoid SetOverrideFrameworkBundle(NSBundle* bundle) { 82*6777b538SAndroid Build Coastguard Worker g_override_framework_bundle = bundle; 83*6777b538SAndroid Build Coastguard Worker} 84*6777b538SAndroid Build Coastguard Worker 85*6777b538SAndroid Build Coastguard Workervoid SetOverrideOuterBundlePath(const FilePath& file_path) { 86*6777b538SAndroid Build Coastguard Worker NSBundle* bundle = BundleFromPath(file_path); 87*6777b538SAndroid Build Coastguard Worker g_override_outer_bundle = bundle; 88*6777b538SAndroid Build Coastguard Worker} 89*6777b538SAndroid Build Coastguard Worker 90*6777b538SAndroid Build Coastguard Workervoid SetOverrideFrameworkBundlePath(const FilePath& file_path) { 91*6777b538SAndroid Build Coastguard Worker NSBundle* bundle = BundleFromPath(file_path); 92*6777b538SAndroid Build Coastguard Worker g_override_framework_bundle = bundle; 93*6777b538SAndroid Build Coastguard Worker} 94*6777b538SAndroid Build Coastguard Worker 95*6777b538SAndroid Build Coastguard Worker} // namespace base::apple 96