Chromium Code Reviews| 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..6066bdc155cad9a33bdffe07ef436865e6c83663 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,7 @@ |
| #include "ui/base/l10n/time_format.h" |
| #include "ui/base/text/bytes_formatting.h" |
| +using base::UserMetricsAction; |
| using power::OriginPowerMap; |
| using power::OriginPowerMapFactory; |
| @@ -158,6 +160,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. |
| @@ -426,6 +438,90 @@ 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) { |
| + base::DictionaryValue filter_settings; |
| + std::string provider_id; |
|
Bernhard Bauer
2014/09/09 08:56:21
Move this to right before it's used?
Daniel Nishi
2014/09/09 16:11:56
Done.
|
| + ContentSettingsType last_setting; |
| + content_settings::GetTypeFromName(last_setting_, &last_setting); |
| + 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 +663,18 @@ void WebsiteSettingsHandler::UpdateBatteryUsage() { |
| power_map); |
| } |
| +std::string WebsiteSettingsHandler::GetSettingDefaultFromModel( |
| + ContentSettingsType type, |
| + std::string* provider_id) { |
| + Profile* profile = Profile::FromWebUI(web_ui()); |
| + ContentSetting default_setting; |
| + default_setting = |
|
Bernhard Bauer
2014/09/09 08:56:21
Initialize the variable when it is declared.
Daniel Nishi
2014/09/09 16:11:56
Done.
|
| + 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)) { |