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

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

Issue 2640033006: Convert AutoBlocker static class to KeyedService. (Closed)
Patch Set: Remove ShouldChangeDismissalToBlock 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" 13 #include "base/time/time.h"
14 #include "base/values.h" 14 #include "base/values.h"
15 #include "chrome/browser/browser_process.h"
15 #include "chrome/browser/content_settings/host_content_settings_map_factory.h" 16 #include "chrome/browser/content_settings/host_content_settings_map_factory.h"
16 #include "chrome/browser/permissions/permission_blacklist_client.h" 17 #include "chrome/browser/permissions/permission_blacklist_client.h"
17 #include "chrome/browser/permissions/permission_util.h" 18 #include "chrome/browser/permissions/permission_util.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 // TODO(meredithl): Migrate to a new and more fitting type, once metrics have
45 // been gathered, and deprecate CONTENT_SETTINGS_TYPE_PROMPT_NO_DECISION_COUNT.
39 std::unique_ptr<base::DictionaryValue> GetOriginDict( 46 std::unique_ptr<base::DictionaryValue> GetOriginDict(
40 HostContentSettingsMap* settings, 47 HostContentSettingsMap* settings,
41 const GURL& origin_url) { 48 const GURL& origin_url) {
42 std::unique_ptr<base::DictionaryValue> dict = 49 std::unique_ptr<base::DictionaryValue> dict =
43 base::DictionaryValue::From(settings->GetWebsiteSetting( 50 base::DictionaryValue::From(settings->GetWebsiteSetting(
44 origin_url, GURL(), CONTENT_SETTINGS_TYPE_PROMPT_NO_DECISION_COUNT, 51 origin_url, GURL(), CONTENT_SETTINGS_TYPE_PROMPT_NO_DECISION_COUNT,
45 std::string(), nullptr)); 52 std::string(), nullptr));
46 if (!dict) 53 if (!dict)
47 return base::MakeUnique<base::DictionaryValue>(); 54 return base::MakeUnique<base::DictionaryValue>();
48 55
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
95 base::DictionaryValue* permission_dict = GetOrCreatePermissionDict( 102 base::DictionaryValue* permission_dict = GetOrCreatePermissionDict(
96 dict.get(), PermissionUtil::GetPermissionString(permission)); 103 dict.get(), PermissionUtil::GetPermissionString(permission));
97 104
98 int current_count = 0; 105 int current_count = 0;
99 permission_dict->GetInteger(key, &current_count); 106 permission_dict->GetInteger(key, &current_count);
100 return current_count; 107 return current_count;
101 } 108 }
102 109
103 } // namespace 110 } // namespace
104 111
112 // PermissionDecisionAutoBlocker -----------------------------------------------
113
105 // static 114 // static
106 const char PermissionDecisionAutoBlocker::kPromptDismissCountKey[] = 115 const char PermissionDecisionAutoBlocker::kPromptDismissCountKey[] =
107 "dismiss_count"; 116 "dismiss_count";
108 117
109 // static 118 // static
110 const char PermissionDecisionAutoBlocker::kPromptIgnoreCountKey[] = 119 const char PermissionDecisionAutoBlocker::kPromptIgnoreCountKey[] =
111 "ignore_count"; 120 "ignore_count";
112 121
113 // static 122 // static
114 const char PermissionDecisionAutoBlocker::kPermissionBlacklistEmbargoKey[] = 123 const char PermissionDecisionAutoBlocker::kPermissionBlacklistEmbargoKey[] =
115 "blacklisting_embargo_days"; 124 "blacklisting_embargo_days";
116 125
117 // static 126 // static
118 const char PermissionDecisionAutoBlocker::kPermissionDismissalEmbargoKey[] = 127 const char PermissionDecisionAutoBlocker::kPermissionDismissalEmbargoKey[] =
119 "dismissal_embargo_days"; 128 "dismissal_embargo_days";
120 129
121 // static 130 PermissionDecisionAutoBlocker::PermissionDecisionAutoBlocker(Profile* profile)
131 : profile_(profile) {}
dominickn 2017/01/20 04:03:47 Initialize safe_browsing_timeout_: move kCheckUrlT
meredithl 2017/01/20 04:21:33 Done.
132
133 PermissionDecisionAutoBlocker::~PermissionDecisionAutoBlocker() {}
134
135 PermissionDecisionAutoBlocker* PermissionDecisionAutoBlocker::GetForProfile(
136 Profile* profile) {
137 return PermissionDecisionAutoBlockerFactory::GetForProfile(profile);
138 }
139
122 void PermissionDecisionAutoBlocker::RemoveCountsByUrl( 140 void PermissionDecisionAutoBlocker::RemoveCountsByUrl(
123 Profile* profile,
124 base::Callback<bool(const GURL& url)> filter) { 141 base::Callback<bool(const GURL& url)> filter) {
125 HostContentSettingsMap* map = 142 HostContentSettingsMap* map =
126 HostContentSettingsMapFactory::GetForProfile(profile); 143 HostContentSettingsMapFactory::GetForProfile(profile_);
127 144
128 std::unique_ptr<ContentSettingsForOneType> settings( 145 std::unique_ptr<ContentSettingsForOneType> settings(
129 new ContentSettingsForOneType); 146 new ContentSettingsForOneType);
130 map->GetSettingsForOneType(CONTENT_SETTINGS_TYPE_PROMPT_NO_DECISION_COUNT, 147 map->GetSettingsForOneType(CONTENT_SETTINGS_TYPE_PROMPT_NO_DECISION_COUNT,
131 std::string(), settings.get()); 148 std::string(), settings.get());
132 149
133 for (const auto& site : *settings) { 150 for (const auto& site : *settings) {
134 GURL origin(site.primary_pattern.ToString()); 151 GURL origin(site.primary_pattern.ToString());
135 152
136 if (origin.is_valid() && filter.Run(origin)) { 153 if (origin.is_valid() && filter.Run(origin)) {
137 map->SetWebsiteSettingDefaultScope( 154 map->SetWebsiteSettingDefaultScope(
138 origin, GURL(), CONTENT_SETTINGS_TYPE_PROMPT_NO_DECISION_COUNT, 155 origin, GURL(), CONTENT_SETTINGS_TYPE_PROMPT_NO_DECISION_COUNT,
139 std::string(), nullptr); 156 std::string(), nullptr);
140 } 157 }
141 } 158 }
142 } 159 }
143 160
144 // static
145 int PermissionDecisionAutoBlocker::GetDismissCount( 161 int PermissionDecisionAutoBlocker::GetDismissCount(
146 const GURL& url, 162 const GURL& url,
147 content::PermissionType permission, 163 content::PermissionType permission) {
148 Profile* profile) { 164 return GetActionCount(url, permission, kPromptDismissCountKey, profile_);
149 return GetActionCount(url, permission, kPromptDismissCountKey, profile);
150 } 165 }
151 166
152 // static
153 int PermissionDecisionAutoBlocker::GetIgnoreCount( 167 int PermissionDecisionAutoBlocker::GetIgnoreCount(
154 const GURL& url, 168 const GURL& url,
155 content::PermissionType permission, 169 content::PermissionType permission) {
156 Profile* profile) { 170 return GetActionCount(url, permission, kPromptIgnoreCountKey, profile_);
157 return GetActionCount(url, permission, kPromptIgnoreCountKey, profile);
158 } 171 }
159 172
160 // static
161 bool PermissionDecisionAutoBlocker::RecordDismissAndEmbargo( 173 bool PermissionDecisionAutoBlocker::RecordDismissAndEmbargo(
162 const GURL& url, 174 const GURL& url,
163 content::PermissionType permission, 175 content::PermissionType permission,
164 Profile* profile,
165 base::Time current_time) { 176 base::Time current_time) {
166 int current_dismissal_count = RecordActionInWebsiteSettings( 177 int current_dismissal_count = RecordActionInWebsiteSettings(
167 url, permission, kPromptDismissCountKey, profile); 178 url, permission, kPromptDismissCountKey, profile_);
179
168 if (base::FeatureList::IsEnabled(features::kBlockPromptsIfDismissedOften) && 180 if (base::FeatureList::IsEnabled(features::kBlockPromptsIfDismissedOften) &&
169 current_dismissal_count >= g_prompt_dismissals_before_block) { 181 current_dismissal_count >= g_prompt_dismissals_before_block) {
170 HostContentSettingsMap* map = 182 PlaceUnderEmbargo(permission, url,
171 HostContentSettingsMapFactory::GetForProfile(profile); 183 HostContentSettingsMapFactory::GetForProfile(profile_),
172 PlaceUnderEmbargo(permission, url, map, current_time, 184 current_time, kPermissionDismissalEmbargoKey);
173 kPermissionDismissalEmbargoKey);
174 return true; 185 return true;
175 } 186 }
176 return false; 187 return false;
177 } 188 }
178 189
179 // static
180 int PermissionDecisionAutoBlocker::RecordIgnore( 190 int PermissionDecisionAutoBlocker::RecordIgnore(
181 const GURL& url, 191 const GURL& url,
182 content::PermissionType permission, 192 content::PermissionType permission) {
183 Profile* profile) {
184 return RecordActionInWebsiteSettings(url, permission, kPromptIgnoreCountKey, 193 return RecordActionInWebsiteSettings(url, permission, kPromptIgnoreCountKey,
185 profile); 194 profile_);
186 } 195 }
187 196
188 // 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() { 197 void PermissionDecisionAutoBlocker::UpdateFromVariations() {
dominickn 2017/01/20 04:03:47 This method can actually stay static - there's no
meredithl 2017/01/20 04:21:33 Done.
204 int prompt_dismissals = -1; 198 int prompt_dismissals = -1;
205 int blacklist_embargo_days = -1; 199 int blacklist_embargo_days = -1;
206 int dismissal_embargo_days = -1; 200 int dismissal_embargo_days = -1;
207 std::string dismissals_value = variations::GetVariationParamValueByFeature( 201 std::string dismissals_value = variations::GetVariationParamValueByFeature(
208 features::kBlockPromptsIfDismissedOften, kPromptDismissCountKey); 202 features::kBlockPromptsIfDismissedOften, kPromptDismissCountKey);
209 std::string blacklist_embargo_value = 203 std::string blacklist_embargo_value =
210 variations::GetVariationParamValueByFeature( 204 variations::GetVariationParamValueByFeature(
211 features::kPermissionsBlacklist, kPermissionBlacklistEmbargoKey); 205 features::kPermissionsBlacklist, kPermissionBlacklistEmbargoKey);
212 std::string dismissal_embargo_value = 206 std::string dismissal_embargo_value =
213 variations::GetVariationParamValueByFeature( 207 variations::GetVariationParamValueByFeature(
214 features::kBlockPromptsIfDismissedOften, 208 features::kBlockPromptsIfDismissedOften,
215 kPermissionDismissalEmbargoKey); 209 kPermissionDismissalEmbargoKey);
216 // If converting the value fails, stick with the current value. 210 // If converting the value fails, stick with the current value.
217 if (base::StringToInt(dismissals_value, &prompt_dismissals) && 211 if (base::StringToInt(dismissals_value, &prompt_dismissals) &&
218 prompt_dismissals > 0) { 212 prompt_dismissals > 0) {
219 g_prompt_dismissals_before_block = prompt_dismissals; 213 g_prompt_dismissals_before_block = prompt_dismissals;
220 } 214 }
221 if (base::StringToInt(blacklist_embargo_value, &blacklist_embargo_days) && 215 if (base::StringToInt(blacklist_embargo_value, &blacklist_embargo_days) &&
222 blacklist_embargo_days > 0) { 216 blacklist_embargo_days > 0) {
223 g_blacklist_embargo_days = blacklist_embargo_days; 217 g_blacklist_embargo_days = blacklist_embargo_days;
224 } 218 }
225 if (base::StringToInt(dismissal_embargo_value, &dismissal_embargo_days) && 219 if (base::StringToInt(dismissal_embargo_value, &dismissal_embargo_days) &&
226 dismissal_embargo_days > 0) { 220 dismissal_embargo_days > 0) {
227 g_dismissal_embargo_days = dismissal_embargo_days; 221 g_dismissal_embargo_days = dismissal_embargo_days;
228 } 222 }
229 } 223 }
230 224
231 // static
232 // TODO(meredithl): Have PermissionDecisionAutoBlocker handle the database 225 // TODO(meredithl): Have PermissionDecisionAutoBlocker handle the database
dominickn 2017/01/20 04:03:47 Remove the TODO!
meredithl 2017/01/20 04:21:33 Done. Ahhh, feelsgoodman.
233 // manager, rather than passing it in. 226 // manager, rather than passing it in.
234 void PermissionDecisionAutoBlocker::UpdateEmbargoedStatus( 227 void PermissionDecisionAutoBlocker::UpdateEmbargoedStatus(
235 scoped_refptr<safe_browsing::SafeBrowsingDatabaseManager> db_manager,
236 content::PermissionType permission, 228 content::PermissionType permission,
237 const GURL& request_origin, 229 const GURL& request_origin,
238 content::WebContents* web_contents, 230 content::WebContents* web_contents,
239 int timeout,
240 Profile* profile,
241 base::Time current_time, 231 base::Time current_time,
242 base::Callback<void(bool)> callback) { 232 base::Callback<void(bool)> callback) {
243 // Check if origin is currently under embargo for the requested permission. 233 // Check if origin is currently under embargo for the requested permission.
244 if (IsUnderEmbargo(permission, profile, request_origin, current_time)) { 234 if (IsUnderEmbargo(permission, request_origin, current_time)) {
245 callback.Run(true /* permission_blocked */); 235 callback.Run(true /* permission_blocked */);
246 return; 236 return;
247 } 237 }
248 238
239 if (!db_manager_) {
240 safe_browsing::SafeBrowsingService* sb_service =
241 g_browser_process->safe_browsing_service();
242 if (sb_service)
243 db_manager_ = sb_service->database_manager();
244 }
245
249 if (base::FeatureList::IsEnabled(features::kPermissionsBlacklist) && 246 if (base::FeatureList::IsEnabled(features::kPermissionsBlacklist) &&
250 db_manager) { 247 db_manager_) {
251 PermissionBlacklistClient::CheckSafeBrowsingBlacklist( 248 PermissionBlacklistClient::CheckSafeBrowsingBlacklist(
252 db_manager, permission, request_origin, web_contents, timeout, 249 db_manager_, permission, request_origin, web_contents,
250 safe_browsing_timeout_,
253 base::Bind(&PermissionDecisionAutoBlocker::CheckSafeBrowsingResult, 251 base::Bind(&PermissionDecisionAutoBlocker::CheckSafeBrowsingResult,
254 permission, profile, request_origin, current_time, 252 permission, profile_, request_origin, current_time,
255 callback)); 253 callback));
256 return; 254 return;
257 } 255 }
258 256
259 callback.Run(false /* permission blocked */); 257 callback.Run(false /* permission blocked */);
260 } 258 }
261 259
262 // static
263 bool PermissionDecisionAutoBlocker::IsUnderEmbargo( 260 bool PermissionDecisionAutoBlocker::IsUnderEmbargo(
264 content::PermissionType permission, 261 content::PermissionType permission,
265 Profile* profile,
266 const GURL& request_origin, 262 const GURL& request_origin,
267 base::Time current_time) { 263 base::Time current_time) {
268 HostContentSettingsMap* map = 264 HostContentSettingsMap* map =
269 HostContentSettingsMapFactory::GetForProfile(profile); 265 HostContentSettingsMapFactory::GetForProfile(profile_);
270 std::unique_ptr<base::DictionaryValue> dict = 266 std::unique_ptr<base::DictionaryValue> dict =
271 GetOriginDict(map, request_origin); 267 GetOriginDict(map, request_origin);
272 base::DictionaryValue* permission_dict = GetOrCreatePermissionDict( 268 base::DictionaryValue* permission_dict = GetOrCreatePermissionDict(
273 dict.get(), PermissionUtil::GetPermissionString(permission)); 269 dict.get(), PermissionUtil::GetPermissionString(permission));
274 double embargo_date = -1; 270 double embargo_date = -1;
275 bool is_under_dismiss_embargo = false; 271 bool is_under_dismiss_embargo = false;
276 bool is_under_blacklist_embargo = false; 272 bool is_under_blacklist_embargo = false;
277 if (base::FeatureList::IsEnabled(features::kPermissionsBlacklist) && 273 if (base::FeatureList::IsEnabled(features::kPermissionsBlacklist) &&
278 permission_dict->GetDouble(kPermissionBlacklistEmbargoKey, 274 permission_dict->GetDouble(kPermissionBlacklistEmbargoKey,
279 &embargo_date)) { 275 &embargo_date)) {
280 if (current_time < 276 if (current_time <
281 base::Time::FromInternalValue(embargo_date) + 277 base::Time::FromInternalValue(embargo_date) +
282 base::TimeDelta::FromDays(g_blacklist_embargo_days)) { 278 base::TimeDelta::FromDays(g_blacklist_embargo_days)) {
283 is_under_blacklist_embargo = true; 279 is_under_blacklist_embargo = true;
284 } 280 }
285 } 281 }
286 282
287 if (base::FeatureList::IsEnabled(features::kBlockPromptsIfDismissedOften) && 283 if (base::FeatureList::IsEnabled(features::kBlockPromptsIfDismissedOften) &&
288 permission_dict->GetDouble(kPermissionDismissalEmbargoKey, 284 permission_dict->GetDouble(kPermissionDismissalEmbargoKey,
289 &embargo_date)) { 285 &embargo_date)) {
290 if (current_time < 286 if (current_time <
291 base::Time::FromInternalValue(embargo_date) + 287 base::Time::FromInternalValue(embargo_date) +
292 base::TimeDelta::FromDays(g_dismissal_embargo_days)) { 288 base::TimeDelta::FromDays(g_dismissal_embargo_days)) {
293 is_under_dismiss_embargo = true; 289 is_under_dismiss_embargo = true;
294 } 290 }
295 } 291 }
296 // If either embargoes is still in effect, return true. 292
293 // If either embargo is still in effect, return true.
297 return is_under_dismiss_embargo || is_under_blacklist_embargo; 294 return is_under_dismiss_embargo || is_under_blacklist_embargo;
298 } 295 }
299 296
300 void PermissionDecisionAutoBlocker::PlaceUnderEmbargo( 297 void PermissionDecisionAutoBlocker::
301 content::PermissionType permission, 298 SetSafeBrowsingDatabaseManagerAndTimeoutForTesting(
302 const GURL& request_origin, 299 scoped_refptr<safe_browsing::SafeBrowsingDatabaseManager> db_manager,
303 HostContentSettingsMap* map, 300 int timeout) {
304 base::Time current_time, 301 db_manager_ = db_manager;
305 const char* key) { 302 safe_browsing_timeout_ = timeout;
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 } 303 }
315 304
316 // static 305 // static
317 void PermissionDecisionAutoBlocker::CheckSafeBrowsingResult( 306 void PermissionDecisionAutoBlocker::CheckSafeBrowsingResult(
318 content::PermissionType permission, 307 content::PermissionType permission,
319 Profile* profile, 308 Profile* profile,
320 const GURL& request_origin, 309 const GURL& request_origin,
321 base::Time current_time, 310 base::Time current_time,
322 base::Callback<void(bool)> callback, 311 base::Callback<void(bool)> callback,
323 bool should_be_embargoed) { 312 bool should_be_embargoed) {
324 if (should_be_embargoed) { 313 if (should_be_embargoed) {
325 // Requesting site is blacklisted for this permission, update the content 314 // Requesting site is blacklisted for this permission, update the content
326 // setting to place it under embargo. 315 // setting to place it under embargo.
327 PlaceUnderEmbargo(permission, request_origin, 316 PlaceUnderEmbargo(permission, request_origin,
328 HostContentSettingsMapFactory::GetForProfile(profile), 317 HostContentSettingsMapFactory::GetForProfile(profile),
329 current_time, kPermissionBlacklistEmbargoKey); 318 current_time, kPermissionBlacklistEmbargoKey);
330 } 319 }
331 callback.Run(should_be_embargoed /* permission blocked */); 320 callback.Run(should_be_embargoed /* permission blocked */);
332 } 321 }
322
323 // static
324 void PermissionDecisionAutoBlocker::PlaceUnderEmbargo(
325 content::PermissionType permission,
326 const GURL& request_origin,
327 HostContentSettingsMap* map,
328 base::Time current_time,
329 const char* key) {
330 std::unique_ptr<base::DictionaryValue> dict =
331 GetOriginDict(map, request_origin);
332 base::DictionaryValue* permission_dict = GetOrCreatePermissionDict(
333 dict.get(), PermissionUtil::GetPermissionString(permission));
334 permission_dict->SetDouble(key, current_time.ToInternalValue());
335 map->SetWebsiteSettingDefaultScope(
336 request_origin, GURL(), CONTENT_SETTINGS_TYPE_PROMPT_NO_DECISION_COUNT,
337 std::string(), std::move(dict));
338 }
339
340 // PermissionDecisionAutoBlockerFactory ----------------------------------------
341
342 // static
343 PermissionDecisionAutoBlocker*
344 PermissionDecisionAutoBlockerFactory::GetForProfile(Profile* profile) {
345 return static_cast<PermissionDecisionAutoBlocker*>(
346 GetInstance()->GetServiceForBrowserContext(profile, true));
347 }
348
349 // static
350 PermissionDecisionAutoBlockerFactory*
351 PermissionDecisionAutoBlockerFactory::GetInstance() {
352 return base::Singleton<PermissionDecisionAutoBlockerFactory>::get();
353 }
354
355 PermissionDecisionAutoBlockerFactory::PermissionDecisionAutoBlockerFactory()
356 : BrowserContextKeyedServiceFactory(
357 "PermissionDecisionAutoBlocker",
358 BrowserContextDependencyManager::GetInstance()) {}
359
360 PermissionDecisionAutoBlockerFactory::~PermissionDecisionAutoBlockerFactory() {}
361
362 KeyedService* PermissionDecisionAutoBlockerFactory::BuildServiceInstanceFor(
363 content::BrowserContext* context) const {
364 Profile* profile = static_cast<Profile*>(context);
365 DCHECK(!profile->IsOffTheRecord());
366 return new PermissionDecisionAutoBlocker(profile);
367 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698