OLD | NEW |
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 <map> | 5 #include <map> |
6 #include <memory> | 6 #include <memory> |
7 #include <string> | 7 #include <string> |
8 | 8 |
9 #include "base/bind.h" | 9 #include "base/bind.h" |
10 #include "base/bind_helpers.h" | 10 #include "base/bind_helpers.h" |
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
115 constexpr const char kEvaluationTotalCPUDurationForDocument[] = | 115 constexpr const char kEvaluationTotalCPUDurationForDocument[] = |
116 "SubresourceFilter.DocumentLoad.SubresourceEvaluation.TotalCPUDuration"; | 116 "SubresourceFilter.DocumentLoad.SubresourceEvaluation.TotalCPUDuration"; |
117 constexpr const char kEvaluationWallDuration[] = | 117 constexpr const char kEvaluationWallDuration[] = |
118 "SubresourceFilter.SubresourceLoad.Evaluation.WallDuration"; | 118 "SubresourceFilter.SubresourceLoad.Evaluation.WallDuration"; |
119 constexpr const char kEvaluationCPUDuration[] = | 119 constexpr const char kEvaluationCPUDuration[] = |
120 "SubresourceFilter.SubresourceLoad.Evaluation.CPUDuration"; | 120 "SubresourceFilter.SubresourceLoad.Evaluation.CPUDuration"; |
121 | 121 |
122 #if defined(GOOGLE_CHROME_BUILD) | 122 #if defined(GOOGLE_CHROME_BUILD) |
123 // Names of navigation chain patterns histogram. | 123 // Names of navigation chain patterns histogram. |
124 const char kMatchesPatternHistogramName[] = | 124 const char kMatchesPatternHistogramName[] = |
125 "SubresourceFilter.PageLoad.RedirectChainMatchPattern"; | 125 "SubresourceFilter.PageLoad.FinalURLMatch"; |
126 const char kNavigationChainSize[] = | 126 const char kNavigationChainSize[] = |
127 "SubresourceFilter.PageLoad.RedirectChainLength"; | 127 "SubresourceFilter.PageLoad.RedirectChainLength"; |
128 const char kSubresourceFilterOnlySuffix[] = ".SubresourceFilterOnly"; | 128 const char kSubresourceFilterOnlySuffix[] = ".SubresourceFilterOnly"; |
| 129 const char kSocialEngineeringAdsInterstitialSuffix[] = |
| 130 ".SocialEngineeringAdsInterstitial"; |
| 131 const char kPhishingInterstitalSuffix[] = ".PhishingInterstital"; |
129 #endif | 132 #endif |
130 | 133 |
131 // Other histograms. | 134 // Other histograms. |
132 const char kSubresourceFilterActionsHistogram[] = "SubresourceFilter.Actions"; | 135 const char kSubresourceFilterActionsHistogram[] = "SubresourceFilter.Actions"; |
133 | 136 |
134 // Human readable representation of expected redirect chain match patterns. | |
135 // The explanations for the buckets given for the following redirect chain: | |
136 // A->B->C->D, where A is initial URL and D is a final URL. | |
137 enum RedirectChainMatchPattern { | |
138 EMPTY, // No histograms were recorded. | |
139 F0M0L1, // D is a Safe Browsing match. | |
140 F0M1L0, // B or C, or both are Safe Browsing matches. | |
141 F0M1L1, // B or C, or both and D are Safe Browsing matches. | |
142 F1M0L0, // A is Safe Browsing match | |
143 F1M0L1, // A and D are Safe Browsing matches. | |
144 F1M1L0, // B and/or C and A are Safe Browsing matches. | |
145 F1M1L1, // B and/or C and A and D are Safe Browsing matches. | |
146 NO_REDIRECTS_HIT, // Redirect chain consists of single URL, aka no redirects | |
147 // has happened, and this URL was a Safe Browsing hit. | |
148 NUM_HIT_PATTERNS, | |
149 }; | |
150 | |
151 // UI manager that never actually shows any interstitials, but emulates as if | 137 // UI manager that never actually shows any interstitials, but emulates as if |
152 // the user chose to proceed through them. | 138 // the user chose to proceed through them. |
153 class FakeSafeBrowsingUIManager | 139 class FakeSafeBrowsingUIManager |
154 : public safe_browsing::TestSafeBrowsingUIManager { | 140 : public safe_browsing::TestSafeBrowsingUIManager { |
155 public: | 141 public: |
156 FakeSafeBrowsingUIManager() {} | 142 FakeSafeBrowsingUIManager() {} |
157 | 143 |
158 protected: | 144 protected: |
159 ~FakeSafeBrowsingUIManager() override {} | 145 ~FakeSafeBrowsingUIManager() override {} |
160 | 146 |
(...skipping 277 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
438 browser()->tab_strip_model()->GetActiveWebContents(), | 424 browser()->tab_strip_model()->GetActiveWebContents(), |
439 base::StringPrintf("connectWebSocket('%s');", url.spec().c_str()), | 425 base::StringPrintf("connectWebSocket('%s');", url.spec().c_str()), |
440 &websocket_connection_succeeded)); | 426 &websocket_connection_succeeded)); |
441 EXPECT_EQ(expect_connection_success, websocket_connection_succeeded); | 427 EXPECT_EQ(expect_connection_success, websocket_connection_succeeded); |
442 } | 428 } |
443 | 429 |
444 private: | 430 private: |
445 std::unique_ptr<net::SpawnedTestServer> websocket_test_server_; | 431 std::unique_ptr<net::SpawnedTestServer> websocket_test_server_; |
446 }; | 432 }; |
447 | 433 |
448 | |
449 // Tests ----------------------------------------------------------------------- | 434 // Tests ----------------------------------------------------------------------- |
450 | 435 |
451 IN_PROC_BROWSER_TEST_F(SubresourceFilterBrowserTest, MainFrameActivation) { | 436 IN_PROC_BROWSER_TEST_F(SubresourceFilterBrowserTest, MainFrameActivation) { |
452 GURL url(GetTestUrl("subresource_filter/frame_with_included_script.html")); | 437 GURL url(GetTestUrl("subresource_filter/frame_with_included_script.html")); |
453 ConfigureAsPhishingURL(url); | 438 ConfigureAsPhishingURL(url); |
454 ASSERT_NO_FATAL_FAILURE(SetRulesetToDisallowURLsWithPathSuffix( | 439 ASSERT_NO_FATAL_FAILURE(SetRulesetToDisallowURLsWithPathSuffix( |
455 "suffix-that-does-not-match-anything")); | 440 "suffix-that-does-not-match-anything")); |
456 ui_test_utils::NavigateToURL(browser(), url); | 441 ui_test_utils::NavigateToURL(browser(), url); |
457 EXPECT_TRUE(WasParsedScriptElementLoaded(web_contents()->GetMainFrame())); | 442 EXPECT_TRUE(WasParsedScriptElementLoaded(web_contents()->GetMainFrame())); |
458 | 443 |
(...skipping 964 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1423 ExpectRedirectPatternHistogramsAreRecordedForSubresourceFilterOnlyMatch) { | 1408 ExpectRedirectPatternHistogramsAreRecordedForSubresourceFilterOnlyMatch) { |
1424 ASSERT_NO_FATAL_FAILURE(SetRulesetToDisallowURLsWithPathSuffix( | 1409 ASSERT_NO_FATAL_FAILURE(SetRulesetToDisallowURLsWithPathSuffix( |
1425 "suffix-that-does-not-match-anything")); | 1410 "suffix-that-does-not-match-anything")); |
1426 | 1411 |
1427 GURL url(GetTestUrl("subresource_filter/frame_with_included_script.html")); | 1412 GURL url(GetTestUrl("subresource_filter/frame_with_included_script.html")); |
1428 ConfigureAsSubresourceFilterOnlyURL(url); | 1413 ConfigureAsSubresourceFilterOnlyURL(url); |
1429 | 1414 |
1430 base::HistogramTester tester; | 1415 base::HistogramTester tester; |
1431 ui_test_utils::NavigateToURL(browser(), url); | 1416 ui_test_utils::NavigateToURL(browser(), url); |
1432 | 1417 |
1433 EXPECT_THAT(tester.GetAllSamples(std::string(kMatchesPatternHistogramName) + | 1418 tester.ExpectUniqueSample( |
1434 std::string(kSubresourceFilterOnlySuffix)), | 1419 std::string(kMatchesPatternHistogramName) + |
1435 ::testing::ElementsAre(base::Bucket(NO_REDIRECTS_HIT, 1))); | 1420 std::string(kSocialEngineeringAdsInterstitialSuffix), |
| 1421 false, 1); |
| 1422 tester.ExpectUniqueSample(std::string(kMatchesPatternHistogramName) + |
| 1423 std::string(kSubresourceFilterOnlySuffix), |
| 1424 true, 1); |
| 1425 |
| 1426 tester.ExpectUniqueSample(std::string(kMatchesPatternHistogramName) + |
| 1427 std::string(kPhishingInterstitalSuffix), |
| 1428 false, 1); |
1436 EXPECT_THAT(tester.GetAllSamples(std::string(kNavigationChainSize) + | 1429 EXPECT_THAT(tester.GetAllSamples(std::string(kNavigationChainSize) + |
1437 std::string(kSubresourceFilterOnlySuffix)), | 1430 std::string(kSubresourceFilterOnlySuffix)), |
1438 ::testing::ElementsAre(base::Bucket(1, 1))); | 1431 ::testing::ElementsAre(base::Bucket(1, 1))); |
1439 } | 1432 } |
1440 | 1433 |
1441 IN_PROC_BROWSER_TEST_F( | 1434 IN_PROC_BROWSER_TEST_F( |
1442 SubresourceFilterBrowserTest, | 1435 SubresourceFilterBrowserTest, |
1443 ExpectRedirectPatternHistogramsAreRecordedForSubresourceFilterOnlyRedirectMa
tch) { | 1436 ExpectRedirectPatternHistogramsAreRecordedForSubresourceFilterOnlyRedirectMa
tch) { |
1444 ASSERT_NO_FATAL_FAILURE( | 1437 ASSERT_NO_FATAL_FAILURE( |
1445 SetRulesetToDisallowURLsWithPathSuffix("included_script.js")); | 1438 SetRulesetToDisallowURLsWithPathSuffix("included_script.js")); |
1446 const std::string initial_host("a.com"); | 1439 const std::string initial_host("a.com"); |
1447 const std::string redirected_host("b.com"); | 1440 const std::string redirected_host("b.com"); |
1448 | 1441 |
1449 GURL redirect_url(embedded_test_server()->GetURL( | 1442 GURL redirect_url(embedded_test_server()->GetURL( |
1450 redirected_host, "/subresource_filter/frame_with_included_script.html")); | 1443 redirected_host, "/subresource_filter/frame_with_included_script.html")); |
1451 GURL url(embedded_test_server()->GetURL( | 1444 GURL url(embedded_test_server()->GetURL( |
1452 initial_host, "/server-redirect?" + redirect_url.spec())); | 1445 initial_host, "/server-redirect?" + redirect_url.spec())); |
1453 | 1446 |
1454 ConfigureAsSubresourceFilterOnlyURL(url.GetOrigin()); | 1447 ConfigureAsSubresourceFilterOnlyURL(url.GetOrigin()); |
1455 base::HistogramTester tester; | 1448 base::HistogramTester tester; |
1456 ui_test_utils::NavigateToURL(browser(), url); | 1449 ui_test_utils::NavigateToURL(browser(), url); |
1457 EXPECT_THAT(tester.GetAllSamples(std::string(kMatchesPatternHistogramName) + | 1450 tester.ExpectUniqueSample( |
1458 std::string(kSubresourceFilterOnlySuffix)), | 1451 std::string(kMatchesPatternHistogramName) + |
1459 ::testing::IsEmpty()); | 1452 std::string(kSocialEngineeringAdsInterstitialSuffix), |
| 1453 false, 1); |
| 1454 tester.ExpectUniqueSample(std::string(kMatchesPatternHistogramName) + |
| 1455 std::string(kSubresourceFilterOnlySuffix), |
| 1456 false, 1); |
1460 | 1457 |
1461 EXPECT_THAT(tester.GetAllSamples(std::string(kNavigationChainSize) + | 1458 tester.ExpectUniqueSample(std::string(kMatchesPatternHistogramName) + |
1462 std::string(kSubresourceFilterOnlySuffix)), | 1459 std::string(kPhishingInterstitalSuffix), |
1463 ::testing::IsEmpty()); | 1460 false, 1); |
1464 } | 1461 } |
1465 #endif | 1462 #endif |
1466 | 1463 |
1467 } // namespace subresource_filter | 1464 } // namespace subresource_filter |
OLD | NEW |