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()); |