diff options
author | cevans@chromium.org <cevans@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-02-01 18:20:54 +0000 |
---|---|---|
committer | cevans@chromium.org <cevans@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-02-01 18:20:54 +0000 |
commit | 6be31d20e5c3727f136b8dfe06cd7f27ebf898bb (patch) | |
tree | 4fd003b303a8aad479b3d97fd4d1506817e64c3a /content/browser/plugin_service_impl.cc | |
parent | ebee9ccaecaf57a0d2b8a36a41de689eef977fea (diff) | |
download | chromium_src-6be31d20e5c3727f136b8dfe06cd7f27ebf898bb.zip chromium_src-6be31d20e5c3727f136b8dfe06cd7f27ebf898bb.tar.gz chromium_src-6be31d20e5c3727f136b8dfe06cd7f27ebf898bb.tar.bz2 |
Only permit plug-in loads in the browser if the plug-in isn't blocked or the
user has authorized it with a browser-mediated interaction.
(Reland https://codereview.chromium.org/12086077 with Android test tweak)
BUG=172573
R=jam@chromium.org
Review URL: https://codereview.chromium.org/12092107
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@180159 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'content/browser/plugin_service_impl.cc')
-rw-r--r-- | content/browser/plugin_service_impl.cc | 30 |
1 files changed, 25 insertions, 5 deletions
diff --git a/content/browser/plugin_service_impl.cc b/content/browser/plugin_service_impl.cc index 9b90fe0..47c3078 100644 --- a/content/browser/plugin_service_impl.cc +++ b/content/browser/plugin_service_impl.cc @@ -259,9 +259,13 @@ PpapiPluginProcessHost* PluginServiceImpl::FindPpapiBrokerProcess( } PluginProcessHost* PluginServiceImpl::FindOrStartNpapiPluginProcess( + int render_process_id, const FilePath& plugin_path) { DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); + if (filter_ && !filter_->CanLoadPlugin(render_process_id, plugin_path)) + return NULL; + PluginProcessHost* plugin_host = FindNpapiPluginProcess(plugin_path); if (plugin_host) return plugin_host; @@ -281,11 +285,15 @@ PluginProcessHost* PluginServiceImpl::FindOrStartNpapiPluginProcess( } PpapiPluginProcessHost* PluginServiceImpl::FindOrStartPpapiPluginProcess( + int render_process_id, const FilePath& plugin_path, const FilePath& profile_data_directory, PpapiPluginProcessHost::PluginClient* client) { DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); + if (filter_ && !filter_->CanLoadPlugin(render_process_id, plugin_path)) + return NULL; + PpapiPluginProcessHost* plugin_host = FindPpapiPluginProcess(plugin_path, profile_data_directory); if (plugin_host) @@ -303,9 +311,13 @@ PpapiPluginProcessHost* PluginServiceImpl::FindOrStartPpapiPluginProcess( } PpapiPluginProcessHost* PluginServiceImpl::FindOrStartPpapiBrokerProcess( + int render_process_id, const FilePath& plugin_path) { DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); + if (filter_ && !filter_->CanLoadPlugin(render_process_id, plugin_path)) + return NULL; + PpapiPluginProcessHost* plugin_host = FindPpapiBrokerProcess(plugin_path); if (plugin_host) return plugin_host; @@ -346,11 +358,12 @@ void PluginServiceImpl::OpenChannelToNpapiPlugin( } void PluginServiceImpl::OpenChannelToPpapiPlugin( + int render_process_id, const FilePath& plugin_path, const FilePath& profile_data_directory, PpapiPluginProcessHost::PluginClient* client) { PpapiPluginProcessHost* plugin_host = FindOrStartPpapiPluginProcess( - plugin_path, profile_data_directory, client); + render_process_id, plugin_path, profile_data_directory, client); if (plugin_host) { plugin_host->OpenChannelToPlugin(client); } else { @@ -360,9 +373,11 @@ void PluginServiceImpl::OpenChannelToPpapiPlugin( } void PluginServiceImpl::OpenChannelToPpapiBroker( + int render_process_id, const FilePath& path, PpapiPluginProcessHost::BrokerClient* client) { - PpapiPluginProcessHost* plugin_host = FindOrStartPpapiBrokerProcess(path); + PpapiPluginProcessHost* plugin_host = FindOrStartPpapiBrokerProcess( + render_process_id, path); if (plugin_host) { plugin_host->OpenChannelToPlugin(client); } else { @@ -411,10 +426,14 @@ void PluginServiceImpl::GetAllowedPluginForOpenChannelToPlugin( BrowserThread::PostTask( BrowserThread::IO, FROM_HERE, base::Bind(&PluginServiceImpl::FinishOpenChannelToPlugin, - base::Unretained(this), plugin_path, client)); + base::Unretained(this), + render_process_id, + plugin_path, + client)); } void PluginServiceImpl::FinishOpenChannelToPlugin( + int render_process_id, const FilePath& plugin_path, PluginProcessHost::Client* client) { DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); @@ -424,7 +443,8 @@ void PluginServiceImpl::FinishOpenChannelToPlugin( return; pending_plugin_clients_.erase(client); - PluginProcessHost* plugin_host = FindOrStartNpapiPluginProcess(plugin_path); + PluginProcessHost* plugin_host = FindOrStartNpapiPluginProcess( + render_process_id, plugin_path); if (plugin_host) { client->OnFoundPluginProcessHost(plugin_host); plugin_host->OpenChannelToPlugin(client); @@ -463,7 +483,7 @@ bool PluginServiceImpl::GetPluginInfo(int render_process_id, *is_stale = stale; for (size_t i = 0; i < plugins.size(); ++i) { - if (!filter_ || filter_->ShouldUsePlugin(render_process_id, + if (!filter_ || filter_->IsPluginEnabled(render_process_id, render_view_id, context, url, |