| Index: chrome/browser/renderer_host/plugin_info_message_filter.cc
|
| diff --git a/chrome/browser/renderer_host/plugin_info_message_filter.cc b/chrome/browser/renderer_host/plugin_info_message_filter.cc
|
| index cc13c865db06720813190a710507781d5afe1afe..11864a7c14c3ffdeefa8e1d181af5fb8635370ad 100644
|
| --- a/chrome/browser/renderer_host/plugin_info_message_filter.cc
|
| +++ b/chrome/browser/renderer_host/plugin_info_message_filter.cc
|
| @@ -21,6 +21,11 @@
|
| #include "webkit/plugins/npapi/plugin_group.h"
|
| #include "webkit/plugins/npapi/plugin_list.h"
|
|
|
| +#if defined(ENABLE_PLUGIN_INSTALLATION)
|
| +#include "chrome/browser/plugin_finder.h"
|
| +#include "chrome/browser/plugin_installer.h"
|
| +#endif
|
| +
|
| #if defined(OS_WIN)
|
| // These includes are only necessary for the PluginInfobarExperiment.
|
| #include "chrome/common/attrition_experiments.h"
|
| @@ -143,7 +148,31 @@ void PluginInfoMessageFilter::PluginsLoaded(
|
| ChromeViewHostMsg_GetPluginInfo_Status status;
|
| webkit::WebPluginInfo plugin;
|
| std::string actual_mime_type;
|
| - context_.DecidePluginStatus(params, &status, &plugin, &actual_mime_type);
|
| + // This also fills in |actual_mime_type|.
|
| + if (!context_.FindEnabledPlugin(params.render_view_id, params.url,
|
| + params.top_origin_url, params.mime_type,
|
| + &status, &plugin, &actual_mime_type)) {
|
| + ChromeViewHostMsg_GetPluginInfo::WriteReplyParams(
|
| + reply_msg, status, plugin, actual_mime_type);
|
| + Send(reply_msg);
|
| + return;
|
| + }
|
| +#if defined(ENABLE_PLUGIN_INSTALLATION)
|
| + PluginFinder::Get(base::Bind(&PluginInfoMessageFilter::GotPluginFinder, this,
|
| + params, reply_msg, plugin, actual_mime_type));
|
| +#else
|
| + GotPluginFinder(params, reply_msg, plugin, actual_mime_type, NULL);
|
| +#endif
|
| +}
|
| +
|
| +void PluginInfoMessageFilter::GotPluginFinder(
|
| + const GetPluginInfo_Params& params,
|
| + IPC::Message* reply_msg,
|
| + const webkit::WebPluginInfo& plugin,
|
| + const std::string& actual_mime_type,
|
| + PluginFinder* plugin_finder) {
|
| + ChromeViewHostMsg_GetPluginInfo_Status status;
|
| + context_.DecidePluginStatus(params, plugin, plugin_finder, &status);
|
| ChromeViewHostMsg_GetPluginInfo::WriteReplyParams(
|
| reply_msg, status, plugin, actual_mime_type);
|
| Send(reply_msg);
|
| @@ -151,24 +180,16 @@ void PluginInfoMessageFilter::PluginsLoaded(
|
|
|
| void PluginInfoMessageFilter::Context::DecidePluginStatus(
|
| const GetPluginInfo_Params& params,
|
| - ChromeViewHostMsg_GetPluginInfo_Status* status,
|
| - webkit::WebPluginInfo* plugin,
|
| - std::string* actual_mime_type) const {
|
| - status->value = ChromeViewHostMsg_GetPluginInfo_Status::kAllowed;
|
| - // This also fills in |actual_mime_type|.
|
| - if (FindEnabledPlugin(params.render_view_id, params.url,
|
| - params.top_origin_url, params.mime_type,
|
| - status, plugin, actual_mime_type)) {
|
| - return;
|
| - }
|
| + const webkit::WebPluginInfo& plugin,
|
| + PluginFinder* plugin_finder,
|
| + ChromeViewHostMsg_GetPluginInfo_Status* status) const {
|
| + scoped_ptr<webkit::npapi::PluginGroup> group(
|
| + webkit::npapi::PluginList::Singleton()->GetPluginGroup(plugin));
|
|
|
| ContentSetting plugin_setting = CONTENT_SETTING_DEFAULT;
|
| bool uses_default_content_setting = true;
|
| // Check plug-in content settings. The primary URL is the top origin URL and
|
| // the secondary URL is the plug-in URL.
|
| - scoped_ptr<webkit::npapi::PluginGroup> group(
|
| - webkit::npapi::PluginList::Singleton()->GetPluginGroup(*plugin));
|
| -
|
| GetPluginContentSetting(plugin, params.top_origin_url, params.url,
|
| group->identifier(), &plugin_setting,
|
| &uses_default_content_setting);
|
| @@ -180,7 +201,7 @@ void PluginInfoMessageFilter::Context::DecidePluginStatus(
|
| PluginInfobarExperiment(&allow_outdated, &always_authorize);
|
|
|
| // Check if the plug-in is outdated.
|
| - if (group->IsVulnerable(*plugin) && !allow_outdated) {
|
| + if (group->IsVulnerable(plugin) && !allow_outdated) {
|
| if (allow_outdated_plugins_.IsManaged()) {
|
| status->value =
|
| ChromeViewHostMsg_GetPluginInfo_Status::kOutdatedDisallowed;
|
| @@ -191,9 +212,13 @@ void PluginInfoMessageFilter::Context::DecidePluginStatus(
|
| return;
|
| }
|
|
|
| +#if defined(ENABLE_PLUGIN_INSTALLATION)
|
| // Check if the plug-in requires authorization.
|
| - if ((group->RequiresAuthorization(*plugin) ||
|
| - PluginService::GetInstance()->IsPluginUnstable(plugin->path)) &&
|
| + // TODO(bauerb): This should be a plain struct with the plug-in information.
|
| + PluginInstaller* installer =
|
| + plugin_finder->FindPluginWithIdentifier(group->identifier());
|
| + if (((installer && installer->requires_authorization()) ||
|
| + PluginService::GetInstance()->IsPluginUnstable(plugin.path)) &&
|
| !always_authorize &&
|
| plugin_setting != CONTENT_SETTING_BLOCK &&
|
| uses_default_content_setting) {
|
| @@ -201,6 +226,7 @@ void PluginInfoMessageFilter::Context::DecidePluginStatus(
|
| ChromeViewHostMsg_GetPluginInfo_Status::kUnauthorized;
|
| return;
|
| }
|
| +#endif
|
|
|
| if (plugin_setting == CONTENT_SETTING_ASK)
|
| status->value = ChromeViewHostMsg_GetPluginInfo_Status::kClickToPlay;
|
| @@ -236,7 +262,7 @@ bool PluginInfoMessageFilter::Context::FindEnabledPlugin(
|
| *actual_mime_type = mime_types[i];
|
| if (enabled) {
|
| // We have found an enabled plug-in. Return immediately.
|
| - return false;
|
| + return true;
|
| }
|
| // We have found a plug-in, but it's disabled. Keep looking for an
|
| // enabled one.
|
| @@ -250,18 +276,18 @@ bool PluginInfoMessageFilter::Context::FindEnabledPlugin(
|
| status->value = ChromeViewHostMsg_GetPluginInfo_Status::kDisabled;
|
| else
|
| status->value = ChromeViewHostMsg_GetPluginInfo_Status::kNotFound;
|
| - return true;
|
| + return false;
|
| }
|
|
|
| void PluginInfoMessageFilter::Context::GetPluginContentSetting(
|
| - const webkit::WebPluginInfo* plugin,
|
| + const webkit::WebPluginInfo& plugin,
|
| const GURL& policy_url,
|
| const GURL& plugin_url,
|
| const std::string& resource,
|
| ContentSetting* setting,
|
| bool* uses_default_content_setting) const {
|
| // Treat Native Client invocations like Javascript.
|
| - bool is_nacl_plugin = (plugin->name == ASCIIToUTF16(
|
| + bool is_nacl_plugin = (plugin.name == ASCIIToUTF16(
|
| chrome::ChromeContentClient::kNaClPluginName));
|
|
|
| scoped_ptr<base::Value> value;
|
|
|