| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "base/path_service.h" | 5 #include "base/path_service.h" |
| 6 | 6 |
| 7 #include <unordered_map> |
| 8 |
| 7 #if defined(OS_WIN) | 9 #if defined(OS_WIN) |
| 8 #include <windows.h> | 10 #include <windows.h> |
| 9 #include <shellapi.h> | 11 #include <shellapi.h> |
| 10 #include <shlobj.h> | 12 #include <shlobj.h> |
| 11 #endif | 13 #endif |
| 12 | 14 |
| 13 #include "base/containers/hash_tables.h" | |
| 14 #include "base/files/file_path.h" | 15 #include "base/files/file_path.h" |
| 15 #include "base/files/file_util.h" | 16 #include "base/files/file_util.h" |
| 16 #include "base/logging.h" | 17 #include "base/logging.h" |
| 17 #include "base/synchronization/lock.h" | 18 #include "base/synchronization/lock.h" |
| 18 #include "build/build_config.h" | 19 #include "build/build_config.h" |
| 19 | 20 |
| 20 namespace base { | 21 namespace base { |
| 21 | 22 |
| 22 bool PathProvider(int key, FilePath* result); | 23 bool PathProvider(int key, FilePath* result); |
| 23 | 24 |
| 24 #if defined(OS_WIN) | 25 #if defined(OS_WIN) |
| 25 bool PathProviderWin(int key, FilePath* result); | 26 bool PathProviderWin(int key, FilePath* result); |
| 26 #elif defined(OS_MACOSX) | 27 #elif defined(OS_MACOSX) |
| 27 bool PathProviderMac(int key, FilePath* result); | 28 bool PathProviderMac(int key, FilePath* result); |
| 28 #elif defined(OS_ANDROID) | 29 #elif defined(OS_ANDROID) |
| 29 bool PathProviderAndroid(int key, FilePath* result); | 30 bool PathProviderAndroid(int key, FilePath* result); |
| 30 #elif defined(OS_POSIX) | 31 #elif defined(OS_POSIX) |
| 31 // PathProviderPosix is the default path provider on POSIX OSes other than | 32 // PathProviderPosix is the default path provider on POSIX OSes other than |
| 32 // Mac and Android. | 33 // Mac and Android. |
| 33 bool PathProviderPosix(int key, FilePath* result); | 34 bool PathProviderPosix(int key, FilePath* result); |
| 34 #endif | 35 #endif |
| 35 | 36 |
| 36 namespace { | 37 namespace { |
| 37 | 38 |
| 38 typedef hash_map<int, FilePath> PathMap; | 39 typedef std::unordered_map<int, FilePath> PathMap; |
| 39 | 40 |
| 40 // We keep a linked list of providers. In a debug build we ensure that no two | 41 // We keep a linked list of providers. In a debug build we ensure that no two |
| 41 // providers claim overlapping keys. | 42 // providers claim overlapping keys. |
| 42 struct Provider { | 43 struct Provider { |
| 43 PathService::ProviderFunc func; | 44 PathService::ProviderFunc func; |
| 44 struct Provider* next; | 45 struct Provider* next; |
| 45 #ifndef NDEBUG | 46 #ifndef NDEBUG |
| 46 int key_start; | 47 int key_start; |
| 47 int key_end; | 48 int key_end; |
| 48 #endif | 49 #endif |
| (...skipping 271 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 320 void PathService::DisableCache() { | 321 void PathService::DisableCache() { |
| 321 PathData* path_data = GetPathData(); | 322 PathData* path_data = GetPathData(); |
| 322 DCHECK(path_data); | 323 DCHECK(path_data); |
| 323 | 324 |
| 324 AutoLock scoped_lock(path_data->lock); | 325 AutoLock scoped_lock(path_data->lock); |
| 325 path_data->cache.clear(); | 326 path_data->cache.clear(); |
| 326 path_data->cache_disabled = true; | 327 path_data->cache_disabled = true; |
| 327 } | 328 } |
| 328 | 329 |
| 329 } // namespace base | 330 } // namespace base |
| OLD | NEW |