Chromium Code Reviews| Index: chrome/browser/ui/webui/settings/site_settings_handler.cc |
| diff --git a/chrome/browser/ui/webui/settings/site_settings_handler.cc b/chrome/browser/ui/webui/settings/site_settings_handler.cc |
| index 5de10e0fb465db07b8c0efdd6c94d4cac3bcbeca..90f2b508f7b82ece96fd8a309d3654a832afd331 100644 |
| --- a/chrome/browser/ui/webui/settings/site_settings_handler.cc |
| +++ b/chrome/browser/ui/webui/settings/site_settings_handler.cc |
| @@ -4,6 +4,7 @@ |
| #include "chrome/browser/ui/webui/settings/site_settings_handler.h" |
| +#include <algorithm> |
| #include <memory> |
| #include <string> |
| #include <utility> |
| @@ -157,6 +158,10 @@ void SiteSettingsHandler::RegisterMessages() { |
| base::Bind(&SiteSettingsHandler::HandleSetCategoryPermissionForOrigin, |
| base::Unretained(this))); |
| web_ui()->RegisterMessageCallback( |
| + "getSiteDetails", |
| + base::Bind(&SiteSettingsHandler::HandleGetSiteDetails, |
| + base::Unretained(this))); |
| + web_ui()->RegisterMessageCallback( |
| "isPatternValid", |
| base::Bind(&SiteSettingsHandler::HandleIsPatternValid, |
| base::Unretained(this))); |
| @@ -436,13 +441,15 @@ void SiteSettingsHandler::HandleGetExceptionList(const base::ListValue* args) { |
| AddExceptionsGrantedByHostedApps(profile_, APIPermissionFromGroupName(type), |
| exceptions.get()); |
| site_settings::GetExceptionsFromHostContentSettingsMap( |
| - map, content_type, web_ui(), false, exceptions.get()); |
| + map, content_type, web_ui(), /*incognito=*/false, /*filter=*/nullptr, |
| + exceptions.get()); |
| if (profile_->HasOffTheRecordProfile()) { |
| Profile* incognito = profile_->GetOffTheRecordProfile(); |
| map = HostContentSettingsMapFactory::GetForProfile(incognito); |
| site_settings::GetExceptionsFromHostContentSettingsMap( |
| - map, content_type, web_ui(), true, exceptions.get()); |
| + map, content_type, web_ui(), /*incognito=*/true, /*filter=*/nullptr, |
| + exceptions.get()); |
| } |
| ResolveJavascriptCallback(*callback_id, *exceptions.get()); |
| @@ -522,6 +529,68 @@ void SiteSettingsHandler::HandleSetCategoryPermissionForOrigin( |
| content_type, "", setting); |
| } |
| +void SiteSettingsHandler::HandleGetSiteDetails( |
| + const base::ListValue* args) { |
| + AllowJavascript(); |
| + |
| + CHECK_EQ(2U, args->GetSize()); |
| + const base::Value* callback_id; |
| + CHECK(args->Get(0, &callback_id)); |
| + std::string site; |
| + CHECK(args->GetString(1, &site)); |
| + |
| + // A subset of the ContentSettingsType enum that we show in the settings UI. |
| + const ContentSettingsType kSettingsDetailTypes[] = { |
| + CONTENT_SETTINGS_TYPE_COOKIES, |
| + CONTENT_SETTINGS_TYPE_IMAGES, |
| + CONTENT_SETTINGS_TYPE_JAVASCRIPT, |
| + CONTENT_SETTINGS_TYPE_PLUGINS, |
| + CONTENT_SETTINGS_TYPE_POPUPS, |
| + CONTENT_SETTINGS_TYPE_GEOLOCATION, |
| + CONTENT_SETTINGS_TYPE_NOTIFICATIONS, |
| + CONTENT_SETTINGS_TYPE_FULLSCREEN, |
| + CONTENT_SETTINGS_TYPE_MEDIASTREAM_MIC, |
| + CONTENT_SETTINGS_TYPE_MEDIASTREAM_CAMERA, |
| + CONTENT_SETTINGS_TYPE_PROTOCOL_HANDLERS, |
| + CONTENT_SETTINGS_TYPE_AUTOMATIC_DOWNLOADS, |
| + CONTENT_SETTINGS_TYPE_KEYGEN, |
| + CONTENT_SETTINGS_TYPE_BACKGROUND_SYNC, |
| + CONTENT_SETTINGS_TYPE_USB_CHOOSER_DATA, |
| + CONTENT_SETTINGS_TYPE_PROMPT_NO_DECISION_COUNT, |
| + }; |
|
Finnur
2016/09/15 12:51:11
Can we somehow enforce (perhaps just with a test)
dschuyler
2016/09/15 20:35:27
I'm not sure on this right off. I've created crbug
|
| + |
| + // Create a list to be consistent with existing API, we are expecting a single |
| + // element (or none). |
| + std::unique_ptr<base::ListValue> exceptions(new base::ListValue); |
| + for (size_t type = 0; type < arraysize(kSettingsDetailTypes); ++type) { |
| + ContentSettingsType content_type = kSettingsDetailTypes[type]; |
| + |
| + HostContentSettingsMap* map = |
| + HostContentSettingsMapFactory::GetForProfile(profile_); |
| + site_settings::GetExceptionsFromHostContentSettingsMap( |
| + map, content_type, web_ui(), /*incognito=*/false, /*filter=*/&site, |
| + exceptions.get()); |
| + |
| + if (profile_->HasOffTheRecordProfile()) { |
| + Profile* incognito = profile_->GetOffTheRecordProfile(); |
| + map = HostContentSettingsMapFactory::GetForProfile(incognito); |
| + site_settings::GetExceptionsFromHostContentSettingsMap( |
| + map, content_type, web_ui(), /*incognito=*/true, /*filter=*/&site, |
| + exceptions.get()); |
| + } |
| + } |
| + |
| + if (!exceptions->GetSize()) { |
| + RejectJavascriptCallback(*callback_id, *base::Value::CreateNullValue()); |
| + return; |
| + } |
| + |
| + // We only need a single response element. |
| + const base::DictionaryValue* exception = nullptr; |
| + exceptions->GetDictionary(0, &exception); |
| + ResolveJavascriptCallback(*callback_id, *exception); |
| +} |
| + |
| void SiteSettingsHandler::HandleIsPatternValid( |
| const base::ListValue* args) { |
| CHECK_EQ(2U, args->GetSize()); |