summaryrefslogtreecommitdiffstats
path: root/base
diff options
context:
space:
mode:
authorglen@chromium.org <glen@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-08-09 20:47:18 +0000
committerglen@chromium.org <glen@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-08-09 20:47:18 +0000
commit20448a1990372714ec98cbfdb2a051c40bd30316 (patch)
tree5131d1e9fc3e17a2cae73a816a5daf131187e3df /base
parenta81e5f4317b551631f7d516594a6a12e11373535 (diff)
downloadchromium_src-20448a1990372714ec98cbfdb2a051c40bd30316.zip
chromium_src-20448a1990372714ec98cbfdb2a051c40bd30316.tar.gz
chromium_src-20448a1990372714ec98cbfdb2a051c40bd30316.tar.bz2
Revert 55450 - Fix CheckFalseTest.CheckFails on Linux after my change to ui_test.
This makes PathService clear its cache after overriding a path. We have many paths depending on each other, so this is necessary to avoid inconsistencies. Added a comment that PathService::Override should not be called by production code. TEST=ui_tests in Release mode BUG=49838 Review URL: http://codereview.chromium.org/2805100 TBR=phajdan.jr@chromium.org Review URL: http://codereview.chromium.org/3107001 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@55468 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'base')
-rw-r--r--base/path_service.cc38
-rw-r--r--base/path_service.h4
2 files changed, 15 insertions, 27 deletions
diff --git a/base/path_service.cc b/base/path_service.cc
index 7b3b297..e363fe6 100644
--- a/base/path_service.cc
+++ b/base/path_service.cc
@@ -32,6 +32,7 @@ namespace base {
namespace {
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
// providers claim overlapping keys.
@@ -94,8 +95,8 @@ static Provider base_provider_posix = {
struct PathData {
Lock lock;
- PathMap cache; // Cache mappings from path key to path value.
- PathMap overrides; // Track path overrides.
+ PathMap cache; // Track mappings from path key to path value.
+ PathSet overrides; // Track whether a path has been overridden.
Provider* providers; // Linked list of path service providers.
PathData() {
@@ -141,20 +142,6 @@ bool PathService::GetFromCache(int key, FilePath* result) {
}
// static
-bool PathService::GetFromOverrides(int key, FilePath* result) {
- PathData* path_data = GetPathData();
- AutoLock scoped_lock(path_data->lock);
-
- // check for an overriden version.
- PathMap::const_iterator it = path_data->overrides.find(key);
- if (it != path_data->overrides.end()) {
- *result = it->second;
- return true;
- }
- return false;
-}
-
-// static
void PathService::AddToCache(int key, const FilePath& path) {
PathData* path_data = GetPathData();
AutoLock scoped_lock(path_data->lock);
@@ -179,9 +166,6 @@ bool PathService::Get(int key, FilePath* result) {
if (GetFromCache(key, result))
return true;
- if (GetFromOverrides(key, result))
- return true;
-
FilePath path;
// search providers for the requested path
@@ -216,6 +200,14 @@ bool PathService::Get(int key, std::wstring* result) {
}
#endif
+bool PathService::IsOverridden(int key) {
+ PathData* path_data = GetPathData();
+ DCHECK(path_data);
+
+ AutoLock scoped_lock(path_data->lock);
+ return path_data->overrides.find(key) != path_data->overrides.end();
+}
+
bool PathService::Override(int key, const FilePath& path) {
PathData* path_data = GetPathData();
DCHECK(path_data);
@@ -237,14 +229,8 @@ bool PathService::Override(int key, const FilePath& path) {
return false;
AutoLock scoped_lock(path_data->lock);
-
- // Clear the cache now. Some of its entries could have depended
- // on the value we are overriding, and are now out of sync with reality.
- path_data->cache.clear();
-
path_data->cache[key] = file_path;
- path_data->overrides[key] = file_path;
-
+ path_data->overrides.insert(key);
return true;
}
diff --git a/base/path_service.h b/base/path_service.h
index 4d99cdc..2b59247 100644
--- a/base/path_service.h
+++ b/base/path_service.h
@@ -45,6 +45,9 @@ class PathService {
// over the lifetime of the app, so this method should be used with caution.
static bool Override(int key, const FilePath& path);
+ // Return whether a path was overridden.
+ static bool IsOverridden(int key);
+
// To extend the set of supported keys, you can register a path provider,
// which is just a function mirroring PathService::Get. The ProviderFunc
// returns false if it cannot provide a non-empty path for the given key.
@@ -62,7 +65,6 @@ class PathService {
int key_end);
private:
static bool GetFromCache(int key, FilePath* path);
- static bool GetFromOverrides(int key, FilePath* path);
static void AddToCache(int key, const FilePath& path);
};