diff options
author | bauerb@chromium.org <bauerb@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-06-08 11:29:02 +0000 |
---|---|---|
committer | bauerb@chromium.org <bauerb@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-06-08 11:29:02 +0000 |
commit | dfdfeb7e012ba3be899721cfd0912de08c0e1f53 (patch) | |
tree | ab8871fa02db12e51d6655ac2fe2d54783ec492a | |
parent | 9dc6e8b9a45f5e2873271c38371c09e324ff8bd2 (diff) | |
download | chromium_src-dfdfeb7e012ba3be899721cfd0912de08c0e1f53.zip chromium_src-dfdfeb7e012ba3be899721cfd0912de08c0e1f53.tar.gz chromium_src-dfdfeb7e012ba3be899721cfd0912de08c0e1f53.tar.bz2 |
Infobar all unknown unsandboxed plug-ins.
BUG=130743
TEST=none
Review URL: https://chromiumcodereview.appspot.com/10544003
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@141197 0039d316-1c4b-4281-b951-d872f2087c98
10 files changed, 71 insertions, 17 deletions
diff --git a/chrome/browser/extensions/extension_browsertests_misc.cc b/chrome/browser/extensions/extension_browsertests_misc.cc index 3d62401..4342514 100644 --- a/chrome/browser/extensions/extension_browsertests_misc.cc +++ b/chrome/browser/extensions/extension_browsertests_misc.cc @@ -13,6 +13,7 @@ #include "chrome/browser/extensions/extension_process_manager.h" #include "chrome/browser/extensions/extension_service.h" #include "chrome/browser/extensions/extension_tab_util.h" +#include "chrome/browser/prefs/pref_service.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/ui/browser.h" #include "chrome/browser/ui/browser_list.h" @@ -21,6 +22,7 @@ #include "chrome/common/chrome_paths.h" #include "chrome/common/chrome_switches.h" #include "chrome/common/extensions/extension_action.h" +#include "chrome/common/pref_names.h" #include "chrome/common/url_constants.h" #include "chrome/test/base/ui_test_utils.h" #include "content/public/browser/navigation_entry.h" @@ -721,6 +723,9 @@ IN_PROC_BROWSER_TEST_F(ExtensionBrowserTest, WindowOpenNoPrivileges) { // Tests that a renderer's plugin list is properly updated when we load and // unload an extension that contains a plugin. IN_PROC_BROWSER_TEST_F(ExtensionBrowserTest, MAYBE_PluginLoadUnload) { + browser()->profile()->GetPrefs()->SetBoolean(prefs::kPluginsAlwaysAuthorize, + true); + FilePath extension_dir = test_data_dir_.AppendASCII("uitest").AppendASCII("plugins"); diff --git a/chrome/browser/plugin_finder.cc b/chrome/browser/plugin_finder.cc index ad8301f..0c03e46 100644 --- a/chrome/browser/plugin_finder.cc +++ b/chrome/browser/plugin_finder.cc @@ -81,7 +81,6 @@ PluginInstaller* PluginFinder::FindPlugin(const std::string& mime_type, } std::string language_str; bool success = plugin->GetString("lang", &language_str); - DCHECK(success); if (language_str != language) continue; ListValue* mime_types = NULL; @@ -123,7 +122,6 @@ PluginInstaller* PluginFinder::CreateInstaller( DCHECK(!installers_[identifier]); std::string url; bool success = plugin_dict->GetString("url", &url); - DCHECK(success); std::string help_url; plugin_dict->GetString("help_url", &help_url); string16 name; diff --git a/chrome/browser/plugin_finder_unittest.cc b/chrome/browser/plugin_finder_unittest.cc index d6afe1f..bbafbc5 100644 --- a/chrome/browser/plugin_finder_unittest.cc +++ b/chrome/browser/plugin_finder_unittest.cc @@ -22,8 +22,10 @@ TEST(PluginFinderTest, JsonSyntax) { ASSERT_TRUE(plugin_it.value().GetAsDictionary(&plugin)); std::string dummy_str; bool dummy_bool; - EXPECT_TRUE(plugin->GetString("lang", &dummy_str)); - EXPECT_TRUE(plugin->GetString("url", &dummy_str)); + if (plugin->HasKey("lang")) + EXPECT_TRUE(plugin->GetString("lang", &dummy_str)); + if (plugin->HasKey("url")) + EXPECT_TRUE(plugin->GetString("url", &dummy_str)); EXPECT_TRUE(plugin->GetString("name", &dummy_str)); if (plugin->HasKey("help_url")) EXPECT_TRUE(plugin->GetString("help_url", &dummy_str)); diff --git a/chrome/browser/prerender/prerender_browsertest.cc b/chrome/browser/prerender/prerender_browsertest.cc index 3b7e05b..e9a0955 100644 --- a/chrome/browser/prerender/prerender_browsertest.cc +++ b/chrome/browser/prerender/prerender_browsertest.cc @@ -510,6 +510,7 @@ class PrerenderBrowserTest : public InProcessBrowserTest { switches::kExtraPluginDir, app_dir.Append(FILE_PATH_LITERAL("plugins"))); #endif + command_line->AppendSwitch(switches::kAlwaysAuthorizePlugins); } virtual void SetUpOnMainThread() OVERRIDE { diff --git a/chrome/browser/renderer_host/plugin_info_message_filter.cc b/chrome/browser/renderer_host/plugin_info_message_filter.cc index f29c9ee..bbf75db 100644 --- a/chrome/browser/renderer_host/plugin_info_message_filter.cc +++ b/chrome/browser/renderer_host/plugin_info_message_filter.cc @@ -27,6 +27,7 @@ #endif using content::PluginService; +using webkit::WebPluginInfo; PluginInfoMessageFilter::Context::Context(int render_process_id, Profile* profile) @@ -107,9 +108,9 @@ void PluginInfoMessageFilter::OnGetPluginInfo( void PluginInfoMessageFilter::PluginsLoaded( const GetPluginInfo_Params& params, IPC::Message* reply_msg, - const std::vector<webkit::WebPluginInfo>& plugins) { + const std::vector<WebPluginInfo>& plugins) { ChromeViewHostMsg_GetPluginInfo_Status status; - webkit::WebPluginInfo plugin; + WebPluginInfo plugin; std::string actual_mime_type; // This also fills in |actual_mime_type|. if (!context_.FindEnabledPlugin(params.render_view_id, params.url, @@ -131,7 +132,7 @@ void PluginInfoMessageFilter::PluginsLoaded( void PluginInfoMessageFilter::GotPluginFinder( const GetPluginInfo_Params& params, IPC::Message* reply_msg, - const webkit::WebPluginInfo& plugin, + const WebPluginInfo& plugin, const std::string& actual_mime_type, PluginFinder* plugin_finder) { ChromeViewHostMsg_GetPluginInfo_Status status; @@ -143,7 +144,7 @@ void PluginInfoMessageFilter::GotPluginFinder( void PluginInfoMessageFilter::Context::DecidePluginStatus( const GetPluginInfo_Params& params, - const webkit::WebPluginInfo& plugin, + const WebPluginInfo& plugin, PluginFinder* plugin_finder, ChromeViewHostMsg_GetPluginInfo_Status* status) const { scoped_ptr<webkit::npapi::PluginGroup> group( @@ -160,7 +161,7 @@ void PluginInfoMessageFilter::Context::DecidePluginStatus( #if defined(ENABLE_PLUGIN_INSTALLATION) PluginInstaller::SecurityStatus plugin_status = - PluginInstaller::SECURITY_STATUS_UP_TO_DATE; + PluginInstaller::SECURITY_STATUS_REQUIRES_AUTHORIZATION; PluginInstaller* installer = plugin_finder->FindPluginWithIdentifier(group->identifier()); if (installer) @@ -181,6 +182,8 @@ void PluginInfoMessageFilter::Context::DecidePluginStatus( if ((plugin_status == PluginInstaller::SECURITY_STATUS_REQUIRES_AUTHORIZATION || PluginService::GetInstance()->IsPluginUnstable(plugin.path)) && + plugin.type != WebPluginInfo::PLUGIN_TYPE_PEPPER_IN_PROCESS && + plugin.type != WebPluginInfo::PLUGIN_TYPE_PEPPER_OUT_OF_PROCESS && !always_authorize_plugins_.GetValue() && plugin_setting != CONTENT_SETTING_BLOCK && uses_default_content_setting) { @@ -201,10 +204,10 @@ bool PluginInfoMessageFilter::Context::FindEnabledPlugin( const GURL& top_origin_url, const std::string& mime_type, ChromeViewHostMsg_GetPluginInfo_Status* status, - webkit::WebPluginInfo* plugin, + WebPluginInfo* plugin, std::string* actual_mime_type) const { bool allow_wildcard = true; - std::vector<webkit::WebPluginInfo> matching_plugins; + std::vector<WebPluginInfo> matching_plugins; std::vector<std::string> mime_types; PluginService::GetInstance()->GetPluginInfoArray( url, mime_type, allow_wildcard, &matching_plugins, &mime_types); @@ -241,7 +244,7 @@ bool PluginInfoMessageFilter::Context::FindEnabledPlugin( } void PluginInfoMessageFilter::Context::GetPluginContentSetting( - const webkit::WebPluginInfo& plugin, + const WebPluginInfo& plugin, const GURL& policy_url, const GURL& plugin_url, const std::string& resource, diff --git a/chrome/browser/resources/plugin_metadata/plugins_linux.json b/chrome/browser/resources/plugin_metadata/plugins_linux.json index 244831c..3760811 100644 --- a/chrome/browser/resources/plugin_metadata/plugins_linux.json +++ b/chrome/browser/resources/plugin_metadata/plugins_linux.json @@ -1,4 +1,16 @@ { + "google-talk": { + "mime_types": [ + ], + "versions": [ + { + "version": "0", + "status": "up_to_date", + "comment": "'Google Talk Plugin' and 'Google Talk Plugin Video Accelerator' use two completely different versioning schemes, so we can't define a minimum version." + } + ], + "name": "Google Talk" + }, "java-runtime-environment": { "mime_types": [ "application/x-java-applet", diff --git a/chrome/browser/resources/plugin_metadata/plugins_mac.json b/chrome/browser/resources/plugin_metadata/plugins_mac.json index e195e34..62b09f3 100644 --- a/chrome/browser/resources/plugin_metadata/plugins_mac.json +++ b/chrome/browser/resources/plugin_metadata/plugins_mac.json @@ -1,4 +1,16 @@ { + "google-talk": { + "mime_types": [ + ], + "versions": [ + { + "version": "0", + "status": "up_to_date", + "comment": "'Google Talk Plugin' and 'Google Talk Plugin Video Accelerator' use two completely different versioning schemes, so we can't define a minimum version." + } + ], + "name": "Google Talk" + }, "java-runtime-environment": { "mime_types": [ "application/x-java-applet", diff --git a/chrome/browser/resources/plugin_metadata/plugins_win.json b/chrome/browser/resources/plugin_metadata/plugins_win.json index c41cdd6..f1e5924 100644 --- a/chrome/browser/resources/plugin_metadata/plugins_win.json +++ b/chrome/browser/resources/plugin_metadata/plugins_win.json @@ -1,4 +1,16 @@ { + "google-talk": { + "mime_types": [ + ], + "versions": [ + { + "version": "0", + "status": "up_to_date", + "comment": "'Google Talk Plugin' and 'Google Talk Plugin Video Accelerator' use two completely different versioning schemes, so we can't define a minimum version." + } + ], + "name": "Google Talk" + }, "java-runtime-environment": { "mime_types": [ "application/x-java-applet", diff --git a/content/browser/plugin_data_remover_impl_browsertest.cc b/content/browser/plugin_data_remover_impl_browsertest.cc index e9ff41d..c8cfbc02 100644 --- a/content/browser/plugin_data_remover_impl_browsertest.cc +++ b/content/browser/plugin_data_remover_impl_browsertest.cc @@ -1,4 +1,4 @@ -// Copyright (c) 2011 The Chromium Authors. All rights reserved. +// Copyright (c) 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. @@ -33,6 +33,12 @@ class PluginDataRemoverTest : public InProcessBrowserTest, command_line->AppendSwitchPath(switches::kExtraPluginDir, browser_directory.AppendASCII("plugins")); #endif + // TODO(jam): since these plugin tests are running under Chrome, we need to + // tell it to disable its security features for old plugins. Once this is + // running under content_browsertests, these flags won't be needed. + // http://crbug.com/90448 + // switches::kAlwaysAuthorizePlugins + command_line->AppendSwitch("always-authorize-plugins"); } }; diff --git a/content/browser/plugin_service_impl_browsertest.cc b/content/browser/plugin_service_impl_browsertest.cc index 55a27cd..b2c9632 100644 --- a/content/browser/plugin_service_impl_browsertest.cc +++ b/content/browser/plugin_service_impl_browsertest.cc @@ -122,6 +122,12 @@ class PluginServiceTest : public InProcessBrowserTest { command_line->AppendSwitchPath(switches::kExtraPluginDir, browser_directory.AppendASCII("plugins")); #endif + // TODO(jam): since these plugin tests are running under Chrome, we need to + // tell it to disable its security features for old plugins. Once this is + // running under content_browsertests, these flags won't be needed. + // http://crbug.com/90448 + // switches::kAlwaysAuthorizePlugins + command_line->AppendSwitch("always-authorize-plugins"); } }; @@ -177,10 +183,7 @@ void QuitUIMessageLoopFromIOThread() { } void OpenChannelAndThenCancel(PluginProcessHost::Client* client) { - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); - // Start opening the channel - PluginServiceImpl::GetInstance()->OpenChannelToNpapiPlugin( - 0, 0, GURL(), GURL(), kNPAPITestPluginMimeType, client); + OpenChannel(client); // Immediately cancel it. This is guaranteed to work since PluginService needs // to consult its filter on the FILE thread. PluginServiceImpl::GetInstance()->CancelOpenChannelToNpapiPlugin(client); |