Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(724)

Side by Side Diff: chrome/browser/component_updater/npapi_flash_component_installer.cc

Issue 8071013: Finish moving plugin probing out of process. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase Created 9 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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/flash_component_installer.h" 5 #include "chrome/browser/component_updater/flash_component_installer.h"
6 6
7 #include "base/bind.h"
7 #include "base/base_paths.h" 8 #include "base/base_paths.h"
8 #include "base/compiler_specific.h" 9 #include "base/compiler_specific.h"
9 #include "base/file_path.h" 10 #include "base/file_path.h"
10 #include "base/file_util.h" 11 #include "base/file_util.h"
11 #include "base/logging.h" 12 #include "base/logging.h"
12 #include "base/path_service.h" 13 #include "base/path_service.h"
13 #include "base/string_util.h" 14 #include "base/string_util.h"
14 #include "base/values.h" 15 #include "base/values.h"
15 #include "chrome/browser/component_updater/component_updater_service.h" 16 #include "chrome/browser/component_updater/component_updater_service.h"
16 #include "chrome/browser/plugin_prefs.h" 17 #include "chrome/browser/plugin_prefs.h"
17 #include "chrome/common/chrome_paths.h" 18 #include "chrome/common/chrome_paths.h"
18 #include "content/browser/browser_thread.h" 19 #include "content/browser/browser_thread.h"
20 #include "content/browser/plugin_service.h"
19 #include "webkit/plugins/npapi/plugin_list.h" 21 #include "webkit/plugins/npapi/plugin_list.h"
22 #include "webkit/plugins/webplugininfo.h"
20 23
21 namespace { 24 namespace {
22 25
23 // CRX hash. The extension id is: immdilkhigodmjbnngapbehchmihabbg. 26 // CRX hash. The extension id is: immdilkhigodmjbnngapbehchmihabbg.
24 const uint8 sha2_hash[] = {0x5c, 0x40, 0x30, 0xe3, 0x5d, 0x83, 0x2b, 0xd9, 27 const uint8 sha2_hash[] = {0x5c, 0x40, 0x30, 0xe3, 0x5d, 0x83, 0x2b, 0xd9,
25 0x7b, 0xa3, 0x69, 0xae, 0xbc, 0x7c, 0x5e, 0x5a, 28 0x7b, 0xa3, 0x69, 0xae, 0xbc, 0x7c, 0x5e, 0x5a,
26 0xef, 0xa5, 0xdf, 0x64, 0x6a, 0xe1, 0xc6, 0xdf, 29 0xef, 0xa5, 0xdf, 0x64, 0x6a, 0xe1, 0xc6, 0xdf,
27 0x23, 0x47, 0x30, 0x2a, 0xde, 0xae, 0x9d, 0xf7}; 30 0x23, 0x47, 0x30, 0x2a, 0xde, 0xae, 0x9d, 0xf7};
28 31
29 // File name of the internal Flash plugin on different platforms. 32 // File name of the internal Flash plugin on different platforms.
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after
126 flash.pk_hash.assign(sha2_hash, &sha2_hash[sizeof(sha2_hash)]); 129 flash.pk_hash.assign(sha2_hash, &sha2_hash[sizeof(sha2_hash)]);
127 if (cus->RegisterComponent(flash) != ComponentUpdateService::kOk) { 130 if (cus->RegisterComponent(flash) != ComponentUpdateService::kOk) {
128 NOTREACHED() << "Flash component registration fail"; 131 NOTREACHED() << "Flash component registration fail";
129 } 132 }
130 } 133 }
131 134
132 // The code in this function is only concerned about learning what flash plugin 135 // The code in this function is only concerned about learning what flash plugin
133 // chrome is using and what is its version. This will determine if we register 136 // chrome is using and what is its version. This will determine if we register
134 // for component update or not. Read the comments on RegisterNPAPIFlashComponent 137 // for component update or not. Read the comments on RegisterNPAPIFlashComponent
135 // for more background. 138 // for more background.
136 void StartFlashUpdateRegistration(ComponentUpdateService* cus) { 139 void StartFlashUpdateRegistration(ComponentUpdateService* cus,
137 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); 140 const std::vector<webkit::WebPluginInfo>&) {
138
139 FilePath builtin_plugin_path; 141 FilePath builtin_plugin_path;
140 if (!PathService::Get(chrome::FILE_FLASH_PLUGIN, &builtin_plugin_path)) 142 if (!PathService::Get(chrome::FILE_FLASH_PLUGIN, &builtin_plugin_path))
141 return; 143 return;
142 144
143 FilePath updated_plugin_path = 145 FilePath updated_plugin_path =
144 GetNPAPIFlashBaseDirectory().Append(kFlashPluginFileName); 146 GetNPAPIFlashBaseDirectory().Append(kFlashPluginFileName);
145 147
146 webkit::npapi::PluginList* plugins = webkit::npapi::PluginList::Singleton(); 148 PluginService* plugins = PluginService::GetInstance();
147 webkit::WebPluginInfo plugin_info; 149 webkit::WebPluginInfo plugin_info;
148 150
149 if (plugins->GetPluginInfoByPath(updated_plugin_path, &plugin_info)) { 151 if (plugins->GetPluginInfoByPath(updated_plugin_path, &plugin_info)) {
150 // The updated plugin is newer. Since flash is used by pretty much every 152 // The updated plugin is newer. Since flash is used by pretty much every
151 // webpage out there, odds are it is going to be loaded, which means 153 // webpage out there, odds are it is going to be loaded, which means
152 // receiving an update is pointless since we can't swap them. You might 154 // receiving an update is pointless since we can't swap them. You might
153 // find this pessimistic. The way we get out of this situation is when 155 // find this pessimistic. The way we get out of this situation is when
154 // we update the whole product. 156 // we update the whole product.
155 DLOG(INFO) << "updated plugin overriding built-in flash"; 157 DLOG(INFO) << "updated plugin overriding built-in flash";
156 return; 158 return;
157 } else if (plugins->GetPluginInfoByPath(builtin_plugin_path, &plugin_info)) { 159 } else if (plugins->GetPluginInfoByPath(builtin_plugin_path, &plugin_info)) {
158 // The built plugin is newer. Delete the updated plugin and register for 160 // The built plugin is newer. Delete the updated plugin and register for
159 // updates. This should be the normal case. 161 // updates. This should be the normal case.
160 file_util::Delete(GetNPAPIFlashBaseDirectory(), true); 162 file_util::Delete(GetNPAPIFlashBaseDirectory(), true);
161 } else { 163 } else {
162 // Strange installation. Log and abort registration. 164 // Strange installation. Log and abort registration.
163 DLOG(WARNING) << "Strange flash npapi configuration"; 165 DLOG(WARNING) << "Strange flash npapi configuration";
164 return; 166 return;
165 } 167 }
166 168
167 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, 169 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE,
168 NewRunnableFunction(&FinishFlashUpdateRegistration, cus, plugin_info)); 170 base::Bind(&FinishFlashUpdateRegistration, cus, plugin_info));
169 } 171 }
170 172
171 // Here is the general plan of action: we are going to update flash and we have 173 // Here is the general plan of action: we are going to update flash and we have
172 // the following cases: 174 // the following cases:
173 // 1- The active flash is not the built-in flash (user override). 175 // 1- The active flash is not the built-in flash (user override).
174 // 2- The active flash is the built-in flash. 176 // 2- The active flash is the built-in flash.
175 // 3- The active flash is the one from the component updater. 177 // 3- The active flash is the one from the component updater.
176 // In case 1 we do nothing. In cases 2 and 3 we need to compare versions 178 // In case 1 we do nothing. In cases 2 and 3 we need to compare versions
177 // and if the higher version is: 179 // and if the higher version is:
178 // case 2: remove the component update flash, register with component updater. 180 // case 2: remove the component update flash, register with component updater.
(...skipping 19 matching lines...) Expand all
198 // on the IO thread to learn which one won. Since we do it in a delayed task 200 // on the IO thread to learn which one won. Since we do it in a delayed task
199 // probably somebody (unknowingly) will pay for the file IO, so usually get 201 // probably somebody (unknowingly) will pay for the file IO, so usually get
200 // the information for free. 202 // the information for free.
201 void RegisterNPAPIFlashComponent(ComponentUpdateService* cus) { 203 void RegisterNPAPIFlashComponent(ComponentUpdateService* cus) {
202 #if defined(OS_WIN) 204 #if defined(OS_WIN)
203 webkit::npapi::PluginList* plugins = webkit::npapi::PluginList::Singleton(); 205 webkit::npapi::PluginList* plugins = webkit::npapi::PluginList::Singleton();
204 FilePath path = GetNPAPIFlashBaseDirectory().Append(kFlashPluginFileName); 206 FilePath path = GetNPAPIFlashBaseDirectory().Append(kFlashPluginFileName);
205 plugins->AddExtraPluginPath(path); 207 plugins->AddExtraPluginPath(path);
206 plugins->RefreshPlugins(); 208 plugins->RefreshPlugins();
207 209
208 BrowserThread::PostDelayedTask(BrowserThread::FILE, FROM_HERE, 210 MessageLoop::current()->PostDelayedTask(FROM_HERE,
209 NewRunnableFunction(&StartFlashUpdateRegistration, cus), 8000); 211 base::Bind(&PluginService::GetPlugins,
212 base::Unretained(PluginService::GetInstance()),
213 base::Bind(&StartFlashUpdateRegistration, cus)),
214 8000);
210 #endif 215 #endif
211 } 216 }
OLDNEW
« no previous file with comments | « chrome/browser/chromeos/gview_request_interceptor_unittest.cc ('k') | chrome/browser/plugin_data_remover.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698