Index: content/renderer/render_view.cc |
diff --git a/content/renderer/render_view.cc b/content/renderer/render_view.cc |
index 7218dfed368a24c5e747208f5a433087e0cd5b6d..b7257f4fe09c9d6287b75ac6c0abfd859f45dc0c 100644 |
--- a/content/renderer/render_view.cc |
+++ b/content/renderer/render_view.cc |
@@ -583,23 +583,29 @@ void RenderView::PluginCrashed(const FilePath& plugin_path) { |
WebPlugin* RenderView::CreatePluginNoCheck(WebFrame* frame, |
const WebPluginParams& params) { |
- webkit::WebPluginInfo info; |
- std::string mime_type; |
- bool found = GetPluginInfo(params.url, frame->top()->document().url(), |
- params.mimeType.utf8(), &info, &mime_type); |
- if (!found) |
- return NULL; |
- |
- bool pepper_plugin_was_registered = false; |
- scoped_refptr<webkit::ppapi::PluginModule> pepper_module( |
- pepper_delegate_.CreatePepperPluginModule(info, |
- &pepper_plugin_was_registered)); |
- if (pepper_plugin_was_registered) { |
- if (pepper_module) |
- return CreatePepperPlugin(frame, params, info.path, pepper_module.get()); |
- return NULL; |
+ std::vector<webkit::WebPluginInfo> plugins; |
+ std::vector<std::string> mime_types; |
+ std::vector<bool> allowed; |
+ GetMatchingPlugins( |
+ params.url, frame->top()->document().url(), |
+ params.mimeType.utf8(), &plugins, &mime_types, &allowed); |
+ for (size_t i = 0; i < plugins.size(); ++i) { |
+ if (allowed[i]) { |
+ bool pepper_plugin_was_registered = false; |
+ scoped_refptr<webkit::ppapi::PluginModule> pepper_module( |
+ pepper_delegate_.CreatePepperPluginModule( |
+ plugins[i], &pepper_plugin_was_registered)); |
+ if (pepper_plugin_was_registered) { |
+ if (pepper_module) |
+ return CreatePepperPlugin(frame, params, plugins[i].path, |
+ pepper_module.get()); |
+ return NULL; |
+ } |
+ return CreateNPAPIPlugin(frame, params, plugins[i].path, mime_types[i]); |
+ } |
} |
- return CreateNPAPIPlugin(frame, params, info.path, mime_type); |
+ NOTREACHED() << "No allowed plug-in found"; |
+ return NULL; |
} |
void RenderView::RegisterPluginDelegate(WebPluginDelegateProxy* delegate) { |
@@ -622,16 +628,15 @@ void RenderView::UnregisterPluginDelegate(WebPluginDelegateProxy* delegate) { |
plugin_delegates_.erase(delegate); |
} |
-bool RenderView::GetPluginInfo(const GURL& url, |
- const GURL& page_url, |
- const std::string& mime_type, |
- webkit::WebPluginInfo* plugin_info, |
- std::string* actual_mime_type) { |
- bool found = false; |
- Send(new ViewHostMsg_GetPluginInfo( |
- routing_id_, url, page_url, mime_type, &found, plugin_info, |
- actual_mime_type)); |
- return found; |
+void RenderView::GetMatchingPlugins( |
+ const GURL& url, |
+ const GURL& page_url, |
+ const std::string& mime_type, |
+ std::vector<webkit::WebPluginInfo>* plugins, |
+ std::vector<std::string>* mime_types, |
+ std::vector<bool>* allowed) { |
+ Send(new ViewHostMsg_GetMatchingPlugins( |
+ routing_id_, url, page_url, mime_type, plugins, mime_types, allowed)); |
} |
base::SharedMemoryHandle RenderView::HostAllocateSharedMemoryBuffer( |