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

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

Issue 2790473004: Permissions: Clear embargo if user changes an embargoed permission's setting. (Closed)
Patch Set: Review comments. Created 3 years, 8 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/memory/ptr_util.h" 10 #include "base/memory/ptr_util.h"
(...skipping 286 matching lines...) Expand 10 before | Expand all | Expand 10 after
297 return false; 297 return false;
298 } 298 }
299 299
300 int PermissionDecisionAutoBlocker::RecordIgnore( 300 int PermissionDecisionAutoBlocker::RecordIgnore(
301 const GURL& url, 301 const GURL& url,
302 ContentSettingsType permission) { 302 ContentSettingsType permission) {
303 return RecordActionInWebsiteSettings(url, permission, kPromptIgnoreCountKey, 303 return RecordActionInWebsiteSettings(url, permission, kPromptIgnoreCountKey,
304 profile_); 304 profile_);
305 } 305 }
306 306
307 void PermissionDecisionAutoBlocker::RemoveEmbargoByUrl(
308 const GURL& url,
309 ContentSettingsType permission) {
310 if (!PermissionUtil::IsPermission(permission))
311 return;
312
313 // Don't proceed if |permission| was not under embargo for |url|.
314 PermissionResult result = GetEmbargoResult(url, permission);
315 if (result.source != PermissionStatusSource::MULTIPLE_DISMISSALS &&
316 result.source != PermissionStatusSource::SAFE_BROWSING_BLACKLIST) {
317 return;
318 }
319
320 HostContentSettingsMap* map =
321 HostContentSettingsMapFactory::GetForProfile(profile_);
322 std::unique_ptr<base::DictionaryValue> dict = GetOriginDict(map, url);
323 base::DictionaryValue* permission_dict = GetOrCreatePermissionDict(
324 dict.get(), PermissionUtil::GetPermissionString(permission));
325
326 // Deleting non-existent entries will return a false value. Since it should be
327 // impossible for a permission to have been embargoed for two different
328 // reasons at the same time, check that exactly one deletion was successful.
329 const bool dismissal_key_deleted =
330 permission_dict->RemoveWithoutPathExpansion(
331 kPermissionDismissalEmbargoKey, nullptr);
332 const bool blacklist_key_deleted =
333 permission_dict->RemoveWithoutPathExpansion(
334 kPermissionBlacklistEmbargoKey, nullptr);
335 DCHECK(dismissal_key_deleted != blacklist_key_deleted);
336
337 map->SetWebsiteSettingDefaultScope(
338 url, GURL(), CONTENT_SETTINGS_TYPE_PERMISSION_AUTOBLOCKER_DATA,
339 std::string(), std::move(dict));
340 }
341
307 void PermissionDecisionAutoBlocker::RemoveCountsByUrl( 342 void PermissionDecisionAutoBlocker::RemoveCountsByUrl(
308 base::Callback<bool(const GURL& url)> filter) { 343 base::Callback<bool(const GURL& url)> filter) {
309 HostContentSettingsMap* map = 344 HostContentSettingsMap* map =
310 HostContentSettingsMapFactory::GetForProfile(profile_); 345 HostContentSettingsMapFactory::GetForProfile(profile_);
311 346
312 std::unique_ptr<ContentSettingsForOneType> settings( 347 std::unique_ptr<ContentSettingsForOneType> settings(
313 new ContentSettingsForOneType); 348 new ContentSettingsForOneType);
314 map->GetSettingsForOneType(CONTENT_SETTINGS_TYPE_PERMISSION_AUTOBLOCKER_DATA, 349 map->GetSettingsForOneType(CONTENT_SETTINGS_TYPE_PERMISSION_AUTOBLOCKER_DATA,
315 std::string(), settings.get()); 350 std::string(), settings.get());
316 351
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
373 scoped_refptr<safe_browsing::SafeBrowsingDatabaseManager> db_manager, 408 scoped_refptr<safe_browsing::SafeBrowsingDatabaseManager> db_manager,
374 int timeout) { 409 int timeout) {
375 db_manager_ = db_manager; 410 db_manager_ = db_manager;
376 safe_browsing_timeout_ = timeout; 411 safe_browsing_timeout_ = timeout;
377 } 412 }
378 413
379 void PermissionDecisionAutoBlocker::SetClockForTesting( 414 void PermissionDecisionAutoBlocker::SetClockForTesting(
380 std::unique_ptr<base::Clock> clock) { 415 std::unique_ptr<base::Clock> clock) {
381 clock_ = std::move(clock); 416 clock_ = std::move(clock);
382 } 417 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698