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

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

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

Powered by Google App Engine
This is Rietveld 408576698