Chromium Code Reviews| Index: chrome/common/chrome_paths_mac.mm |
| diff --git a/chrome/common/chrome_paths_mac.mm b/chrome/common/chrome_paths_mac.mm |
| index ce990470a2633814246c29f82a538bf1fe050d93..ccb6a3d69d917d97de728b3ada1bd6239b9157b5 100644 |
| --- a/chrome/common/chrome_paths_mac.mm |
| +++ b/chrome/common/chrome_paths_mac.mm |
| @@ -51,23 +51,13 @@ NSBundle* OuterAppBundleInternal() { |
| } |
| #endif // !defined(OS_IOS) |
| -const char* ProductDirNameInternal() { |
| +char* ProductDirNameForBundle(NSBundle* chrome_bundle) { |
| const char* product_dir_name = NULL; |
| #if !defined(OS_IOS) |
| base::mac::ScopedNSAutoreleasePool pool; |
| - // Use OuterAppBundle() to get the main app's bundle. This key needs to live |
| - // in the main app's bundle because it will be set differently on the canary |
| - // channel, and the autoupdate system dictates that there can be no |
| - // differences between channels within the versioned directory. This would |
| - // normally use base::mac::FrameworkBundle(), but that references the |
| - // framework bundle within the versioned directory. Ordinarily, the profile |
| - // should not be accessed from non-browser processes, but those processes do |
| - // attempt to get the profile directory, so direct them to look in the outer |
| - // browser .app's Info.plist for the CrProductDirName key. |
| - NSBundle* bundle = chrome::OuterAppBundle(); |
| NSString* product_dir_name_ns = |
| - [bundle objectForInfoDictionaryKey:@"CrProductDirName"]; |
| + [chrome_bundle objectForInfoDictionaryKey:@"CrProductDirName"]; |
| product_dir_name = [product_dir_name_ns fileSystemRepresentation]; |
| #endif |
|
Mark Mentovai
2013/04/03 17:52:01
#else DCHECK(!chrome_bundle)
to ensure that nobod
|
| @@ -92,23 +82,42 @@ const char* ProductDirNameInternal() { |
| // official canary channel, the Info.plist will have CrProductDirName set |
| // to "Google/Chrome Canary". |
| std::string ProductDirName() { |
| - static const char* product_dir_name = ProductDirNameInternal(); |
| +#if defined(OS_IOS) |
| + static const char* product_dir_name = ProductDirNameForBundle(nil); |
| +#else |
| + // Use OuterAppBundle() to get the main app's bundle. This key needs to live |
| + // in the main app's bundle because it will be set differently on the canary |
| + // channel, and the autoupdate system dictates that there can be no |
| + // differences between channels within the versioned directory. This would |
| + // normally use base::mac::FrameworkBundle(), but that references the |
| + // framework bundle within the versioned directory. Ordinarily, the profile |
| + // should not be accessed from non-browser processes, but those processes do |
| + // attempt to get the profile directory, so direct them to look in the outer |
| + // browser .app's Info.plist for the CrProductDirName key. |
| + static const char* product_dir_name = |
| + ProductDirNameForBundle(chrome::OuterAppBundle()); |
| +#endif |
| return std::string(product_dir_name); |
| } |
| -} // namespace |
| - |
| -namespace chrome { |
| - |
| -bool GetDefaultUserDataDirectory(base::FilePath* result) { |
| +bool GetDefaultUserDataDirectoryForProduct(const std::string& product_dir, |
| + base::FilePath* result) { |
| bool success = false; |
| if (result && PathService::Get(base::DIR_APP_DATA, result)) { |
| - *result = result->Append(ProductDirName()); |
| + *result = result->Append(product_dir); |
| success = true; |
| } |
| return success; |
| } |
| +} // namespace |
| + |
| +namespace chrome { |
| + |
| +bool GetDefaultUserDataDirectory(base::FilePath* result) { |
| + return GetDefaultUserDataDirectoryForProduct(ProductDirName(), result); |
| +} |
| + |
| bool GetUserDocumentsDirectory(base::FilePath* result) { |
| return base::mac::GetUserDirectory(NSDocumentDirectory, result); |
| } |
| @@ -218,6 +227,12 @@ NSBundle* OuterAppBundle() { |
| return bundle; |
| } |
| +bool GetUserDataDirectoryForBrowserBundle( |
| + NSBundle* bundle, base::FilePath* result) { |
|
Mark Mentovai
2013/04/03 17:52:01
Same thing with the wrapping on this line.
|
| + scoped_ptr_malloc<char> product_dir_name = ProductDirNameForBundle(bundle); |
| + return GetDefaultUserDataDirectoryForProduct(product_dir_name.get(), result); |
| +} |
| + |
| #endif // !defined(OS_IOS) |
| bool ProcessNeedsProfileDir(const std::string& process_type) { |