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 04b412c312322369509e8e1df5b85c8b52bd7e98..061a905ef54f1cc7fa68f21296235c8752f601de 100644 |
--- a/chrome/browser/permissions/permission_decision_auto_blocker_unittest.cc |
+++ b/chrome/browser/permissions/permission_decision_auto_blocker_unittest.cc |
@@ -8,9 +8,11 @@ |
#include "base/bind.h" |
#include "base/run_loop.h" |
+#include "base/test/histogram_tester.h" |
#include "base/test/scoped_feature_list.h" |
#include "base/test/simple_test_clock.h" |
#include "chrome/browser/content_settings/host_content_settings_map_factory.h" |
+#include "chrome/browser/permissions/permission_uma_util.h" |
#include "chrome/browser/permissions/permission_util.h" |
#include "chrome/common/chrome_features.h" |
#include "chrome/test/base/chrome_render_view_host_test_harness.h" |
@@ -265,6 +267,7 @@ TEST_F(PermissionDecisionAutoBlockerUnitTest, RemoveCountsByUrl) { |
// Test that an origin that has been blacklisted for a permission is embargoed. |
TEST_F(PermissionDecisionAutoBlockerUnitTest, TestUpdateEmbargoBlacklist) { |
GURL url("https://www.google.com"); |
+ base::HistogramTester histograms; |
scoped_refptr<MockSafeBrowsingDatabaseManager> db_manager = |
new MockSafeBrowsingDatabaseManager(true /* perform_callback */, |
@@ -277,6 +280,33 @@ TEST_F(PermissionDecisionAutoBlockerUnitTest, TestUpdateEmbargoBlacklist) { |
UpdateEmbargoedStatus(content::PermissionType::GEOLOCATION, url); |
EXPECT_TRUE(callback_was_run()); |
EXPECT_TRUE(last_embargoed_status()); |
+ histograms.ExpectUniqueSample("Permissions.AutoBlocker.SafeBrowsingResponse", |
+ SafeBrowsingResponse::BLACKLISTED, 1); |
+ histograms.ExpectTotalCount( |
+ "Permissions.AutoBlocker.SafeBrowsingResponseTime", 1); |
+} |
+ |
+// Test that an origin that is blacklisted for a permission will not be placed |
+// under embargoed for another. |
+TEST_F(PermissionDecisionAutoBlockerUnitTest, TestRequestNotBlacklisted) { |
+ GURL url("https://www.google.com"); |
+ clock()->SetNow(base::Time::Now()); |
+ base::HistogramTester histograms; |
+ |
+ scoped_refptr<MockSafeBrowsingDatabaseManager> db_manager = |
+ new MockSafeBrowsingDatabaseManager(true /* perform_callback */, |
+ true /* enabled */); |
+ std::set<std::string> blacklisted_permissions{"GEOLOCATION"}; |
+ db_manager->BlacklistUrlPermissions(url, blacklisted_permissions); |
+ SetSafeBrowsingDatabaseManagerAndTimeoutForTesting(db_manager, |
+ 0 /* timeout in ms */); |
+ |
+ UpdateEmbargoedStatus(content::PermissionType::NOTIFICATIONS, url); |
+ EXPECT_FALSE(last_embargoed_status()); |
+ histograms.ExpectUniqueSample("Permissions.AutoBlocker.SafeBrowsingResponse", |
+ SafeBrowsingResponse::NOT_BLACKLISTED, 1); |
+ histograms.ExpectTotalCount( |
+ "Permissions.AutoBlocker.SafeBrowsingResponseTime", 1); |
} |
// Check that IsUnderEmbargo returns the correct value when the embargo is set |
@@ -325,6 +355,7 @@ TEST_F(PermissionDecisionAutoBlockerUnitTest, CheckEmbargoStatus) { |
TEST_F(PermissionDecisionAutoBlockerUnitTest, TestDismissEmbargoBackoff) { |
GURL url("https://www.google.com"); |
clock()->SetNow(base::Time::Now()); |
+ base::HistogramTester histograms; |
// Record some dismisses. |
EXPECT_FALSE(autoblocker()->RecordDismissAndEmbargo( |
@@ -342,6 +373,10 @@ TEST_F(PermissionDecisionAutoBlockerUnitTest, TestDismissEmbargoBackoff) { |
EXPECT_TRUE( |
autoblocker()->IsUnderEmbargo(content::PermissionType::GEOLOCATION, url)); |
+ histograms.ExpectTotalCount("Permissions.AutoBlocker.SafeBrowsingResponse", |
+ 0); |
+ histograms.ExpectTotalCount( |
+ "Permissions.AutoBlocker.SafeBrowsingResponseTime", 0); |
// Accelerate time forward, check that the embargo status is lifted and the |
// request won't be automatically blocked. |
clock()->Advance(base::TimeDelta::FromDays(8)); |
@@ -359,6 +394,16 @@ TEST_F(PermissionDecisionAutoBlockerUnitTest, TestDismissEmbargoBackoff) { |
clock()->Advance(base::TimeDelta::FromDays(8)); |
EXPECT_FALSE( |
autoblocker()->IsUnderEmbargo(content::PermissionType::GEOLOCATION, url)); |
+ |
+ // Record another dismiss, subsequent requests should be autoblocked again. |
+ EXPECT_TRUE(autoblocker()->RecordDismissAndEmbargo( |
+ url, content::PermissionType::GEOLOCATION)); |
+ EXPECT_TRUE( |
+ autoblocker()->IsUnderEmbargo(content::PermissionType::GEOLOCATION, url)); |
+ histograms.ExpectTotalCount("Permissions.AutoBlocker.SafeBrowsingResponse", |
+ 0); |
+ histograms.ExpectTotalCount( |
+ "Permissions.AutoBlocker.SafeBrowsingResponseTime", 0); |
} |
// Test the logic for a combination of blacklisting and dismissal embargo. |
@@ -390,6 +435,7 @@ TEST_F(PermissionDecisionAutoBlockerUnitTest, TestExpiredBlacklistEmbargo) { |
TEST_F(PermissionDecisionAutoBlockerUnitTest, TestSafeBrowsingTimeout) { |
GURL url("https://www.google.com"); |
clock()->SetNow(base::Time::Now()); |
+ base::HistogramTester histograms; |
scoped_refptr<MockSafeBrowsingDatabaseManager> db_manager = |
new MockSafeBrowsingDatabaseManager(false /* perform_callback */, |
@@ -404,6 +450,10 @@ TEST_F(PermissionDecisionAutoBlockerUnitTest, TestSafeBrowsingTimeout) { |
EXPECT_FALSE(last_embargoed_status()); |
EXPECT_FALSE( |
autoblocker()->IsUnderEmbargo(content::PermissionType::GEOLOCATION, url)); |
+ histograms.ExpectUniqueSample("Permissions.AutoBlocker.SafeBrowsingResponse", |
+ SafeBrowsingResponse::TIMEOUT, 1); |
+ histograms.ExpectTotalCount( |
+ "Permissions.AutoBlocker.SafeBrowsingResponseTime", 1); |
db_manager->SetPerformCallback(true); |
SetSafeBrowsingDatabaseManagerAndTimeoutForTesting(db_manager, |
2000 /* timeout in ms */); |
@@ -412,7 +462,12 @@ TEST_F(PermissionDecisionAutoBlockerUnitTest, TestSafeBrowsingTimeout) { |
UpdateEmbargoedStatus(content::PermissionType::GEOLOCATION, url); |
EXPECT_TRUE(callback_was_run()); |
EXPECT_TRUE(last_embargoed_status()); |
- |
+ histograms.ExpectTotalCount("Permissions.AutoBlocker.SafeBrowsingResponse", |
+ 2); |
+ histograms.ExpectTotalCount( |
+ "Permissions.AutoBlocker.SafeBrowsingResponseTime", 2); |
+ histograms.ExpectBucketCount("Permissions.AutoBlocker.SafeBrowsingResponse", |
+ SafeBrowsingResponse::BLACKLISTED, 1); |
clock()->Advance(base::TimeDelta::FromDays(1)); |
EXPECT_TRUE( |
autoblocker()->IsUnderEmbargo(content::PermissionType::GEOLOCATION, url)); |
@@ -505,3 +560,22 @@ TEST_F(PermissionDecisionAutoBlockerUnitTest, TestDisabledDatabaseManager) { |
EXPECT_TRUE(callback_was_run()); |
EXPECT_FALSE(last_embargoed_status()); |
} |
+ |
+TEST_F(PermissionDecisionAutoBlockerUnitTest, TestSafeBrowsingResponse) { |
+ GURL url("https://www.google.com"); |
+ clock()->SetNow(base::Time::Now()); |
+ base::HistogramTester histograms; |
+ |
+ scoped_refptr<MockSafeBrowsingDatabaseManager> db_manager = |
+ new MockSafeBrowsingDatabaseManager(true /* perform_callback */, |
+ true /* enabled */); |
+ std::set<std::string> blacklisted_permissions{"GEOLOCATION"}; |
+ db_manager->BlacklistUrlPermissions(url, blacklisted_permissions); |
+ SetSafeBrowsingDatabaseManagerAndTimeoutForTesting(db_manager, |
+ 0 /* timeout in ms */); |
+ |
+ UpdateEmbargoedStatus(content::PermissionType::NOTIFICATIONS, url); |
+ EXPECT_FALSE(last_embargoed_status()); |
+ histograms.ExpectUniqueSample("Permissions.AutoBlocker.SafeBrowsingResponse", |
+ SafeBrowsingResponse::NOT_BLACKLISTED, 1); |
+} |