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

Side by Side Diff: chrome/browser/plugin_service.cc

Issue 2967007: Disable outdated plugins, block non-sandboxed plugins. (Closed)
Patch Set: '' Created 10 years, 4 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
« no previous file with comments | « chrome/browser/plugin_service.h ('k') | chrome/browser/plugin_updater.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 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 "build/build_config.h" 5 #include "build/build_config.h"
6 6
7 #include "chrome/browser/plugin_service.h" 7 #include "chrome/browser/plugin_service.h"
8 8
9 #include "base/command_line.h" 9 #include "base/command_line.h"
10 #include "base/path_service.h" 10 #include "base/path_service.h"
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
55 // static 55 // static
56 bool PluginService::enable_chrome_plugins_ = true; 56 bool PluginService::enable_chrome_plugins_ = true;
57 57
58 // static 58 // static
59 void PluginService::InitGlobalInstance(Profile* profile) { 59 void PluginService::InitGlobalInstance(Profile* profile) {
60 DCHECK(ChromeThread::CurrentlyOn(ChromeThread::UI)); 60 DCHECK(ChromeThread::CurrentlyOn(ChromeThread::UI));
61 61
62 // We first group the plugins and then figure out which groups to disable. 62 // We first group the plugins and then figure out which groups to disable.
63 plugin_updater::DisablePluginGroupsFromPrefs(profile); 63 plugin_updater::DisablePluginGroupsFromPrefs(profile);
64 64
65 if (CommandLine::ForCurrentProcess()->HasSwitch(
66 switches::kDisableOutdatedPlugins)) {
67 plugin_updater::DisableOutdatedPluginGroups();
68 }
69
65 // Have Chrome plugins write their data to the profile directory. 70 // Have Chrome plugins write their data to the profile directory.
66 GetInstance()->SetChromePluginDataDir(profile->GetPath()); 71 GetInstance()->SetChromePluginDataDir(profile->GetPath());
67 } 72 }
68 73
69 // static 74 // static
70 PluginService* PluginService::GetInstance() { 75 PluginService* PluginService::GetInstance() {
71 return Singleton<PluginService>::get(); 76 return Singleton<PluginService>::get();
72 } 77 }
73 78
74 // static 79 // static
(...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after
222 return plugin_host; 227 return plugin_host;
223 } 228 }
224 229
225 void PluginService::OpenChannelToPlugin( 230 void PluginService::OpenChannelToPlugin(
226 ResourceMessageFilter* renderer_msg_filter, 231 ResourceMessageFilter* renderer_msg_filter,
227 const GURL& url, 232 const GURL& url,
228 const std::string& mime_type, 233 const std::string& mime_type,
229 const std::wstring& locale, 234 const std::wstring& locale,
230 IPC::Message* reply_msg) { 235 IPC::Message* reply_msg) {
231 DCHECK(ChromeThread::CurrentlyOn(ChromeThread::IO)); 236 DCHECK(ChromeThread::CurrentlyOn(ChromeThread::IO));
232 // We don't need a policy URL here because that was already checked by a 237 bool allow_wildcard = true;
233 // previous call to GetPluginPath. 238 WebPluginInfo info;
234 GURL policy_url; 239 FilePath plugin_path;
235 FilePath plugin_path = GetPluginPath(url, policy_url, mime_type, NULL); 240 if (NPAPI::PluginList::Singleton()->GetPluginInfo(
241 url, mime_type, allow_wildcard, &info, NULL) && info.enabled) {
242 plugin_path = info.path;
243 }
236 PluginProcessHost* plugin_host = FindOrStartPluginProcess(plugin_path); 244 PluginProcessHost* plugin_host = FindOrStartPluginProcess(plugin_path);
237 if (plugin_host) { 245 if (plugin_host) {
238 plugin_host->OpenChannelToPlugin(renderer_msg_filter, mime_type, reply_msg); 246 plugin_host->OpenChannelToPlugin(renderer_msg_filter, mime_type, reply_msg);
239 } else { 247 } else {
240 PluginProcessHost::ReplyToRenderer( 248 PluginProcessHost::ReplyToRenderer(
241 renderer_msg_filter, IPC::ChannelHandle(), WebPluginInfo(), reply_msg); 249 renderer_msg_filter, IPC::ChannelHandle(), WebPluginInfo(), reply_msg);
242 } 250 }
243 } 251 }
244 252
245 FilePath PluginService::GetPluginPath(const GURL& url,
246 const GURL& policy_url,
247 const std::string& mime_type,
248 std::string* actual_mime_type) {
249 bool allow_wildcard = true;
250 WebPluginInfo info;
251 if (NPAPI::PluginList::Singleton()->GetPluginInfo(
252 url, mime_type, allow_wildcard, &info, actual_mime_type) &&
253 info.enabled && PluginAllowedForURL(info.path, policy_url)) {
254 return info.path;
255 }
256
257 return FilePath();
258 }
259
260 static void PurgePluginListCache(bool reload_pages) { 253 static void PurgePluginListCache(bool reload_pages) {
261 for (RenderProcessHost::iterator it = RenderProcessHost::AllHostsIterator(); 254 for (RenderProcessHost::iterator it = RenderProcessHost::AllHostsIterator();
262 !it.IsAtEnd(); it.Advance()) { 255 !it.IsAtEnd(); it.Advance()) {
263 it.GetCurrentValue()->Send(new ViewMsg_PurgePluginListCache(reload_pages)); 256 it.GetCurrentValue()->Send(new ViewMsg_PurgePluginListCache(reload_pages));
264 } 257 }
265 } 258 }
266 259
267 void PluginService::OnWaitableEventSignaled( 260 void PluginService::OnWaitableEventSignaled(
268 base::WaitableEvent* waitable_event) { 261 base::WaitableEvent* waitable_event) {
269 #if defined(OS_WIN) 262 #if defined(OS_WIN)
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
330 NewRunnableFunction(&NotifyPluginsOfActivation)); 323 NewRunnableFunction(&NotifyPluginsOfActivation));
331 break; 324 break;
332 } 325 }
333 #endif 326 #endif
334 327
335 default: 328 default:
336 DCHECK(false); 329 DCHECK(false);
337 } 330 }
338 } 331 }
339 332
340 bool PluginService::PluginAllowedForURL(const FilePath& plugin_path, 333 bool PluginService::PrivatePluginAllowedForURL(const FilePath& plugin_path,
341 const GURL& url) { 334 const GURL& url) {
342 if (url.is_empty()) 335 if (url.is_empty())
343 return true; // Caller wants all plugins. 336 return true; // Caller wants all plugins.
344 337
345 PrivatePluginMap::iterator it = private_plugins_.find(plugin_path); 338 PrivatePluginMap::iterator it = private_plugins_.find(plugin_path);
346 if (it == private_plugins_.end()) 339 if (it == private_plugins_.end())
347 return true; // This plugin is not private, so it's allowed everywhere. 340 return true; // This plugin is not private, so it's allowed everywhere.
348 341
349 // We do a dumb compare of scheme and host, rather than using the domain 342 // We do a dumb compare of scheme and host, rather than using the domain
350 // service, since we only care about this for extensions. 343 // service, since we only care about this for extensions.
351 const GURL& required_url = it->second; 344 const GURL& required_url = it->second;
(...skipping 16 matching lines...) Expand all
368 info.mime_types = ASCIIToWide(JoinString(plugins[i].mime_types, '|')); 361 info.mime_types = ASCIIToWide(JoinString(plugins[i].mime_types, '|'));
369 362
370 // These NPAPI entry points will never be called. TODO(darin): Come up 363 // These NPAPI entry points will never be called. TODO(darin): Come up
371 // with a cleaner way to register pepper plugins with the NPAPI PluginList, 364 // with a cleaner way to register pepper plugins with the NPAPI PluginList,
372 // or perhaps refactor the PluginList to be less specific to NPAPI. 365 // or perhaps refactor the PluginList to be less specific to NPAPI.
373 memset(&info.entry_points, 0, sizeof(info.entry_points)); 366 memset(&info.entry_points, 0, sizeof(info.entry_points));
374 367
375 NPAPI::PluginList::Singleton()->RegisterInternalPlugin(info); 368 NPAPI::PluginList::Singleton()->RegisterInternalPlugin(info);
376 } 369 }
377 } 370 }
OLDNEW
« no previous file with comments | « chrome/browser/plugin_service.h ('k') | chrome/browser/plugin_updater.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698