Index: base/path_service.cc |
diff --git a/base/path_service.cc b/base/path_service.cc |
index 078815d7301269948db006115adf78fa5ba5acde..407715f4842548e6034f74246b6030e0e7bc1630 100644 |
--- a/base/path_service.cc |
+++ b/base/path_service.cc |
@@ -10,8 +10,9 @@ |
#include <shlobj.h> |
#endif |
-#include "base/hash_tables.h" |
+#include "base/file_path.h" |
#include "base/file_util.h" |
+#include "base/hash_tables.h" |
#include "base/lock.h" |
#include "base/logging.h" |
#include "base/singleton.h" |
@@ -30,7 +31,7 @@ namespace base { |
namespace { |
-typedef base::hash_map<int, std::wstring> PathMap; |
+typedef base::hash_map<int, FilePath> PathMap; |
typedef base::hash_set<int> PathSet; |
// We keep a linked list of providers. In a debug build we ensure that no two |
@@ -127,7 +128,7 @@ static PathData* GetPathData() { |
// static |
-bool PathService::GetFromCache(int key, std::wstring* result) { |
+bool PathService::GetFromCache(int key, FilePath* result) { |
PathData* path_data = GetPathData(); |
AutoLock scoped_lock(path_data->lock); |
@@ -141,7 +142,7 @@ bool PathService::GetFromCache(int key, std::wstring* result) { |
} |
// static |
-void PathService::AddToCache(int key, const std::wstring& path) { |
+void PathService::AddToCache(int key, const FilePath& path) { |
PathData* path_data = GetPathData(); |
AutoLock scoped_lock(path_data->lock); |
// Save the computed path in our cache. |
@@ -152,7 +153,7 @@ void PathService::AddToCache(int key, const std::wstring& path) { |
// characters). This isn't supported very well by Windows right now, so it is |
// moot, but we should keep this in mind for the future. |
// static |
-bool PathService::Get(int key, std::wstring* result) { |
+bool PathService::Get(int key, FilePath* result) { |
PathData* path_data = GetPathData(); |
DCHECK(path_data); |
DCHECK(result); |
@@ -165,25 +166,36 @@ bool PathService::Get(int key, std::wstring* result) { |
if (GetFromCache(key, result)) |
return true; |
- std::wstring path; |
+ std::wstring path_string; |
// search providers for the requested path |
// NOTE: it should be safe to iterate here without the lock |
// since RegisterProvider always prepends. |
Provider* provider = path_data->providers; |
while (provider) { |
- if (provider->func(key, &path)) |
+ if (provider->func(key, &path_string)) |
break; |
- DCHECK(path.empty()) << "provider should not have modified path"; |
+ DCHECK(path_string.empty()) << "provider should not have modified path"; |
provider = provider->next; |
} |
- if (path.empty()) |
+ if (path_string.empty()) |
return false; |
+ FilePath path = FilePath::FromWStringHack(path_string); |
AddToCache(key, path); |
- result->swap(path); |
+ *result = path; |
+ return true; |
+} |
+ |
+// static |
+bool PathService::Get(int key, std::wstring* result) { |
+ // Deprecated compatibility function. |
+ FilePath path; |
+ if (!Get(key, &path)) |
+ return false; |
+ *result = path.ToWStringHack(); |
return true; |
} |
@@ -211,7 +223,7 @@ bool PathService::Override(int key, const std::wstring& path) { |
file_util::TrimTrailingSeparator(&file_path); |
AutoLock scoped_lock(path_data->lock); |
- path_data->cache[key] = file_path; |
+ path_data->cache[key] = FilePath::FromWStringHack(file_path); |
path_data->overrides.insert(key); |
return true; |
} |