Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(315)

Side by Side Diff: components/subresource_filter/content/browser/content_subresource_filter_driver_factory_unittest.cc

Issue 2733833002: Change logic for recording redirect pattern histograms. (Closed)
Patch Set: fix ios Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 "components/subresource_filter/content/browser/content_subresource_filt er_driver_factory.h" 5 #include "components/subresource_filter/content/browser/content_subresource_filt er_driver_factory.h"
6 6
7 #include "base/macros.h" 7 #include "base/macros.h"
8 #include "base/memory/ptr_util.h" 8 #include "base/memory/ptr_util.h"
9 #include "base/metrics/field_trial.h" 9 #include "base/metrics/field_trial.h"
10 #include "base/test/histogram_tester.h" 10 #include "base/test/histogram_tester.h"
11 #include "components/safe_browsing_db/util.h" 11 #include "components/safe_browsing_db/util.h"
12 #include "components/subresource_filter/content/browser/content_activation_list_ utils.h"
12 #include "components/subresource_filter/content/browser/subresource_filter_clien t.h" 13 #include "components/subresource_filter/content/browser/subresource_filter_clien t.h"
13 #include "components/subresource_filter/content/common/subresource_filter_messag es.h" 14 #include "components/subresource_filter/content/common/subresource_filter_messag es.h"
14 #include "components/subresource_filter/core/browser/subresource_filter_features .h" 15 #include "components/subresource_filter/core/browser/subresource_filter_features .h"
15 #include "components/subresource_filter/core/browser/subresource_filter_features _test_support.h" 16 #include "components/subresource_filter/core/browser/subresource_filter_features _test_support.h"
17 #include "components/subresource_filter/core/common/activation_list.h"
16 #include "content/public/browser/render_frame_host.h" 18 #include "content/public/browser/render_frame_host.h"
17 #include "content/public/browser/web_contents.h" 19 #include "content/public/browser/web_contents.h"
18 #include "content/public/test/mock_render_process_host.h" 20 #include "content/public/test/mock_render_process_host.h"
19 #include "content/public/test/navigation_simulator.h" 21 #include "content/public/test/navigation_simulator.h"
20 #include "content/public/test/test_renderer_host.h" 22 #include "content/public/test/test_renderer_host.h"
21 #include "content/public/test/web_contents_tester.h" 23 #include "content/public/test/web_contents_tester.h"
22 #include "net/base/net_errors.h" 24 #include "net/base/net_errors.h"
23 #include "testing/gmock/include/gmock/gmock.h" 25 #include "testing/gmock/include/gmock/gmock.h"
24 #include "testing/gtest/include/gtest/gtest.h" 26 #include "testing/gtest/include/gtest/gtest.h"
25 #include "url/gurl.h" 27 #include "url/gurl.h"
(...skipping 28 matching lines...) Expand all
54 F0M1L1, // B or C, or both and D are Safe Browsing matches. 56 F0M1L1, // B or C, or both and D are Safe Browsing matches.
55 F1M0L0, // A is Safe Browsing match 57 F1M0L0, // A is Safe Browsing match
56 F1M0L1, // A and D are Safe Browsing matches. 58 F1M0L1, // A and D are Safe Browsing matches.
57 F1M1L0, // B and/or C and A are Safe Browsing matches. 59 F1M1L0, // B and/or C and A are Safe Browsing matches.
58 F1M1L1, // B and/or C and A and D are Safe Browsing matches. 60 F1M1L1, // B and/or C and A and D are Safe Browsing matches.
59 NO_REDIRECTS_HIT, // Redirect chain consists of single URL, aka no redirects 61 NO_REDIRECTS_HIT, // Redirect chain consists of single URL, aka no redirects
60 // has happened, and this URL was a Safe Browsing hit. 62 // has happened, and this URL was a Safe Browsing hit.
61 NUM_HIT_PATTERNS, 63 NUM_HIT_PATTERNS,
62 }; 64 };
63 65
66 std::string GetSuffixForList(const ActivationList& type) {
67 switch (type) {
68 case ActivationList::SOCIAL_ENG_ADS_INTERSTITIAL:
69 return ".SocialEngineeringAdsInterstitial";
70 case ActivationList::PHISHING_INTERSTITIAL:
71 return ".PhishingInterstital";
72 case ActivationList::NONE:
73 return std::string();
74 }
75 return std::string();
76 }
77
64 struct ActivationListTestData { 78 struct ActivationListTestData {
65 ActivationDecision expected_activation_decision; 79 ActivationDecision expected_activation_decision;
66 const char* const activation_list; 80 const char* const activation_list;
67 safe_browsing::SBThreatType threat_type; 81 safe_browsing::SBThreatType threat_type;
68 safe_browsing::ThreatPatternType threat_type_metadata; 82 safe_browsing::ThreatPatternType threat_type_metadata;
69 }; 83 };
70 84
71 const ActivationListTestData kActivationListTestData[] = { 85 const ActivationListTestData kActivationListTestData[] = {
72 {ActivationDecision::ACTIVATION_LIST_NOT_MATCHED, "", 86 {ActivationDecision::ACTIVATION_LIST_NOT_MATCHED, "",
73 safe_browsing::SB_THREAT_TYPE_URL_PHISHING, 87 safe_browsing::SB_THREAT_TYPE_URL_PHISHING,
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
117 safe_browsing::SB_THREAT_TYPE_SAFE, 131 safe_browsing::SB_THREAT_TYPE_SAFE,
118 safe_browsing::ThreatPatternType::SOCIAL_ENGINEERING_ADS}, 132 safe_browsing::ThreatPatternType::SOCIAL_ENGINEERING_ADS},
119 {ActivationDecision::ACTIVATED, 133 {ActivationDecision::ACTIVATED,
120 subresource_filter::kActivationListPhishingInterstitial, 134 subresource_filter::kActivationListPhishingInterstitial,
121 safe_browsing::SB_THREAT_TYPE_URL_PHISHING, 135 safe_browsing::SB_THREAT_TYPE_URL_PHISHING,
122 safe_browsing::ThreatPatternType::NONE}, 136 safe_browsing::ThreatPatternType::NONE},
123 {ActivationDecision::ACTIVATED, 137 {ActivationDecision::ACTIVATED,
124 subresource_filter::kActivationListSocialEngineeringAdsInterstitial, 138 subresource_filter::kActivationListSocialEngineeringAdsInterstitial,
125 safe_browsing::SB_THREAT_TYPE_URL_PHISHING, 139 safe_browsing::SB_THREAT_TYPE_URL_PHISHING,
126 safe_browsing::ThreatPatternType::SOCIAL_ENGINEERING_ADS}, 140 safe_browsing::ThreatPatternType::SOCIAL_ENGINEERING_ADS},
141 {ActivationDecision::ACTIVATED,
142 subresource_filter::kActivationListPhishingInterstitial,
143 safe_browsing::SB_THREAT_TYPE_URL_PHISHING,
144 safe_browsing::ThreatPatternType::SOCIAL_ENGINEERING_ADS},
127 }; 145 };
128 146
129 struct ActivationScopeTestData { 147 struct ActivationScopeTestData {
130 ActivationDecision expected_activation_decision; 148 ActivationDecision expected_activation_decision;
131 bool url_matches_activation_list; 149 bool url_matches_activation_list;
132 const char* const activation_scope; 150 const char* const activation_scope;
133 }; 151 };
134 152
135 const ActivationScopeTestData kActivationScopeTestData[] = { 153 const ActivationScopeTestData kActivationScopeTestData[] = {
136 {ActivationDecision::ACTIVATED, false /* url_matches_activation_list */, 154 {ActivationDecision::ACTIVATED, false /* url_matches_activation_list */,
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after
261 279
262 navigation_simulator->Commit(); 280 navigation_simulator->Commit();
263 ExpectActivationSignalForFrame(main_rfh(), expected_activation); 281 ExpectActivationSignalForFrame(main_rfh(), expected_activation);
264 EXPECT_EQ(expected_activation_decision, 282 EXPECT_EQ(expected_activation_decision,
265 factory()->GetActivationDecisionForLastCommittedPageLoad()); 283 factory()->GetActivationDecisionForLastCommittedPageLoad());
266 284
267 // Re-create a subframe now that the frame has navigated. 285 // Re-create a subframe now that the frame has navigated.
268 content::RenderFrameHostTester* rfh_tester = 286 content::RenderFrameHostTester* rfh_tester =
269 content::RenderFrameHostTester::For(main_rfh()); 287 content::RenderFrameHostTester::For(main_rfh());
270 rfh_tester->AppendChild(kSubframeName); 288 rfh_tester->AppendChild(kSubframeName);
289 ActivationList activation_list =
290 GetListForThreatTypeAndMetadata(threat_type, threat_type_metadata);
271 291
292 const std::string suffix(GetSuffixForList(activation_list));
272 if (expected_pattern != EMPTY) { 293 if (expected_pattern != EMPTY) {
273 EXPECT_THAT(tester.GetAllSamples(kMatchesPatternHistogramName), 294 EXPECT_THAT(tester.GetAllSamples(kMatchesPatternHistogramName + suffix),
274 ::testing::ElementsAre(base::Bucket(expected_pattern, 1))); 295 ::testing::ElementsAre(base::Bucket(expected_pattern, 1)));
275 EXPECT_THAT( 296 EXPECT_THAT(
276 tester.GetAllSamples(kNavigationChainSize), 297 tester.GetAllSamples(kNavigationChainSize + suffix),
277 ::testing::ElementsAre(base::Bucket(navigation_chain.size(), 1))); 298 ::testing::ElementsAre(base::Bucket(navigation_chain.size(), 1)));
278
279 } else { 299 } else {
280 EXPECT_THAT(tester.GetAllSamples(kMatchesPatternHistogramName), 300 EXPECT_THAT(tester.GetAllSamples(kMatchesPatternHistogramName + suffix),
281 ::testing::IsEmpty()); 301 ::testing::IsEmpty());
282 EXPECT_THAT(tester.GetAllSamples(kNavigationChainSize), 302 EXPECT_THAT(tester.GetAllSamples(kNavigationChainSize + suffix),
283 ::testing::IsEmpty()); 303 ::testing::IsEmpty());
284 } 304 }
285 } 305 }
286 306
287 void NavigateAndCommitSubframe(const GURL& url, bool expected_activation) { 307 void NavigateAndCommitSubframe(const GURL& url, bool expected_activation) {
288 EXPECT_CALL(*client(), ToggleNotificationVisibility(::testing::_)).Times(0); 308 EXPECT_CALL(*client(), ToggleNotificationVisibility(::testing::_)).Times(0);
289 309
290 content::NavigationSimulator::NavigateAndCommitFromDocument( 310 content::NavigationSimulator::NavigateAndCommitFromDocument(
291 url, GetSubframeRFH()); 311 url, GetSubframeRFH());
292 ExpectActivationSignalForFrame(GetSubframeRFH(), expected_activation); 312 ExpectActivationSignalForFrame(GetSubframeRFH(), expected_activation);
(...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after
419 TEST_F(ContentSubresourceFilterDriverFactoryTest, 439 TEST_F(ContentSubresourceFilterDriverFactoryTest,
420 ActivateForFrameHostDisabledFeature) { 440 ActivateForFrameHostDisabledFeature) {
421 // Activation scope is set to NONE => no activation should happen even if URL 441 // Activation scope is set to NONE => no activation should happen even if URL
422 // which is visited was a SB hit. 442 // which is visited was a SB hit.
423 base::FieldTrialList field_trial_list(nullptr); 443 base::FieldTrialList field_trial_list(nullptr);
424 testing::ScopedSubresourceFilterFeatureToggle scoped_feature_toggle( 444 testing::ScopedSubresourceFilterFeatureToggle scoped_feature_toggle(
425 base::FeatureList::OVERRIDE_DISABLE_FEATURE, kActivationLevelEnabled, 445 base::FeatureList::OVERRIDE_DISABLE_FEATURE, kActivationLevelEnabled,
426 kActivationScopeAllSites, 446 kActivationScopeAllSites,
427 kActivationListSocialEngineeringAdsInterstitial); 447 kActivationListSocialEngineeringAdsInterstitial);
428 const GURL url(kExampleUrlWithParams); 448 const GURL url(kExampleUrlWithParams);
429 NavigateAndExpectActivation({true}, {url}, EMPTY, 449 NavigateAndExpectActivation({true}, {url}, NO_REDIRECTS_HIT,
430 ActivationDecision::ACTIVATION_DISABLED); 450 ActivationDecision::ACTIVATION_DISABLED);
431 factory()->AddHostOfURLToWhitelistSet(url); 451 factory()->AddHostOfURLToWhitelistSet(url);
432 NavigateAndExpectActivation({true}, {url}, EMPTY, 452 NavigateAndExpectActivation({true}, {url}, NO_REDIRECTS_HIT,
433 ActivationDecision::ACTIVATION_DISABLED); 453 ActivationDecision::ACTIVATION_DISABLED);
434 } 454 }
435 455
436 TEST_F(ContentSubresourceFilterDriverFactoryTest, NoActivationWhenNoMatch) { 456 TEST_F(ContentSubresourceFilterDriverFactoryTest, NoActivationWhenNoMatch) {
437 base::FieldTrialList field_trial_list(nullptr); 457 base::FieldTrialList field_trial_list(nullptr);
438 testing::ScopedSubresourceFilterFeatureToggle scoped_feature_toggle( 458 testing::ScopedSubresourceFilterFeatureToggle scoped_feature_toggle(
439 base::FeatureList::OVERRIDE_ENABLE_FEATURE, kActivationLevelEnabled, 459 base::FeatureList::OVERRIDE_ENABLE_FEATURE, kActivationLevelEnabled,
440 kActivationScopeActivationList, 460 kActivationScopeActivationList,
441 kActivationListSocialEngineeringAdsInterstitial); 461 kActivationListSocialEngineeringAdsInterstitial);
442 NavigateAndExpectActivation({false}, {GURL(kExampleUrl)}, EMPTY, 462 NavigateAndExpectActivation({false}, {GURL(kExampleUrl)}, EMPTY,
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
481 base::FieldTrialList field_trial_list(nullptr); 501 base::FieldTrialList field_trial_list(nullptr);
482 testing::ScopedSubresourceFilterFeatureToggle scoped_feature_toggle( 502 testing::ScopedSubresourceFilterFeatureToggle scoped_feature_toggle(
483 base::FeatureList::OVERRIDE_ENABLE_FEATURE, kActivationLevelEnabled, 503 base::FeatureList::OVERRIDE_ENABLE_FEATURE, kActivationLevelEnabled,
484 kActivationScopeAllSites); 504 kActivationScopeAllSites);
485 const GURL url(kExampleUrl); 505 const GURL url(kExampleUrl);
486 NavigateAndExpectActivation({false}, {url}, EMPTY, 506 NavigateAndExpectActivation({false}, {url}, EMPTY,
487 ActivationDecision::ACTIVATED); 507 ActivationDecision::ACTIVATED);
488 EmulateFailedNavigationAndExpectNoActivation(url); 508 EmulateFailedNavigationAndExpectNoActivation(url);
489 } 509 }
490 510
511 // TODO(melandory): refactor the test so it no longer require the current
512 // activation list to be matching.
491 TEST_F(ContentSubresourceFilterDriverFactoryTest, RedirectPatternTest) { 513 TEST_F(ContentSubresourceFilterDriverFactoryTest, RedirectPatternTest) {
492 base::FieldTrialList field_trial_list(nullptr); 514 base::FieldTrialList field_trial_list(nullptr);
493 testing::ScopedSubresourceFilterFeatureToggle scoped_feature_toggle( 515 testing::ScopedSubresourceFilterFeatureToggle scoped_feature_toggle(
494 base::FeatureList::OVERRIDE_ENABLE_FEATURE, kActivationLevelEnabled, 516 base::FeatureList::OVERRIDE_ENABLE_FEATURE, kActivationLevelEnabled,
495 kActivationScopeActivationList, 517 kActivationScopeActivationList,
496 kActivationListSocialEngineeringAdsInterstitial); 518 kActivationListSocialEngineeringAdsInterstitial);
497 struct RedirectRedirectChainMatchPatternTestData { 519 struct RedirectRedirectChainMatchPatternTestData {
498 std::vector<bool> blacklisted_urls; 520 std::vector<bool> blacklisted_urls;
499 std::vector<GURL> navigation_chain; 521 std::vector<GURL> navigation_chain;
500 RedirectChainMatchPattern hit_expected_pattern; 522 RedirectChainMatchPattern hit_expected_pattern;
(...skipping 167 matching lines...) Expand 10 before | Expand all | Expand 10 after
668 // list for which the Safe Browsing hit has happened. 690 // list for which the Safe Browsing hit has happened.
669 const ActivationListTestData& test_data = GetParam(); 691 const ActivationListTestData& test_data = GetParam();
670 base::FieldTrialList field_trial_list(nullptr); 692 base::FieldTrialList field_trial_list(nullptr);
671 testing::ScopedSubresourceFilterFeatureToggle scoped_feature_toggle( 693 testing::ScopedSubresourceFilterFeatureToggle scoped_feature_toggle(
672 base::FeatureList::OVERRIDE_ENABLE_FEATURE, kActivationLevelEnabled, 694 base::FeatureList::OVERRIDE_ENABLE_FEATURE, kActivationLevelEnabled,
673 kActivationScopeActivationList, test_data.activation_list); 695 kActivationScopeActivationList, test_data.activation_list);
674 696
675 const GURL test_url("https://example.com/nonsoceng?q=engsocnon"); 697 const GURL test_url("https://example.com/nonsoceng?q=engsocnon");
676 std::vector<GURL> navigation_chain; 698 std::vector<GURL> navigation_chain;
677 699
678 const bool expected_activation = 700 ActivationList effective_list = GetListForThreatTypeAndMetadata(
679 test_data.expected_activation_decision == ActivationDecision::ACTIVATED; 701 test_data.threat_type, test_data.threat_type_metadata);
680 NavigateAndExpectActivation( 702 NavigateAndExpectActivation(
681 {false, false, false, true}, 703 {false, false, false, true},
682 {GURL(kUrlA), GURL(kUrlB), GURL(kUrlC), test_url}, test_data.threat_type, 704 {GURL(kUrlA), GURL(kUrlB), GURL(kUrlC), test_url}, test_data.threat_type,
683 test_data.threat_type_metadata, content::Referrer(), 705 test_data.threat_type_metadata, content::Referrer(),
684 ui::PAGE_TRANSITION_LINK, expected_activation ? F0M0L1 : EMPTY, 706 ui::PAGE_TRANSITION_LINK,
707 effective_list != ActivationList::NONE ? F0M0L1 : EMPTY,
685 test_data.expected_activation_decision); 708 test_data.expected_activation_decision);
686 }; 709 };
687 710
688 TEST_P(ContentSubresourceFilterDriverFactoryActivationScopeTest, 711 TEST_P(ContentSubresourceFilterDriverFactoryActivationScopeTest,
689 ActivateForScopeType) { 712 ActivateForScopeType) {
690 const ActivationScopeTestData& test_data = GetParam(); 713 const ActivationScopeTestData& test_data = GetParam();
691 base::FieldTrialList field_trial_list(nullptr); 714 base::FieldTrialList field_trial_list(nullptr);
692 testing::ScopedSubresourceFilterFeatureToggle scoped_feature_toggle( 715 testing::ScopedSubresourceFilterFeatureToggle scoped_feature_toggle(
693 base::FeatureList::OVERRIDE_ENABLE_FEATURE, kActivationLevelEnabled, 716 base::FeatureList::OVERRIDE_ENABLE_FEATURE, kActivationLevelEnabled,
694 test_data.activation_scope, 717 test_data.activation_scope,
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
755 ActivationScopeTest, 778 ActivationScopeTest,
756 ContentSubresourceFilterDriverFactoryActivationScopeTest, 779 ContentSubresourceFilterDriverFactoryActivationScopeTest,
757 ::testing::ValuesIn(kActivationScopeTestData)); 780 ::testing::ValuesIn(kActivationScopeTestData));
758 781
759 INSTANTIATE_TEST_CASE_P( 782 INSTANTIATE_TEST_CASE_P(
760 ActivationLevelTest, 783 ActivationLevelTest,
761 ContentSubresourceFilterDriverFactoryActivationLevelTest, 784 ContentSubresourceFilterDriverFactoryActivationLevelTest,
762 ::testing::ValuesIn(kActivationLevelTestData)); 785 ::testing::ValuesIn(kActivationLevelTestData));
763 786
764 } // namespace subresource_filter 787 } // namespace subresource_filter
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698