Index: base/path_service.cc |
diff --git a/base/path_service.cc b/base/path_service.cc |
index 46f394c1d79eb2a8e5b9a06ba4447e5f2791364c..517bf91d2f123a22f364cbe55e87fa99f800493f 100644 |
--- a/base/path_service.cc |
+++ b/base/path_service.cc |
@@ -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 |