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

Side by Side Diff: chrome/browser/permissions/permission_decision_auto_blocker.cc

Issue 2651123002: Migrate content setting PROMPT_NO_DECISION_COUNT to PERMISSION_AUTOBLOCKER_DATA (Closed)
Patch Set: Rename pref Created 3 years, 10 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 unified diff | Download patch
OLDNEW
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/permissions/permission_decision_auto_blocker.h" 5 #include "chrome/browser/permissions/permission_decision_auto_blocker.h"
6 6
7 #include <memory> 7 #include <memory>
8 8
9 #include "base/feature_list.h" 9 #include "base/feature_list.h"
10 #include "base/logging.h" 10 #include "base/logging.h"
(...skipping 29 matching lines...) Expand all
40 // The number of days that an origin will stay under embargo for a requested 40 // The number of days that an origin will stay under embargo for a requested
41 // permission due to repeated dismissals. 41 // permission due to repeated dismissals.
42 int g_dismissal_embargo_days = 7; 42 int g_dismissal_embargo_days = 7;
43 43
44 // Maximum time in milliseconds to wait for safe browsing service to check a 44 // Maximum time in milliseconds to wait for safe browsing service to check a
45 // url for blacklisting. After this amount of time, the check will be aborted 45 // url for blacklisting. After this amount of time, the check will be aborted
46 // and the url will be treated as not safe. 46 // and the url will be treated as not safe.
47 // TODO(meredithl): Revisit this once UMA metrics have data about request time. 47 // TODO(meredithl): Revisit this once UMA metrics have data about request time.
48 const int kCheckUrlTimeoutMs = 2000; 48 const int kCheckUrlTimeoutMs = 2000;
49 49
50 // TODO(meredithl): Migrate to a new and more fitting type, once metrics have
51 // been gathered, and deprecate CONTENT_SETTINGS_TYPE_PROMPT_NO_DECISION_COUNT.
52 std::unique_ptr<base::DictionaryValue> GetOriginDict( 50 std::unique_ptr<base::DictionaryValue> GetOriginDict(
53 HostContentSettingsMap* settings, 51 HostContentSettingsMap* settings,
54 const GURL& origin_url) { 52 const GURL& origin_url) {
55 std::unique_ptr<base::DictionaryValue> dict = 53 std::unique_ptr<base::DictionaryValue> dict =
56 base::DictionaryValue::From(settings->GetWebsiteSetting( 54 base::DictionaryValue::From(settings->GetWebsiteSetting(
57 origin_url, GURL(), CONTENT_SETTINGS_TYPE_PROMPT_NO_DECISION_COUNT, 55 origin_url, GURL(), CONTENT_SETTINGS_TYPE_PERMISSION_AUTOBLOCKER_DATA,
58 std::string(), nullptr)); 56 std::string(), nullptr));
59 if (!dict) 57 if (!dict)
60 return base::MakeUnique<base::DictionaryValue>(); 58 return base::MakeUnique<base::DictionaryValue>();
61 59
62 return dict; 60 return dict;
63 } 61 }
64 62
65 base::DictionaryValue* GetOrCreatePermissionDict( 63 base::DictionaryValue* GetOrCreatePermissionDict(
66 base::DictionaryValue* origin_dict, 64 base::DictionaryValue* origin_dict,
67 const std::string& permission) { 65 const std::string& permission) {
(...skipping 17 matching lines...) Expand all
85 std::unique_ptr<base::DictionaryValue> dict = GetOriginDict(map, url); 83 std::unique_ptr<base::DictionaryValue> dict = GetOriginDict(map, url);
86 84
87 base::DictionaryValue* permission_dict = GetOrCreatePermissionDict( 85 base::DictionaryValue* permission_dict = GetOrCreatePermissionDict(
88 dict.get(), PermissionUtil::GetPermissionString(permission)); 86 dict.get(), PermissionUtil::GetPermissionString(permission));
89 87
90 int current_count = 0; 88 int current_count = 0;
91 permission_dict->GetInteger(key, &current_count); 89 permission_dict->GetInteger(key, &current_count);
92 permission_dict->SetInteger(key, ++current_count); 90 permission_dict->SetInteger(key, ++current_count);
93 91
94 map->SetWebsiteSettingDefaultScope( 92 map->SetWebsiteSettingDefaultScope(
95 url, GURL(), CONTENT_SETTINGS_TYPE_PROMPT_NO_DECISION_COUNT, 93 url, GURL(), CONTENT_SETTINGS_TYPE_PERMISSION_AUTOBLOCKER_DATA,
96 std::string(), std::move(dict)); 94 std::string(), std::move(dict));
97 95
98 return current_count; 96 return current_count;
99 } 97 }
100 98
101 int GetActionCount(const GURL& url, 99 int GetActionCount(const GURL& url,
102 content::PermissionType permission, 100 content::PermissionType permission,
103 const char* key, 101 const char* key,
104 Profile* profile) { 102 Profile* profile) {
105 HostContentSettingsMap* map = 103 HostContentSettingsMap* map =
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
186 184
187 PermissionDecisionAutoBlocker::~PermissionDecisionAutoBlocker() {} 185 PermissionDecisionAutoBlocker::~PermissionDecisionAutoBlocker() {}
188 186
189 void PermissionDecisionAutoBlocker::RemoveCountsByUrl( 187 void PermissionDecisionAutoBlocker::RemoveCountsByUrl(
190 base::Callback<bool(const GURL& url)> filter) { 188 base::Callback<bool(const GURL& url)> filter) {
191 HostContentSettingsMap* map = 189 HostContentSettingsMap* map =
192 HostContentSettingsMapFactory::GetForProfile(profile_); 190 HostContentSettingsMapFactory::GetForProfile(profile_);
193 191
194 std::unique_ptr<ContentSettingsForOneType> settings( 192 std::unique_ptr<ContentSettingsForOneType> settings(
195 new ContentSettingsForOneType); 193 new ContentSettingsForOneType);
196 map->GetSettingsForOneType(CONTENT_SETTINGS_TYPE_PROMPT_NO_DECISION_COUNT, 194 map->GetSettingsForOneType(CONTENT_SETTINGS_TYPE_PERMISSION_AUTOBLOCKER_DATA,
197 std::string(), settings.get()); 195 std::string(), settings.get());
198 196
199 for (const auto& site : *settings) { 197 for (const auto& site : *settings) {
200 GURL origin(site.primary_pattern.ToString()); 198 GURL origin(site.primary_pattern.ToString());
201 199
202 if (origin.is_valid() && filter.Run(origin)) { 200 if (origin.is_valid() && filter.Run(origin)) {
203 map->SetWebsiteSettingDefaultScope( 201 map->SetWebsiteSettingDefaultScope(
204 origin, GURL(), CONTENT_SETTINGS_TYPE_PROMPT_NO_DECISION_COUNT, 202 origin, GURL(), CONTENT_SETTINGS_TYPE_PERMISSION_AUTOBLOCKER_DATA,
205 std::string(), nullptr); 203 std::string(), nullptr);
206 } 204 }
207 } 205 }
208 } 206 }
209 207
210 int PermissionDecisionAutoBlocker::GetDismissCount( 208 int PermissionDecisionAutoBlocker::GetDismissCount(
211 const GURL& url, 209 const GURL& url,
212 content::PermissionType permission) { 210 content::PermissionType permission) {
213 return GetActionCount(url, permission, kPromptDismissCountKey, profile_); 211 return GetActionCount(url, permission, kPromptDismissCountKey, profile_);
214 } 212 }
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after
327 base::Time::FromInternalValue(embargo_date) + 325 base::Time::FromInternalValue(embargo_date) +
328 base::TimeDelta::FromDays(g_dismissal_embargo_days)) { 326 base::TimeDelta::FromDays(g_dismissal_embargo_days)) {
329 is_under_dismiss_embargo = true; 327 is_under_dismiss_embargo = true;
330 } 328 }
331 } 329 }
332 330
333 // If either embargo is still in effect, return true. 331 // If either embargo is still in effect, return true.
334 return is_under_dismiss_embargo || is_under_blacklist_embargo; 332 return is_under_dismiss_embargo || is_under_blacklist_embargo;
335 } 333 }
336 334
337 // static
338 void PermissionDecisionAutoBlocker::CheckSafeBrowsingResult( 335 void PermissionDecisionAutoBlocker::CheckSafeBrowsingResult(
339 content::PermissionType permission, 336 content::PermissionType permission,
340 const GURL& request_origin, 337 const GURL& request_origin,
341 base::Callback<void(bool)> callback, 338 base::Callback<void(bool)> callback,
342 bool should_be_embargoed) { 339 bool should_be_embargoed) {
343 if (should_be_embargoed) { 340 if (should_be_embargoed) {
344 // Requesting site is blacklisted for this permission, update the content 341 // Requesting site is blacklisted for this permission, update the content
345 // setting to place it under embargo. 342 // setting to place it under embargo.
346 PlaceUnderEmbargo(permission, request_origin, 343 PlaceUnderEmbargo(permission, request_origin,
347 kPermissionBlacklistEmbargoKey); 344 kPermissionBlacklistEmbargoKey);
348 } 345 }
349 callback.Run(should_be_embargoed /* permission blocked */); 346 callback.Run(should_be_embargoed /* permission blocked */);
350 } 347 }
351 348
352 // static
353 void PermissionDecisionAutoBlocker::PlaceUnderEmbargo( 349 void PermissionDecisionAutoBlocker::PlaceUnderEmbargo(
354 content::PermissionType permission, 350 content::PermissionType permission,
355 const GURL& request_origin, 351 const GURL& request_origin,
356 const char* key) { 352 const char* key) {
357 HostContentSettingsMap* map = 353 HostContentSettingsMap* map =
358 HostContentSettingsMapFactory::GetForProfile(profile_); 354 HostContentSettingsMapFactory::GetForProfile(profile_);
359 std::unique_ptr<base::DictionaryValue> dict = 355 std::unique_ptr<base::DictionaryValue> dict =
360 GetOriginDict(map, request_origin); 356 GetOriginDict(map, request_origin);
361 base::DictionaryValue* permission_dict = GetOrCreatePermissionDict( 357 base::DictionaryValue* permission_dict = GetOrCreatePermissionDict(
362 dict.get(), PermissionUtil::GetPermissionString(permission)); 358 dict.get(), PermissionUtil::GetPermissionString(permission));
363 permission_dict->SetDouble(key, clock_->Now().ToInternalValue()); 359 permission_dict->SetDouble(key, clock_->Now().ToInternalValue());
364 map->SetWebsiteSettingDefaultScope( 360 map->SetWebsiteSettingDefaultScope(
365 request_origin, GURL(), CONTENT_SETTINGS_TYPE_PROMPT_NO_DECISION_COUNT, 361 request_origin, GURL(), CONTENT_SETTINGS_TYPE_PERMISSION_AUTOBLOCKER_DATA,
366 std::string(), std::move(dict)); 362 std::string(), std::move(dict));
367 } 363 }
368 364
369 void PermissionDecisionAutoBlocker:: 365 void PermissionDecisionAutoBlocker::
370 SetSafeBrowsingDatabaseManagerAndTimeoutForTesting( 366 SetSafeBrowsingDatabaseManagerAndTimeoutForTesting(
371 scoped_refptr<safe_browsing::SafeBrowsingDatabaseManager> db_manager, 367 scoped_refptr<safe_browsing::SafeBrowsingDatabaseManager> db_manager,
372 int timeout) { 368 int timeout) {
373 db_manager_ = db_manager; 369 db_manager_ = db_manager;
374 safe_browsing_timeout_ = timeout; 370 safe_browsing_timeout_ = timeout;
375 } 371 }
376 372
377 void PermissionDecisionAutoBlocker::SetClockForTesting( 373 void PermissionDecisionAutoBlocker::SetClockForTesting(
378 std::unique_ptr<base::Clock> clock) { 374 std::unique_ptr<base::Clock> clock) {
379 clock_ = std::move(clock); 375 clock_ = std::move(clock);
380 } 376 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698