Index: base/path_service.cc |
diff --git a/base/path_service.cc b/base/path_service.cc |
index 46f394c1d79eb2a8e5b9a06ba4447e5f2791364c..a3b882c2a9e8f76f668ed71b8549706059aecf51 100644 |
--- a/base/path_service.cc |
+++ b/base/path_service.cc |
@@ -1,4 +1,4 @@ |
-// Copyright (c) 2011 The Chromium Authors. All rights reserved. |
+// Copyright (c) 2012 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. |
@@ -222,18 +222,29 @@ bool PathService::Get(int key, FilePath* result) { |
} |
bool PathService::Override(int key, const FilePath& path) { |
+ // Just call the full function with true for the value of |create|. |
+ return OverrideAndCreateIfNeeded(key, path, true); |
+} |
+ |
+bool PathService::OverrideAndCreateIfNeeded(int key, |
+ const FilePath& path, |
+ bool create) { |
PathData* path_data = GetPathData(); |
DCHECK(path_data); |
DCHECK_GT(key, base::DIR_CURRENT) << "invalid path key"; |
FilePath file_path = path; |
- // Make sure the directory exists. We need to do this before we translate |
- // this to the absolute path because on POSIX, AbsolutePath fails if called |
- // on a non-existent path. |
- if (!file_util::PathExists(file_path) && |
- !file_util::CreateDirectory(file_path)) |
- return false; |
+ // For some locations this will fail if called from inside the sandbox there- |
+ // fore we protect this call with a flag. |
+ if (create) { |
+ // Make sure the directory exists. We need to do this before we translate |
+ // this to the absolute path because on POSIX, AbsolutePath fails if called |
+ // on a non-existent path. |
+ if (!file_util::PathExists(file_path) && |
+ !file_util::CreateDirectory(file_path)) |
+ return false; |
+ } |
// We need to have an absolute path, as extensions and plugins don't like |
// relative paths, and will gladly crash the browser in CHECK()s if they get a |