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

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: adressed comments from jwd 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 <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"
11 #include "base/command_line.h" 11 #include "base/command_line.h"
12 #include "base/files/file_path.h" 12 #include "base/files/file_path.h"
13 #include "base/location.h" 13 #include "base/location.h"
14 #include "base/macros.h" 14 #include "base/macros.h"
15 #include "base/path_service.h" 15 #include "base/path_service.h"
16 #include "base/strings/string_piece.h" 16 #include "base/strings/string_piece.h"
17 #include "base/strings/stringprintf.h" 17 #include "base/strings/stringprintf.h"
18 #include "base/test/histogram_tester.h" 18 #include "base/test/histogram_tester.h"
19 #include "chrome/browser/browser_process.h" 19 #include "chrome/browser/browser_process.h"
20 #include "chrome/browser/metrics/subprocess_metrics_provider.h" 20 #include "chrome/browser/metrics/subprocess_metrics_provider.h"
21 #include "chrome/browser/page_load_metrics/observers/subresource_filter_metrics_ observer.h" 21 #include "chrome/browser/page_load_metrics/observers/subresource_filter_metrics_ observer.h"
22 #include "chrome/browser/safe_browsing/test_safe_browsing_service.h" 22 #include "chrome/browser/safe_browsing/test_safe_browsing_service.h"
23 #include "chrome/browser/safe_browsing/v4_test_utils.h"
23 #include "chrome/browser/subresource_filter/test_ruleset_publisher.h" 24 #include "chrome/browser/subresource_filter/test_ruleset_publisher.h"
24 #include "chrome/browser/ui/browser.h" 25 #include "chrome/browser/ui/browser.h"
25 #include "chrome/browser/ui/browser_commands.h" 26 #include "chrome/browser/ui/browser_commands.h"
26 #include "chrome/browser/ui/tabs/tab_strip_model.h" 27 #include "chrome/browser/ui/tabs/tab_strip_model.h"
27 #include "chrome/common/chrome_paths.h" 28 #include "chrome/common/chrome_paths.h"
28 #include "chrome/common/url_constants.h" 29 #include "chrome/common/url_constants.h"
29 #include "chrome/test/base/in_process_browser_test.h" 30 #include "chrome/test/base/in_process_browser_test.h"
30 #include "chrome/test/base/ui_test_utils.h" 31 #include "chrome/test/base/ui_test_utils.h"
31 #include "components/safe_browsing_db/test_database_manager.h" 32 #include "components/safe_browsing_db/test_database_manager.h"
32 #include "components/safe_browsing_db/util.h" 33 #include "components/safe_browsing_db/util.h"
34 #include "components/safe_browsing_db/v4_database.h"
33 #include "components/security_interstitials/content/unsafe_resource.h" 35 #include "components/security_interstitials/content/unsafe_resource.h"
34 #include "components/subresource_filter/content/browser/content_subresource_filt er_driver_factory.h" 36 #include "components/subresource_filter/content/browser/content_subresource_filt er_driver_factory.h"
35 #include "components/subresource_filter/core/browser/subresource_filter_features .h" 37 #include "components/subresource_filter/core/browser/subresource_filter_features .h"
36 #include "components/subresource_filter/core/browser/subresource_filter_features _test_support.h" 38 #include "components/subresource_filter/core/browser/subresource_filter_features _test_support.h"
37 #include "components/subresource_filter/core/common/activation_level.h" 39 #include "components/subresource_filter/core/common/activation_level.h"
38 #include "components/subresource_filter/core/common/scoped_timers.h" 40 #include "components/subresource_filter/core/common/scoped_timers.h"
39 #include "components/subresource_filter/core/common/test_ruleset_utils.h" 41 #include "components/subresource_filter/core/common/test_ruleset_utils.h"
40 #include "content/public/browser/browser_thread.h" 42 #include "content/public/browser/browser_thread.h"
41 #include "content/public/browser/notification_service.h" 43 #include "content/public/browser/notification_service.h"
42 #include "content/public/browser/notification_types.h" 44 #include "content/public/browser/notification_types.h"
43 #include "content/public/browser/render_frame_host.h" 45 #include "content/public/browser/render_frame_host.h"
44 #include "content/public/browser/web_contents.h" 46 #include "content/public/browser/web_contents.h"
45 #include "content/public/common/content_switches.h" 47 #include "content/public/common/content_switches.h"
46 #include "content/public/test/browser_test_utils.h" 48 #include "content/public/test/browser_test_utils.h"
47 #include "content/public/test/test_navigation_observer.h" 49 #include "content/public/test/test_navigation_observer.h"
48 #include "content/public/test/test_utils.h" 50 #include "content/public/test/test_utils.h"
49 #include "net/dns/mock_host_resolver.h" 51 #include "net/dns/mock_host_resolver.h"
50 #include "net/test/embedded_test_server/embedded_test_server.h" 52 #include "net/test/embedded_test_server/embedded_test_server.h"
51 #include "net/test/spawned_test_server/spawned_test_server.h" 53 #include "net/test/spawned_test_server/spawned_test_server.h"
52 #include "net/test/test_data_directory.h" 54 #include "net/test/test_data_directory.h"
53 #include "testing/gmock/include/gmock/gmock.h" 55 #include "testing/gmock/include/gmock/gmock.h"
54 #include "testing/gtest/include/gtest/gtest.h" 56 #include "testing/gtest/include/gtest/gtest.h"
55 57
56 namespace { 58 namespace {
57 59
58 // The path to a multi-frame document used for tests. 60 // The path to a multi-frame document used for tests.
59 static constexpr const char kTestFrameSetPath[] = 61 static constexpr const char kTestFrameSetPath[] =
60 "subresource_filter/frame_set.html"; 62 "/subresource_filter/frame_set.html";
61 63
62 // Names of DocumentLoad histograms. 64 // Names of DocumentLoad histograms.
63 constexpr const char kDocumentLoadActivationLevel[] = 65 constexpr const char kDocumentLoadActivationLevel[] =
64 "SubresourceFilter.DocumentLoad.ActivationState"; 66 "SubresourceFilter.DocumentLoad.ActivationState";
65 constexpr const char kSubresourceLoadsTotal[] = 67 constexpr const char kSubresourceLoadsTotal[] =
66 "SubresourceFilter.DocumentLoad.NumSubresourceLoads.Total"; 68 "SubresourceFilter.DocumentLoad.NumSubresourceLoads.Total";
67 constexpr const char kSubresourceLoadsEvaluated[] = 69 constexpr const char kSubresourceLoadsEvaluated[] =
68 "SubresourceFilter.DocumentLoad.NumSubresourceLoads.Evaluated"; 70 "SubresourceFilter.DocumentLoad.NumSubresourceLoads.Evaluated";
69 constexpr const char kSubresourceLoadsMatchedRules[] = 71 constexpr const char kSubresourceLoadsMatchedRules[] =
70 "SubresourceFilter.DocumentLoad.NumSubresourceLoads.MatchedRules"; 72 "SubresourceFilter.DocumentLoad.NumSubresourceLoads.MatchedRules";
(...skipping 20 matching lines...) Expand all
91 "SubresourceFilter.PageLoad.SubresourceEvaluation.TotalCPUDuration"; 93 "SubresourceFilter.PageLoad.SubresourceEvaluation.TotalCPUDuration";
92 constexpr const char kEvaluationTotalWallDurationForDocument[] = 94 constexpr const char kEvaluationTotalWallDurationForDocument[] =
93 "SubresourceFilter.DocumentLoad.SubresourceEvaluation.TotalWallDuration"; 95 "SubresourceFilter.DocumentLoad.SubresourceEvaluation.TotalWallDuration";
94 constexpr const char kEvaluationTotalCPUDurationForDocument[] = 96 constexpr const char kEvaluationTotalCPUDurationForDocument[] =
95 "SubresourceFilter.DocumentLoad.SubresourceEvaluation.TotalCPUDuration"; 97 "SubresourceFilter.DocumentLoad.SubresourceEvaluation.TotalCPUDuration";
96 constexpr const char kEvaluationWallDuration[] = 98 constexpr const char kEvaluationWallDuration[] =
97 "SubresourceFilter.SubresourceLoad.Evaluation.WallDuration"; 99 "SubresourceFilter.SubresourceLoad.Evaluation.WallDuration";
98 constexpr const char kEvaluationCPUDuration[] = 100 constexpr const char kEvaluationCPUDuration[] =
99 "SubresourceFilter.SubresourceLoad.Evaluation.CPUDuration"; 101 "SubresourceFilter.SubresourceLoad.Evaluation.CPUDuration";
100 102
103 #if defined(GOOGLE_CHROME_BUILD)
104 // Names of navigation chain patterns diagram.
engedy 2017/03/10 14:39:32 nit: ... histograms.
melandory 2017/03/15 13:41:35 Done.
105 const char kMatchesPatternHistogramName[] =
106 "SubresourceFilter.PageLoad.RedirectChainMatchPattern";
107 const char kNavigationChainSize[] =
108 "SubresourceFilter.PageLoad.RedirectChainLength";
109 const char kSubresourceFilterOnlySuffix[] = ".SubresourceFilterOnly";
110 #endif
111
101 // Other histograms. 112 // Other histograms.
102 const char kSubresourceFilterPromptHistogram[] = 113 const char kSubresourceFilterPromptHistogram[] =
103 "SubresourceFilter.Prompt.NumVisibility"; 114 "SubresourceFilter.Prompt.NumVisibility";
104 115
105 // Database manager that allows any URL to be configured as blacklisted for 116 // Human readable representation of expected redirect chain match patterns.
106 // testing. 117 // The explanations for the buckets given for the following redirect chain:
107 class FakeSafeBrowsingDatabaseManager 118 // A->B->C->D, where A is initial URL and D is a final URL.
108 : public safe_browsing::TestSafeBrowsingDatabaseManager { 119 enum RedirectChainMatchPattern {
109 public: 120 EMPTY, // No histograms were recorded.
110 FakeSafeBrowsingDatabaseManager() {} 121 F0M0L1, // D is a Safe Browsing match.
111 122 F0M1L0, // B or C, or both are Safe Browsing matches.
112 void AddBlacklistedURL(const GURL& url, 123 F0M1L1, // B or C, or both and D are Safe Browsing matches.
113 safe_browsing::SBThreatType threat_type) { 124 F1M0L0, // A is Safe Browsing match
114 url_to_threat_type_[url] = threat_type; 125 F1M0L1, // A and D are Safe Browsing matches.
115 } 126 F1M1L0, // B and/or C and A are Safe Browsing matches.
116 127 F1M1L1, // B and/or C and A and D are Safe Browsing matches.
117 protected: 128 NO_REDIRECTS_HIT, // Redirect chain consists of single URL, aka no redirects
118 ~FakeSafeBrowsingDatabaseManager() override {} 129 // has happened, and this URL was a Safe Browsing hit.
119 130 NUM_HIT_PATTERNS,
120 bool CheckBrowseUrl(const GURL& url, Client* client) override {
121 if (!url_to_threat_type_.count(url))
122 return true;
123
124 content::BrowserThread::PostTask(
125 content::BrowserThread::IO, FROM_HERE,
126 base::Bind(&Client::OnCheckBrowseUrlResult, base::Unretained(client),
127 url, url_to_threat_type_[url],
128 safe_browsing::ThreatMetadata()));
129 return false;
130 }
131
132 bool CheckResourceUrl(const GURL& url, Client* client) override {
133 return true;
134 }
135
136 bool IsSupported() const override { return true; }
137 bool ChecksAreAlwaysAsync() const override { return false; }
138 bool CanCheckResourceType(
139 content::ResourceType /* resource_type */) const override {
140 return true;
141 }
142
143 safe_browsing::ThreatSource GetThreatSource() const override {
144 return safe_browsing::ThreatSource::LOCAL_PVER4;
145 }
146
147 bool CheckExtensionIDs(const std::set<std::string>& extension_ids,
148 Client* client) override {
149 return true;
150 }
151
152 private:
153 std::map<GURL, safe_browsing::SBThreatType> url_to_threat_type_;
154
155 DISALLOW_COPY_AND_ASSIGN(FakeSafeBrowsingDatabaseManager);
156 }; 131 };
157 132
158 // UI manager that never actually shows any interstitials, but emulates as if 133 // UI manager that never actually shows any interstitials, but emulates as if
159 // the user chose to proceed through them. 134 // the user chose to proceed through them.
160 class FakeSafeBrowsingUIManager 135 class FakeSafeBrowsingUIManager
161 : public safe_browsing::TestSafeBrowsingUIManager { 136 : public safe_browsing::TestSafeBrowsingUIManager {
162 public: 137 public:
163 FakeSafeBrowsingUIManager() {} 138 FakeSafeBrowsingUIManager() {}
164 139
165 protected: 140 protected:
166 ~FakeSafeBrowsingUIManager() override {} 141 ~FakeSafeBrowsingUIManager() override {}
167 142
168 void DisplayBlockingPage(const UnsafeResource& resource) override { 143 void DisplayBlockingPage(const UnsafeResource& resource) override {
169 resource.callback_thread->PostTask( 144 resource.callback_thread->PostTask(
170 FROM_HERE, base::Bind(resource.callback, true /* proceed */)); 145 FROM_HERE, base::Bind(resource.callback, true /* proceed */));
171 } 146 }
172 147
173 private: 148 private:
174 DISALLOW_COPY_AND_ASSIGN(FakeSafeBrowsingUIManager); 149 DISALLOW_COPY_AND_ASSIGN(FakeSafeBrowsingUIManager);
175 }; 150 };
176 151
177 GURL GetURLWithFragment(const GURL& url, base::StringPiece fragment) { 152 GURL GetURLWithFragment(const GURL& url, base::StringPiece fragment) {
178 GURL::Replacements replacements; 153 GURL::Replacements replacements;
179 replacements.SetRefStr(fragment); 154 replacements.SetRefStr(fragment);
180 return url.ReplaceComponents(replacements); 155 return url.ReplaceComponents(replacements);
181 } 156 }
182 157
183 GURL GetURLWithQuery(const GURL& url, base::StringPiece query) {
184 GURL::Replacements replacements;
185 replacements.SetQueryStr(query);
186 return url.ReplaceComponents(replacements);
187 }
188
189 } // namespace 158 } // namespace
190 159
191 namespace subresource_filter { 160 namespace subresource_filter {
192 161
193 using subresource_filter::testing::ScopedSubresourceFilterFeatureToggle; 162 using subresource_filter::testing::ScopedSubresourceFilterFeatureToggle;
194 using subresource_filter::testing::TestRulesetPublisher; 163 using subresource_filter::testing::TestRulesetPublisher;
195 using subresource_filter::testing::TestRulesetCreator; 164 using subresource_filter::testing::TestRulesetCreator;
196 using subresource_filter::testing::TestRulesetPair; 165 using subresource_filter::testing::TestRulesetPair;
197 using ActivationDecision = 166 using ActivationDecision =
198 ContentSubresourceFilterDriverFactory::ActivationDecision; 167 ContentSubresourceFilterDriverFactory::ActivationDecision;
(...skipping 23 matching lines...) Expand all
222 // called after ChromeBrowserMainParts::PreBrowserStart(), which instantiates 191 // called after ChromeBrowserMainParts::PreBrowserStart(), which instantiates
223 // the RulesetService. 192 // the RulesetService.
224 // 193 //
225 // On the other hand, setting up field trials in this method would be too 194 // On the other hand, setting up field trials in this method would be too
226 // early, as it is called before BrowserMain, which expects no FieldTrialList 195 // early, as it is called before BrowserMain, which expects no FieldTrialList
227 // singleton to exist. There are no other hooks we could use either. 196 // singleton to exist. There are no other hooks we could use either.
228 // 197 //
229 // As a workaround, enable the feature here, then enable the feature once 198 // As a workaround, enable the feature here, then enable the feature once
230 // again + set up the field trials later. 199 // again + set up the field trials later.
231 void SetUpCommandLine(base::CommandLine* command_line) override { 200 void SetUpCommandLine(base::CommandLine* command_line) override {
232 command_line->AppendSwitchASCII(switches::kEnableFeatures, 201 command_line->AppendSwitchASCII(
233 kSafeBrowsingSubresourceFilter.name); 202 switches::kEnableFeatures,
203 std::string(kSafeBrowsingSubresourceFilter.name) +
engedy 2017/03/10 14:39:32 nit: Let's make this nicer by either appending two
melandory 2017/03/15 13:41:36 Done.
204 ", SafeBrowsingV4OnlyEnabled");
234 } 205 }
235 206
236 void SetUpInProcessBrowserTestFixture() override { 207 void SetUp() override {
237 fake_safe_browsing_database_ = new FakeSafeBrowsingDatabaseManager(); 208 sb_factory_ =
238 test_safe_browsing_factory_.SetTestDatabaseManager( 209 base::MakeUnique<safe_browsing::TestSafeBrowsingServiceFactory>(
239 fake_safe_browsing_database_.get()); 210 safe_browsing::V4FeatureList::V4UsageStatus::V4_ONLY);
240 test_safe_browsing_factory_.SetTestUIManager(new FakeSafeBrowsingUIManager); 211 sb_factory_->SetTestUIManager(new FakeSafeBrowsingUIManager());
241 safe_browsing::SafeBrowsingService::RegisterFactory( 212 safe_browsing::SafeBrowsingService::RegisterFactory(sb_factory_.get());
242 &test_safe_browsing_factory_); 213
214 store_factory_ = new safe_browsing::TestV4StoreFactory();
engedy 2017/03/10 14:39:32 nit: Not used outside of this function.
melandory 2017/03/15 13:41:35 Done.
215 safe_browsing::V4Database::RegisterStoreFactoryForTest(
216 base::WrapUnique(store_factory_));
217
218 v4_db_factory_ = new safe_browsing::TestV4DatabaseFactory();
219 safe_browsing::V4Database::RegisterDatabaseFactoryForTest(
220 base::WrapUnique(v4_db_factory_));
221
222 v4_get_hash_factory_ =
223 new safe_browsing::TestV4GetHashProtocolManagerFactory();
224 safe_browsing::V4GetHashProtocolManager::RegisterFactory(
225 base::WrapUnique(v4_get_hash_factory_));
226 InProcessBrowserTest::SetUp();
227 }
228
229 void TearDown() override {
230 InProcessBrowserTest::TearDown();
231 // Unregister test factories after InProcessBrowserTest::TearDown
232 // (which destructs SafeBrowsingService).
233 safe_browsing::V4GetHashProtocolManager::RegisterFactory(nullptr);
234 safe_browsing::V4Database::RegisterDatabaseFactoryForTest(nullptr);
235 safe_browsing::V4Database::RegisterStoreFactoryForTest(nullptr);
236 safe_browsing::SafeBrowsingService::RegisterFactory(nullptr);
243 } 237 }
244 238
245 void SetUpOnMainThread() override { 239 void SetUpOnMainThread() override {
246 scoped_feature_toggle_.reset(new ScopedSubresourceFilterFeatureToggle( 240 scoped_feature_toggle_.reset(new ScopedSubresourceFilterFeatureToggle(
247 base::FeatureList::OVERRIDE_ENABLE_FEATURE, kActivationLevelEnabled, 241 base::FeatureList::OVERRIDE_ENABLE_FEATURE, kActivationLevelEnabled,
248 kActivationScopeActivationList, kActivationListPhishingInterstitial, 242 kActivationScopeActivationList, kActivationListPhishingInterstitial,
249 measure_performance_ ? "1" : "0", "" /* suppress_notifications */, 243 measure_performance_ ? "1" : "0", "" /* suppress_notifications */,
250 whitelist_site_on_reload_ ? "true" : "false")); 244 whitelist_site_on_reload_ ? "true" : "false"));
251 245
252 base::FilePath test_data_dir; 246 base::FilePath test_data_dir;
253 PathService::Get(chrome::DIR_TEST_DATA, &test_data_dir); 247 PathService::Get(chrome::DIR_TEST_DATA, &test_data_dir);
254 embedded_test_server()->ServeFilesFromDirectory(test_data_dir); 248 embedded_test_server()->ServeFilesFromDirectory(test_data_dir);
255 host_resolver()->AddSimulatedFailure("host-with-dns-lookup-failure"); 249 host_resolver()->AddSimulatedFailure("host-with-dns-lookup-failure");
256 host_resolver()->AddRule("*", "127.0.0.1"); 250 host_resolver()->AddRule("*", "127.0.0.1");
257 content::SetupCrossSiteRedirector(embedded_test_server()); 251 content::SetupCrossSiteRedirector(embedded_test_server());
258 ASSERT_TRUE(embedded_test_server()->Start()); 252 ASSERT_TRUE(embedded_test_server()->Start());
259 } 253 }
260 254
261 GURL GetTestUrl(const std::string& relative_url) { 255 GURL GetTestUrl(const std::string& relative_url) {
262 return embedded_test_server()->base_url().Resolve(relative_url); 256 return embedded_test_server()->base_url().Resolve(relative_url);
263 } 257 }
264 258
259 void MarkUrlForListIdUnexpired(
engedy 2017/03/10 14:39:32 nit: Add comment for what `unexpired` means, or na
melandory 2017/03/15 13:41:36 Done.
260 const GURL& bad_url,
261 const safe_browsing::ListIdentifier& list_id,
262 safe_browsing::ThreatPatternType threat_pattern_type) {
263 safe_browsing::FullHashInfo full_hash_info =
264 GetFullHashInfoWithMetadata(bad_url, list_id, threat_pattern_type);
265 v4_db_factory_->MarkPrefixAsBad(list_id, full_hash_info.full_hash);
266 v4_get_hash_factory_->AddToFullHashCache(full_hash_info);
267 }
268
265 void ConfigureAsPhishingURL(const GURL& url) { 269 void ConfigureAsPhishingURL(const GURL& url) {
266 fake_safe_browsing_database_->AddBlacklistedURL( 270 MarkUrlForListIdUnexpired(url, safe_browsing::GetUrlSocEngId(),
267 url, safe_browsing::SB_THREAT_TYPE_URL_PHISHING); 271 safe_browsing::ThreatPatternType::NONE);
272 }
273
274 void ConfigureAsSubresourceFilterOnlyURL(const GURL& url) {
275 MarkUrlForListIdUnexpired(url, safe_browsing::GetUrlSubresourceFilterId(),
276 safe_browsing::ThreatPatternType::NONE);
268 } 277 }
269 278
270 content::WebContents* web_contents() { 279 content::WebContents* web_contents() {
271 return browser()->tab_strip_model()->GetActiveWebContents(); 280 return browser()->tab_strip_model()->GetActiveWebContents();
272 } 281 }
273 282
274 content::RenderFrameHost* FindFrameByName(const std::string& name) { 283 content::RenderFrameHost* FindFrameByName(const std::string& name) {
275 for (content::RenderFrameHost* frame : web_contents()->GetAllFrames()) { 284 for (content::RenderFrameHost* frame : web_contents()->GetAllFrames()) {
276 if (frame->GetFrameName() == name) 285 if (frame->GetFrameName() == name)
277 return frame; 286 return frame;
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
333 342
334 void SetRulesetWithRules(const std::vector<proto::UrlRule>& rules) { 343 void SetRulesetWithRules(const std::vector<proto::UrlRule>& rules) {
335 TestRulesetPair test_ruleset_pair; 344 TestRulesetPair test_ruleset_pair;
336 ruleset_creator_.CreateRulesetWithRules(rules, &test_ruleset_pair); 345 ruleset_creator_.CreateRulesetWithRules(rules, &test_ruleset_pair);
337 ASSERT_NO_FATAL_FAILURE( 346 ASSERT_NO_FATAL_FAILURE(
338 test_ruleset_publisher_.SetRuleset(test_ruleset_pair.unindexed)); 347 test_ruleset_publisher_.SetRuleset(test_ruleset_pair.unindexed));
339 } 348 }
340 349
341 private: 350 private:
342 TestRulesetCreator ruleset_creator_; 351 TestRulesetCreator ruleset_creator_;
343 safe_browsing::TestSafeBrowsingServiceFactory test_safe_browsing_factory_;
344 scoped_refptr<FakeSafeBrowsingDatabaseManager> fake_safe_browsing_database_;
345 352
346 std::unique_ptr<ScopedSubresourceFilterFeatureToggle> scoped_feature_toggle_; 353 std::unique_ptr<ScopedSubresourceFilterFeatureToggle> scoped_feature_toggle_;
347 TestRulesetPublisher test_ruleset_publisher_; 354 TestRulesetPublisher test_ruleset_publisher_;
348 const bool measure_performance_; 355 const bool measure_performance_;
349 const bool whitelist_site_on_reload_; 356 const bool whitelist_site_on_reload_;
350 357
358 std::unique_ptr<safe_browsing::TestSafeBrowsingServiceFactory> sb_factory_;
359 // Owned by the V4Database.
360 safe_browsing::TestV4DatabaseFactory* v4_db_factory_;
361 // Owned by the V4GetHashProtocolManager.
362 safe_browsing::TestV4GetHashProtocolManagerFactory* v4_get_hash_factory_;
363 // Owned by the V4Database.
364 safe_browsing::TestV4StoreFactory* store_factory_;
365
351 DISALLOW_COPY_AND_ASSIGN(SubresourceFilterBrowserTestImpl); 366 DISALLOW_COPY_AND_ASSIGN(SubresourceFilterBrowserTestImpl);
352 }; 367 };
353 368
354 class SubresourceFilterBrowserTest : public SubresourceFilterBrowserTestImpl { 369 class SubresourceFilterBrowserTest : public SubresourceFilterBrowserTestImpl {
355 public: 370 public:
356 SubresourceFilterBrowserTest() 371 SubresourceFilterBrowserTest()
357 : SubresourceFilterBrowserTestImpl(false, false) {} 372 : SubresourceFilterBrowserTestImpl(false, false) {}
358 }; 373 };
359 374
360 // TODO(pkalinnikov): It should be possible to have only one fixture, i.e., 375 // TODO(pkalinnikov): It should be possible to have only one fixture, i.e.,
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after
472 const std::vector<const char*> kSubframeNames{"one", "two", "three"}; 487 const std::vector<const char*> kSubframeNames{"one", "two", "three"};
473 const std::vector<bool> kExpectScriptInFrameToLoad{false, true, false}; 488 const std::vector<bool> kExpectScriptInFrameToLoad{false, true, false};
474 ASSERT_NO_FATAL_FAILURE(ExpectParsedScriptElementLoadedStatusInFrames( 489 ASSERT_NO_FATAL_FAILURE(ExpectParsedScriptElementLoadedStatusInFrames(
475 kSubframeNames, kExpectScriptInFrameToLoad)); 490 kSubframeNames, kExpectScriptInFrameToLoad));
476 491
477 tester.ExpectBucketCount(kSubresourceFilterPromptHistogram, true, 1); 492 tester.ExpectBucketCount(kSubresourceFilterPromptHistogram, true, 1);
478 } 493 }
479 494
480 IN_PROC_BROWSER_TEST_F(SubresourceFilterBrowserTest, 495 IN_PROC_BROWSER_TEST_F(SubresourceFilterBrowserTest,
481 HistoryNavigationActivation) { 496 HistoryNavigationActivation) {
482 GURL url_without_activation(GetTestUrl(kTestFrameSetPath)); 497 GURL url_with_activation(GetTestUrl(kTestFrameSetPath));
483 GURL url_with_activation( 498 GURL url_without_activation(
484 GetURLWithQuery(url_without_activation, "activation")); 499 embedded_test_server()->GetURL("a.com", kTestFrameSetPath));
485 ConfigureAsPhishingURL(url_with_activation); 500 ConfigureAsPhishingURL(url_with_activation);
486 ASSERT_NO_FATAL_FAILURE( 501 ASSERT_NO_FATAL_FAILURE(
487 SetRulesetToDisallowURLsWithPathSuffix("included_script.js")); 502 SetRulesetToDisallowURLsWithPathSuffix("included_script.js"));
488 503
489 const std::vector<const char*> kSubframeNames{"one", "two", "three"}; 504 const std::vector<const char*> kSubframeNames{"one", "two", "three"};
490 const std::vector<bool> kExpectScriptInFrameToLoadWithoutActivation{ 505 const std::vector<bool> kExpectScriptInFrameToLoadWithoutActivation{
491 true, true, true}; 506 true, true, true};
492 const std::vector<bool> kExpectScriptInFrameToLoadWithActivation{false, true, 507 const std::vector<bool> kExpectScriptInFrameToLoadWithActivation{false, true,
493 false}; 508 false};
494 509
(...skipping 494 matching lines...) Expand 10 before | Expand all | Expand 10 after
989 internal::kHistogramSubresourceFilterActivationDecision, 1004 internal::kHistogramSubresourceFilterActivationDecision,
990 static_cast<int>(ActivationDecision::URL_WHITELISTED), 1); 1005 static_cast<int>(ActivationDecision::URL_WHITELISTED), 1);
991 1006
992 tester.ExpectTotalCount( 1007 tester.ExpectTotalCount(
993 internal::kHistogramSubresourceFilterActivationDecisionReload, 1); 1008 internal::kHistogramSubresourceFilterActivationDecisionReload, 1);
994 tester.ExpectBucketCount( 1009 tester.ExpectBucketCount(
995 internal::kHistogramSubresourceFilterActivationDecisionReload, 1010 internal::kHistogramSubresourceFilterActivationDecisionReload,
996 static_cast<int>(ActivationDecision::URL_WHITELISTED), 1); 1011 static_cast<int>(ActivationDecision::URL_WHITELISTED), 1);
997 } 1012 }
998 1013
1014 #if defined(GOOGLE_CHROME_BUILD)
1015 // This test is only enabled when GOOGLE_CHROME_BUILD is true because the store
1016 // that this test uses is only populated on GOOGLE_CHROME_BUILD builds.
1017 IN_PROC_BROWSER_TEST_F(
1018 SubresourceFilterBrowserTest,
1019 ExpectRedirectPatternHistogramsAreRecordedForSubresourceFilterOnlyMatch) {
1020 ASSERT_NO_FATAL_FAILURE(SetRulesetToDisallowURLsWithPathSuffix(
1021 "suffix-that-does-not-match-anything"));
1022
1023 GURL url(GetTestUrl("subresource_filter/frame_with_included_script.html"));
1024 ConfigureAsSubresourceFilterOnlyURL(url);
1025
1026 base::HistogramTester tester;
1027 ui_test_utils::NavigateToURL(browser(), url);
1028
1029 EXPECT_THAT(tester.GetAllSamples(std::string(kMatchesPatternHistogramName) +
1030 std::string(kSubresourceFilterOnlySuffix)),
1031 ::testing::ElementsAre(base::Bucket(NO_REDIRECTS_HIT, 1)));
1032 EXPECT_THAT(tester.GetAllSamples(std::string(kNavigationChainSize) +
1033 std::string(kSubresourceFilterOnlySuffix)),
1034 ::testing::ElementsAre(base::Bucket(1, 1)));
1035 }
1036
1037 IN_PROC_BROWSER_TEST_F(
1038 SubresourceFilterBrowserTest,
1039 ExpectRedirectPatternHistogramsAreRecordedForSubresourceFilterOnlyRedirectMa tch) {
1040 ASSERT_NO_FATAL_FAILURE(
1041 SetRulesetToDisallowURLsWithPathSuffix("included_script.js"));
1042 const std::string initial_host("a.com");
1043 const std::string redirected_host("b.com");
1044
1045 GURL redirect_url(embedded_test_server()->GetURL(
1046 redirected_host, "/subresource_filter/frame_with_included_script.html"));
1047 GURL url(embedded_test_server()->GetURL(
1048 initial_host, "/server-redirect?" + redirect_url.spec()));
1049
1050 ConfigureAsSubresourceFilterOnlyURL(url.GetOrigin());
1051 base::HistogramTester tester;
1052 ui_test_utils::NavigateToURL(browser(), url);
1053 EXPECT_THAT(tester.GetAllSamples(std::string(kMatchesPatternHistogramName) +
1054 std::string(kSubresourceFilterOnlySuffix)),
1055 ::testing::IsEmpty());
1056
1057 EXPECT_THAT(tester.GetAllSamples(std::string(kNavigationChainSize) +
1058 std::string(kSubresourceFilterOnlySuffix)),
1059 ::testing::IsEmpty());
1060 }
1061 #endif
1062
999 } // namespace subresource_filter 1063 } // namespace subresource_filter
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698