| OLD | NEW |
| 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 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/browser/component_updater/pepper_flash_component_installer.h" | 5 #include "chrome/browser/component_updater/pepper_flash_component_installer.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 | 8 |
| 9 #include <memory> | 9 #include <memory> |
| 10 #include <string> | 10 #include <string> |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 56 #if defined(GOOGLE_CHROME_BUILD) | 56 #if defined(GOOGLE_CHROME_BUILD) |
| 57 // CRX hash. The extension id is: mimojjlkmoijpicakmndhoigimigcmbb. | 57 // CRX hash. The extension id is: mimojjlkmoijpicakmndhoigimigcmbb. |
| 58 const uint8_t kSha2Hash[] = {0xc8, 0xce, 0x99, 0xba, 0xce, 0x89, 0xf8, 0x20, | 58 const uint8_t kSha2Hash[] = {0xc8, 0xce, 0x99, 0xba, 0xce, 0x89, 0xf8, 0x20, |
| 59 0xac, 0xd3, 0x7e, 0x86, 0x8c, 0x86, 0x2c, 0x11, | 59 0xac, 0xd3, 0x7e, 0x86, 0x8c, 0x86, 0x2c, 0x11, |
| 60 0xb9, 0x40, 0xc5, 0x55, 0xaf, 0x08, 0x63, 0x70, | 60 0xb9, 0x40, 0xc5, 0x55, 0xaf, 0x08, 0x63, 0x70, |
| 61 0x54, 0xf9, 0x56, 0xd3, 0xe7, 0x88, 0xba, 0x8c}; | 61 0x54, 0xf9, 0x56, 0xd3, 0xe7, 0x88, 0xba, 0x8c}; |
| 62 #endif // defined(GOOGLE_CHROME_BUILD) | 62 #endif // defined(GOOGLE_CHROME_BUILD) |
| 63 | 63 |
| 64 #if !defined(OS_LINUX) && defined(GOOGLE_CHROME_BUILD) | 64 #if !defined(OS_LINUX) && defined(GOOGLE_CHROME_BUILD) |
| 65 bool MakePepperFlashPluginInfo(const base::FilePath& flash_path, | 65 bool MakePepperFlashPluginInfo(const base::FilePath& flash_path, |
| 66 const base::Version& flash_version, | 66 const Version& flash_version, |
| 67 bool out_of_process, | 67 bool out_of_process, |
| 68 content::PepperPluginInfo* plugin_info) { | 68 content::PepperPluginInfo* plugin_info) { |
| 69 if (!flash_version.IsValid()) | 69 if (!flash_version.IsValid()) |
| 70 return false; | 70 return false; |
| 71 const std::vector<uint32_t> ver_nums = flash_version.components(); | 71 const std::vector<uint32_t> ver_nums = flash_version.components(); |
| 72 if (ver_nums.size() < 3) | 72 if (ver_nums.size() < 3) |
| 73 return false; | 73 return false; |
| 74 | 74 |
| 75 plugin_info->is_internal = false; | 75 plugin_info->is_internal = false; |
| 76 plugin_info->is_out_of_process = out_of_process; | 76 plugin_info->is_out_of_process = out_of_process; |
| (...skipping 18 matching lines...) Expand all Loading... |
| 95 content::kFlashPluginSplExtension, | 95 content::kFlashPluginSplExtension, |
| 96 content::kFlashPluginName); | 96 content::kFlashPluginName); |
| 97 plugin_info->mime_types.push_back(spl_mime_type); | 97 plugin_info->mime_types.push_back(spl_mime_type); |
| 98 return true; | 98 return true; |
| 99 } | 99 } |
| 100 | 100 |
| 101 // |path| is the path to the latest Chrome-managed Flash installation (bundled | 101 // |path| is the path to the latest Chrome-managed Flash installation (bundled |
| 102 // or component updated). | 102 // or component updated). |
| 103 // |version| is the version of that Flash implementation. | 103 // |version| is the version of that Flash implementation. |
| 104 void RegisterPepperFlashWithChrome(const base::FilePath& path, | 104 void RegisterPepperFlashWithChrome(const base::FilePath& path, |
| 105 const base::Version& version) { | 105 const Version& version) { |
| 106 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 106 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 107 content::PepperPluginInfo plugin_info; | 107 content::PepperPluginInfo plugin_info; |
| 108 if (!MakePepperFlashPluginInfo(path, version, true, &plugin_info)) | 108 if (!MakePepperFlashPluginInfo(path, version, true, &plugin_info)) |
| 109 return; | 109 return; |
| 110 content::WebPluginInfo web_plugin = plugin_info.ToWebPluginInfo(); | 110 content::WebPluginInfo web_plugin = plugin_info.ToWebPluginInfo(); |
| 111 | 111 |
| 112 base::FilePath system_flash_path; | 112 base::FilePath system_flash_path; |
| 113 PathService::Get(chrome::FILE_PEPPER_FLASH_SYSTEM_PLUGIN, &system_flash_path); | 113 PathService::Get(chrome::FILE_PEPPER_FLASH_SYSTEM_PLUGIN, &system_flash_path); |
| 114 | 114 |
| 115 std::vector<content::WebPluginInfo> plugins; | 115 std::vector<content::WebPluginInfo> plugins; |
| 116 PluginService::GetInstance()->GetInternalPlugins(&plugins); | 116 PluginService::GetInstance()->GetInternalPlugins(&plugins); |
| 117 base::FilePath placeholder_path = | 117 base::FilePath placeholder_path = |
| 118 base::FilePath::FromUTF8Unsafe(ChromeContentClient::kNotPresent); | 118 base::FilePath::FromUTF8Unsafe(ChromeContentClient::kNotPresent); |
| 119 for (const auto& plugin : plugins) { | 119 for (const auto& plugin : plugins) { |
| 120 if (!plugin.is_pepper_plugin() || plugin.name != web_plugin.name) | 120 if (!plugin.is_pepper_plugin() || plugin.name != web_plugin.name) |
| 121 continue; | 121 continue; |
| 122 | 122 |
| 123 if (plugin.path == placeholder_path) { | 123 if (plugin.path == placeholder_path) { |
| 124 // This is the Flash placeholder; replace it regardless of version or | 124 // This is the Flash placeholder; replace it regardless of version or |
| 125 // other considerations. | 125 // other considerations. |
| 126 PluginService::GetInstance()->UnregisterInternalPlugin(plugin.path); | 126 PluginService::GetInstance()->UnregisterInternalPlugin(plugin.path); |
| 127 break; | 127 break; |
| 128 } | 128 } |
| 129 | 129 |
| 130 base::Version registered_version(base::UTF16ToUTF8(plugin.version)); | 130 Version registered_version(base::UTF16ToUTF8(plugin.version)); |
| 131 | 131 |
| 132 // If lower version, never register. | 132 // If lower version, never register. |
| 133 if (registered_version.IsValid() && | 133 if (registered_version.IsValid() && |
| 134 version.CompareTo(registered_version) < 0) { | 134 version.CompareTo(registered_version) < 0) { |
| 135 return; | 135 return; |
| 136 } | 136 } |
| 137 | 137 |
| 138 bool registered_is_debug_system = | 138 bool registered_is_debug_system = |
| 139 !system_flash_path.empty() && | 139 !system_flash_path.empty() && |
| 140 base::FilePath::CompareEqualIgnoreCase(plugin.path.value(), | 140 base::FilePath::CompareEqualIgnoreCase(plugin.path.value(), |
| (...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 235 RegisterPepperFlashWithChrome(path.Append(chrome::kPepperFlashPluginFilename), | 235 RegisterPepperFlashWithChrome(path.Append(chrome::kPepperFlashPluginFilename), |
| 236 version); | 236 version); |
| 237 BrowserThread::GetBlockingPool()->PostTask( | 237 BrowserThread::GetBlockingPool()->PostTask( |
| 238 FROM_HERE, base::Bind(&UpdatePathService, path)); | 238 FROM_HERE, base::Bind(&UpdatePathService, path)); |
| 239 #endif // !defined(OS_LINUX) | 239 #endif // !defined(OS_LINUX) |
| 240 } | 240 } |
| 241 | 241 |
| 242 bool FlashComponentInstallerTraits::VerifyInstallation( | 242 bool FlashComponentInstallerTraits::VerifyInstallation( |
| 243 const base::DictionaryValue& manifest, | 243 const base::DictionaryValue& manifest, |
| 244 const base::FilePath& install_dir) const { | 244 const base::FilePath& install_dir) const { |
| 245 base::Version unused; | 245 Version unused; |
| 246 return chrome::CheckPepperFlashManifest(manifest, &unused); | 246 return chrome::CheckPepperFlashManifest(manifest, &unused); |
| 247 } | 247 } |
| 248 | 248 |
| 249 // The base directory on Windows looks like: | 249 // The base directory on Windows looks like: |
| 250 // <profile>\AppData\Local\Google\Chrome\User Data\PepperFlash\. | 250 // <profile>\AppData\Local\Google\Chrome\User Data\PepperFlash\. |
| 251 base::FilePath FlashComponentInstallerTraits::GetRelativeInstallDir() const { | 251 base::FilePath FlashComponentInstallerTraits::GetRelativeInstallDir() const { |
| 252 return base::FilePath(FILE_PATH_LITERAL("PepperFlash")); | 252 return base::FilePath(FILE_PATH_LITERAL("PepperFlash")); |
| 253 } | 253 } |
| 254 | 254 |
| 255 void FlashComponentInstallerTraits::GetHash(std::vector<uint8_t>* hash) const { | 255 void FlashComponentInstallerTraits::GetHash(std::vector<uint8_t>* hash) const { |
| (...skipping 29 matching lines...) Expand all Loading... |
| 285 std::unique_ptr<ComponentInstallerTraits> traits( | 285 std::unique_ptr<ComponentInstallerTraits> traits( |
| 286 new FlashComponentInstallerTraits); | 286 new FlashComponentInstallerTraits); |
| 287 // |cus| will take ownership of |installer| during installer->Register(cus). | 287 // |cus| will take ownership of |installer| during installer->Register(cus). |
| 288 DefaultComponentInstaller* installer = | 288 DefaultComponentInstaller* installer = |
| 289 new DefaultComponentInstaller(std::move(traits)); | 289 new DefaultComponentInstaller(std::move(traits)); |
| 290 installer->Register(cus, base::Closure()); | 290 installer->Register(cus, base::Closure()); |
| 291 #endif // defined(GOOGLE_CHROME_BUILD) | 291 #endif // defined(GOOGLE_CHROME_BUILD) |
| 292 } | 292 } |
| 293 | 293 |
| 294 } // namespace component_updater | 294 } // namespace component_updater |
| OLD | NEW |