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

Unified Diff: chrome/browser/ui/webui/options/website_settings_handler.cc

Issue 475193002: Add a single site view page to view and modify content settings. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 4 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
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 5341cb29c0c3a8b2cd8fb4941c91ccd5fdbddd7e..445d39951ee175d5371df800a873ed9f79395530 100644
--- a/chrome/browser/ui/webui/options/website_settings_handler.cc
+++ b/chrome/browser/ui/webui/options/website_settings_handler.cc
@@ -9,6 +9,7 @@
#include "chrome/browser/profiles/profile.h"
#include "content/public/browser/web_ui.h"
#include "grit/generated_resources.h"
+#include "ui/base/l10n/l10n_util.h"
#include "ui/base/l10n/time_format.h"
#include "ui/base/text/bytes_formatting.h"
@@ -37,18 +38,25 @@ void WebsiteSettingsHandler::GetLocalizedValues(
DCHECK(localized_strings);
static OptionsStringResource resources[] = {
- {"websitesOptionsPageTabTitle", IDS_WEBSITES_SETTINGS_TITLE},
+ {"websitesOptionsPageTabTitle", IDS_WEBSITE_SETTINGS_TITLE},
+ {"websitesSettingsEditPage", IDS_WEBSITE_SETTINGS_EDIT_TITLE},
{"websitesManage", IDS_WEBSITE_SETTINGS_MANAGE},
{"websitesSearch", IDS_WEBSITE_SETTINGS_SEARCH_ORIGINS},
{"websitesLabelGeolocation", IDS_WEBSITE_SETTINGS_TYPE_LOCATION},
{"websitesLabelMediaStream", IDS_WEBSITE_SETTINGS_TYPE_MEDIASTREAM},
{"websitesLabelNotifications", IDS_WEBSITE_SETTINGS_TYPE_NOTIFICATIONS},
{"websitesLabelStorage", IDS_WEBSITE_SETTINGS_TYPE_STORAGE},
+ {"websitesLocationDescription",
+ IDS_WEBSITE_SETTINGS_LOCATION_DESCRIPTION},
+ {"websitesMediastreamDescription",
+ IDS_WEBSITE_SETTINGS_MEDIASTREAM_DESCRIPTION},
+ {"websitesNotificationsDescription",
+ IDS_WEBSITE_SETTINGS_NOTIFICATIONS_DESCRIPTION},
};
RegisterStrings(localized_strings, resources, arraysize(resources));
RegisterTitle(
- localized_strings, "websiteSettingsPage", IDS_WEBSITES_SETTINGS_TITLE);
+ localized_strings, "websiteSettingsPage", IDS_WEBSITE_SETTINGS_TITLE);
}
void WebsiteSettingsHandler::RegisterMessages() {
@@ -66,6 +74,21 @@ void WebsiteSettingsHandler::RegisterMessages() {
"updateLocalStorage",
base::Bind(&WebsiteSettingsHandler::HandleUpdateLocalStorage,
base::Unretained(this)));
+
+ web_ui()->RegisterMessageCallback(
+ "getOriginInfo",
+ base::Bind(&WebsiteSettingsHandler::HandleGetOriginInfo,
+ base::Unretained(this)));
+
+ web_ui()->RegisterMessageCallback(
+ "setOriginPermission",
+ base::Bind(&WebsiteSettingsHandler::HandleSetOriginPermission,
+ base::Unretained(this)));
+
+ web_ui()->RegisterMessageCallback(
+ "maybeShowEditPage",
+ base::Bind(&WebsiteSettingsHandler::HandleMaybeShowEditPage,
+ base::Unretained(this)));
}
void WebsiteSettingsHandler::HandleUpdateOrigins(const base::ListValue* args) {
@@ -109,6 +132,22 @@ void WebsiteSettingsHandler::HandleUpdateLocalStorage(
weak_ptr_factory_.GetWeakPtr()));
}
+void WebsiteSettingsHandler::HandleMaybeShowEditPage(
+ const base::ListValue* args) {
+ std::string site;
+ bool rv = args->GetString(0, &site);
+ DCHECK(rv);
+
+ GURL last_site(site);
+ if (!last_site.is_valid())
+ return;
+
+ last_site_ = last_site;
+ base::StringValue site_value(site);
+ web_ui()->CallJavascriptFunction("WebsiteSettingsManager.showEditPage",
+ site_value);
+}
+
void WebsiteSettingsHandler::OnLocalStorageFetched(const std::list<
BrowsingDataLocalStorageHelper::LocalStorageInfo>& storage) {
local_storage_list_ = storage;
@@ -184,6 +223,163 @@ void WebsiteSettingsHandler::UpdateOrigins() {
origins);
}
+void WebsiteSettingsHandler::HandleGetOriginInfo(
+ const base::ListValue* args) {
+ std::string url;
+ bool rv = args->GetString(0, &url);
+ DCHECK(rv);
+ GURL origin(url);
+
+ if (!origin.is_valid())
+ return;
+
+ GetInfoForOrigin(origin);
+}
+
+void WebsiteSettingsHandler::HandleSetOriginPermission(
+ const base::ListValue* args) {
+ std::string setting_name;
+ bool rv = args->GetString(0, &setting_name);
+ DCHECK(rv);
+ ContentSettingsType settings_type;
+ rv = content_settings::GetTypeFromName(setting_name, &settings_type);
+ DCHECK(rv);
+
+ std::string value;
+ rv = args->GetString(1, &value);
+ DCHECK(rv);
+
+ ContentSetting setting = content_settings::ContentSettingFromString(value);
+ Profile* profile = Profile::FromWebUI(web_ui());
+ HostContentSettingsMap* map = profile->GetHostContentSettingsMap();
+ ContentSetting default_value =
+ map->GetDefaultContentSetting(settings_type, NULL);
+
+ // Users are not allowed to be the source of setting to ask. It is an
Bernhard Bauer 2014/08/15 14:53:05 Nit: 'the source of the "ask" setting' might be a
Daniel Nishi 2014/08/15 16:56:45 Done.
+ // ephemeral setting which is removed once the question is asked.
+ if (setting == CONTENT_SETTING_ASK && setting == default_value)
+ setting = CONTENT_SETTING_DEFAULT;
+
+ ContentSettingsPattern primary_pattern;
+ ContentSettingsPattern secondary_pattern;
+ switch (settings_type) {
+ case CONTENT_SETTINGS_TYPE_NOTIFICATIONS:
+ primary_pattern = ContentSettingsPattern::FromURLNoWildcard(last_site_);
+ secondary_pattern = ContentSettingsPattern::Wildcard();
+ break;
+ case CONTENT_SETTINGS_TYPE_GEOLOCATION:
+ primary_pattern = ContentSettingsPattern::FromURLNoWildcard(last_site_);
+ secondary_pattern = ContentSettingsPattern::FromURLNoWildcard(last_site_);
+ break;
+ case CONTENT_SETTINGS_TYPE_MEDIASTREAM:
+ primary_pattern = ContentSettingsPattern::FromURLNoWildcard(last_site_);
+ secondary_pattern = ContentSettingsPattern::Wildcard();
+ map->SetContentSetting(primary_pattern,
+ secondary_pattern,
+ CONTENT_SETTINGS_TYPE_MEDIASTREAM_MIC,
+ std::string(),
+ setting);
+ map->SetContentSetting(primary_pattern,
+ secondary_pattern,
+ CONTENT_SETTINGS_TYPE_MEDIASTREAM_CAMERA,
+ std::string(),
+ setting);
+ return;
+ default:
+ NOTREACHED() << "Content settings type not yet supported.";
+ break;
+ }
+
+ content_settings::SettingInfo info;
+ scoped_ptr<base::Value> v(map->GetWebsiteSetting(
+ last_site_, last_site_, settings_type, std::string(), &info));
+ map->SetNarrowestWebsiteSetting(primary_pattern,
+ secondary_pattern,
+ settings_type,
+ std::string(),
+ setting,
+ info);
+}
+
+void WebsiteSettingsHandler::GetInfoForOrigin(const GURL& site_url) {
+ Profile* profile = Profile::FromWebUI(web_ui());
+ HostContentSettingsMap* map = profile->GetHostContentSettingsMap();
+
+ double storage = 0.0;
+ for (LocalStorageList::const_iterator it = local_storage_list_.begin();
+ it != local_storage_list_.end();
+ it++) {
+ if (it->origin_url == site_url) {
+ storage = static_cast<double>(it->size);
+ break;
+ }
+ }
+
+ base::ListValue args;
+ args.AppendString(l10n_util::GetStringFUTF16(
+ IDS_WEBSITE_SETTINGS_STORAGE_USED, ui::FormatBytes(storage)));
+
+ base::DictionaryValue* permissions = new base::DictionaryValue;
+ for (size_t i = 0; i < arraysize(kValidTypes); ++i) {
+ ContentSettingsType permission_type = kValidTypes[i];
+
+ // Append the possible settings.
+ base::ListValue* options = new base::ListValue;
+ ContentSetting default_value =
+ map->GetDefaultContentSetting(permission_type, NULL);
+ if (default_value != CONTENT_SETTING_ALLOW &&
+ default_value != CONTENT_SETTING_BLOCK) {
+ options->AppendString(
+ content_settings::ContentSettingToString(default_value));
+ }
+ options->AppendString(
+ content_settings::ContentSettingToString(CONTENT_SETTING_ALLOW));
+ options->AppendString(
+ content_settings::ContentSettingToString(CONTENT_SETTING_BLOCK));
+
+ ContentSetting permission;
+ content_settings::SettingInfo info;
+ if (permission_type == CONTENT_SETTINGS_TYPE_MEDIASTREAM) {
+ scoped_ptr<base::Value> mic_value(
+ map->GetWebsiteSetting(site_url,
+ site_url,
+ CONTENT_SETTINGS_TYPE_MEDIASTREAM_MIC,
+ std::string(),
+ &info));
+ ContentSetting mic_setting =
+ content_settings::ValueToContentSetting(mic_value.get());
+ ContentSetting cam_setting =
+ map->GetContentSetting(site_url,
+ site_url,
+ CONTENT_SETTINGS_TYPE_MEDIASTREAM_CAMERA,
+ std::string());
+
+ if (mic_setting != cam_setting || mic_setting == CONTENT_SETTING_ASK)
Bernhard Bauer 2014/08/15 14:53:05 The second case here has the same effect as the el
Daniel Nishi 2014/08/15 16:56:45 Good catch. Done.
+ permission = CONTENT_SETTING_ASK;
+ else
+ permission = mic_setting;
+ } else {
+ scoped_ptr<base::Value> v(map->GetWebsiteSetting(
+ site_url, site_url, permission_type, std::string(), &info));
+ permission = content_settings::ValueToContentSetting(v.get());
+ }
+
+ base::DictionaryValue* permission_info = new base::DictionaryValue;
+ permission_info->SetStringWithoutPathExpansion(
+ "setting", content_settings::ContentSettingToString(permission));
+ permission_info->SetWithoutPathExpansion("options", options);
+ permission_info->SetBooleanWithoutPathExpansion(
+ "editable", info.source == content_settings::SETTING_SOURCE_USER);
+ permissions->SetWithoutPathExpansion(
+ content_settings::GetTypeName(permission_type), permission_info);
+ }
+
+ args.Append(permissions);
+
+ web_ui()->CallJavascriptFunction("WebsiteSettingsEditor.populateOrigin",
+ args);
+}
+
void WebsiteSettingsHandler::UpdateLocalStorage() {
base::DictionaryValue local_storage_map;
for (LocalStorageList::const_iterator it = local_storage_list_.begin();

Powered by Google App Engine
This is Rietveld 408576698