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

Side by Side Diff: chrome/renderer/safe_browsing/phishing_dom_feature_extractor_browsertest.cc

Issue 1431653003: Migrating tests to use EmbeddedTestServer (misc) (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fixing tests. Created 5 years, 1 month 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 (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 // Note that although this is not a "browser" test, it runs as part of 5 // Note that although this is not a "browser" test, it runs as part of
6 // browser_tests. This is because WebKit does not work properly if it is 6 // browser_tests. This is because WebKit does not work properly if it is
7 // shutdown and re-initialized. Since browser_tests runs each test in a 7 // shutdown and re-initialized. Since browser_tests runs each test in a
8 // new process, this avoids the problem. 8 // new process, this avoids the problem.
9 9
10 #include "chrome/renderer/safe_browsing/phishing_dom_feature_extractor.h" 10 #include "chrome/renderer/safe_browsing/phishing_dom_feature_extractor.h"
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
77 // Don't want to try to create a GPU process. 77 // Don't want to try to create a GPU process.
78 command_line->AppendSwitch(switches::kDisableGpu); 78 command_line->AppendSwitch(switches::kDisableGpu);
79 #endif 79 #endif
80 } 80 }
81 81
82 void SetUpOnMainThread() override { 82 void SetUpOnMainThread() override {
83 render_view_routing_id_ = 83 render_view_routing_id_ =
84 GetWebContents()->GetRenderViewHost()->GetRoutingID(); 84 GetWebContents()->GetRenderViewHost()->GetRoutingID();
85 extractor_.reset(new PhishingDOMFeatureExtractor(&clock_)); 85 extractor_.reset(new PhishingDOMFeatureExtractor(&clock_));
86 86
87 ASSERT_TRUE(StartTestServer()); 87 embedded_test_server()->RegisterRequestHandler(
88 base::Bind(&PhishingDOMFeatureExtractorTest::HandleRequest,
89 base::Unretained(this)));
90 ASSERT_TRUE(embedded_test_server()->Start());
88 host_resolver()->AddRule("*", "127.0.0.1"); 91 host_resolver()->AddRule("*", "127.0.0.1");
89 } 92 }
90 93
91 // Runs the DOMFeatureExtractor on the RenderView, waiting for the 94 // Runs the DOMFeatureExtractor on the RenderView, waiting for the
92 // completion callback. Returns the success boolean from the callback. 95 // completion callback. Returns the success boolean from the callback.
93 bool ExtractFeatures(FeatureMap* features) { 96 bool ExtractFeatures(FeatureMap* features) {
94 success_ = false; 97 success_ = false;
95 PostTaskToInProcessRendererAndWait( 98 PostTaskToInProcessRendererAndWait(
96 base::Bind(&PhishingDOMFeatureExtractorTest::ExtractFeaturesInternal, 99 base::Bind(&PhishingDOMFeatureExtractorTest::ExtractFeaturesInternal,
97 base::Unretained(this), 100 base::Unretained(this),
(...skipping 27 matching lines...) Expand all
125 128
126 // Does the actual work of removing the iframe "frame1" from the document. 129 // Does the actual work of removing the iframe "frame1" from the document.
127 void RemoveIframe() { 130 void RemoveIframe() {
128 blink::WebFrame* main_frame = GetWebFrame(); 131 blink::WebFrame* main_frame = GetWebFrame();
129 ASSERT_TRUE(main_frame); 132 ASSERT_TRUE(main_frame);
130 main_frame->executeScript( 133 main_frame->executeScript(
131 blink::WebString( 134 blink::WebString(
132 "document.body.removeChild(document.getElementById('frame1'));")); 135 "document.body.removeChild(document.getElementById('frame1'));"));
133 } 136 }
134 137
135 bool StartTestServer() {
136 CHECK(!embedded_test_server_);
137 embedded_test_server_.reset(new net::test_server::EmbeddedTestServer());
138 embedded_test_server_->RegisterRequestHandler(
139 base::Bind(&PhishingDOMFeatureExtractorTest::HandleRequest,
140 base::Unretained(this)));
141 return embedded_test_server_->InitializeAndWaitUntilReady();
142 }
143
144 scoped_ptr<net::test_server::HttpResponse> HandleRequest( 138 scoped_ptr<net::test_server::HttpResponse> HandleRequest(
145 const net::test_server::HttpRequest& request) { 139 const net::test_server::HttpRequest& request) {
146 std::map<std::string, std::string>::const_iterator host_it = 140 std::map<std::string, std::string>::const_iterator host_it =
147 request.headers.find("Host"); 141 request.headers.find("Host");
148 if (host_it == request.headers.end()) 142 if (host_it == request.headers.end())
149 return scoped_ptr<net::test_server::HttpResponse>(); 143 return scoped_ptr<net::test_server::HttpResponse>();
150 144
151 std::string url = 145 std::string url =
152 std::string("http://") + host_it->second + request.relative_url; 146 std::string("http://") + host_it->second + request.relative_url;
153 std::map<std::string, std::string>::const_iterator it = 147 std::map<std::string, std::string>::const_iterator it =
154 responses_.find(url); 148 responses_.find(url);
155 if (it == responses_.end()) 149 if (it == responses_.end())
156 return scoped_ptr<net::test_server::HttpResponse>(); 150 return scoped_ptr<net::test_server::HttpResponse>();
157 151
158 scoped_ptr<net::test_server::BasicHttpResponse> http_response( 152 scoped_ptr<net::test_server::BasicHttpResponse> http_response(
159 new net::test_server::BasicHttpResponse()); 153 new net::test_server::BasicHttpResponse());
160 http_response->set_code(net::HTTP_OK); 154 http_response->set_code(net::HTTP_OK);
161 http_response->set_content_type("text/html"); 155 http_response->set_content_type("text/html");
162 http_response->set_content(it->second); 156 http_response->set_content(it->second);
163 return http_response.Pass(); 157 return http_response.Pass();
164 } 158 }
165 159
166 GURL GetURL(const std::string& host, const std::string& path) { 160 GURL GetURL(const std::string& host, const std::string& path) {
167 GURL::Replacements replace; 161 GURL::Replacements replace;
168 replace.SetHostStr(host); 162 replace.SetHostStr(host);
169 replace.SetPathStr(path); 163 replace.SetPathStr(path);
170 return embedded_test_server_->base_url().ReplaceComponents(replace); 164 return embedded_test_server()->base_url().ReplaceComponents(replace);
171 } 165 }
172 166
173 // Returns the URL that was loaded. 167 // Returns the URL that was loaded.
174 GURL LoadHtml(const std::string& host, const std::string& content) { 168 GURL LoadHtml(const std::string& host, const std::string& content) {
175 GURL url(GetURL(host, "")); 169 GURL url(GetURL(host, ""));
176 responses_[url.spec()] = content; 170 responses_[url.spec()] = content;
177 ui_test_utils::NavigateToURL(browser(), url); 171 ui_test_utils::NavigateToURL(browser(), url);
178 return url; 172 return url;
179 } 173 }
180 174
181 int32 render_view_routing_id_; 175 int32 render_view_routing_id_;
182 176
183 // Map of url -> response body for network requests from the renderer. 177 // Map of url -> response body for network requests from the renderer.
184 // Any urls not in this map are served a 404 error. 178 // Any urls not in this map are served a 404 error.
185 std::map<std::string, std::string> responses_; 179 std::map<std::string, std::string> responses_;
186 180
187 scoped_ptr<net::test_server::EmbeddedTestServer> embedded_test_server_;
188 MockFeatureExtractorClock clock_; 181 MockFeatureExtractorClock clock_;
189 scoped_ptr<PhishingDOMFeatureExtractor> extractor_; 182 scoped_ptr<PhishingDOMFeatureExtractor> extractor_;
190 bool success_; // holds the success value from ExtractFeatures 183 bool success_; // holds the success value from ExtractFeatures
191 base::WeakPtrFactory<PhishingDOMFeatureExtractorTest> weak_factory_; 184 base::WeakPtrFactory<PhishingDOMFeatureExtractorTest> weak_factory_;
192 }; 185 };
193 186
194 IN_PROC_BROWSER_TEST_F(PhishingDOMFeatureExtractorTest, FormFeatures) { 187 IN_PROC_BROWSER_TEST_F(PhishingDOMFeatureExtractorTest, FormFeatures) {
195 // This test doesn't exercise the extraction timing. 188 // This test doesn't exercise the extraction timing.
196 EXPECT_CALL(clock_, Now()).WillRepeatedly(Return(base::TimeTicks::Now())); 189 EXPECT_CALL(clock_, Now()).WillRepeatedly(Return(base::TimeTicks::Now()));
197 190
198 FeatureMap expected_features; 191 FeatureMap expected_features;
199 expected_features.AddBooleanFeature(features::kPageHasForms); 192 expected_features.AddBooleanFeature(features::kPageHasForms);
200 expected_features.AddRealFeature(features::kPageActionOtherDomainFreq, 0.25); 193 expected_features.AddRealFeature(features::kPageActionOtherDomainFreq, 0.25);
201 expected_features.AddBooleanFeature(features::kPageHasTextInputs); 194 expected_features.AddBooleanFeature(features::kPageHasTextInputs);
202 expected_features.AddBooleanFeature(features::kPageHasCheckInputs); 195 expected_features.AddBooleanFeature(features::kPageHasCheckInputs);
203 expected_features.AddBooleanFeature(features::kPageActionURL + 196 expected_features.AddBooleanFeature(features::kPageActionURL +
204 std::string("http://cgi.host.com/submit")); 197 std::string("http://cgi.host.com/submit"));
205 expected_features.AddBooleanFeature(features::kPageActionURL + 198 expected_features.AddBooleanFeature(features::kPageActionURL +
206 std::string("http://other.com/")); 199 std::string("http://other.com/"));
207 expected_features.AddBooleanFeature(features::kPageActionURL + 200
208 std::string("http://host.com:") + 201 GURL url = embedded_test_server()->GetURL("/query");
209 base::UintToString(embedded_test_server_->port()) + 202 GURL::Replacements replace_host;
210 std::string("/query")); 203 replace_host.SetHostStr("host.com");
204 expected_features.AddBooleanFeature(
205 features::kPageActionURL + url.ReplaceComponents(replace_host).spec());
211 206
212 FeatureMap features; 207 FeatureMap features;
213 LoadHtml( 208 LoadHtml(
214 "host.com", 209 "host.com",
215 "<html><head><body>" 210 "<html><head><body>"
216 "<form action=\"query\"><input type=text><input type=checkbox></form>" 211 "<form action=\"query\"><input type=text><input type=checkbox></form>"
217 "<form action=\"http://cgi.host.com/submit\"></form>" 212 "<form action=\"http://cgi.host.com/submit\"></form>"
218 "<form action=\"http://other.com/\"></form>" 213 "<form action=\"http://other.com/\"></form>"
219 "<form action=\"query\"></form>" 214 "<form action=\"query\"></form>"
220 "<form></form></body></html>"); 215 "<form></form></body></html>");
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
274 "</body></html"); 269 "</body></html");
275 ASSERT_TRUE(ExtractFeatures(&features)); 270 ASSERT_TRUE(ExtractFeatures(&features));
276 ExpectFeatureMapsAreEqual(features, expected_features); 271 ExpectFeatureMapsAreEqual(features, expected_features);
277 272
278 expected_features.Clear(); 273 expected_features.Clear();
279 expected_features.AddRealFeature(features::kPageExternalLinksFreq, 0.25); 274 expected_features.AddRealFeature(features::kPageExternalLinksFreq, 0.25);
280 expected_features.AddRealFeature(features::kPageSecureLinksFreq, 0.5); 275 expected_features.AddRealFeature(features::kPageSecureLinksFreq, 0.5);
281 expected_features.AddBooleanFeature(features::kPageLinkDomain + 276 expected_features.AddBooleanFeature(features::kPageLinkDomain +
282 std::string("chromium.org")); 277 std::string("chromium.org"));
283 278
284 net::SpawnedTestServer https_server( 279 net::EmbeddedTestServer https_server(net::EmbeddedTestServer::TYPE_HTTPS);
285 net::SpawnedTestServer::TYPE_HTTPS, 280 https_server.ServeFilesFromSourceDirectory("chrome/test/data");
286 net::SpawnedTestServer::kLocalhost,
287 base::FilePath(FILE_PATH_LITERAL("chrome/test/data")));
288 ASSERT_TRUE(https_server.Start()); 281 ASSERT_TRUE(https_server.Start());
289 282
290 // The PhishingDOMFeatureExtractor depends on URLs being domains and not IPs, 283 // The PhishingDOMFeatureExtractor depends on URLs being domains and not IPs,
291 // so use a domain. 284 // so use a domain.
292 std::string url_str = "https://host.com:"; 285 GURL url = https_server.GetURL("/safe_browsing/secure_link_features.html");
293 url_str += base::UintToString(https_server.host_port_pair().port()); 286 GURL::Replacements replace_host;
294 url_str += "/files/safe_browsing/secure_link_features.html"; 287 replace_host.SetHostStr("host.com");
295 ui_test_utils::NavigateToURL(browser(), GURL(url_str)); 288 ui_test_utils::NavigateToURL(browser(), url.ReplaceComponents(replace_host));
296 289
297 // Click through the certificate error interstitial. 290 // Click through the certificate error interstitial.
298 content::InterstitialPage* interstitial_page = 291 content::InterstitialPage* interstitial_page =
299 GetWebContents()->GetInterstitialPage(); 292 GetWebContents()->GetInterstitialPage();
300 interstitial_page->Proceed(); 293 interstitial_page->Proceed();
301 content::WaitForLoadStop(GetWebContents()); 294 content::WaitForLoadStop(GetWebContents());
302 295
303 features.Clear(); 296 features.Clear();
304 ASSERT_TRUE(ExtractFeatures(&features)); 297 ASSERT_TRUE(ExtractFeatures(&features));
305 ExpectFeatureMapsAreEqual(features, expected_features); 298 ExpectFeatureMapsAreEqual(features, expected_features);
(...skipping 19 matching lines...) Expand all
325 "<html><head><script></script><script></script></head></html>"); 318 "<html><head><script></script><script></script></head></html>");
326 ASSERT_TRUE(ExtractFeatures(&features)); 319 ASSERT_TRUE(ExtractFeatures(&features));
327 ExpectFeatureMapsAreEqual(features, expected_features); 320 ExpectFeatureMapsAreEqual(features, expected_features);
328 321
329 expected_features.Clear(); 322 expected_features.Clear();
330 expected_features.AddBooleanFeature(features::kPageNumScriptTagsGTOne); 323 expected_features.AddBooleanFeature(features::kPageNumScriptTagsGTOne);
331 expected_features.AddBooleanFeature(features::kPageNumScriptTagsGTSix); 324 expected_features.AddBooleanFeature(features::kPageNumScriptTagsGTSix);
332 expected_features.AddRealFeature(features::kPageImgOtherDomainFreq, 0.5); 325 expected_features.AddRealFeature(features::kPageImgOtherDomainFreq, 0.5);
333 326
334 features.Clear(); 327 features.Clear();
335 net::SpawnedTestServer https_server( 328 net::EmbeddedTestServer https_server(net::EmbeddedTestServer::TYPE_HTTPS);
336 net::SpawnedTestServer::TYPE_HTTPS, 329 https_server.ServeFilesFromSourceDirectory("chrome/test/data");
337 net::SpawnedTestServer::kLocalhost,
338 base::FilePath(FILE_PATH_LITERAL("chrome/test/data")));
339 ASSERT_TRUE(https_server.Start()); 330 ASSERT_TRUE(https_server.Start());
340 331
341 // The PhishingDOMFeatureExtractor depends on URLs being domains and not IPs, 332 // The PhishingDOMFeatureExtractor depends on URLs being domains and not IPs,
342 // so use a domain. 333 // so use a domain.
343 std::string url_str = "https://host.com:"; 334 GURL url = embedded_test_server()->GetURL(
344 url_str += base::UintToString(https_server.host_port_pair().port()); 335 "/safe_browsing/secure_script_and_image.html");
345 url_str += "/files/safe_browsing/secure_script_and_image.html"; 336 GURL::Replacements replace_host;
346 ui_test_utils::NavigateToURL(browser(), GURL(url_str)); 337 replace_host.SetHostStr("host.com");
338 ui_test_utils::NavigateToURL(browser(), url.ReplaceComponents(replace_host));
347 339
348 // Click through the certificate error interstitial. 340 // Click through the certificate error interstitial.
349 content::InterstitialPage* interstitial_page = 341 content::InterstitialPage* interstitial_page =
350 GetWebContents()->GetInterstitialPage(); 342 GetWebContents()->GetInterstitialPage();
351 interstitial_page->Proceed(); 343 interstitial_page->Proceed();
352 content::WaitForLoadStop(GetWebContents()); 344 content::WaitForLoadStop(GetWebContents());
353 345
354 ASSERT_TRUE(ExtractFeatures(&features)); 346 ASSERT_TRUE(ExtractFeatures(&features));
355 ExpectFeatureMapsAreEqual(features, expected_features); 347 ExpectFeatureMapsAreEqual(features, expected_features);
356 } 348 }
357 349
358 IN_PROC_BROWSER_TEST_F(PhishingDOMFeatureExtractorTest, SubFrames) { 350 IN_PROC_BROWSER_TEST_F(PhishingDOMFeatureExtractorTest, SubFrames) {
359 // This test doesn't exercise the extraction timing. 351 // This test doesn't exercise the extraction timing.
360 EXPECT_CALL(clock_, Now()).WillRepeatedly(Return(base::TimeTicks::Now())); 352 EXPECT_CALL(clock_, Now()).WillRepeatedly(Return(base::TimeTicks::Now()));
361 353
362 // Test that features are aggregated across all frames. 354 // Test that features are aggregated across all frames.
363 355
364 std::string port = base::UintToString(embedded_test_server_->port());
365 responses_[GetURL("host2.com", "").spec()] = 356 responses_[GetURL("host2.com", "").spec()] =
366 "<html><head><script></script><body>" 357 "<html><head><script></script><body>"
367 "<form action=\"http://host4.com/\"><input type=checkbox></form>" 358 "<form action=\"http://host4.com/\"><input type=checkbox></form>"
368 "<form action=\"http://host2.com/submit\"></form>" 359 "<form action=\"http://host2.com/submit\"></form>"
369 "<a href=\"http://www.host2.com/home\">link</a>" 360 "<a href=\"http://www.host2.com/home\">link</a>"
370 "<iframe src=\"nested.html\"></iframe>" 361 "<iframe src=\"nested.html\"></iframe>"
371 "<body></html>"; 362 "<body></html>";
372 363
373 responses_[GetURL("host2.com", "nested.html").spec()] = 364 responses_[GetURL("host2.com", "nested.html").spec()] =
374 "<html><body><input type=password>" 365 "<html><body><input type=password>"
(...skipping 20 matching lines...) Expand all
395 std::string("host4.com")); 386 std::string("host4.com"));
396 expected_features.AddRealFeature(features::kPageSecureLinksFreq, 0.25); 387 expected_features.AddRealFeature(features::kPageSecureLinksFreq, 0.25);
397 expected_features.AddBooleanFeature(features::kPageNumScriptTagsGTOne); 388 expected_features.AddBooleanFeature(features::kPageNumScriptTagsGTOne);
398 expected_features.AddRealFeature(features::kPageImgOtherDomainFreq, 1.0); 389 expected_features.AddRealFeature(features::kPageImgOtherDomainFreq, 1.0);
399 expected_features.AddBooleanFeature(features::kPageActionURL + 390 expected_features.AddBooleanFeature(features::kPageActionURL +
400 std::string("http://host2.com/submit")); 391 std::string("http://host2.com/submit"));
401 expected_features.AddBooleanFeature(features::kPageActionURL + 392 expected_features.AddBooleanFeature(features::kPageActionURL +
402 std::string("http://host4.com/")); 393 std::string("http://host4.com/"));
403 394
404 FeatureMap features; 395 FeatureMap features;
396 GURL url = embedded_test_server()->GetURL("/");
397 GURL::Replacements replace_host;
398 replace_host.SetHostStr("host2.com");
399 GURL::Replacements replace_host_2;
400 replace_host_2.SetHostStr("host3.com");
401
405 std::string html( 402 std::string html(
406 "<html><body><input type=text><a href=\"info.html\">link</a>" 403 "<html><body><input type=text><a href=\"info.html\">link</a>"
407 "<iframe src=\"http://host2.com:"); 404 "<iframe src=\"");
408 html += port; 405 html += url.ReplaceComponents(replace_host).spec();
409 html += std::string( 406 html += std::string("\"></iframe><iframe src=\"");
410 "/\"></iframe>" 407 html += url.ReplaceComponents(replace_host_2).spec();
411 "<iframe src=\"http://host3.com:"); 408 html += std::string("\"></iframe></body></html>");
412 html += port;
413 html += std::string("/\"></iframe></body></html>");
414 409
415 LoadHtml("host.com", html); 410 LoadHtml("host.com", html);
416 ASSERT_TRUE(ExtractFeatures(&features)); 411 ASSERT_TRUE(ExtractFeatures(&features));
417 ExpectFeatureMapsAreEqual(features, expected_features); 412 ExpectFeatureMapsAreEqual(features, expected_features);
418 } 413 }
419 414
420 // Test flakes with LSAN enabled. See http://crbug.com/373155. 415 // Test flakes with LSAN enabled. See http://crbug.com/373155.
421 #if defined(LEAK_SANITIZER) 416 #if defined(LEAK_SANITIZER)
422 #define MAYBE_Continuation DISABLED_Continuation 417 #define MAYBE_Continuation DISABLED_Continuation
423 #else 418 #else
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
466 // Time check after resuming iteration for the third chunk. 461 // Time check after resuming iteration for the third chunk.
467 .WillOnce(Return(now + base::TimeDelta::FromMilliseconds(48))) 462 .WillOnce(Return(now + base::TimeDelta::FromMilliseconds(48)))
468 // Time check after the last 10 elements. 463 // Time check after the last 10 elements.
469 .WillOnce(Return(now + base::TimeDelta::FromMilliseconds(54))) 464 .WillOnce(Return(now + base::TimeDelta::FromMilliseconds(54)))
470 // A final time check for the histograms. 465 // A final time check for the histograms.
471 .WillOnce(Return(now + base::TimeDelta::FromMilliseconds(56))); 466 .WillOnce(Return(now + base::TimeDelta::FromMilliseconds(56)));
472 467
473 FeatureMap expected_features; 468 FeatureMap expected_features;
474 expected_features.AddBooleanFeature(features::kPageHasForms); 469 expected_features.AddBooleanFeature(features::kPageHasForms);
475 expected_features.AddRealFeature(features::kPageActionOtherDomainFreq, 0.5); 470 expected_features.AddRealFeature(features::kPageActionOtherDomainFreq, 0.5);
476 expected_features.AddBooleanFeature(features::kPageActionURL + 471 GURL url = embedded_test_server()->GetURL("/ondomain");
477 std::string("http://host.com:") + 472 GURL::Replacements replace_host;
478 base::UintToString(embedded_test_server_->port()) + 473 replace_host.SetHostStr("host.com");
479 std::string("/ondomain")); 474 expected_features.AddBooleanFeature(
475 features::kPageActionURL + url.ReplaceComponents(replace_host).spec());
480 expected_features.AddBooleanFeature(features::kPageActionURL + 476 expected_features.AddBooleanFeature(features::kPageActionURL +
481 std::string("http://host2.com/")); 477 std::string("http://host2.com/"));
482 478
483 FeatureMap features; 479 FeatureMap features;
484 LoadHtml("host.com", response); 480 LoadHtml("host.com", response);
485 ASSERT_TRUE(ExtractFeatures(&features)); 481 ASSERT_TRUE(ExtractFeatures(&features));
486 ExpectFeatureMapsAreEqual(features, expected_features); 482 ExpectFeatureMapsAreEqual(features, expected_features);
487 // Make sure none of the mock expectations carry over to the next test. 483 // Make sure none of the mock expectations carry over to the next test.
488 ::testing::Mock::VerifyAndClearExpectations(&clock_); 484 ::testing::Mock::VerifyAndClearExpectations(&clock_);
489 485
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
547 LoadHtml( 543 LoadHtml(
548 "host.com", 544 "host.com",
549 "<html><head></head><body>" 545 "<html><head></head><body>"
550 "<iframe src=\"frame.html\" id=\"frame1\"></iframe>" 546 "<iframe src=\"frame.html\" id=\"frame1\"></iframe>"
551 "<form></form></body></html>"); 547 "<form></form></body></html>");
552 ASSERT_TRUE(ExtractFeatures(&features)); 548 ASSERT_TRUE(ExtractFeatures(&features));
553 ExpectFeatureMapsAreEqual(features, expected_features); 549 ExpectFeatureMapsAreEqual(features, expected_features);
554 } 550 }
555 551
556 } // namespace safe_browsing 552 } // namespace safe_browsing
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698