| 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 "chrome/common/chrome_paths.h" | 5 #include "chrome/common/chrome_paths.h" |
| 6 | 6 |
| 7 #include "base/files/file_util.h" | 7 #include "base/files/file_util.h" |
| 8 #include "base/lazy_instance.h" | 8 #include "base/lazy_instance.h" |
| 9 #include "base/logging.h" | 9 #include "base/logging.h" |
| 10 #include "base/mac/bundle_locations.h" | 10 #include "base/mac/bundle_locations.h" |
| (...skipping 17 matching lines...) Expand all Loading... |
| 28 #endif | 28 #endif |
| 29 | 29 |
| 30 #if defined(OS_WIN) | 30 #if defined(OS_WIN) |
| 31 #include "base/win/registry.h" | 31 #include "base/win/registry.h" |
| 32 #endif | 32 #endif |
| 33 | 33 |
| 34 #include "widevine_cdm_version.h" // In SHARED_INTERMEDIATE_DIR. | 34 #include "widevine_cdm_version.h" // In SHARED_INTERMEDIATE_DIR. |
| 35 | 35 |
| 36 namespace { | 36 namespace { |
| 37 | 37 |
| 38 #if defined(OS_WIN) | |
| 39 const wchar_t kFlashRegistryRoot[] = L"SOFTWARE\\Macromedia\\FlashPlayerPepper"; | |
| 40 | |
| 41 const wchar_t kFlashPlayerPathValueName[] = L"PlayerPath"; | |
| 42 #endif | |
| 43 | |
| 44 // File name of the internal Flash plugin on different platforms. | |
| 45 const base::FilePath::CharType kInternalFlashPluginFileName[] = | |
| 46 #if defined(OS_MACOSX) | |
| 47 FILE_PATH_LITERAL("Flash Player Plugin for Chrome.plugin"); | |
| 48 #elif defined(OS_WIN) | |
| 49 FILE_PATH_LITERAL("gcswf32.dll"); | |
| 50 #else // OS_LINUX, etc. | |
| 51 FILE_PATH_LITERAL("libgcflashplayer.so"); | |
| 52 #endif | |
| 53 | |
| 54 // The Pepper Flash plugins are in a directory with this name. | 38 // The Pepper Flash plugins are in a directory with this name. |
| 55 const base::FilePath::CharType kPepperFlashBaseDirectory[] = | 39 const base::FilePath::CharType kPepperFlashBaseDirectory[] = |
| 56 FILE_PATH_LITERAL("PepperFlash"); | 40 FILE_PATH_LITERAL("PepperFlash"); |
| 57 | 41 |
| 58 #if defined(OS_MACOSX) && !defined(OS_IOS) | 42 #if defined(OS_MACOSX) && !defined(OS_IOS) |
| 59 const base::FilePath::CharType kPepperFlashSystemBaseDirectory[] = | 43 const base::FilePath::CharType kPepperFlashSystemBaseDirectory[] = |
| 60 FILE_PATH_LITERAL("Internet Plug-Ins/PepperFlashPlayer"); | 44 FILE_PATH_LITERAL("Internet Plug-Ins/PepperFlashPlayer"); |
| 45 const base::FilePath::CharType kFlashSystemBaseDirectory[] = |
| 46 FILE_PATH_LITERAL("Internet Plug-Ins"); |
| 47 const base::FilePath::CharType kFlashSystemPluginName[] = |
| 48 FILE_PATH_LITERAL("Flash Player.plugin"); |
| 61 #endif | 49 #endif |
| 62 | 50 |
| 63 const base::FilePath::CharType kInternalNaClPluginFileName[] = | 51 const base::FilePath::CharType kInternalNaClPluginFileName[] = |
| 64 FILE_PATH_LITERAL("internal-nacl-plugin"); | 52 FILE_PATH_LITERAL("internal-nacl-plugin"); |
| 65 | 53 |
| 66 #if defined(OS_LINUX) | 54 #if defined(OS_LINUX) |
| 67 // The path to the external extension <id>.json files. | 55 // The path to the external extension <id>.json files. |
| 68 // /usr/share seems like a good choice, see: http://www.pathname.com/fhs/ | 56 // /usr/share seems like a good choice, see: http://www.pathname.com/fhs/ |
| 69 const base::FilePath::CharType kFilepathSinglePrefExtensions[] = | 57 const base::FilePath::CharType kFilepathSinglePrefExtensions[] = |
| 70 #if defined(GOOGLE_CHROME_BUILD) | 58 #if defined(GOOGLE_CHROME_BUILD) |
| (...skipping 18 matching lines...) Expand all Loading... |
| 89 return true; | 77 return true; |
| 90 } | 78 } |
| 91 // In tests, just look in the module directory (below). | 79 // In tests, just look in the module directory (below). |
| 92 #endif | 80 #endif |
| 93 | 81 |
| 94 // The rest of the world expects plugins in the module directory. | 82 // The rest of the world expects plugins in the module directory. |
| 95 return PathService::Get(base::DIR_MODULE, result); | 83 return PathService::Get(base::DIR_MODULE, result); |
| 96 } | 84 } |
| 97 | 85 |
| 98 #if defined(OS_WIN) | 86 #if defined(OS_WIN) |
| 99 // Gets the Flash path if installed on the system. | 87 // Gets the Flash path if installed on the system. |is_npapi| determines whether |
| 100 bool GetSystemFlashDirectory(base::FilePath* out_path) { | 88 // to return the NPAPI of the PPAPI version of the system plugin. |
| 101 base::win::RegKey path_key(HKEY_LOCAL_MACHINE, kFlashRegistryRoot, KEY_READ); | 89 bool GetSystemFlashFilename(base::FilePath* out_path, bool is_npapi) { |
| 90 const wchar_t kNpapiFlashRegistryRoot[] = |
| 91 L"SOFTWARE\\Macromedia\\FlashPlayerPlugin"; |
| 92 const wchar_t kPepperFlashRegistryRoot[] = |
| 93 L"SOFTWARE\\Macromedia\\FlashPlayerPepper"; |
| 94 const wchar_t kFlashPlayerPathValueName[] = L"PlayerPath"; |
| 95 |
| 96 base::win::RegKey path_key( |
| 97 HKEY_LOCAL_MACHINE, |
| 98 is_npapi ? kNpapiFlashRegistryRoot : kPepperFlashRegistryRoot, KEY_READ); |
| 102 base::string16 path_str; | 99 base::string16 path_str; |
| 103 if (FAILED(path_key.ReadValue(kFlashPlayerPathValueName, &path_str))) | 100 if (FAILED(path_key.ReadValue(kFlashPlayerPathValueName, &path_str))) |
| 104 return false; | 101 return false; |
| 105 base::FilePath plugin_path = base::FilePath(path_str).DirName(); | |
| 106 | 102 |
| 107 *out_path = plugin_path; | 103 *out_path = base::FilePath(path_str); |
| 108 return true; | 104 return true; |
| 109 } | 105 } |
| 110 #endif | 106 #endif |
| 111 | 107 |
| 112 } // namespace | 108 } // namespace |
| 113 | 109 |
| 114 namespace chrome { | 110 namespace chrome { |
| 115 | 111 |
| 116 bool PathProvider(int key, base::FilePath* result) { | 112 bool PathProvider(int key, base::FilePath* result) { |
| 117 // Some keys are just aliases... | 113 // Some keys are just aliases... |
| (...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 263 case chrome::DIR_PEPPER_FLASH_PLUGIN: | 259 case chrome::DIR_PEPPER_FLASH_PLUGIN: |
| 264 if (!GetInternalPluginsDirectory(&cur)) | 260 if (!GetInternalPluginsDirectory(&cur)) |
| 265 return false; | 261 return false; |
| 266 cur = cur.Append(kPepperFlashBaseDirectory); | 262 cur = cur.Append(kPepperFlashBaseDirectory); |
| 267 break; | 263 break; |
| 268 case chrome::DIR_COMPONENT_UPDATED_PEPPER_FLASH_PLUGIN: | 264 case chrome::DIR_COMPONENT_UPDATED_PEPPER_FLASH_PLUGIN: |
| 269 if (!PathService::Get(chrome::DIR_USER_DATA, &cur)) | 265 if (!PathService::Get(chrome::DIR_USER_DATA, &cur)) |
| 270 return false; | 266 return false; |
| 271 cur = cur.Append(kPepperFlashBaseDirectory); | 267 cur = cur.Append(kPepperFlashBaseDirectory); |
| 272 break; | 268 break; |
| 273 case chrome::DIR_PEPPER_FLASH_SYSTEM_PLUGIN: | 269 case chrome::FILE_PEPPER_FLASH_SYSTEM_PLUGIN: |
| 274 #if defined(OS_WIN) | 270 #if defined(OS_WIN) |
| 275 if (!GetSystemFlashDirectory(&cur)) | 271 if (!GetSystemFlashFilename(&cur, false)) |
| 276 return false; | 272 return false; |
| 277 #elif defined(OS_MACOSX) && !defined(OS_IOS) | 273 #elif defined(OS_MACOSX) && !defined(OS_IOS) |
| 278 if (!GetLocalLibraryDirectory(&cur)) | 274 if (!GetLocalLibraryDirectory(&cur)) |
| 279 return false; | 275 return false; |
| 280 cur = cur.Append(kPepperFlashSystemBaseDirectory); | 276 cur = cur.Append(kPepperFlashSystemBaseDirectory); |
| 277 cur = cur.Append(chrome::kPepperFlashPluginFilename); |
| 281 #else | 278 #else |
| 282 // Chrome on iOS does not supports PPAPI binaries, return false. | 279 // Chrome on iOS does not supports PPAPI binaries, return false. |
| 283 // TODO(wfh): If Adobe release PPAPI binaries for Linux, add support here. | 280 // TODO(wfh): If Adobe release PPAPI binaries for Linux, add support here. |
| 284 return false; | 281 return false; |
| 285 #endif | 282 #endif |
| 286 break; | 283 break; |
| 284 case chrome::FILE_FLASH_SYSTEM_PLUGIN: |
| 285 #if defined(OS_WIN) |
| 286 if (!GetSystemFlashFilename(&cur, true)) |
| 287 return false; |
| 288 #elif defined(OS_MACOSX) && !defined(OS_IOS) |
| 289 if (!GetLocalLibraryDirectory(&cur)) |
| 290 return false; |
| 291 cur = cur.Append(kFlashSystemBaseDirectory); |
| 292 cur = cur.Append(kFlashSystemPluginName); |
| 293 #else |
| 294 // Chrome on other platforms does not supports system NPAPI binaries. |
| 295 return false; |
| 296 #endif |
| 297 break; |
| 287 case chrome::FILE_LOCAL_STATE: | 298 case chrome::FILE_LOCAL_STATE: |
| 288 if (!PathService::Get(chrome::DIR_USER_DATA, &cur)) | 299 if (!PathService::Get(chrome::DIR_USER_DATA, &cur)) |
| 289 return false; | 300 return false; |
| 290 cur = cur.Append(chrome::kLocalStateFilename); | 301 cur = cur.Append(chrome::kLocalStateFilename); |
| 291 break; | 302 break; |
| 292 case chrome::FILE_RECORDED_SCRIPT: | 303 case chrome::FILE_RECORDED_SCRIPT: |
| 293 if (!PathService::Get(chrome::DIR_USER_DATA, &cur)) | 304 if (!PathService::Get(chrome::DIR_USER_DATA, &cur)) |
| 294 return false; | 305 return false; |
| 295 cur = cur.Append(FILE_PATH_LITERAL("script.log")); | 306 cur = cur.Append(FILE_PATH_LITERAL("script.log")); |
| 296 break; | 307 break; |
| 297 case chrome::FILE_FLASH_PLUGIN: | |
| 298 if (!GetInternalPluginsDirectory(&cur)) | |
| 299 return false; | |
| 300 cur = cur.Append(kInternalFlashPluginFileName); | |
| 301 break; | |
| 302 case chrome::FILE_PEPPER_FLASH_PLUGIN: | 308 case chrome::FILE_PEPPER_FLASH_PLUGIN: |
| 303 if (!PathService::Get(chrome::DIR_PEPPER_FLASH_PLUGIN, &cur)) | 309 if (!PathService::Get(chrome::DIR_PEPPER_FLASH_PLUGIN, &cur)) |
| 304 return false; | 310 return false; |
| 305 cur = cur.Append(chrome::kPepperFlashPluginFilename); | 311 cur = cur.Append(chrome::kPepperFlashPluginFilename); |
| 306 break; | 312 break; |
| 307 // TODO(teravest): Remove this case once the internal NaCl plugin is gone. | 313 // TODO(teravest): Remove this case once the internal NaCl plugin is gone. |
| 308 // We currently need a path here to look up whether the plugin is disabled | 314 // We currently need a path here to look up whether the plugin is disabled |
| 309 // and what its permissions are. | 315 // and what its permissions are. |
| 310 case chrome::FILE_NACL_PLUGIN: | 316 case chrome::FILE_NACL_PLUGIN: |
| 311 if (!GetInternalPluginsDirectory(&cur)) | 317 if (!GetInternalPluginsDirectory(&cur)) |
| (...skipping 270 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 582 | 588 |
| 583 void SetInvalidSpecifiedUserDataDir(const base::FilePath& user_data_dir) { | 589 void SetInvalidSpecifiedUserDataDir(const base::FilePath& user_data_dir) { |
| 584 g_invalid_specified_user_data_dir.Get() = user_data_dir; | 590 g_invalid_specified_user_data_dir.Get() = user_data_dir; |
| 585 } | 591 } |
| 586 | 592 |
| 587 const base::FilePath& GetInvalidSpecifiedUserDataDir() { | 593 const base::FilePath& GetInvalidSpecifiedUserDataDir() { |
| 588 return g_invalid_specified_user_data_dir.Get(); | 594 return g_invalid_specified_user_data_dir.Get(); |
| 589 } | 595 } |
| 590 | 596 |
| 591 } // namespace chrome | 597 } // namespace chrome |
| OLD | NEW |