| OLD | NEW |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/ui/webui/settings/site_settings_handler.h" | 5 #include "chrome/browser/ui/webui/settings/site_settings_handler.h" |
| 6 | 6 |
| 7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "chrome/browser/browsing_data/browsing_data_local_storage_helper.h" | 8 #include "chrome/browser/browsing_data/browsing_data_local_storage_helper.h" |
| 9 #include "chrome/browser/content_settings/host_content_settings_map_factory.h" | 9 #include "chrome/browser/content_settings/host_content_settings_map_factory.h" |
| 10 #include "chrome/browser/profiles/profile.h" | 10 #include "chrome/browser/profiles/profile.h" |
| (...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 97 base::StringValue(clearing_origin_)); | 97 base::StringValue(clearing_origin_)); |
| 98 } | 98 } |
| 99 } | 99 } |
| 100 | 100 |
| 101 void SiteSettingsHandler::OnContentSettingChanged( | 101 void SiteSettingsHandler::OnContentSettingChanged( |
| 102 const ContentSettingsPattern& primary_pattern, | 102 const ContentSettingsPattern& primary_pattern, |
| 103 const ContentSettingsPattern& secondary_pattern, | 103 const ContentSettingsPattern& secondary_pattern, |
| 104 ContentSettingsType content_type, | 104 ContentSettingsType content_type, |
| 105 std::string resource_identifier) { | 105 std::string resource_identifier) { |
| 106 if (primary_pattern.ToString().empty()) { | 106 if (primary_pattern.ToString().empty()) { |
| 107 CallJavascriptFunction("cr.webUIListenerCallback", | 107 CallJavascriptFunction( |
| 108 base::StringValue("contentSettingCategoryChanged"), | 108 "cr.webUIListenerCallback", |
| 109 base::FundamentalValue(content_type)); | 109 base::StringValue("contentSettingCategoryChanged"), |
| 110 base::StringValue(site_settings::ContentSettingsTypeToGroupName( |
| 111 content_type))); |
| 110 } else { | 112 } else { |
| 111 CallJavascriptFunction( | 113 CallJavascriptFunction( |
| 112 "cr.webUIListenerCallback", | 114 "cr.webUIListenerCallback", |
| 113 base::StringValue("contentSettingSitePermissionChanged"), | 115 base::StringValue("contentSettingSitePermissionChanged"), |
| 114 base::FundamentalValue(content_type), | 116 base::StringValue(site_settings::ContentSettingsTypeToGroupName( |
| 117 content_type)), |
| 115 base::StringValue(primary_pattern.ToString())); | 118 base::StringValue(primary_pattern.ToString())); |
| 116 } | 119 } |
| 117 } | 120 } |
| 118 | 121 |
| 119 void SiteSettingsHandler::HandleFetchUsageTotal( | 122 void SiteSettingsHandler::HandleFetchUsageTotal( |
| 120 const base::ListValue* args) { | 123 const base::ListValue* args) { |
| 121 AllowJavascript(); | 124 AllowJavascript(); |
| 122 | 125 |
| 123 CHECK_EQ(1U, args->GetSize()); | 126 CHECK_EQ(1U, args->GetSize()); |
| 124 std::string host; | 127 std::string host; |
| 125 CHECK(args->GetString(0, &host)); | 128 CHECK(args->GetString(0, &host)); |
| 126 usage_host_ = host; | 129 usage_host_ = host; |
| 127 | 130 |
| 128 scoped_refptr<StorageInfoFetcher> storage_info_fetcher | 131 scoped_refptr<StorageInfoFetcher> storage_info_fetcher |
| 129 = new StorageInfoFetcher(profile_); | 132 = new StorageInfoFetcher(profile_); |
| 130 storage_info_fetcher->FetchStorageInfo( | 133 storage_info_fetcher->FetchStorageInfo( |
| 131 base::Bind(&SiteSettingsHandler::OnGetUsageInfo, base::Unretained(this))); | 134 base::Bind(&SiteSettingsHandler::OnGetUsageInfo, base::Unretained(this))); |
| 132 } | 135 } |
| 133 | 136 |
| 134 void SiteSettingsHandler::HandleClearUsage( | 137 void SiteSettingsHandler::HandleClearUsage( |
| 135 const base::ListValue* args) { | 138 const base::ListValue* args) { |
| 136 CHECK_EQ(2U, args->GetSize()); | 139 CHECK_EQ(2U, args->GetSize()); |
| 137 std::string origin; | 140 std::string origin; |
| 138 CHECK(args->GetString(0, &origin)); | 141 CHECK(args->GetString(0, &origin)); |
| 139 double type; | 142 std::string type; |
| 140 CHECK(args->GetDouble(1, &type)); | 143 CHECK(args->GetString(1, &type)); |
| 141 | 144 |
| 142 GURL url(origin); | 145 GURL url(origin); |
| 143 if (url.is_valid()) { | 146 if (url.is_valid()) { |
| 144 clearing_origin_ = origin; | 147 clearing_origin_ = origin; |
| 145 | 148 |
| 146 // Start by clearing the storage data asynchronously. | 149 // Start by clearing the storage data asynchronously. |
| 147 scoped_refptr<StorageInfoFetcher> storage_info_fetcher | 150 scoped_refptr<StorageInfoFetcher> storage_info_fetcher |
| 148 = new StorageInfoFetcher(profile_); | 151 = new StorageInfoFetcher(profile_); |
| 149 storage_info_fetcher->ClearStorage( | 152 storage_info_fetcher->ClearStorage( |
| 150 url.host(), | 153 url.host(), |
| 151 static_cast<storage::StorageType>(static_cast<int>(type)), | 154 static_cast<storage::StorageType>(static_cast<int>( |
| 155 site_settings::ContentSettingsTypeFromGroupName(type))), |
| 152 base::Bind(&SiteSettingsHandler::OnUsageInfoCleared, | 156 base::Bind(&SiteSettingsHandler::OnUsageInfoCleared, |
| 153 base::Unretained(this))); | 157 base::Unretained(this))); |
| 154 | 158 |
| 155 // Also clear the *local* storage data. | 159 // Also clear the *local* storage data. |
| 156 scoped_refptr<BrowsingDataLocalStorageHelper> local_storage_helper = | 160 scoped_refptr<BrowsingDataLocalStorageHelper> local_storage_helper = |
| 157 new BrowsingDataLocalStorageHelper(profile_); | 161 new BrowsingDataLocalStorageHelper(profile_); |
| 158 local_storage_helper->DeleteOrigin(url); | 162 local_storage_helper->DeleteOrigin(url); |
| 159 } | 163 } |
| 160 } | 164 } |
| 161 | 165 |
| 162 void SiteSettingsHandler::HandleSetDefaultValueForContentType( | 166 void SiteSettingsHandler::HandleSetDefaultValueForContentType( |
| 163 const base::ListValue* args) { | 167 const base::ListValue* args) { |
| 164 CHECK_EQ(2U, args->GetSize()); | 168 CHECK_EQ(2U, args->GetSize()); |
| 165 double content_type; | 169 std::string content_type; |
| 166 CHECK(args->GetDouble(0, &content_type)); | 170 CHECK(args->GetString(0, &content_type)); |
| 167 std::string setting; | 171 std::string setting; |
| 168 CHECK(args->GetString(1, &setting)); | 172 CHECK(args->GetString(1, &setting)); |
| 169 ContentSetting default_setting; | 173 ContentSetting default_setting; |
| 170 CHECK(content_settings::ContentSettingFromString(setting, &default_setting)); | 174 CHECK(content_settings::ContentSettingFromString(setting, &default_setting)); |
| 171 | 175 |
| 172 HostContentSettingsMap* map = | 176 HostContentSettingsMap* map = |
| 173 HostContentSettingsMapFactory::GetForProfile(profile_); | 177 HostContentSettingsMapFactory::GetForProfile(profile_); |
| 174 map->SetDefaultContentSetting( | 178 map->SetDefaultContentSetting( |
| 175 static_cast<ContentSettingsType>(static_cast<int>(content_type)), | 179 static_cast<ContentSettingsType>(static_cast<int>( |
| 180 site_settings::ContentSettingsTypeFromGroupName(content_type))), |
| 176 default_setting); | 181 default_setting); |
| 177 } | 182 } |
| 178 | 183 |
| 179 void SiteSettingsHandler::HandleGetDefaultValueForContentType( | 184 void SiteSettingsHandler::HandleGetDefaultValueForContentType( |
| 180 const base::ListValue* args) { | 185 const base::ListValue* args) { |
| 181 AllowJavascript(); | 186 AllowJavascript(); |
| 182 | 187 |
| 183 CHECK_EQ(2U, args->GetSize()); | 188 CHECK_EQ(2U, args->GetSize()); |
| 184 const base::Value* callback_id; | 189 const base::Value* callback_id; |
| 185 CHECK(args->Get(0, &callback_id)); | 190 CHECK(args->Get(0, &callback_id)); |
| 186 double type; | 191 std::string type; |
| 187 CHECK(args->GetDouble(1, &type)); | 192 CHECK(args->GetString(1, &type)); |
| 188 | 193 |
| 189 ContentSettingsType content_type = | 194 ContentSettingsType content_type = |
| 190 static_cast<ContentSettingsType>(static_cast<int>(type)); | 195 static_cast<ContentSettingsType>(static_cast<int>( |
| 196 site_settings::ContentSettingsTypeFromGroupName(type))); |
| 191 HostContentSettingsMap* map = | 197 HostContentSettingsMap* map = |
| 192 HostContentSettingsMapFactory::GetForProfile(profile_); | 198 HostContentSettingsMapFactory::GetForProfile(profile_); |
| 193 ContentSetting setting = map->GetDefaultContentSetting(content_type, nullptr); | 199 ContentSetting setting = map->GetDefaultContentSetting(content_type, nullptr); |
| 194 | 200 |
| 195 // FullScreen is Allow vs. Ask. | 201 // FullScreen is Allow vs. Ask. |
| 196 bool enabled; | 202 bool enabled; |
| 197 if (content_type == CONTENT_SETTINGS_TYPE_FULLSCREEN) | 203 if (content_type == CONTENT_SETTINGS_TYPE_FULLSCREEN) |
| 198 enabled = setting != CONTENT_SETTING_ASK; | 204 enabled = setting != CONTENT_SETTING_ASK; |
| 199 else | 205 else |
| 200 enabled = setting != CONTENT_SETTING_BLOCK; | 206 enabled = setting != CONTENT_SETTING_BLOCK; |
| 201 | 207 |
| 202 ResolveJavascriptCallback(*callback_id, base::FundamentalValue(enabled)); | 208 ResolveJavascriptCallback(*callback_id, base::FundamentalValue(enabled)); |
| 203 } | 209 } |
| 204 | 210 |
| 205 void SiteSettingsHandler::HandleGetExceptionList(const base::ListValue* args) { | 211 void SiteSettingsHandler::HandleGetExceptionList(const base::ListValue* args) { |
| 206 AllowJavascript(); | 212 AllowJavascript(); |
| 207 | 213 |
| 208 CHECK_EQ(2U, args->GetSize()); | 214 CHECK_EQ(2U, args->GetSize()); |
| 209 const base::Value* callback_id; | 215 const base::Value* callback_id; |
| 210 CHECK(args->Get(0, &callback_id)); | 216 CHECK(args->Get(0, &callback_id)); |
| 211 double type; | 217 std::string type; |
| 212 CHECK(args->GetDouble(1, &type)); | 218 CHECK(args->GetString(1, &type)); |
| 213 ContentSettingsType content_type = | 219 ContentSettingsType content_type = |
| 214 static_cast<ContentSettingsType>(static_cast<int>(type)); | 220 static_cast<ContentSettingsType>(static_cast<int>( |
| 221 site_settings::ContentSettingsTypeFromGroupName(type))); |
| 215 | 222 |
| 216 HostContentSettingsMap* map = | 223 HostContentSettingsMap* map = |
| 217 HostContentSettingsMapFactory::GetForProfile(profile_); | 224 HostContentSettingsMapFactory::GetForProfile(profile_); |
| 218 std::unique_ptr<base::ListValue> exceptions(new base::ListValue); | 225 std::unique_ptr<base::ListValue> exceptions(new base::ListValue); |
| 219 site_settings::GetExceptionsFromHostContentSettingsMap( | 226 site_settings::GetExceptionsFromHostContentSettingsMap( |
| 220 map, content_type, web_ui(), exceptions.get()); | 227 map, content_type, web_ui(), exceptions.get()); |
| 221 ResolveJavascriptCallback(*callback_id, *exceptions.get()); | 228 ResolveJavascriptCallback(*callback_id, *exceptions.get()); |
| 222 } | 229 } |
| 223 | 230 |
| 224 void SiteSettingsHandler::HandleResetCategoryPermissionForOrigin( | 231 void SiteSettingsHandler::HandleResetCategoryPermissionForOrigin( |
| 225 const base::ListValue* args) { | 232 const base::ListValue* args) { |
| 226 CHECK_EQ(3U, args->GetSize()); | 233 CHECK_EQ(3U, args->GetSize()); |
| 227 std::string primary_pattern; | 234 std::string primary_pattern; |
| 228 CHECK(args->GetString(0, &primary_pattern)); | 235 CHECK(args->GetString(0, &primary_pattern)); |
| 229 std::string secondary_pattern; | 236 std::string secondary_pattern; |
| 230 CHECK(args->GetString(1, &secondary_pattern)); | 237 CHECK(args->GetString(1, &secondary_pattern)); |
| 231 double type; | 238 std::string type; |
| 232 CHECK(args->GetDouble(2, &type)); | 239 CHECK(args->GetString(2, &type)); |
| 233 | 240 |
| 234 ContentSettingsType content_type = | 241 ContentSettingsType content_type = |
| 235 static_cast<ContentSettingsType>(static_cast<int>(type)); | 242 static_cast<ContentSettingsType>(static_cast<int>( |
| 243 site_settings::ContentSettingsTypeFromGroupName(type))); |
| 236 | 244 |
| 237 HostContentSettingsMap* map = | 245 HostContentSettingsMap* map = |
| 238 HostContentSettingsMapFactory::GetForProfile(profile_); | 246 HostContentSettingsMapFactory::GetForProfile(profile_); |
| 239 map->SetContentSettingCustomScope( | 247 map->SetContentSettingCustomScope( |
| 240 ContentSettingsPattern::FromString(primary_pattern), | 248 ContentSettingsPattern::FromString(primary_pattern), |
| 241 secondary_pattern.empty() ? | 249 secondary_pattern.empty() ? |
| 242 ContentSettingsPattern::Wildcard() : | 250 ContentSettingsPattern::Wildcard() : |
| 243 ContentSettingsPattern::FromString(secondary_pattern), | 251 ContentSettingsPattern::FromString(secondary_pattern), |
| 244 content_type, "", CONTENT_SETTING_DEFAULT); | 252 content_type, "", CONTENT_SETTING_DEFAULT); |
| 245 } | 253 } |
| 246 | 254 |
| 247 void SiteSettingsHandler::HandleSetCategoryPermissionForOrigin( | 255 void SiteSettingsHandler::HandleSetCategoryPermissionForOrigin( |
| 248 const base::ListValue* args) { | 256 const base::ListValue* args) { |
| 249 CHECK_EQ(4U, args->GetSize()); | 257 CHECK_EQ(4U, args->GetSize()); |
| 250 std::string primary_pattern; | 258 std::string primary_pattern; |
| 251 CHECK(args->GetString(0, &primary_pattern)); | 259 CHECK(args->GetString(0, &primary_pattern)); |
| 252 std::string secondary_pattern; | 260 std::string secondary_pattern; |
| 253 CHECK(args->GetString(1, &secondary_pattern)); | 261 CHECK(args->GetString(1, &secondary_pattern)); |
| 254 double type; | 262 std::string type; |
| 255 CHECK(args->GetDouble(2, &type)); | 263 CHECK(args->GetString(2, &type)); |
| 256 std::string value; | 264 std::string value; |
| 257 CHECK(args->GetString(3, &value)); | 265 CHECK(args->GetString(3, &value)); |
| 258 | 266 |
| 259 ContentSettingsType content_type = | 267 ContentSettingsType content_type = |
| 260 static_cast<ContentSettingsType>(static_cast<int>(type)); | 268 static_cast<ContentSettingsType>(static_cast<int>( |
| 269 site_settings::ContentSettingsTypeFromGroupName(type))); |
| 261 ContentSetting setting; | 270 ContentSetting setting; |
| 262 CHECK(content_settings::ContentSettingFromString(value, &setting)); | 271 CHECK(content_settings::ContentSettingFromString(value, &setting)); |
| 263 | 272 |
| 264 HostContentSettingsMap* map = | 273 HostContentSettingsMap* map = |
| 265 HostContentSettingsMapFactory::GetForProfile(profile_); | 274 HostContentSettingsMapFactory::GetForProfile(profile_); |
| 266 map->SetContentSettingCustomScope( | 275 map->SetContentSettingCustomScope( |
| 267 ContentSettingsPattern::FromString(primary_pattern), | 276 ContentSettingsPattern::FromString(primary_pattern), |
| 268 secondary_pattern.empty() ? | 277 secondary_pattern.empty() ? |
| 269 ContentSettingsPattern::Wildcard() : | 278 ContentSettingsPattern::Wildcard() : |
| 270 ContentSettingsPattern::FromString(secondary_pattern), | 279 ContentSettingsPattern::FromString(secondary_pattern), |
| 271 content_type, "", setting); | 280 content_type, "", setting); |
| 272 } | 281 } |
| 273 | 282 |
| 274 void SiteSettingsHandler::HandleIsPatternValid( | 283 void SiteSettingsHandler::HandleIsPatternValid( |
| 275 const base::ListValue* args) { | 284 const base::ListValue* args) { |
| 276 CHECK_EQ(2U, args->GetSize()); | 285 CHECK_EQ(2U, args->GetSize()); |
| 277 const base::Value* callback_id; | 286 const base::Value* callback_id; |
| 278 CHECK(args->Get(0, &callback_id)); | 287 CHECK(args->Get(0, &callback_id)); |
| 279 std::string pattern_string; | 288 std::string pattern_string; |
| 280 CHECK(args->GetString(1, &pattern_string)); | 289 CHECK(args->GetString(1, &pattern_string)); |
| 281 | 290 |
| 282 ContentSettingsPattern pattern = | 291 ContentSettingsPattern pattern = |
| 283 ContentSettingsPattern::FromString(pattern_string); | 292 ContentSettingsPattern::FromString(pattern_string); |
| 284 ResolveJavascriptCallback( | 293 ResolveJavascriptCallback( |
| 285 *callback_id, base::FundamentalValue(pattern.IsValid())); | 294 *callback_id, base::FundamentalValue(pattern.IsValid())); |
| 286 } | 295 } |
| 287 | 296 |
| 288 } // namespace settings | 297 } // namespace settings |
| OLD | NEW |