Index: content/browser/plugin_service.cc |
diff --git a/content/browser/plugin_service.cc b/content/browser/plugin_service.cc |
index 6be232ac811c08244bb695bf3af5ea5561cdabb9..359f5b79deb3d4e61969350c72b3309919960d3b 100644 |
--- a/content/browser/plugin_service.cc |
+++ b/content/browser/plugin_service.cc |
@@ -410,37 +410,62 @@ bool PluginService::GetPluginInfo(int render_process_id, |
bool* use_stale, |
webkit::WebPluginInfo* info, |
std::string* actual_mime_type) { |
+ std::vector<webkit::WebPluginInfo> plugins; |
+ std::vector<std::string> mime_types; |
+ std::vector<bool> allowed; |
+ GetMatchingPlugins( |
+ render_process_id, render_view_id, context, url, page_url, mime_type, |
+ allow_wildcard, use_stale, &plugins, &mime_types, &allowed); |
+ for (size_t i = 0; i < plugins.size(); ++i) { |
+ if (allowed[i]) { |
+ *info = plugins[i]; |
+ if (actual_mime_type) |
+ *actual_mime_type = mime_types[i]; |
+ return true; |
+ } |
+ } |
+ return false; |
+} |
+ |
+void PluginService::GetMatchingPlugins( |
+ int render_process_id, |
+ int render_view_id, |
+ const content::ResourceContext& context, |
+ const GURL& url, |
+ const GURL& page_url, |
+ const std::string& mime_type, |
+ bool allow_wildcard, |
+ bool* use_stale, |
+ std::vector<webkit::WebPluginInfo>* plugins, |
+ std::vector<std::string>* mime_types, |
+ std::vector<bool>* allowed) { |
webkit::npapi::PluginList* plugin_list = |
webkit::npapi::PluginList::Singleton(); |
// GetPluginInfoArray may need to load the plugins, so we need to be |
// on the FILE thread. |
DCHECK(use_stale || BrowserThread::CurrentlyOn(BrowserThread::FILE)); |
- std::vector<webkit::WebPluginInfo> plugins; |
- std::vector<std::string> mime_types; |
plugin_list->GetPluginInfoArray( |
- url, mime_type, allow_wildcard, use_stale, &plugins, &mime_types); |
- if (plugins.size() > 1 && |
- plugins.back().path == |
+ url, mime_type, allow_wildcard, use_stale, plugins, mime_types); |
+ if (plugins->size() > 1 && |
+ plugins->back().path == |
FilePath(webkit::npapi::kDefaultPluginLibraryName)) { |
// If there is at least one plug-in handling the required MIME type (apart |
// from the default plug-in), we don't need the default plug-in. |
- plugins.pop_back(); |
+ plugins->pop_back(); |
} |
- for (size_t i = 0; i < plugins.size(); ++i) { |
- if (!filter_ || filter_->ShouldUsePlugin(render_process_id, |
- render_view_id, |
- &context, |
- url, |
- page_url, |
- &plugins[i])) { |
- *info = plugins[i]; |
- if (actual_mime_type) |
- *actual_mime_type = mime_types[i]; |
- return true; |
+ for (size_t i = 0; i < plugins->size(); ++i) { |
+ bool plugin_allowed = true; |
+ if (filter_) { |
+ plugin_allowed = filter_->ShouldUsePlugin(render_process_id, |
+ render_view_id, |
+ &context, |
+ url, |
+ page_url, |
+ &(*plugins)[i]); |
} |
+ allowed->push_back(plugin_allowed); |
} |
- return false; |
} |
void PluginService::RefreshPluginList() { |