Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(54)

Unified Diff: chrome/browser/ui/webui/plugins_ui.cc

Issue 9537014: Merge a bunch of CLs to whitelist the Google Talk plug-in when turning on click-to-play. (Closed) Base URL: svn://svn.chromium.org/chrome/branches/1025/src
Patch Set: sync Created 8 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/ui/webui/options2/content_settings_handler2.cc ('k') | chrome/common/pref_names.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/ui/webui/plugins_ui.cc
diff --git a/chrome/browser/ui/webui/plugins_ui.cc b/chrome/browser/ui/webui/plugins_ui.cc
index f2e8126290ed617dee816ffabba69f12fac98021..c6c7245b11d0857e8315ce181280bc6835706c9a 100644
--- a/chrome/browser/ui/webui/plugins_ui.cc
+++ b/chrome/browser/ui/webui/plugins_ui.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.
@@ -16,7 +16,9 @@
#include "base/path_service.h"
#include "base/utf_string_conversions.h"
#include "base/values.h"
+#include "chrome/browser/content_settings/host_content_settings_map.h"
#include "chrome/browser/plugin_prefs.h"
+#include "chrome/browser/prefs/scoped_user_pref_update.h"
#include "chrome/browser/prefs/pref_member.h"
#include "chrome/browser/prefs/pref_service.h"
#include "chrome/browser/profiles/profile.h"
@@ -79,6 +81,7 @@ ChromeWebUIDataSource* CreatePluginsUIHTMLSource() {
IDS_PLUGINS_MIME_TYPES_FILE_EXTENSIONS);
source->AddLocalizedString("disable", IDS_PLUGINS_DISABLE);
source->AddLocalizedString("enable", IDS_PLUGINS_ENABLE);
+ source->AddLocalizedString("alwaysAllowed", IDS_EXCEPTIONS_ALLOW_BUTTON);
source->AddLocalizedString("noPlugins", IDS_PLUGINS_NO_PLUGINS);
source->set_json_path("strings.js");
@@ -136,6 +139,9 @@ class PluginsDOMHandler : public WebUIMessageHandler,
// Calback for the "getShowDetails" message.
void HandleGetShowDetails(const ListValue* args);
+ // Callback for the "setPluginAlwaysAllowed" message.
+ void HandleSetPluginAlwaysAllowed(const ListValue* args);
+
// content::NotificationObserver method overrides
virtual void Observe(int type,
const content::NotificationSource& source,
@@ -179,6 +185,9 @@ void PluginsDOMHandler::RegisterMessages() {
web_ui()->RegisterMessageCallback("enablePlugin",
base::Bind(&PluginsDOMHandler::HandleEnablePluginMessage,
base::Unretained(this)));
+ web_ui()->RegisterMessageCallback("setPluginAlwaysAllowed",
+ base::Bind(&PluginsDOMHandler::HandleSetPluginAlwaysAllowed,
+ base::Unretained(this)));
web_ui()->RegisterMessageCallback("saveShowDetailsToPrefs",
base::Bind(&PluginsDOMHandler::HandleSaveShowDetailsToPrefs,
base::Unretained(this)));
@@ -196,20 +205,26 @@ void PluginsDOMHandler::HandleEnablePluginMessage(const ListValue* args) {
// Be robust in accepting badness since plug-ins display HTML (hence
// JavaScript).
- if (args->GetSize() != 3)
+ if (args->GetSize() != 3) {
+ NOTREACHED();
return;
+ }
std::string enable_str;
std::string is_group_str;
- if (!args->GetString(1, &enable_str) || !args->GetString(2, &is_group_str))
+ if (!args->GetString(1, &enable_str) || !args->GetString(2, &is_group_str)) {
+ NOTREACHED();
return;
+ }
bool enable = enable_str == "true";
PluginPrefs* plugin_prefs = PluginPrefs::GetForProfile(profile);
if (is_group_str == "true") {
string16 group_name;
- if (!args->GetString(0, &group_name))
+ if (!args->GetString(0, &group_name)) {
+ NOTREACHED();
return;
+ }
plugin_prefs->EnablePluginGroup(enable, group_name);
if (enable) {
@@ -225,8 +240,10 @@ void PluginsDOMHandler::HandleEnablePluginMessage(const ListValue* args) {
}
} else {
FilePath::StringType file_path;
- if (!args->GetString(0, &file_path))
+ if (!args->GetString(0, &file_path)) {
+ NOTREACHED();
return;
+ }
bool result = plugin_prefs->EnablePlugin(enable, FilePath(file_path));
DCHECK(result);
}
@@ -246,6 +263,34 @@ void PluginsDOMHandler::HandleGetShowDetails(const ListValue* args) {
web_ui()->CallJavascriptFunction("loadShowDetailsFromPrefs", show_details);
}
+void PluginsDOMHandler::HandleSetPluginAlwaysAllowed(const ListValue* args) {
+ // Be robust in the input parameters, but crash in a Debug build.
+ if (args->GetSize() != 2) {
+ NOTREACHED();
+ return;
+ }
+
+ std::string plugin;
+ bool allowed = false;
+ if (!args->GetString(0, &plugin) || !args->GetBoolean(1, &allowed)) {
+ NOTREACHED();
+ return;
+ }
+ Profile* profile = Profile::FromWebUI(web_ui());
+ profile->GetHostContentSettingsMap()->SetContentSetting(
+ ContentSettingsPattern::Wildcard(),
+ ContentSettingsPattern::Wildcard(),
+ CONTENT_SETTINGS_TYPE_PLUGINS,
+ plugin,
+ allowed ? CONTENT_SETTING_ALLOW : CONTENT_SETTING_DEFAULT);
+
+ // Keep track of the whitelist separately, so that we can distinguish plug-ins
+ // whitelisted by the user from automatically whitelisted ones.
+ DictionaryPrefUpdate update(profile->GetPrefs(),
+ prefs::kContentSettingsPluginWhitelist);
+ update->SetBoolean(plugin, allowed);
+}
+
void PluginsDOMHandler::Observe(int type,
const content::NotificationSource& source,
const content::NotificationDetails& details) {
@@ -263,8 +308,12 @@ void PluginsDOMHandler::LoadPlugins() {
}
void PluginsDOMHandler::PluginsLoaded(const std::vector<PluginGroup>& groups) {
+ Profile* profile = Profile::FromWebUI(web_ui());
PluginPrefs* plugin_prefs =
- PluginPrefs::GetForProfile(Profile::FromWebUI(web_ui()));
+ PluginPrefs::GetForProfile(profile);
+
+ HostContentSettingsMap* map = profile->GetHostContentSettingsMap();
+ ContentSettingsPattern wildcard = ContentSettingsPattern::Wildcard();
// Construct DictionaryValues to return to the UI
ListValue* plugin_groups_data = new ListValue();
@@ -343,6 +392,7 @@ void PluginsDOMHandler::PluginsLoaded(const std::vector<PluginGroup>& groups) {
group_data->Set("plugin_files", plugin_files);
group_data->SetString("name", group_name);
+ group_data->SetString("id", group.identifier());
group_data->SetString("description", active_plugin->desc);
group_data->SetString("version", active_plugin->version);
group_data->SetBoolean("critical", group.IsVulnerable(*active_plugin));
@@ -360,6 +410,22 @@ void PluginsDOMHandler::PluginsLoaded(const std::vector<PluginGroup>& groups) {
}
group_data->SetString("enabledMode", enabled_mode);
+ // TODO(bauerb): We should have a method on HostContentSettinsMap for this.
+ bool always_allowed = false;
+ ContentSettingsForOneType settings;
+ map->GetSettingsForOneType(CONTENT_SETTINGS_TYPE_PLUGINS,
+ group.identifier(), &settings);
+ for (ContentSettingsForOneType::const_iterator it = settings.begin();
+ it != settings.end(); ++it) {
+ if (it->primary_pattern == wildcard &&
+ it->secondary_pattern == wildcard &&
+ it->setting == CONTENT_SETTING_ALLOW) {
+ always_allowed = true;
+ break;
+ }
+ }
+ group_data->SetBoolean("alwaysAllowed", always_allowed);
+
plugin_groups_data->Append(group_data);
}
DictionaryValue results;
@@ -384,7 +450,6 @@ PluginsUI::PluginsUI(content::WebUI* web_ui) : WebUIController(web_ui) {
CreatePluginsUIHTMLSource());
}
-
// static
RefCountedMemory* PluginsUI::GetFaviconResourceBytes() {
return ResourceBundle::GetSharedInstance().
@@ -399,4 +464,6 @@ void PluginsUI::RegisterUserPrefs(PrefService* prefs) {
prefs->RegisterBooleanPref(prefs::kPluginsShowSetReaderDefaultInfobar,
true,
PrefService::UNSYNCABLE_PREF);
+ prefs->RegisterDictionaryPref(prefs::kContentSettingsPluginWhitelist,
+ PrefService::SYNCABLE_PREF);
}
« no previous file with comments | « chrome/browser/ui/webui/options2/content_settings_handler2.cc ('k') | chrome/common/pref_names.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698