Index: content/browser/renderer_host/render_message_filter.cc |
diff --git a/content/browser/renderer_host/render_message_filter.cc b/content/browser/renderer_host/render_message_filter.cc |
index d64b464b87c0e5fb32db95a8823c6b00b9df33cd..12ba59e97f23af028297c749c9db201db7470547 100644 |
--- a/content/browser/renderer_host/render_message_filter.cc |
+++ b/content/browser/renderer_host/render_message_filter.cc |
@@ -21,6 +21,7 @@ |
#include "content/browser/download/download_types.h" |
#include "content/browser/plugin_process_host.h" |
#include "content/browser/plugin_service.h" |
+#include "content/browser/plugin_service_filter.h" |
#include "content/browser/ppapi_plugin_process_host.h" |
#include "content/browser/ppapi_broker_process_host.h" |
#include "content/browser/renderer_host/browser_render_process_host.h" |
@@ -51,7 +52,6 @@ |
#include "webkit/glue/webcookie.h" |
#include "webkit/glue/webkit_glue.h" |
#include "webkit/plugins/npapi/plugin_group.h" |
-#include "webkit/plugins/npapi/plugin_list.h" |
#include "webkit/plugins/npapi/webplugin.h" |
#include "webkit/plugins/webplugininfo.h" |
@@ -295,8 +295,6 @@ void RenderMessageFilter::OnChannelError() { |
void RenderMessageFilter::OverrideThreadForMessage(const IPC::Message& message, |
BrowserThread::ID* thread) { |
switch (message.type()) { |
- // Can't load plugins on IO thread. |
- case ViewHostMsg_GetPlugins::ID: |
// The PluginService::GetPluginInfo may need to load the plugins. Don't do |
// it on the IO thread. |
case ViewHostMsg_GetPluginInfo::ID: |
@@ -338,7 +336,7 @@ bool RenderMessageFilter::OnMessageReceived(const IPC::Message& message, |
#if defined(OS_MACOSX) |
IPC_MESSAGE_HANDLER(ViewHostMsg_LoadFont, OnLoadFont) |
#endif |
- IPC_MESSAGE_HANDLER(ViewHostMsg_GetPlugins, OnGetPlugins) |
+ IPC_MESSAGE_HANDLER_DELAY_REPLY(ViewHostMsg_GetPlugins, OnGetPlugins) |
IPC_MESSAGE_HANDLER(ViewHostMsg_GetPluginInfo, OnGetPluginInfo) |
IPC_MESSAGE_HANDLER(ViewHostMsg_DownloadUrl, OnDownloadUrl) |
IPC_MESSAGE_HANDLER_DELAY_REPLY(ViewHostMsg_OpenChannelToPlugin, |
@@ -513,7 +511,7 @@ void RenderMessageFilter::OnReleaseCachedFonts() { |
void RenderMessageFilter::OnGetPlugins( |
bool refresh, |
- std::vector<webkit::WebPluginInfo>* plugins) { |
+ IPC::Message* reply_msg) { |
// Don't refresh if the specified threshold has not been passed. Note that |
// this check is performed before off-loading to the file thread. The reason |
// we do this is that some pages tend to request that the list of plugins be |
@@ -526,13 +524,39 @@ void RenderMessageFilter::OnGetPlugins( |
const base::TimeTicks now = base::TimeTicks::Now(); |
if (now - last_plugin_refresh_time_ >= threshold) { |
// Only refresh if the threshold hasn't been exceeded yet. |
- webkit::npapi::PluginList::Singleton()->RefreshPlugins(); |
+ PluginService::GetInstance()->RefreshPluginList(); |
last_plugin_refresh_time_ = now; |
} |
} |
- PluginService::GetInstance()->GetPlugins(resource_context_, |
- plugins); |
+ PluginService::GetInstance()->GetPlugins( |
+ base::Bind(&RenderMessageFilter::GetPluginsCallback, this, reply_msg)); |
+} |
+ |
+void RenderMessageFilter::GetPluginsCallback( |
+ IPC::Message* reply_msg, |
+ const std::vector<webkit::WebPluginInfo>& all_plugins) { |
+ // Filter the plugin list. |
+ content::PluginServiceFilter* filter = PluginService::GetInstance()->filter(); |
+ std::vector<webkit::WebPluginInfo> plugins; |
+ |
+ int child_process_id = -1; |
+ int routing_id = MSG_ROUTING_NONE; |
+ for (size_t i = 0; i < all_plugins.size(); ++i) { |
+ // Copy because the filter can mutate. |
+ webkit::WebPluginInfo plugin(all_plugins[i]); |
+ if (!filter || filter->ShouldUsePlugin(child_process_id, |
+ routing_id, |
+ &resource_context_, |
+ GURL(), |
+ GURL(), |
+ &plugin)) { |
+ plugins.push_back(plugin); |
+ } |
+ } |
+ |
+ ViewHostMsg_GetPlugins::WriteReplyParams(reply_msg, plugins); |
+ Send(reply_msg); |
} |
void RenderMessageFilter::OnGetPluginInfo( |