Index: chrome/browser/permissions/permission_decision_auto_blocker_unittest.cc |
diff --git a/chrome/browser/permissions/permission_decision_auto_blocker_unittest.cc b/chrome/browser/permissions/permission_decision_auto_blocker_unittest.cc |
index 849d0b2086349d9d9681f0922895506a4e258408..b0c4b73ced4a36126b46c7ebbea1ef82cbaeb081 100644 |
--- a/chrome/browser/permissions/permission_decision_auto_blocker_unittest.cc |
+++ b/chrome/browser/permissions/permission_decision_auto_blocker_unittest.cc |
@@ -159,6 +159,123 @@ class PermissionDecisionAutoBlockerUnitTest |
bool callback_was_run_; |
}; |
+// Check removing the the embargo for a single permission on a site works, and |
+// that it doesn't interfere with other embargoed permissions or the same |
+// permission embargoed on other sites. |
+TEST_F(PermissionDecisionAutoBlockerUnitTest, RemoveEmbargoByUrl) { |
+ GURL url1("https://www.google.com"); |
+ GURL url2("https://www.example.com"); |
+ |
+ // Record dismissals for location and notifications in |url1|. |
+ EXPECT_FALSE(autoblocker()->RecordDismissAndEmbargo( |
+ url1, CONTENT_SETTINGS_TYPE_GEOLOCATION)); |
+ EXPECT_FALSE(autoblocker()->RecordDismissAndEmbargo( |
+ url1, CONTENT_SETTINGS_TYPE_GEOLOCATION)); |
+ EXPECT_TRUE(autoblocker()->RecordDismissAndEmbargo( |
+ url1, CONTENT_SETTINGS_TYPE_GEOLOCATION)); |
+ EXPECT_FALSE(autoblocker()->RecordDismissAndEmbargo( |
+ url1, CONTENT_SETTINGS_TYPE_NOTIFICATIONS)); |
+ EXPECT_FALSE(autoblocker()->RecordDismissAndEmbargo( |
+ url1, CONTENT_SETTINGS_TYPE_NOTIFICATIONS)); |
+ EXPECT_TRUE(autoblocker()->RecordDismissAndEmbargo( |
+ url1, CONTENT_SETTINGS_TYPE_NOTIFICATIONS)); |
+ // Record dismissals for location in |url2|. |
+ EXPECT_FALSE(autoblocker()->RecordDismissAndEmbargo( |
+ url2, CONTENT_SETTINGS_TYPE_GEOLOCATION)); |
+ EXPECT_FALSE(autoblocker()->RecordDismissAndEmbargo( |
+ url2, CONTENT_SETTINGS_TYPE_GEOLOCATION)); |
+ EXPECT_TRUE(autoblocker()->RecordDismissAndEmbargo( |
+ url2, CONTENT_SETTINGS_TYPE_GEOLOCATION)); |
+ |
+ // Verify all dismissals recorded above resulted in embargo. |
+ PermissionResult result = |
+ autoblocker()->GetEmbargoResult(url1, CONTENT_SETTINGS_TYPE_GEOLOCATION); |
+ EXPECT_EQ(CONTENT_SETTING_BLOCK, result.content_setting); |
+ EXPECT_EQ(PermissionStatusSource::MULTIPLE_DISMISSALS, result.source); |
+ result = autoblocker()->GetEmbargoResult(url1, |
+ CONTENT_SETTINGS_TYPE_NOTIFICATIONS); |
+ EXPECT_EQ(CONTENT_SETTING_BLOCK, result.content_setting); |
+ EXPECT_EQ(PermissionStatusSource::MULTIPLE_DISMISSALS, result.source); |
+ result = |
+ autoblocker()->GetEmbargoResult(url2, CONTENT_SETTINGS_TYPE_GEOLOCATION); |
+ EXPECT_EQ(CONTENT_SETTING_BLOCK, result.content_setting); |
+ EXPECT_EQ(PermissionStatusSource::MULTIPLE_DISMISSALS, result.source); |
+ |
+ // Remove the embargo on notifications. Verify it is no longer under embargo, |
+ // but location still is. |
+ autoblocker()->RemoveEmbargoByUrl(url1, CONTENT_SETTINGS_TYPE_NOTIFICATIONS); |
+ result = |
+ autoblocker()->GetEmbargoResult(url1, CONTENT_SETTINGS_TYPE_GEOLOCATION); |
+ EXPECT_EQ(CONTENT_SETTING_BLOCK, result.content_setting); |
+ EXPECT_EQ(PermissionStatusSource::MULTIPLE_DISMISSALS, result.source); |
+ result = autoblocker()->GetEmbargoResult(url1, |
+ CONTENT_SETTINGS_TYPE_NOTIFICATIONS); |
+ // If not under embargo, GetEmbargoResult() returns a setting of ASK. |
+ EXPECT_EQ(CONTENT_SETTING_ASK, result.content_setting); |
+ EXPECT_EQ(PermissionStatusSource::UNSPECIFIED, result.source); |
+ // Verify |url2|'s embargo is still intact as well. |
+ result = |
+ autoblocker()->GetEmbargoResult(url2, CONTENT_SETTINGS_TYPE_GEOLOCATION); |
+ EXPECT_EQ(CONTENT_SETTING_BLOCK, result.content_setting); |
+ EXPECT_EQ(PermissionStatusSource::MULTIPLE_DISMISSALS, result.source); |
+} |
+ |
+// Test that removing embargo from blacklisted permissions also works. |
+TEST_F(PermissionDecisionAutoBlockerUnitTest, |
+ RemoveEmbargoByUrlForBlacklistedPermission) { |
+ GURL url("https://www.example.com"); |
+ |
+ // Place under embargo and verify. |
+ PlaceUnderBlacklistEmbargo(url, CONTENT_SETTINGS_TYPE_GEOLOCATION); |
+ PermissionResult result = |
+ autoblocker()->GetEmbargoResult(url, CONTENT_SETTINGS_TYPE_GEOLOCATION); |
+ EXPECT_EQ(CONTENT_SETTING_BLOCK, result.content_setting); |
+ EXPECT_EQ(PermissionStatusSource::SAFE_BROWSING_BLACKLIST, result.source); |
+ |
+ // Remove embargo and verify. |
+ autoblocker()->RemoveEmbargoByUrl(url, CONTENT_SETTINGS_TYPE_GEOLOCATION); |
+ result = |
+ autoblocker()->GetEmbargoResult(url, CONTENT_SETTINGS_TYPE_GEOLOCATION); |
+ EXPECT_EQ(CONTENT_SETTING_ASK, result.content_setting); |
+ EXPECT_EQ(PermissionStatusSource::UNSPECIFIED, result.source); |
+} |
+ |
+// Test it still only takes one more dismissal to re-trigger embargo after |
+// removing the embargo status for a site. |
+TEST_F(PermissionDecisionAutoBlockerUnitTest, |
+ DismissAfterRemovingEmbargoByURL) { |
+ GURL url("https://www.example.com"); |
+ |
+ // Record dismissals for location. |
+ EXPECT_FALSE(autoblocker()->RecordDismissAndEmbargo( |
+ url, CONTENT_SETTINGS_TYPE_GEOLOCATION)); |
+ EXPECT_FALSE(autoblocker()->RecordDismissAndEmbargo( |
+ url, CONTENT_SETTINGS_TYPE_GEOLOCATION)); |
+ EXPECT_TRUE(autoblocker()->RecordDismissAndEmbargo( |
+ url, CONTENT_SETTINGS_TYPE_GEOLOCATION)); |
+ |
+ // Verify location is under embargo. |
+ PermissionResult result = |
+ autoblocker()->GetEmbargoResult(url, CONTENT_SETTINGS_TYPE_GEOLOCATION); |
+ EXPECT_EQ(CONTENT_SETTING_BLOCK, result.content_setting); |
+ EXPECT_EQ(PermissionStatusSource::MULTIPLE_DISMISSALS, result.source); |
+ |
+ // Remove embargo and verify this is true. |
+ autoblocker()->RemoveEmbargoByUrl(url, CONTENT_SETTINGS_TYPE_GEOLOCATION); |
+ result = |
+ autoblocker()->GetEmbargoResult(url, CONTENT_SETTINGS_TYPE_GEOLOCATION); |
+ EXPECT_EQ(CONTENT_SETTING_ASK, result.content_setting); |
+ EXPECT_EQ(PermissionStatusSource::UNSPECIFIED, result.source); |
+ |
+ // Record another dismissal and verify location is under embargo again. |
+ autoblocker()->RecordDismissAndEmbargo(url, |
+ CONTENT_SETTINGS_TYPE_GEOLOCATION); |
+ result = |
+ autoblocker()->GetEmbargoResult(url, CONTENT_SETTINGS_TYPE_GEOLOCATION); |
+ EXPECT_EQ(CONTENT_SETTING_BLOCK, result.content_setting); |
+ EXPECT_EQ(PermissionStatusSource::MULTIPLE_DISMISSALS, result.source); |
+} |
+ |
TEST_F(PermissionDecisionAutoBlockerUnitTest, RemoveCountsByUrl) { |
GURL url1("https://www.google.com"); |
GURL url2("https://www.example.com"); |