78990efc4e
- provide apis to get and override the app bundle - w/in the core code, use this api for fetching the bundle - render sandbox config - resource bundles - test shell font - w/in the unittest boot straps, use the mac util to override the bundle so resources can be found. Review URL: http://codereview.chromium.org/28214 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@10798 0039d316-1c4b-4281-b951-d872f2087c98
70 linhas
1.9 KiB
Plaintext
70 linhas
1.9 KiB
Plaintext
// Copyright (c) 2008 The Chromium Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
|
|
#include "base/mac_util.h"
|
|
|
|
#include <Carbon/Carbon.h>
|
|
#import <Cocoa/Cocoa.h>
|
|
|
|
#include "base/file_path.h"
|
|
#include "base/logging.h"
|
|
#include "base/scoped_cftyperef.h"
|
|
#include "base/sys_string_conversions.h"
|
|
|
|
namespace mac_util {
|
|
|
|
std::string PathFromFSRef(const FSRef& ref) {
|
|
scoped_cftyperef<CFURLRef> url(
|
|
CFURLCreateFromFSRef(kCFAllocatorDefault, &ref));
|
|
NSString *path_string = [(NSURL *)url.get() path];
|
|
return [path_string fileSystemRepresentation];
|
|
}
|
|
|
|
bool FSRefFromPath(const std::string& path, FSRef* ref) {
|
|
OSStatus status = FSPathMakeRef((const UInt8*)path.c_str(),
|
|
ref, nil);
|
|
return status == noErr;
|
|
}
|
|
|
|
// Adapted from http://developer.apple.com/carbon/tipsandtricks.html#AmIBundled
|
|
bool AmIBundled() {
|
|
ProcessSerialNumber psn = {0, kCurrentProcess};
|
|
|
|
FSRef fsref;
|
|
if (GetProcessBundleLocation(&psn, &fsref) != noErr)
|
|
return false;
|
|
|
|
FSCatalogInfo info;
|
|
if (FSGetCatalogInfo(&fsref, kFSCatInfoNodeFlags, &info,
|
|
NULL, NULL, NULL) != noErr) {
|
|
return false;
|
|
}
|
|
|
|
return info.nodeFlags & kFSNodeIsDirectoryMask;
|
|
}
|
|
|
|
// No threading worries since NSBundle isn't thread safe.
|
|
static NSBundle* g_override_app_bundle = nil;
|
|
|
|
NSBundle* MainAppBundle() {
|
|
if (g_override_app_bundle)
|
|
return g_override_app_bundle;
|
|
return [NSBundle mainBundle];
|
|
}
|
|
|
|
void SetOverrideAppBundle(NSBundle* bundle) {
|
|
[g_override_app_bundle release];
|
|
g_override_app_bundle = [bundle retain];
|
|
}
|
|
|
|
void SetOverrideAppBundlePath(const FilePath& file_path) {
|
|
NSString* path = base::SysUTF8ToNSString(file_path.value());
|
|
NSBundle* bundle = [NSBundle bundleWithPath:path];
|
|
DCHECK(bundle) << "failed to load the bundle: " << file_path.value();
|
|
|
|
SetOverrideAppBundle(bundle);
|
|
}
|
|
|
|
} // namespace mac_util
|