| Index: chrome/browser/plugin_service.cc
|
| ===================================================================
|
| --- chrome/browser/plugin_service.cc (revision 71882)
|
| +++ chrome/browser/plugin_service.cc (working copy)
|
| @@ -20,6 +20,7 @@
|
| #include "chrome/browser/plugin_updater.h"
|
| #include "chrome/browser/profiles/profile.h"
|
| #include "chrome/browser/renderer_host/render_process_host.h"
|
| +#include "chrome/browser/renderer_host/render_view_host.h"
|
| #include "chrome/common/chrome_plugin_lib.h"
|
| #include "chrome/common/chrome_paths.h"
|
| #include "chrome/common/chrome_switches.h"
|
| @@ -211,6 +212,9 @@
|
| #endif
|
| registrar_.Add(this, NotificationType::PLUGIN_ENABLE_STATUS_CHANGED,
|
| NotificationService::AllSources());
|
| + registrar_.Add(this,
|
| + NotificationType::RENDERER_PROCESS_CLOSED,
|
| + NotificationService::AllSources());
|
| }
|
|
|
| PluginService::~PluginService() {
|
| @@ -283,6 +287,8 @@
|
| }
|
|
|
| void PluginService::OpenChannelToPlugin(
|
| + int render_process_id,
|
| + int render_view_id,
|
| const GURL& url,
|
| const std::string& mime_type,
|
| PluginProcessHost::Client* client) {
|
| @@ -292,16 +298,19 @@
|
| BrowserThread::FILE, FROM_HERE,
|
| NewRunnableMethod(
|
| this, &PluginService::GetAllowedPluginForOpenChannelToPlugin,
|
| - url, mime_type, client));
|
| + render_process_id, render_view_id, url, mime_type, client));
|
| }
|
|
|
| void PluginService::GetAllowedPluginForOpenChannelToPlugin(
|
| + int render_process_id,
|
| + int render_view_id,
|
| const GURL& url,
|
| const std::string& mime_type,
|
| PluginProcessHost::Client* client) {
|
| DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
|
| webkit::npapi::WebPluginInfo info;
|
| - bool found = GetFirstAllowedPluginInfo(url, mime_type, &info, NULL);
|
| + bool found = GetFirstAllowedPluginInfo(
|
| + render_process_id, render_view_id, url, mime_type, &info, NULL);
|
| FilePath plugin_path;
|
| if (found && info.enabled)
|
| plugin_path = FilePath(info.path);
|
| @@ -327,6 +336,8 @@
|
| }
|
|
|
| bool PluginService::GetFirstAllowedPluginInfo(
|
| + int render_process_id,
|
| + int render_view_id,
|
| const GURL& url,
|
| const std::string& mime_type,
|
| webkit::npapi::WebPluginInfo* info,
|
| @@ -352,6 +363,18 @@
|
| }
|
| return false;
|
| #else
|
| + {
|
| + AutoLock auto_lock(overridden_plugins_lock_);
|
| + for (size_t i = 0; i < overridden_plugins_.size(); ++i) {
|
| + if (overridden_plugins_[i].render_process_id == render_process_id &&
|
| + overridden_plugins_[i].render_view_id == render_view_id &&
|
| + overridden_plugins_[i].url == url) {
|
| + *actual_mime_type = mime_type;
|
| + *info = overridden_plugins_[i].plugin;
|
| + return true;
|
| + }
|
| + }
|
| + }
|
| return webkit::npapi::PluginList::Singleton()->GetPluginInfo(
|
| url, mime_type, allow_wildcard, info, actual_mime_type);
|
| #endif
|
| @@ -434,6 +457,18 @@
|
| PurgePluginListCache(false);
|
| break;
|
| }
|
| + case NotificationType::RENDERER_PROCESS_CLOSED: {
|
| + int render_process_id = Source<RenderProcessHost>(source).ptr()->id();
|
| +
|
| + AutoLock auto_lock(overridden_plugins_lock_);
|
| + for (size_t i = 0; i < overridden_plugins_.size(); ++i) {
|
| + if (overridden_plugins_[i].render_process_id == render_process_id) {
|
| + overridden_plugins_.erase(overridden_plugins_.begin() + i);
|
| + break;
|
| + }
|
| + }
|
| + break;
|
| + }
|
| default:
|
| NOTREACHED();
|
| }
|
| @@ -455,6 +490,11 @@
|
| url.host() == required_url.host());
|
| }
|
|
|
| +void PluginService::OverridePluginForTab(OverriddenPlugin plugin) {
|
| + AutoLock auto_lock(overridden_plugins_lock_);
|
| + overridden_plugins_.push_back(plugin);
|
| +}
|
| +
|
| void PluginService::RegisterPepperPlugins() {
|
| std::vector<PepperPluginInfo> plugins;
|
| PepperPluginRegistry::GetList(&plugins);
|
|
|