Index: chrome/browser/ui/webui/options/website_settings_handler.cc |
diff --git a/chrome/browser/ui/webui/options/website_settings_handler.cc b/chrome/browser/ui/webui/options/website_settings_handler.cc |
index 71491d7ad6a4bb5943bc85101a88dc244339c26f..30f34e0e590bf396ccb3d83c7e52e225056c8d68 100644 |
--- a/chrome/browser/ui/webui/options/website_settings_handler.cc |
+++ b/chrome/browser/ui/webui/options/website_settings_handler.cc |
@@ -16,6 +16,7 @@ |
#include "components/power/origin_power_map_factory.h" |
#include "content/public/browser/dom_storage_context.h" |
#include "content/public/browser/storage_partition.h" |
+#include "content/public/browser/user_metrics.h" |
#include "content/public/browser/web_contents.h" |
#include "content/public/browser/web_ui.h" |
#include "extensions/browser/app_window/app_window_registry.h" |
@@ -27,6 +28,11 @@ |
#include "ui/base/l10n/time_format.h" |
#include "ui/base/text/bytes_formatting.h" |
+#if defined(OS_CHROMEOS) |
+#include "components/user_manager/user_manager.h" |
+#endif |
+ |
+using base::UserMetricsAction; |
using power::OriginPowerMap; |
using power::OriginPowerMapFactory; |
@@ -158,6 +164,16 @@ void WebsiteSettingsHandler::RegisterMessages() { |
"stopOrigin", |
base::Bind(&WebsiteSettingsHandler::HandleStopOrigin, |
base::Unretained(this))); |
+ |
+ web_ui()->RegisterMessageCallback( |
+ "updateDefaultSetting", |
+ base::Bind(&WebsiteSettingsHandler::HandleUpdateDefaultSetting, |
+ base::Unretained(this))); |
+ |
+ web_ui()->RegisterMessageCallback( |
+ "setDefaultContentSetting", |
+ base::Bind(&WebsiteSettingsHandler::HandleSetDefaultSetting, |
+ base::Unretained(this))); |
} |
// content_settings::Observer implementation. |
@@ -226,7 +242,7 @@ void WebsiteSettingsHandler::HandleMaybeShowEditPage( |
last_site_ = last_site; |
base::StringValue site_value(site); |
- web_ui()->CallJavascriptFunction("WebsiteSettingsManager.showEditPage", |
+ web_ui()->CallJavascriptFunction("WebsiteSettingsEditor.showEditPage", |
site_value); |
} |
@@ -426,6 +442,91 @@ void WebsiteSettingsHandler::HandleStopOrigin(const base::ListValue* args) { |
StopOrigin(last_site_); |
} |
+// TODO(dhnishi): Remove default settings duplication from the |
+// WebsiteSettingsHandler and the ContentSettingsHandler. |
+void WebsiteSettingsHandler::HandleUpdateDefaultSetting( |
+ const base::ListValue* args) { |
+ ContentSettingsType last_setting; |
+ content_settings::GetTypeFromName(last_setting_, &last_setting); |
+ |
+ base::DictionaryValue filter_settings; |
+ std::string provider_id; |
+ filter_settings.SetString( |
+ "value", GetSettingDefaultFromModel(last_setting, &provider_id)); |
+ filter_settings.SetString("managedBy", provider_id); |
+ |
+ web_ui()->CallJavascriptFunction("WebsiteSettingsManager.updateDefault", |
+ filter_settings); |
+} |
+ |
+void WebsiteSettingsHandler::HandleSetDefaultSetting( |
+ const base::ListValue* args) { |
+ DCHECK_EQ(1U, args->GetSize()); |
+ std::string setting; |
+ if (!args->GetString(0, &setting)) { |
+ NOTREACHED(); |
+ return; |
+ } |
+ ContentSetting new_default = |
+ content_settings::ContentSettingFromString(setting); |
+ |
+ ContentSettingsType last_setting; |
+ content_settings::GetTypeFromName(last_setting_, &last_setting); |
+ Profile* profile = Profile::FromWebUI(web_ui()); |
+ |
+#if defined(OS_CHROMEOS) |
+ // ChromeOS special case : in Guest mode settings are opened in Incognito |
+ // mode, so we need original profile to actually modify settings. |
+ if (user_manager::UserManager::Get()->IsLoggedInAsGuest()) |
+ profile = profile->GetOriginalProfile(); |
+#endif |
+ |
+ HostContentSettingsMap* map = profile->GetHostContentSettingsMap(); |
+ map->SetDefaultContentSetting(last_setting, new_default); |
+ |
+ switch (last_setting) { |
+ case CONTENT_SETTINGS_TYPE_AUTOMATIC_DOWNLOADS: |
+ content::RecordAction( |
+ UserMetricsAction("Options_DefaultMultipleAutomaticDLSettingChange")); |
+ break; |
+ case CONTENT_SETTINGS_TYPE_COOKIES: |
+ content::RecordAction( |
+ UserMetricsAction("Options_DefaultCookieSettingChanged")); |
+ break; |
+ case CONTENT_SETTINGS_TYPE_GEOLOCATION: |
+ content::RecordAction( |
+ UserMetricsAction("Options_DefaultGeolocationSettingChanged")); |
+ break; |
+ case CONTENT_SETTINGS_TYPE_IMAGES: |
+ content::RecordAction( |
+ UserMetricsAction("Options_DefaultImagesSettingChanged")); |
+ break; |
+ case CONTENT_SETTINGS_TYPE_JAVASCRIPT: |
+ content::RecordAction( |
+ UserMetricsAction("Options_DefaultJavaScriptSettingChanged")); |
+ break; |
+ case CONTENT_SETTINGS_TYPE_MEDIASTREAM: |
+ content::RecordAction( |
+ UserMetricsAction("Options_DefaultMediaStreamMicSettingChanged")); |
+ break; |
+ case CONTENT_SETTINGS_TYPE_NOTIFICATIONS: |
+ content::RecordAction( |
+ UserMetricsAction("Options_DefaultNotificationsSettingChanged")); |
+ break; |
+ case CONTENT_SETTINGS_TYPE_PLUGINS: |
+ content::RecordAction( |
+ UserMetricsAction("Options_DefaultPluginsSettingChanged")); |
+ break; |
+ case CONTENT_SETTINGS_TYPE_POPUPS: |
+ content::RecordAction( |
+ UserMetricsAction("Options_DefaultPopupsSettingChanged")); |
+ break; |
+ default: |
+ NOTREACHED(); |
+ return; |
+ } |
+} |
+ |
void WebsiteSettingsHandler::GetInfoForOrigin(const GURL& site_url, |
bool show_page) { |
Profile* profile = Profile::FromWebUI(web_ui()); |
@@ -567,6 +668,17 @@ void WebsiteSettingsHandler::UpdateBatteryUsage() { |
power_map); |
} |
+std::string WebsiteSettingsHandler::GetSettingDefaultFromModel( |
+ ContentSettingsType type, |
+ std::string* provider_id) { |
+ Profile* profile = Profile::FromWebUI(web_ui()); |
+ ContentSetting default_setting = |
+ profile->GetHostContentSettingsMap()->GetDefaultContentSetting( |
+ type, provider_id); |
+ |
+ return content_settings::ContentSettingToString(default_setting); |
+} |
+ |
void WebsiteSettingsHandler::StopOrigin(const GURL& site_url) { |
Profile* profile = Profile::FromWebUI(web_ui()); |
if (site_url.SchemeIs(extensions::kExtensionScheme)) { |