Chromium Code Reviews| Index: chrome/browser/subresource_filter/subresource_filter_browsertest.cc |
| diff --git a/chrome/browser/subresource_filter/subresource_filter_browsertest.cc b/chrome/browser/subresource_filter/subresource_filter_browsertest.cc |
| index 5eb1a175658b661ae67370d9589988d7012a6a2d..e15df4de8cfee137619f890aedbd7226c1311ce2 100644 |
| --- a/chrome/browser/subresource_filter/subresource_filter_browsertest.cc |
| +++ b/chrome/browser/subresource_filter/subresource_filter_browsertest.cc |
| @@ -90,10 +90,34 @@ constexpr const char kEvaluationWallDuration[] = |
| constexpr const char kEvaluationCPUDuration[] = |
| "SubresourceFilter.SubresourceLoad.Evaluation.CPUDuration"; |
| +// Names of navigation chain patterns diagram. |
| +const char kMatchesPatternHistogramName[] = |
|
vakh (use Gerrit instead)
2017/02/10 03:00:12
Didn't look closely at the changes in this file.
Y
|
| + "SubresourceFilter.PageLoad.RedirectChainMatchPattern"; |
| +const char kNavigationChainSize[] = |
| + "SubresourceFilter.PageLoad.RedirectChainLength"; |
| +const char kSubresourceFilterOnlySuffix[] = ".SubresourceFilterOnly"; |
| + |
| // Other histograms. |
| const char kSubresourceFilterPromptHistogram[] = |
| "SubresourceFilter.Prompt.NumVisibility"; |
| +// 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, |
| +}; |
| + |
| // Database manager that allows any URL to be configured as blacklisted for |
| // testing. |
| class FakeSafeBrowsingDatabaseManager |
| @@ -125,6 +149,17 @@ class FakeSafeBrowsingDatabaseManager |
| return true; |
| } |
| + bool CheckUrlForSubresourceFilter(const GURL& url, Client* client) override { |
| + if (!url_to_threat_type_.count(url)) |
| + return true; |
| + content::BrowserThread::PostTask( |
| + content::BrowserThread::IO, FROM_HERE, |
| + base::Bind(&Client::OnCheckBrowseUrlResult, base::Unretained(client), |
| + url, url_to_threat_type_[url], |
| + safe_browsing::ThreatMetadata())); |
| + return false; |
| + } |
| + |
| bool IsSupported() const override { return true; } |
| bool ChecksAreAlwaysAsync() const override { return false; } |
| bool CanCheckResourceType( |
| @@ -217,8 +252,10 @@ class SubresourceFilterBrowserTestImpl : public InProcessBrowserTest { |
| // As a workaround, enable the feature here, then enable the feature once |
| // again + set up the field trials later. |
| void SetUpCommandLine(base::CommandLine* command_line) override { |
| - command_line->AppendSwitchASCII(switches::kEnableFeatures, |
| - kSafeBrowsingSubresourceFilter.name); |
| + command_line->AppendSwitchASCII( |
| + switches::kEnableFeatures, |
| + std::string(kSafeBrowsingSubresourceFilter.name) + |
| + ", SafeBrowsingV4OnlyEnabled"); |
| } |
| void SetUpInProcessBrowserTestFixture() override { |
| @@ -254,6 +291,11 @@ class SubresourceFilterBrowserTestImpl : public InProcessBrowserTest { |
| url, safe_browsing::SB_THREAT_TYPE_URL_PHISHING); |
| } |
| + void ConfigureAsSubresourceFilterOnlyURL(const GURL& url) { |
| + fake_safe_browsing_database_->AddBlacklistedURL( |
| + url, safe_browsing::SB_THREAT_TYPE_SUBRESOURCE_FILTER); |
| + } |
| + |
| content::WebContents* web_contents() { |
| return browser()->tab_strip_model()->GetActiveWebContents(); |
| } |
| @@ -726,4 +768,73 @@ IN_PROC_BROWSER_TEST_F(SubresourceFilterBrowserTest, |
| static_cast<base::Histogram::Sample>(ActivationLevel::DISABLED), 6); |
| } |
| +IN_PROC_BROWSER_TEST_F( |
| + SubresourceFilterBrowserTest, |
| + ExpectRedirectPatternHistogramsAreRecordedForSubresourceFilterOnlyMatch) { |
| + ASSERT_NO_FATAL_FAILURE(SetRulesetToDisallowURLsWithPathSuffix( |
| + "suffix-that-does-not-match-anything")); |
| + |
| + GURL url(GetTestUrl("subresource_filter/frame_with_included_script.html")); |
| + ConfigureAsSubresourceFilterOnlyURL(url); |
| + |
| + base::HistogramTester tester; |
| + ui_test_utils::NavigateToURL(browser(), url); |
| + |
| + EXPECT_THAT(tester.GetAllSamples(std::string(kMatchesPatternHistogramName) + |
| + std::string(kSubresourceFilterOnlySuffix)), |
| + ::testing::ElementsAre(base::Bucket(NO_REDIRECTS_HIT, 1))); |
| + EXPECT_THAT(tester.GetAllSamples(std::string(kNavigationChainSize) + |
| + std::string(kSubresourceFilterOnlySuffix)), |
| + ::testing::ElementsAre(base::Bucket(1, 1))); |
| +} |
| + |
| +IN_PROC_BROWSER_TEST_F( |
| + SubresourceFilterBrowserTest, |
| + ExpectRedirectPatternHistogramsAreRecordedForSubresourceFilterOnlyWithRedirects) { |
| + ASSERT_NO_FATAL_FAILURE( |
| + SetRulesetToDisallowURLsWithPathSuffix("included_script.js")); |
| + std::string initial_host("a.com"); |
| + std::string redirected_host("b.com"); |
| + |
| + GURL redirect_url(embedded_test_server()->GetURL(redirected_host, "/")); |
| + GURL url(embedded_test_server()->GetURL( |
| + initial_host, "/client-redirect?" + redirect_url.spec())); |
| + |
| + ConfigureAsSubresourceFilterOnlyURL(redirect_url); |
| + base::HistogramTester tester; |
| + ui_test_utils::NavigateToURLBlockUntilNavigationsComplete(browser(), url, 2); |
| + EXPECT_THAT(tester.GetAllSamples(std::string(kMatchesPatternHistogramName) + |
| + std::string(kSubresourceFilterOnlySuffix)), |
| + ::testing::ElementsAre(base::Bucket(NO_REDIRECTS_HIT, 1))); |
| + |
| + EXPECT_THAT(tester.GetAllSamples(std::string(kNavigationChainSize) + |
| + std::string(kSubresourceFilterOnlySuffix)), |
| + ::testing::ElementsAre(base::Bucket(1, 1))); |
| +} |
| + |
| +IN_PROC_BROWSER_TEST_F( |
| + SubresourceFilterBrowserTest, |
| + ExpectRedirectPatternHistogramsAreRecordedForSubresourceFilterOnlyRedirectMatch) { |
| + ASSERT_NO_FATAL_FAILURE( |
| + SetRulesetToDisallowURLsWithPathSuffix("included_script.js")); |
| + std::string initial_host("a.com"); |
| + std::string redirected_host("b.com"); |
| + |
| + GURL redirect_url(embedded_test_server()->GetURL( |
| + redirected_host, "/subresource_filter/frame_with_included_script.html")); |
| + GURL url(embedded_test_server()->GetURL( |
| + initial_host, "/client-redirect?" + redirect_url.spec())); |
| + |
| + ConfigureAsSubresourceFilterOnlyURL(GURL(url.host())); |
| + base::HistogramTester tester; |
| + ui_test_utils::NavigateToURLBlockUntilNavigationsComplete(browser(), url, 2); |
| + EXPECT_THAT(tester.GetAllSamples(std::string(kMatchesPatternHistogramName) + |
| + std::string(kSubresourceFilterOnlySuffix)), |
| + ::testing::IsEmpty()); |
| + |
| + EXPECT_THAT(tester.GetAllSamples(std::string(kNavigationChainSize) + |
| + std::string(kSubresourceFilterOnlySuffix)), |
| + ::testing::IsEmpty()); |
| +} |
| + |
| } // namespace subresource_filter |