| Index: content/common/sandbox_mac.mm
|
| diff --git a/content/common/sandbox_mac.mm b/content/common/sandbox_mac.mm
|
| index c7c126594aec3fb2abae774f3359e9a3a1b83c81..8b4dfe3f5f3f24394c4fdb1a3951e2e38a8f5e2e 100644
|
| --- a/content/common/sandbox_mac.mm
|
| +++ b/content/common/sandbox_mac.mm
|
| @@ -114,12 +114,14 @@ NSString* Sandbox::AllowMetadataForPath(const base::FilePath& allowed_path) {
|
| // Collect a list of all parent directories.
|
| base::FilePath last_path = allowed_path;
|
| std::vector<base::FilePath> subpaths;
|
| - for (base::FilePath path = allowed_path;
|
| - path.value() != last_path.value();
|
| - path = path.DirName()) {
|
| +
|
| + base::FilePath path = allowed_path;
|
| + do {
|
| subpaths.push_back(path);
|
| +
|
| last_path = path;
|
| - }
|
| + path = path.DirName();
|
| + } while (path.value() != last_path.value());
|
|
|
| // Iterate through all parents and allow stat() on them explicitly.
|
| NSString* sandbox_command = @"(allow file-read-metadata ";
|
| @@ -570,6 +572,22 @@ bool Sandbox::EnableSandbox(int sandbox_type,
|
| [base::mac::MainBundle() executablePath]);
|
| NSString* sandbox_command = AllowMetadataForPath(
|
| GetCanonicalSandboxPath(bundle_executable));
|
| +
|
| + // In addition to the workaround above, for OS X <= 10.6 we also need to
|
| + // allow reading file metadata for all the dylibs under the same directory
|
| + // containing the Chrome bundle. It requires to go 5 levels up from main
|
| + // bundle path because the main bundle here is the Helper.app bundle.
|
| + base::FilePath product_path = base::mac::MainBundlePath()
|
| + .DirName()
|
| + .DirName()
|
| + .DirName()
|
| + .DirName()
|
| + .DirName();
|
| + sandbox_command = [sandbox_command
|
| + stringByAppendingFormat:
|
| + @"(allow file-read-metadata (regex #\"^%@/.*\\.dylib$\"))",
|
| + base::mac::FilePathToNSString(product_path)];
|
| +
|
| substitutions["COMPONENT_BUILD_WORKAROUND"] =
|
| SandboxSubstring(base::SysNSStringToUTF8(sandbox_command));
|
| }
|
|
|