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

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: Rebase. 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
« no previous file with comments | « chrome/browser/ui/webui/options/website_settings_handler.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 5bb11c6275f74ee9843af5e3181e7f5fbe08a294..0a7354e5f12bc0af1ed0cba0747ffdaac308183d 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"
@@ -38,18 +39,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::InitializeHandler() {
@@ -73,6 +81,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)));
}
// content_settings::Observer implementation.
@@ -122,6 +145,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;
@@ -208,6 +247,159 @@ 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 the "ask" setting. It is an
+ // 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::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)
+ 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);
+ }
+
+ base::Value* storage_used = new base::StringValue(l10n_util::GetStringFUTF16(
+ IDS_WEBSITE_SETTINGS_STORAGE_USED, ui::FormatBytes(storage)));
+
+ web_ui()->CallJavascriptFunction(
+ "WebsiteSettingsEditor.populateOrigin", *storage_used, *permissions);
+}
+
void WebsiteSettingsHandler::UpdateLocalStorage() {
base::DictionaryValue local_storage_map;
for (LocalStorageList::const_iterator it = local_storage_list_.begin();
« no previous file with comments | « chrome/browser/ui/webui/options/website_settings_handler.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698