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

Side by Side Diff: chrome/browser/subresource_filter/subresource_filter_browsertest.cc

Issue 2645283007: Add the client for accessing Subresource Filter only list. (Closed)
Patch Set: Created 3 years, 10 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 <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 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
83 "SubresourceFilter.PageLoad.SubresourceEvaluation.TotalCPUDuration"; 83 "SubresourceFilter.PageLoad.SubresourceEvaluation.TotalCPUDuration";
84 constexpr const char kEvaluationTotalWallDurationForDocument[] = 84 constexpr const char kEvaluationTotalWallDurationForDocument[] =
85 "SubresourceFilter.DocumentLoad.SubresourceEvaluation.TotalWallDuration"; 85 "SubresourceFilter.DocumentLoad.SubresourceEvaluation.TotalWallDuration";
86 constexpr const char kEvaluationTotalCPUDurationForDocument[] = 86 constexpr const char kEvaluationTotalCPUDurationForDocument[] =
87 "SubresourceFilter.DocumentLoad.SubresourceEvaluation.TotalCPUDuration"; 87 "SubresourceFilter.DocumentLoad.SubresourceEvaluation.TotalCPUDuration";
88 constexpr const char kEvaluationWallDuration[] = 88 constexpr const char kEvaluationWallDuration[] =
89 "SubresourceFilter.SubresourceLoad.Evaluation.WallDuration"; 89 "SubresourceFilter.SubresourceLoad.Evaluation.WallDuration";
90 constexpr const char kEvaluationCPUDuration[] = 90 constexpr const char kEvaluationCPUDuration[] =
91 "SubresourceFilter.SubresourceLoad.Evaluation.CPUDuration"; 91 "SubresourceFilter.SubresourceLoad.Evaluation.CPUDuration";
92 92
93 // Names of navigation chain patterns diagram.
94 const char kMatchesPatternHistogramName[] =
95 "SubresourceFilter.PageLoad.RedirectChainMatchPattern";
96 const char kNavigationChainSize[] =
97 "SubresourceFilter.PageLoad.RedirectChainLength";
98 const char kSubresourceFilterOnlySuffix[] = ".SubresourceFilterOnly";
99
93 // Other histograms. 100 // Other histograms.
94 const char kSubresourceFilterPromptHistogram[] = 101 const char kSubresourceFilterPromptHistogram[] =
95 "SubresourceFilter.Prompt.NumVisibility"; 102 "SubresourceFilter.Prompt.NumVisibility";
96 103
104 // Human readable representation of expected redirect chain match patterns.
105 // The explanations for the buckets given for the following redirect chain:
106 // A->B->C->D, where A is initial URL and D is a final URL.
107 enum RedirectChainMatchPattern {
108 EMPTY, // No histograms were recorded.
109 F0M0L1, // D is a Safe Browsing match.
110 F0M1L0, // B or C, or both are Safe Browsing matches.
111 F0M1L1, // B or C, or both and D are Safe Browsing matches.
112 F1M0L0, // A is Safe Browsing match
113 F1M0L1, // A and D are Safe Browsing matches.
114 F1M1L0, // B and/or C and A are Safe Browsing matches.
115 F1M1L1, // B and/or C and A and D are Safe Browsing matches.
116 NO_REDIRECTS_HIT, // Redirect chain consists of single URL, aka no redirects
117 // has happened, and this URL was a Safe Browsing hit.
118 NUM_HIT_PATTERNS,
119 };
120
97 // Database manager that allows any URL to be configured as blacklisted for 121 // Database manager that allows any URL to be configured as blacklisted for
98 // testing. 122 // testing.
99 class FakeSafeBrowsingDatabaseManager 123 class FakeSafeBrowsingDatabaseManager
100 : public safe_browsing::TestSafeBrowsingDatabaseManager { 124 : public safe_browsing::TestSafeBrowsingDatabaseManager {
101 public: 125 public:
102 FakeSafeBrowsingDatabaseManager() {} 126 FakeSafeBrowsingDatabaseManager() {}
103 127
104 void AddBlacklistedURL(const GURL& url, 128 void AddBlacklistedURL(const GURL& url,
105 safe_browsing::SBThreatType threat_type) { 129 safe_browsing::SBThreatType threat_type) {
106 url_to_threat_type_[url] = threat_type; 130 url_to_threat_type_[url] = threat_type;
(...skipping 11 matching lines...) Expand all
118 base::Bind(&Client::OnCheckBrowseUrlResult, base::Unretained(client), 142 base::Bind(&Client::OnCheckBrowseUrlResult, base::Unretained(client),
119 url, url_to_threat_type_[url], 143 url, url_to_threat_type_[url],
120 safe_browsing::ThreatMetadata())); 144 safe_browsing::ThreatMetadata()));
121 return false; 145 return false;
122 } 146 }
123 147
124 bool CheckResourceUrl(const GURL& url, Client* client) override { 148 bool CheckResourceUrl(const GURL& url, Client* client) override {
125 return true; 149 return true;
126 } 150 }
127 151
152 bool CheckUrlForSubresourceFilter(const GURL& url, Client* client) override {
153 if (!url_to_threat_type_.count(url))
154 return true;
155 content::BrowserThread::PostTask(
156 content::BrowserThread::IO, FROM_HERE,
157 base::Bind(&Client::OnCheckBrowseUrlResult, base::Unretained(client),
158 url, url_to_threat_type_[url],
159 safe_browsing::ThreatMetadata()));
160 return false;
161 }
162
128 bool IsSupported() const override { return true; } 163 bool IsSupported() const override { return true; }
129 bool ChecksAreAlwaysAsync() const override { return false; } 164 bool ChecksAreAlwaysAsync() const override { return false; }
130 bool CanCheckResourceType( 165 bool CanCheckResourceType(
131 content::ResourceType /* resource_type */) const override { 166 content::ResourceType /* resource_type */) const override {
132 return true; 167 return true;
133 } 168 }
134 169
135 safe_browsing::ThreatSource GetThreatSource() const override { 170 safe_browsing::ThreatSource GetThreatSource() const override {
136 return safe_browsing::ThreatSource::LOCAL_PVER4; 171 return safe_browsing::ThreatSource::LOCAL_PVER4;
137 } 172 }
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
210 // called after ChromeBrowserMainParts::PreBrowserStart(), which instantiates 245 // called after ChromeBrowserMainParts::PreBrowserStart(), which instantiates
211 // the RulesetService. 246 // the RulesetService.
212 // 247 //
213 // On the other hand, setting up field trials in this method would be too 248 // On the other hand, setting up field trials in this method would be too
214 // early, as it is called before BrowserMain, which expects no FieldTrialList 249 // early, as it is called before BrowserMain, which expects no FieldTrialList
215 // singleton to exist. There are no other hooks we could use either. 250 // singleton to exist. There are no other hooks we could use either.
216 // 251 //
217 // As a workaround, enable the feature here, then enable the feature once 252 // As a workaround, enable the feature here, then enable the feature once
218 // again + set up the field trials later. 253 // again + set up the field trials later.
219 void SetUpCommandLine(base::CommandLine* command_line) override { 254 void SetUpCommandLine(base::CommandLine* command_line) override {
220 command_line->AppendSwitchASCII(switches::kEnableFeatures, 255 command_line->AppendSwitchASCII(
221 kSafeBrowsingSubresourceFilter.name); 256 switches::kEnableFeatures,
257 std::string(kSafeBrowsingSubresourceFilter.name) +
258 ", SafeBrowsingV4OnlyEnabled");
222 } 259 }
223 260
224 void SetUpInProcessBrowserTestFixture() override { 261 void SetUpInProcessBrowserTestFixture() override {
225 fake_safe_browsing_database_ = new FakeSafeBrowsingDatabaseManager(); 262 fake_safe_browsing_database_ = new FakeSafeBrowsingDatabaseManager();
226 test_safe_browsing_factory_.SetTestDatabaseManager( 263 test_safe_browsing_factory_.SetTestDatabaseManager(
227 fake_safe_browsing_database_.get()); 264 fake_safe_browsing_database_.get());
228 test_safe_browsing_factory_.SetTestUIManager(new FakeSafeBrowsingUIManager); 265 test_safe_browsing_factory_.SetTestUIManager(new FakeSafeBrowsingUIManager);
229 safe_browsing::SafeBrowsingService::RegisterFactory( 266 safe_browsing::SafeBrowsingService::RegisterFactory(
230 &test_safe_browsing_factory_); 267 &test_safe_browsing_factory_);
231 } 268 }
(...skipping 15 matching lines...) Expand all
247 284
248 GURL GetTestUrl(const std::string& path) { 285 GURL GetTestUrl(const std::string& path) {
249 return embedded_test_server()->base_url().Resolve(path); 286 return embedded_test_server()->base_url().Resolve(path);
250 } 287 }
251 288
252 void ConfigureAsPhishingURL(const GURL& url) { 289 void ConfigureAsPhishingURL(const GURL& url) {
253 fake_safe_browsing_database_->AddBlacklistedURL( 290 fake_safe_browsing_database_->AddBlacklistedURL(
254 url, safe_browsing::SB_THREAT_TYPE_URL_PHISHING); 291 url, safe_browsing::SB_THREAT_TYPE_URL_PHISHING);
255 } 292 }
256 293
294 void ConfigureAsSubresourceFilterOnlyURL(const GURL& url) {
295 fake_safe_browsing_database_->AddBlacklistedURL(
296 url, safe_browsing::SB_THREAT_TYPE_SUBRESOURCE_FILTER);
297 }
298
257 content::WebContents* web_contents() { 299 content::WebContents* web_contents() {
258 return browser()->tab_strip_model()->GetActiveWebContents(); 300 return browser()->tab_strip_model()->GetActiveWebContents();
259 } 301 }
260 302
261 content::RenderFrameHost* FindFrameByName(const std::string& name) { 303 content::RenderFrameHost* FindFrameByName(const std::string& name) {
262 for (content::RenderFrameHost* frame : web_contents()->GetAllFrames()) { 304 for (content::RenderFrameHost* frame : web_contents()->GetAllFrames()) {
263 if (frame->GetFrameName() == name) 305 if (frame->GetFrameName() == name)
264 return frame; 306 return frame;
265 } 307 }
266 return nullptr; 308 return nullptr;
(...skipping 452 matching lines...) Expand 10 before | Expand all | Expand 10 after
719 tester.ExpectTotalCount(kSubresourceLoadsEvaluated, 0); 761 tester.ExpectTotalCount(kSubresourceLoadsEvaluated, 0);
720 tester.ExpectTotalCount(kSubresourceLoadsMatchedRules, 0); 762 tester.ExpectTotalCount(kSubresourceLoadsMatchedRules, 0);
721 tester.ExpectTotalCount(kSubresourceLoadsDisallowed, 0); 763 tester.ExpectTotalCount(kSubresourceLoadsDisallowed, 0);
722 764
723 // Although SubresourceFilterAgents still record the activation decision. 765 // Although SubresourceFilterAgents still record the activation decision.
724 tester.ExpectUniqueSample( 766 tester.ExpectUniqueSample(
725 kDocumentLoadActivationState, 767 kDocumentLoadActivationState,
726 static_cast<base::Histogram::Sample>(ActivationState::DISABLED), 6); 768 static_cast<base::Histogram::Sample>(ActivationState::DISABLED), 6);
727 } 769 }
728 770
771 IN_PROC_BROWSER_TEST_F(
772 SubresourceFilterBrowserTest,
773 ExpectRedirectPatternHistogramsAreRecordedForSubresourceFilterOnlyMatch) {
774 ASSERT_NO_FATAL_FAILURE(SetRulesetToDisallowURLsWithPathSuffix(
775 "suffix-that-does-not-match-anything"));
776
777 GURL url(GetTestUrl("subresource_filter/frame_with_included_script.html"));
778 ConfigureAsSubresourceFilterOnlyURL(url);
779
780 base::HistogramTester tester;
781 ui_test_utils::NavigateToURL(browser(), url);
782
783 EXPECT_THAT(tester.GetAllSamples(std::string(kMatchesPatternHistogramName) +
784 std::string(kSubresourceFilterOnlySuffix)),
785 ::testing::ElementsAre(base::Bucket(NO_REDIRECTS_HIT, 1)));
786 EXPECT_THAT(tester.GetAllSamples(std::string(kNavigationChainSize) +
787 std::string(kSubresourceFilterOnlySuffix)),
788 ::testing::ElementsAre(base::Bucket(1, 1)));
789 }
790
791 IN_PROC_BROWSER_TEST_F(
792 SubresourceFilterBrowserTest,
793 ExpectRedirectPatternHistogramsAreRecordedForSubresourceFilterOnlyWithRedire cts) {
794 ASSERT_NO_FATAL_FAILURE(
795 SetRulesetToDisallowURLsWithPathSuffix("included_script.js"));
796 std::string initial_host("a.com");
797 std::string redirected_host("b.com");
798
799 GURL redirect_url(embedded_test_server()->GetURL(redirected_host, "/"));
800 GURL url(embedded_test_server()->GetURL(
801 initial_host, "/client-redirect?" + redirect_url.spec()));
802
803 ConfigureAsSubresourceFilterOnlyURL(redirect_url);
804 base::HistogramTester tester;
805 ui_test_utils::NavigateToURLBlockUntilNavigationsComplete(browser(), url, 2);
806 EXPECT_THAT(tester.GetAllSamples(std::string(kMatchesPatternHistogramName) +
807 std::string(kSubresourceFilterOnlySuffix)),
808 ::testing::ElementsAre(base::Bucket(NO_REDIRECTS_HIT, 1)));
809
810 EXPECT_THAT(tester.GetAllSamples(std::string(kNavigationChainSize) +
811 std::string(kSubresourceFilterOnlySuffix)),
812 ::testing::ElementsAre(base::Bucket(1, 1)));
813 }
814
815 IN_PROC_BROWSER_TEST_F(
816 SubresourceFilterBrowserTest,
817 ExpectRedirectPatternHistogramsAreRecordedForSubresourceFilterOnlyRedirectMa tch) {
818 ASSERT_NO_FATAL_FAILURE(
819 SetRulesetToDisallowURLsWithPathSuffix("included_script.js"));
820 std::string initial_host("a.com");
821 std::string redirected_host("b.com");
822
823 GURL redirect_url(embedded_test_server()->GetURL(
824 redirected_host, "/subresource_filter/frame_with_included_script.html"));
825 GURL url(embedded_test_server()->GetURL(
826 initial_host, "/client-redirect?" + redirect_url.spec()));
827
828 ConfigureAsSubresourceFilterOnlyURL(GURL(url.host()));
829 base::HistogramTester tester;
830 ui_test_utils::NavigateToURLBlockUntilNavigationsComplete(browser(), url, 2);
831 EXPECT_THAT(tester.GetAllSamples(std::string(kMatchesPatternHistogramName) +
832 std::string(kSubresourceFilterOnlySuffix)),
833 ::testing::IsEmpty());
834
835 EXPECT_THAT(tester.GetAllSamples(std::string(kNavigationChainSize) +
836 std::string(kSubresourceFilterOnlySuffix)),
837 ::testing::IsEmpty());
838 }
839
729 } // namespace subresource_filter 840 } // namespace subresource_filter
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698