Index: chrome/common/mac/app_mode_chrome_locator.mm |
diff --git a/chrome/common/mac/app_mode_chrome_locator.mm b/chrome/common/mac/app_mode_chrome_locator.mm |
index ac62380cf2fce635039fb9b463e0024a94e2c369..3cd5302cc46cf9b1b8679c84026230719484aa94 100644 |
--- a/chrome/common/mac/app_mode_chrome_locator.mm |
+++ b/chrome/common/mac/app_mode_chrome_locator.mm |
@@ -25,6 +25,7 @@ bool FindBundleById(NSString* bundle_id, base::FilePath* out_bundle) { |
} |
bool GetChromeBundleInfo(const base::FilePath& chrome_bundle, |
+ base::FilePath* executable_path, |
base::string16* raw_version_str, |
base::FilePath* version_path, |
base::FilePath* framework_shlib_path) { |
@@ -57,19 +58,25 @@ bool GetChromeBundleInfo(const base::FilePath& chrome_bundle, |
NSString* cr_bundle_exe = |
ObjCCast<NSString>( |
[cr_bundle objectForInfoDictionaryKey:@"CFBundleExecutable"]); |
+ // Essentially we want chrome::kFrameworkName which looks like |
+ // "$PRODUCT_STRING Framework.framework". The library itself is at |
+ // "$PRODUCT_STRING Framework.framework/$PRODUCT_STRING Framework". Note that |
+ // $PRODUCT_STRING is not |cr_bundle_exe| because in Canary the framework is |
+ // still called "Google Chrome Framework". |
+ // However, we want the shims to be agnostic to distribution and operate based |
+ // on the data in their plist, so encode the framework names here. |
+ NSDictionary* framework_for_exe = @{ |
+ @"Chromium": @"Chromium", |
+ @"Google Chrome": @"Google Chrome", |
+ @"Google Chrome Canary": @"Google Chrome", |
+ }; |
+ NSString* framework_name = [framework_for_exe objectForKey:cr_bundle_exe]; |
NSString* cr_framework_shlib_path = |
[cr_versioned_path stringByAppendingPathComponent: |
- base::SysUTF8ToNSString(chrome::kFrameworkName)]; |
- // chrome::kFrameworkName looks like "$PRODUCT_STRING Framework.framework". |
- // The library itself is at |
- // "$PRODUCT_STRING Framework.framework/$PRODUCT_STRING Framework", so we cut |
- // off the .framework extension here and append it to the path. |
- // It's important to build the path to the framework this way because |
- // in Canary the framework is still called "Google Chrome Framework". |
+ [framework_name stringByAppendingString:@" Framework.framework"]]; |
cr_framework_shlib_path = |
[cr_framework_shlib_path stringByAppendingPathComponent: |
- [base::SysUTF8ToNSString(chrome::kFrameworkName) |
- stringByDeletingPathExtension]]; |
+ [framework_name stringByAppendingString:@" Framework"]]; |
if (!cr_bundle_exe || !cr_framework_shlib_path) |
return false; |
@@ -82,6 +89,7 @@ bool GetChromeBundleInfo(const base::FilePath& chrome_bundle, |
return false; |
// Everything OK, copy output parameters. |
+ *executable_path = base::mac::NSStringToFilePath([cr_bundle executablePath]); |
*raw_version_str = base::SysNSStringToUTF16(cr_version); |
*version_path = base::mac::NSStringToFilePath(cr_versioned_path); |
*framework_shlib_path = |