Index: components/subresource_filter/content/browser/subresource_filter_safe_browsing_activation_throttle_unittest.cc |
diff --git a/components/subresource_filter/content/browser/subresource_filter_safe_browsing_activation_throttle_unittest.cc b/components/subresource_filter/content/browser/subresource_filter_safe_browsing_activation_throttle_unittest.cc |
index 0a49f61053ca70ba71e791330bd52b2510f6674c..6183aa6b0de818b89053a9bba58809e0f9971145 100644 |
--- a/components/subresource_filter/content/browser/subresource_filter_safe_browsing_activation_throttle_unittest.cc |
+++ b/components/subresource_filter/content/browser/subresource_filter_safe_browsing_activation_throttle_unittest.cc |
@@ -31,28 +31,9 @@ char kURL[] = "http://example.test/"; |
char kRedirectURL[] = "http://foo.test/"; |
// Names of navigation chain patterns histogram. |
-const char kMatchesPatternHistogramNameSubresourceFilterSuffix[] = |
- "SubresourceFilter.PageLoad.RedirectChainMatchPattern." |
- "SubresourceFilterOnly"; |
-const char kNavigationChainSizeSubresourceFilterSuffix[] = |
- "SubresourceFilter.PageLoad.RedirectChainLength.SubresourceFilterOnly"; |
- |
-// Human readable representation of expected redirect chain match patterns. |
-// The explanations for the buckets given for the following redirect chain: |
-// A->B->C->D, where A is initial URL and D is a final URL. |
-enum RedirectChainMatchPattern { |
- EMPTY, // No histograms were recorded. |
- F0M0L1, // D is a Safe Browsing match. |
- F0M1L0, // B or C, or both are Safe Browsing matches. |
- F0M1L1, // B or C, or both and D are Safe Browsing matches. |
- F1M0L0, // A is Safe Browsing match |
- F1M0L1, // A and D are Safe Browsing matches. |
- F1M1L0, // B and/or C and A are Safe Browsing matches. |
- F1M1L1, // B and/or C and A and D are Safe Browsing matches. |
- NO_REDIRECTS_HIT, // Redirect chain consists of single URL, aka no redirects |
- // has happened, and this URL was a Safe Browsing hit. |
- NUM_HIT_PATTERNS, |
-}; |
+const char kMatchesPatternHistogramName[] = "SubresourceFilter.PageLoad.Match."; |
+const char kNavigationChainSize[] = |
+ "SubresourceFilter.PageLoad.RedirectChainLength."; |
// Database manager that allows any URL to be configured as blacklisted for |
// testing. |
@@ -62,8 +43,9 @@ class FakeSafeBrowsingDatabaseManager |
FakeSafeBrowsingDatabaseManager() : simulate_timeout_(false) {} |
void AddBlacklistedUrl(const GURL& url, |
- safe_browsing::SBThreatType threat_type) { |
- url_to_threat_type_[url] = threat_type; |
+ safe_browsing::SBThreatType threat_type, |
+ safe_browsing::ThreatPatternType pattern_type) { |
+ url_to_threat_type_[url] = std::make_pair(threat_type, pattern_type); |
} |
void SimulateTimeout() { simulate_timeout_ = true; } |
@@ -77,11 +59,12 @@ class FakeSafeBrowsingDatabaseManager |
if (!url_to_threat_type_.count(url)) |
return true; |
+ safe_browsing::ThreatMetadata metadata; |
+ metadata.threat_pattern_type = url_to_threat_type_[url].second; |
content::BrowserThread::PostTask( |
content::BrowserThread::IO, FROM_HERE, |
base::Bind(&Client::OnCheckBrowseUrlResult, base::Unretained(client), |
- url, url_to_threat_type_[url], |
- safe_browsing::ThreatMetadata())); |
+ url, url_to_threat_type_[url].first, metadata)); |
return false; |
} |
@@ -106,7 +89,10 @@ class FakeSafeBrowsingDatabaseManager |
} |
private: |
- std::map<GURL, safe_browsing::SBThreatType> url_to_threat_type_; |
+ std::map< |
+ GURL, |
+ std::pair<safe_browsing::SBThreatType, safe_browsing::ThreatPatternType>> |
+ url_to_threat_type_; |
bool simulate_timeout_; |
DISALLOW_COPY_AND_ASSIGN(FakeSafeBrowsingDatabaseManager); |
@@ -150,11 +136,48 @@ class TestForwardingNavigationThrottle : public content::NavigationThrottle { |
DISALLOW_COPY_AND_ASSIGN(TestForwardingNavigationThrottle); |
}; |
+std::string GetSuffixForList(const ActivationList& type) { |
+ switch (type) { |
+ case ActivationList::SOCIAL_ENG_ADS_INTERSTITIAL: |
+ return "SocialEngineeringAdsInterstitial"; |
+ case ActivationList::PHISHING_INTERSTITIAL: |
+ return "PhishingInterstital"; |
+ case ActivationList::SUBRESOURCE_FILTER: |
+ return "SubresourceFilterOnly"; |
+ case ActivationList::NONE: |
+ return std::string(); |
+ } |
+ return std::string(); |
+} |
+ |
+struct ActivationListTestData { |
+ const char* const activation_list; |
+ ActivationList activation_list_type; |
+ safe_browsing::SBThreatType threat_type; |
+ safe_browsing::ThreatPatternType threat_type_metadata; |
+}; |
+ |
+const ActivationListTestData kActivationListTestData[] = { |
+ {subresource_filter::kActivationListSocialEngineeringAdsInterstitial, |
+ ActivationList::SOCIAL_ENG_ADS_INTERSTITIAL, |
+ safe_browsing::SB_THREAT_TYPE_URL_PHISHING, |
+ safe_browsing::ThreatPatternType::SOCIAL_ENGINEERING_ADS}, |
+ {subresource_filter::kActivationListPhishingInterstitial, |
+ ActivationList::PHISHING_INTERSTITIAL, |
+ safe_browsing::SB_THREAT_TYPE_URL_PHISHING, |
+ safe_browsing::ThreatPatternType::NONE}, |
+ {subresource_filter::kActivationListSubresourceFilter, |
+ ActivationList::SUBRESOURCE_FILTER, |
+ safe_browsing::SB_THREAT_TYPE_SUBRESOURCE_FILTER, |
+ safe_browsing::ThreatPatternType::NONE}, |
+}; |
+ |
} // namespace |
class SubresourceFilterSafeBrowsingActivationThrottleTest |
: public content::RenderViewHostTestHarness, |
- public content::WebContentsObserver { |
+ public content::WebContentsObserver, |
+ public ::testing::WithParamInterface<ActivationListTestData> { |
public: |
SubresourceFilterSafeBrowsingActivationThrottleTest() |
: field_trial_list_(nullptr) {} |
@@ -162,10 +185,11 @@ class SubresourceFilterSafeBrowsingActivationThrottleTest |
void SetUp() override { |
content::RenderViewHostTestHarness::SetUp(); |
+ const ActivationListTestData& test_data = GetParam(); |
scoped_feature_toggle_.reset( |
new testing::ScopedSubresourceFilterFeatureToggle( |
base::FeatureList::OVERRIDE_ENABLE_FEATURE, kActivationLevelEnabled, |
- kActivationScopeActivationList, kActivationListSubresourceFilter)); |
+ kActivationScopeActivationList, test_data.activation_list)); |
auto client = base::MakeUnique<MockSubresourceFilterClient>(); |
ContentSubresourceFilterDriverFactory::CreateForWebContents( |
RenderViewHostTestHarness::web_contents(), std::move(client)); |
@@ -215,9 +239,10 @@ class SubresourceFilterSafeBrowsingActivationThrottleTest |
main_rfh()); |
} |
- void ConfigureAsSubresourceFilterOnlyURL(const GURL& url) { |
+ void ConfigureForMatch(const GURL& url) { |
+ const ActivationListTestData& test_data = GetParam(); |
fake_safe_browsing_database_->AddBlacklistedUrl( |
- url, safe_browsing::SB_THREAT_TYPE_SUBRESOURCE_FILTER); |
+ url, test_data.threat_type, test_data.threat_type_metadata); |
} |
void SimulateTimeout() { fake_safe_browsing_database_->SimulateTimeout(); } |
@@ -236,39 +261,42 @@ class SubresourceFilterSafeBrowsingActivationThrottleTest |
DISALLOW_COPY_AND_ASSIGN(SubresourceFilterSafeBrowsingActivationThrottleTest); |
}; |
-TEST_F(SubresourceFilterSafeBrowsingActivationThrottleTest, |
+TEST_P(SubresourceFilterSafeBrowsingActivationThrottleTest, |
ListNotMatched_NoActivation) { |
+ const ActivationListTestData& test_data = GetParam(); |
const GURL url(kURL); |
+ const std::string suffix(GetSuffixForList(test_data.activation_list_type)); |
CreateTestNavigationForMainFrame(url); |
SimulateStartAndExpectProceed(); |
SimulateCommitAndExpectProceed(); |
EXPECT_EQ(ContentSubresourceFilterDriverFactory::ActivationDecision:: |
ACTIVATION_LIST_NOT_MATCHED, |
factory()->GetActivationDecisionForLastCommittedPageLoad()); |
- tester().ExpectTotalCount(kMatchesPatternHistogramNameSubresourceFilterSuffix, |
- 0); |
- tester().ExpectTotalCount(kNavigationChainSizeSubresourceFilterSuffix, 0); |
+ tester().ExpectTotalCount(kMatchesPatternHistogramName + suffix, 0); |
+ tester().ExpectTotalCount(kNavigationChainSize + suffix, 0); |
} |
-TEST_F(SubresourceFilterSafeBrowsingActivationThrottleTest, |
+TEST_P(SubresourceFilterSafeBrowsingActivationThrottleTest, |
ListMatched_Activation) { |
+ const ActivationListTestData& test_data = GetParam(); |
const GURL url(kURL); |
- ConfigureAsSubresourceFilterOnlyURL(url); |
+ const std::string suffix(GetSuffixForList(test_data.activation_list_type)); |
+ ConfigureForMatch(url); |
CreateTestNavigationForMainFrame(url); |
SimulateStartAndExpectProceed(); |
SimulateCommitAndExpectProceed(); |
EXPECT_EQ( |
ContentSubresourceFilterDriverFactory::ActivationDecision::ACTIVATED, |
factory()->GetActivationDecisionForLastCommittedPageLoad()); |
- tester().ExpectUniqueSample( |
- kMatchesPatternHistogramNameSubresourceFilterSuffix, NO_REDIRECTS_HIT, 1); |
- tester().ExpectUniqueSample(kNavigationChainSizeSubresourceFilterSuffix, 1, |
- 1); |
+ tester().ExpectTotalCount(kMatchesPatternHistogramName + suffix, 1); |
+ tester().ExpectUniqueSample(kNavigationChainSize + suffix, 1, 1); |
} |
-TEST_F(SubresourceFilterSafeBrowsingActivationThrottleTest, |
+TEST_P(SubresourceFilterSafeBrowsingActivationThrottleTest, |
ListNotMatchedAfterRedirect_NoActivation) { |
+ const ActivationListTestData& test_data = GetParam(); |
const GURL url(kURL); |
+ const std::string suffix(GetSuffixForList(test_data.activation_list_type)); |
CreateTestNavigationForMainFrame(url); |
SimulateStartAndExpectProceed(); |
SimulateRedirectAndExpectProceed(GURL(kRedirectURL)); |
@@ -276,15 +304,16 @@ TEST_F(SubresourceFilterSafeBrowsingActivationThrottleTest, |
EXPECT_EQ(ContentSubresourceFilterDriverFactory::ActivationDecision:: |
ACTIVATION_LIST_NOT_MATCHED, |
factory()->GetActivationDecisionForLastCommittedPageLoad()); |
- tester().ExpectTotalCount(kMatchesPatternHistogramNameSubresourceFilterSuffix, |
- 0); |
- tester().ExpectTotalCount(kNavigationChainSizeSubresourceFilterSuffix, 0); |
+ tester().ExpectTotalCount(kMatchesPatternHistogramName + suffix, 0); |
+ tester().ExpectTotalCount(kNavigationChainSize + suffix, 0); |
} |
-TEST_F(SubresourceFilterSafeBrowsingActivationThrottleTest, |
+TEST_P(SubresourceFilterSafeBrowsingActivationThrottleTest, |
ListMatchedAfterRedirect_Activation) { |
+ const ActivationListTestData& test_data = GetParam(); |
const GURL url(kURL); |
- ConfigureAsSubresourceFilterOnlyURL(GURL(kRedirectURL)); |
+ const std::string suffix(GetSuffixForList(test_data.activation_list_type)); |
+ ConfigureForMatch(GURL(kRedirectURL)); |
CreateTestNavigationForMainFrame(url); |
SimulateStartAndExpectProceed(); |
SimulateRedirectAndExpectProceed(GURL(kRedirectURL)); |
@@ -292,15 +321,15 @@ TEST_F(SubresourceFilterSafeBrowsingActivationThrottleTest, |
EXPECT_EQ( |
ContentSubresourceFilterDriverFactory::ActivationDecision::ACTIVATED, |
factory()->GetActivationDecisionForLastCommittedPageLoad()); |
- tester().ExpectUniqueSample( |
- kMatchesPatternHistogramNameSubresourceFilterSuffix, F0M0L1, 1); |
- tester().ExpectUniqueSample(kNavigationChainSizeSubresourceFilterSuffix, 2, |
- 1); |
+ tester().ExpectTotalCount(kMatchesPatternHistogramName + suffix, 1); |
+ tester().ExpectUniqueSample(kNavigationChainSize + suffix, 2, 1); |
} |
-TEST_F(SubresourceFilterSafeBrowsingActivationThrottleTest, |
+TEST_P(SubresourceFilterSafeBrowsingActivationThrottleTest, |
ListNotMatchedAndTimeout_NoActivation) { |
+ const ActivationListTestData& test_data = GetParam(); |
const GURL url(kURL); |
+ const std::string suffix(GetSuffixForList(test_data.activation_list_type)); |
SimulateTimeout(); |
CreateTestNavigationForMainFrame(url); |
SimulateStartAndExpectProceed(); |
@@ -308,9 +337,8 @@ TEST_F(SubresourceFilterSafeBrowsingActivationThrottleTest, |
EXPECT_EQ(ContentSubresourceFilterDriverFactory::ActivationDecision:: |
ACTIVATION_LIST_NOT_MATCHED, |
factory()->GetActivationDecisionForLastCommittedPageLoad()); |
- tester().ExpectTotalCount(kMatchesPatternHistogramNameSubresourceFilterSuffix, |
- 0); |
- tester().ExpectTotalCount(kNavigationChainSizeSubresourceFilterSuffix, 0); |
+ tester().ExpectTotalCount(kMatchesPatternHistogramName + suffix, 0); |
+ tester().ExpectTotalCount(kNavigationChainSize + suffix, 0); |
} |
// TODO(melandory): Once non-defering check in WillStart is implemented add one |
@@ -318,4 +346,8 @@ TEST_F(SubresourceFilterSafeBrowsingActivationThrottleTest, |
// while the SB check is pending? (To be run by ASAN bots to ensure |
// no use-after-free.) |
+INSTANTIATE_TEST_CASE_P(ActivationLevelTest, |
+ SubresourceFilterSafeBrowsingActivationThrottleTest, |
+ ::testing::ValuesIn(kActivationListTestData)); |
+ |
} // namespace subresource_filter |