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

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

Issue 2640033006: Convert AutoBlocker static class to KeyedService. (Closed)
Patch Set: Git surgery. Created 3 years, 11 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"
11 #include "base/memory/ptr_util.h" 11 #include "base/memory/ptr_util.h"
12 #include "base/strings/string_number_conversions.h" 12 #include "base/strings/string_number_conversions.h"
13 #include "base/time/time.h"
14 #include "base/values.h" 13 #include "base/values.h"
14 #include "chrome/browser/browser_process.h"
15 #include "chrome/browser/content_settings/host_content_settings_map_factory.h" 15 #include "chrome/browser/content_settings/host_content_settings_map_factory.h"
16 #include "chrome/browser/permissions/permission_blacklist_client.h" 16 #include "chrome/browser/permissions/permission_blacklist_client.h"
17 #include "chrome/browser/permissions/permission_util.h" 17 #include "chrome/browser/permissions/permission_util.h"
18 #include "chrome/browser/profiles/incognito_helpers.h"
19 #include "chrome/browser/profiles/profile.h"
20 #include "chrome/browser/safe_browsing/safe_browsing_service.h"
18 #include "chrome/common/chrome_features.h" 21 #include "chrome/common/chrome_features.h"
19 #include "components/content_settings/core/browser/host_content_settings_map.h" 22 #include "components/content_settings/core/browser/host_content_settings_map.h"
23 #include "components/keyed_service/content/browser_context_dependency_manager.h"
24 #include "components/safe_browsing_db/database_manager.h"
20 #include "components/variations/variations_associated_data.h" 25 #include "components/variations/variations_associated_data.h"
21 #include "content/public/browser/permission_type.h" 26 #include "content/public/browser/permission_type.h"
22 #include "content/public/browser/web_contents.h" 27 #include "content/public/browser/web_contents.h"
23 #include "url/gurl.h" 28 #include "url/gurl.h"
24 29
25 namespace { 30 namespace {
26 31
27 // The number of times that users may explicitly dismiss a permission prompt 32 // The number of times that users may explicitly dismiss a permission prompt
28 // from an origin before it is automatically blocked. 33 // from an origin before it is automatically blocked.
29 int g_prompt_dismissals_before_block = 3; 34 int g_prompt_dismissals_before_block = 3;
30 35
31 // The number of days that an origin will stay under embargo for a requested 36 // The number of days that an origin will stay under embargo for a requested
32 // permission due to blacklisting. 37 // permission due to blacklisting.
33 int g_blacklist_embargo_days = 7; 38 int g_blacklist_embargo_days = 7;
34 39
35 // 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
36 // permission due to repeated dismissals. 41 // permission due to repeated dismissals.
37 int g_dismissal_embargo_days = 7; 42 int g_dismissal_embargo_days = 7;
38 43
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
46 // and the url will be treated as not safe.
47 // TODO(meredithl): Revisit this once UMA metrics have data about request time.
48 const int kCheckUrlTimeoutMs = 2000;
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.
39 std::unique_ptr<base::DictionaryValue> GetOriginDict( 52 std::unique_ptr<base::DictionaryValue> GetOriginDict(
40 HostContentSettingsMap* settings, 53 HostContentSettingsMap* settings,
41 const GURL& origin_url) { 54 const GURL& origin_url) {
42 std::unique_ptr<base::DictionaryValue> dict = 55 std::unique_ptr<base::DictionaryValue> dict =
43 base::DictionaryValue::From(settings->GetWebsiteSetting( 56 base::DictionaryValue::From(settings->GetWebsiteSetting(
44 origin_url, GURL(), CONTENT_SETTINGS_TYPE_PROMPT_NO_DECISION_COUNT, 57 origin_url, GURL(), CONTENT_SETTINGS_TYPE_PROMPT_NO_DECISION_COUNT,
45 std::string(), nullptr)); 58 std::string(), nullptr));
46 if (!dict) 59 if (!dict)
47 return base::MakeUnique<base::DictionaryValue>(); 60 return base::MakeUnique<base::DictionaryValue>();
48 61
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
95 base::DictionaryValue* permission_dict = GetOrCreatePermissionDict( 108 base::DictionaryValue* permission_dict = GetOrCreatePermissionDict(
96 dict.get(), PermissionUtil::GetPermissionString(permission)); 109 dict.get(), PermissionUtil::GetPermissionString(permission));
97 110
98 int current_count = 0; 111 int current_count = 0;
99 permission_dict->GetInteger(key, &current_count); 112 permission_dict->GetInteger(key, &current_count);
100 return current_count; 113 return current_count;
101 } 114 }
102 115
103 } // namespace 116 } // namespace
104 117
118 // PermissionDecisionAutoBlocker::Factory --------------------------------------
119
120 // static
121 PermissionDecisionAutoBlocker*
122 PermissionDecisionAutoBlocker::Factory::GetForProfile(Profile* profile) {
123 return static_cast<PermissionDecisionAutoBlocker*>(
124 GetInstance()->GetServiceForBrowserContext(profile, true));
125 }
126
127 // static
128 PermissionDecisionAutoBlocker::Factory*
129 PermissionDecisionAutoBlocker::Factory::GetInstance() {
130 return base::Singleton<PermissionDecisionAutoBlocker::Factory>::get();
131 }
132
133 PermissionDecisionAutoBlocker::Factory::Factory()
134 : BrowserContextKeyedServiceFactory(
135 "PermissionDecisionAutoBlocker",
136 BrowserContextDependencyManager::GetInstance()) {}
137
138 PermissionDecisionAutoBlocker::Factory::~Factory() {}
139
140 KeyedService* PermissionDecisionAutoBlocker::Factory::BuildServiceInstanceFor(
141 content::BrowserContext* context) const {
142 Profile* profile = static_cast<Profile*>(context);
143 return new PermissionDecisionAutoBlocker(profile);
144 }
145
146 content::BrowserContext*
147 PermissionDecisionAutoBlocker::Factory::GetBrowserContextToUse(
148 content::BrowserContext* context) const {
149 return chrome::GetBrowserContextOwnInstanceInIncognito(context);
150 }
151
152 // PermissionDecisionAutoBlocker -----------------------------------------------
153
105 // static 154 // static
106 const char PermissionDecisionAutoBlocker::kPromptDismissCountKey[] = 155 const char PermissionDecisionAutoBlocker::kPromptDismissCountKey[] =
107 "dismiss_count"; 156 "dismiss_count";
108 157
109 // static 158 // static
110 const char PermissionDecisionAutoBlocker::kPromptIgnoreCountKey[] = 159 const char PermissionDecisionAutoBlocker::kPromptIgnoreCountKey[] =
111 "ignore_count"; 160 "ignore_count";
112 161
113 // static 162 // static
114 const char PermissionDecisionAutoBlocker::kPermissionBlacklistEmbargoKey[] = 163 const char PermissionDecisionAutoBlocker::kPermissionBlacklistEmbargoKey[] =
115 "blacklisting_embargo_days"; 164 "blacklisting_embargo_days";
116 165
117 // static 166 // static
118 const char PermissionDecisionAutoBlocker::kPermissionDismissalEmbargoKey[] = 167 const char PermissionDecisionAutoBlocker::kPermissionDismissalEmbargoKey[] =
119 "dismissal_embargo_days"; 168 "dismissal_embargo_days";
120 169
121 // static 170 // static
171 PermissionDecisionAutoBlocker* PermissionDecisionAutoBlocker::GetForProfile(
172 Profile* profile) {
173 return PermissionDecisionAutoBlocker::Factory::GetForProfile(profile);
174 }
175
176 PermissionDecisionAutoBlocker::PermissionDecisionAutoBlocker(Profile* profile)
177 : profile_(profile),
178 db_manager_(nullptr),
179 safe_browsing_timeout_(kCheckUrlTimeoutMs),
180 clock_(new base::DefaultClock()) {
181 safe_browsing::SafeBrowsingService* sb_service =
182 g_browser_process->safe_browsing_service();
183 if (sb_service)
184 db_manager_ = sb_service->database_manager();
185 }
186
187 PermissionDecisionAutoBlocker::~PermissionDecisionAutoBlocker() {}
188
122 void PermissionDecisionAutoBlocker::RemoveCountsByUrl( 189 void PermissionDecisionAutoBlocker::RemoveCountsByUrl(
123 Profile* profile,
124 base::Callback<bool(const GURL& url)> filter) { 190 base::Callback<bool(const GURL& url)> filter) {
125 HostContentSettingsMap* map = 191 HostContentSettingsMap* map =
126 HostContentSettingsMapFactory::GetForProfile(profile); 192 HostContentSettingsMapFactory::GetForProfile(profile_);
127 193
128 std::unique_ptr<ContentSettingsForOneType> settings( 194 std::unique_ptr<ContentSettingsForOneType> settings(
129 new ContentSettingsForOneType); 195 new ContentSettingsForOneType);
130 map->GetSettingsForOneType(CONTENT_SETTINGS_TYPE_PROMPT_NO_DECISION_COUNT, 196 map->GetSettingsForOneType(CONTENT_SETTINGS_TYPE_PROMPT_NO_DECISION_COUNT,
131 std::string(), settings.get()); 197 std::string(), settings.get());
132 198
133 for (const auto& site : *settings) { 199 for (const auto& site : *settings) {
134 GURL origin(site.primary_pattern.ToString()); 200 GURL origin(site.primary_pattern.ToString());
135 201
136 if (origin.is_valid() && filter.Run(origin)) { 202 if (origin.is_valid() && filter.Run(origin)) {
137 map->SetWebsiteSettingDefaultScope( 203 map->SetWebsiteSettingDefaultScope(
138 origin, GURL(), CONTENT_SETTINGS_TYPE_PROMPT_NO_DECISION_COUNT, 204 origin, GURL(), CONTENT_SETTINGS_TYPE_PROMPT_NO_DECISION_COUNT,
139 std::string(), nullptr); 205 std::string(), nullptr);
140 } 206 }
141 } 207 }
142 } 208 }
143 209
144 // static
145 int PermissionDecisionAutoBlocker::GetDismissCount( 210 int PermissionDecisionAutoBlocker::GetDismissCount(
146 const GURL& url, 211 const GURL& url,
147 content::PermissionType permission, 212 content::PermissionType permission) {
148 Profile* profile) { 213 return GetActionCount(url, permission, kPromptDismissCountKey, profile_);
149 return GetActionCount(url, permission, kPromptDismissCountKey, profile);
150 } 214 }
151 215
152 // static
153 int PermissionDecisionAutoBlocker::GetIgnoreCount( 216 int PermissionDecisionAutoBlocker::GetIgnoreCount(
154 const GURL& url, 217 const GURL& url,
155 content::PermissionType permission, 218 content::PermissionType permission) {
156 Profile* profile) { 219 return GetActionCount(url, permission, kPromptIgnoreCountKey, profile_);
157 return GetActionCount(url, permission, kPromptIgnoreCountKey, profile);
158 } 220 }
159 221
160 // static
161 bool PermissionDecisionAutoBlocker::RecordDismissAndEmbargo( 222 bool PermissionDecisionAutoBlocker::RecordDismissAndEmbargo(
162 const GURL& url, 223 const GURL& url,
163 content::PermissionType permission, 224 content::PermissionType permission) {
164 Profile* profile,
165 base::Time current_time) {
166 int current_dismissal_count = RecordActionInWebsiteSettings( 225 int current_dismissal_count = RecordActionInWebsiteSettings(
167 url, permission, kPromptDismissCountKey, profile); 226 url, permission, kPromptDismissCountKey, profile_);
227
168 if (base::FeatureList::IsEnabled(features::kBlockPromptsIfDismissedOften) && 228 if (base::FeatureList::IsEnabled(features::kBlockPromptsIfDismissedOften) &&
169 current_dismissal_count >= g_prompt_dismissals_before_block) { 229 current_dismissal_count >= g_prompt_dismissals_before_block) {
170 HostContentSettingsMap* map = 230 PlaceUnderEmbargo(permission, url, kPermissionDismissalEmbargoKey);
171 HostContentSettingsMapFactory::GetForProfile(profile);
172 PlaceUnderEmbargo(permission, url, map, current_time,
173 kPermissionDismissalEmbargoKey);
174 return true; 231 return true;
175 } 232 }
176 return false; 233 return false;
177 } 234 }
178 235
179 // static
180 int PermissionDecisionAutoBlocker::RecordIgnore( 236 int PermissionDecisionAutoBlocker::RecordIgnore(
181 const GURL& url, 237 const GURL& url,
182 content::PermissionType permission, 238 content::PermissionType permission) {
183 Profile* profile) {
184 return RecordActionInWebsiteSettings(url, permission, kPromptIgnoreCountKey, 239 return RecordActionInWebsiteSettings(url, permission, kPromptIgnoreCountKey,
185 profile); 240 profile_);
186 } 241 }
187 242
188 // static 243 // static
189 bool PermissionDecisionAutoBlocker::ShouldChangeDismissalToBlock(
190 const GURL& url,
191 content::PermissionType permission,
192 Profile* profile) {
193 int current_dismissal_count =
194 RecordDismissAndEmbargo(url, permission, profile, base::Time::Now());
195
196 if (!base::FeatureList::IsEnabled(features::kBlockPromptsIfDismissedOften))
197 return false;
198
199 return current_dismissal_count >= g_prompt_dismissals_before_block;
200 }
201
202 // static
203 void PermissionDecisionAutoBlocker::UpdateFromVariations() { 244 void PermissionDecisionAutoBlocker::UpdateFromVariations() {
204 int prompt_dismissals = -1; 245 int prompt_dismissals = -1;
205 int blacklist_embargo_days = -1; 246 int blacklist_embargo_days = -1;
206 int dismissal_embargo_days = -1; 247 int dismissal_embargo_days = -1;
207 std::string dismissals_value = variations::GetVariationParamValueByFeature( 248 std::string dismissals_value = variations::GetVariationParamValueByFeature(
208 features::kBlockPromptsIfDismissedOften, kPromptDismissCountKey); 249 features::kBlockPromptsIfDismissedOften, kPromptDismissCountKey);
209 std::string blacklist_embargo_value = 250 std::string blacklist_embargo_value =
210 variations::GetVariationParamValueByFeature( 251 variations::GetVariationParamValueByFeature(
211 features::kPermissionsBlacklist, kPermissionBlacklistEmbargoKey); 252 features::kPermissionsBlacklist, kPermissionBlacklistEmbargoKey);
212 std::string dismissal_embargo_value = 253 std::string dismissal_embargo_value =
213 variations::GetVariationParamValueByFeature( 254 variations::GetVariationParamValueByFeature(
214 features::kBlockPromptsIfDismissedOften, 255 features::kBlockPromptsIfDismissedOften,
215 kPermissionDismissalEmbargoKey); 256 kPermissionDismissalEmbargoKey);
216 // If converting the value fails, stick with the current value. 257 // If converting the value fails, stick with the current value.
217 if (base::StringToInt(dismissals_value, &prompt_dismissals) && 258 if (base::StringToInt(dismissals_value, &prompt_dismissals) &&
218 prompt_dismissals > 0) { 259 prompt_dismissals > 0) {
219 g_prompt_dismissals_before_block = prompt_dismissals; 260 g_prompt_dismissals_before_block = prompt_dismissals;
220 } 261 }
221 if (base::StringToInt(blacklist_embargo_value, &blacklist_embargo_days) && 262 if (base::StringToInt(blacklist_embargo_value, &blacklist_embargo_days) &&
222 blacklist_embargo_days > 0) { 263 blacklist_embargo_days > 0) {
223 g_blacklist_embargo_days = blacklist_embargo_days; 264 g_blacklist_embargo_days = blacklist_embargo_days;
224 } 265 }
225 if (base::StringToInt(dismissal_embargo_value, &dismissal_embargo_days) && 266 if (base::StringToInt(dismissal_embargo_value, &dismissal_embargo_days) &&
226 dismissal_embargo_days > 0) { 267 dismissal_embargo_days > 0) {
227 g_dismissal_embargo_days = dismissal_embargo_days; 268 g_dismissal_embargo_days = dismissal_embargo_days;
228 } 269 }
229 } 270 }
230 271
231 // static
232 // TODO(meredithl): Have PermissionDecisionAutoBlocker handle the database
233 // manager, rather than passing it in.
234 void PermissionDecisionAutoBlocker::UpdateEmbargoedStatus( 272 void PermissionDecisionAutoBlocker::UpdateEmbargoedStatus(
235 scoped_refptr<safe_browsing::SafeBrowsingDatabaseManager> db_manager,
236 content::PermissionType permission, 273 content::PermissionType permission,
237 const GURL& request_origin, 274 const GURL& request_origin,
238 content::WebContents* web_contents, 275 content::WebContents* web_contents,
239 int timeout,
240 Profile* profile,
241 base::Time current_time,
242 base::Callback<void(bool)> callback) { 276 base::Callback<void(bool)> callback) {
243 // Check if origin is currently under embargo for the requested permission. 277 // Check if origin is currently under embargo for the requested permission.
244 if (IsUnderEmbargo(permission, profile, request_origin, current_time)) { 278 if (IsUnderEmbargo(permission, request_origin)) {
245 callback.Run(true /* permission_blocked */); 279 callback.Run(true /* permission_blocked */);
246 return; 280 return;
247 } 281 }
248 282
249 if (base::FeatureList::IsEnabled(features::kPermissionsBlacklist) && 283 if (base::FeatureList::IsEnabled(features::kPermissionsBlacklist) &&
250 db_manager) { 284 db_manager_) {
285 // The CheckSafeBrowsingResult callback won't be called if the profile is
286 // destroyed before a result is received. In that case this object will have
287 // been destroyed by that point.
251 PermissionBlacklistClient::CheckSafeBrowsingBlacklist( 288 PermissionBlacklistClient::CheckSafeBrowsingBlacklist(
252 db_manager, permission, request_origin, web_contents, timeout, 289 db_manager_, permission, request_origin, web_contents,
290 safe_browsing_timeout_,
253 base::Bind(&PermissionDecisionAutoBlocker::CheckSafeBrowsingResult, 291 base::Bind(&PermissionDecisionAutoBlocker::CheckSafeBrowsingResult,
254 permission, profile, request_origin, current_time, 292 base::Unretained(this), permission, request_origin,
255 callback)); 293 callback));
256 return; 294 return;
257 } 295 }
258 296
259 callback.Run(false /* permission blocked */); 297 callback.Run(false /* permission blocked */);
260 } 298 }
261 299
262 // static
263 bool PermissionDecisionAutoBlocker::IsUnderEmbargo( 300 bool PermissionDecisionAutoBlocker::IsUnderEmbargo(
264 content::PermissionType permission, 301 content::PermissionType permission,
265 Profile* profile, 302 const GURL& request_origin) {
266 const GURL& request_origin,
267 base::Time current_time) {
268 HostContentSettingsMap* map = 303 HostContentSettingsMap* map =
269 HostContentSettingsMapFactory::GetForProfile(profile); 304 HostContentSettingsMapFactory::GetForProfile(profile_);
270 std::unique_ptr<base::DictionaryValue> dict = 305 std::unique_ptr<base::DictionaryValue> dict =
271 GetOriginDict(map, request_origin); 306 GetOriginDict(map, request_origin);
272 base::DictionaryValue* permission_dict = GetOrCreatePermissionDict( 307 base::DictionaryValue* permission_dict = GetOrCreatePermissionDict(
273 dict.get(), PermissionUtil::GetPermissionString(permission)); 308 dict.get(), PermissionUtil::GetPermissionString(permission));
274 double embargo_date = -1; 309 double embargo_date = -1;
275 bool is_under_dismiss_embargo = false; 310 bool is_under_dismiss_embargo = false;
276 bool is_under_blacklist_embargo = false; 311 bool is_under_blacklist_embargo = false;
312 base::Time current_time = clock_->Now();
277 if (base::FeatureList::IsEnabled(features::kPermissionsBlacklist) && 313 if (base::FeatureList::IsEnabled(features::kPermissionsBlacklist) &&
278 permission_dict->GetDouble(kPermissionBlacklistEmbargoKey, 314 permission_dict->GetDouble(kPermissionBlacklistEmbargoKey,
279 &embargo_date)) { 315 &embargo_date)) {
280 if (current_time < 316 if (current_time <
281 base::Time::FromInternalValue(embargo_date) + 317 base::Time::FromInternalValue(embargo_date) +
282 base::TimeDelta::FromDays(g_blacklist_embargo_days)) { 318 base::TimeDelta::FromDays(g_blacklist_embargo_days)) {
283 is_under_blacklist_embargo = true; 319 is_under_blacklist_embargo = true;
284 } 320 }
285 } 321 }
286 322
287 if (base::FeatureList::IsEnabled(features::kBlockPromptsIfDismissedOften) && 323 if (base::FeatureList::IsEnabled(features::kBlockPromptsIfDismissedOften) &&
288 permission_dict->GetDouble(kPermissionDismissalEmbargoKey, 324 permission_dict->GetDouble(kPermissionDismissalEmbargoKey,
289 &embargo_date)) { 325 &embargo_date)) {
290 if (current_time < 326 if (current_time <
291 base::Time::FromInternalValue(embargo_date) + 327 base::Time::FromInternalValue(embargo_date) +
292 base::TimeDelta::FromDays(g_dismissal_embargo_days)) { 328 base::TimeDelta::FromDays(g_dismissal_embargo_days)) {
293 is_under_dismiss_embargo = true; 329 is_under_dismiss_embargo = true;
294 } 330 }
295 } 331 }
296 // If either embargoes is still in effect, return true. 332
333 // If either embargo is still in effect, return true.
297 return is_under_dismiss_embargo || is_under_blacklist_embargo; 334 return is_under_dismiss_embargo || is_under_blacklist_embargo;
298 } 335 }
299 336
300 void PermissionDecisionAutoBlocker::PlaceUnderEmbargo(
301 content::PermissionType permission,
302 const GURL& request_origin,
303 HostContentSettingsMap* map,
304 base::Time current_time,
305 const char* key) {
306 std::unique_ptr<base::DictionaryValue> dict =
307 GetOriginDict(map, request_origin);
308 base::DictionaryValue* permission_dict = GetOrCreatePermissionDict(
309 dict.get(), PermissionUtil::GetPermissionString(permission));
310 permission_dict->SetDouble(key, current_time.ToInternalValue());
311 map->SetWebsiteSettingDefaultScope(
312 request_origin, GURL(), CONTENT_SETTINGS_TYPE_PROMPT_NO_DECISION_COUNT,
313 std::string(), std::move(dict));
314 }
315
316 // static 337 // static
317 void PermissionDecisionAutoBlocker::CheckSafeBrowsingResult( 338 void PermissionDecisionAutoBlocker::CheckSafeBrowsingResult(
318 content::PermissionType permission, 339 content::PermissionType permission,
319 Profile* profile,
320 const GURL& request_origin, 340 const GURL& request_origin,
321 base::Time current_time,
322 base::Callback<void(bool)> callback, 341 base::Callback<void(bool)> callback,
323 bool should_be_embargoed) { 342 bool should_be_embargoed) {
324 if (should_be_embargoed) { 343 if (should_be_embargoed) {
325 // Requesting site is blacklisted for this permission, update the content 344 // Requesting site is blacklisted for this permission, update the content
326 // setting to place it under embargo. 345 // setting to place it under embargo.
327 PlaceUnderEmbargo(permission, request_origin, 346 PlaceUnderEmbargo(permission, request_origin,
328 HostContentSettingsMapFactory::GetForProfile(profile), 347 kPermissionBlacklistEmbargoKey);
329 current_time, kPermissionBlacklistEmbargoKey);
330 } 348 }
331 callback.Run(should_be_embargoed /* permission blocked */); 349 callback.Run(should_be_embargoed /* permission blocked */);
332 } 350 }
351
352 // static
353 void PermissionDecisionAutoBlocker::PlaceUnderEmbargo(
354 content::PermissionType permission,
355 const GURL& request_origin,
356 const char* key) {
357 HostContentSettingsMap* map =
358 HostContentSettingsMapFactory::GetForProfile(profile_);
359 std::unique_ptr<base::DictionaryValue> dict =
360 GetOriginDict(map, request_origin);
361 base::DictionaryValue* permission_dict = GetOrCreatePermissionDict(
362 dict.get(), PermissionUtil::GetPermissionString(permission));
363 permission_dict->SetDouble(key, clock_->Now().ToInternalValue());
364 map->SetWebsiteSettingDefaultScope(
365 request_origin, GURL(), CONTENT_SETTINGS_TYPE_PROMPT_NO_DECISION_COUNT,
366 std::string(), std::move(dict));
367 }
368
369 void PermissionDecisionAutoBlocker::
370 SetSafeBrowsingDatabaseManagerAndTimeoutForTesting(
371 scoped_refptr<safe_browsing::SafeBrowsingDatabaseManager> db_manager,
372 int timeout) {
373 db_manager_ = db_manager;
374 safe_browsing_timeout_ = timeout;
375 }
376
377 void PermissionDecisionAutoBlocker::SetClockForTesting(
378 std::unique_ptr<base::Clock> clock) {
379 clock_ = std::move(clock);
380 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698