| OLD | NEW | 
|---|
| 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 #include "chrome/browser/safe_browsing/browser_feature_extractor.h" | 5 #include "chrome/browser/safe_browsing/browser_feature_extractor.h" | 
| 6 | 6 | 
| 7 #include <map> | 7 #include <map> | 
| 8 #include <string> | 8 #include <string> | 
| 9 #include <vector> | 9 #include <vector> | 
| 10 | 10 | 
| (...skipping 284 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 295                     GURL("http://google.com/"), | 295                     GURL("http://google.com/"), | 
| 296                     content::PageTransitionFromInt( | 296                     content::PageTransitionFromInt( | 
| 297                         content::PAGE_TRANSITION_AUTO_BOOKMARK | | 297                         content::PAGE_TRANSITION_AUTO_BOOKMARK | | 
| 298                         content::PAGE_TRANSITION_FORWARD_BACK)); | 298                         content::PAGE_TRANSITION_FORWARD_BACK)); | 
| 299 | 299 | 
| 300   EXPECT_TRUE(ExtractFeatures(&request)); | 300   EXPECT_TRUE(ExtractFeatures(&request)); | 
| 301   std::map<std::string, double> features; | 301   std::map<std::string, double> features; | 
| 302   GetFeatureMap(request, &features); | 302   GetFeatureMap(request, &features); | 
| 303 | 303 | 
| 304   EXPECT_EQ(1.0, | 304   EXPECT_EQ(1.0, | 
| 305             features[StringPrintf("%s=%s", | 305             features[base::StringPrintf("%s=%s", | 
| 306                                   features::kReferrer, | 306                                         features::kReferrer, | 
| 307                                   "http://google.com/")]); | 307                                         "http://google.com/")]); | 
| 308   EXPECT_EQ(1.0, | 308   EXPECT_EQ(1.0, | 
| 309             features[StringPrintf("%s[0]=%s", | 309             features[base::StringPrintf("%s[0]=%s", | 
| 310                                   features::kRedirect, | 310                                         features::kRedirect, | 
| 311                                   "http://somerandomwebsite.com/")]); | 311                                         "http://somerandomwebsite.com/")]); | 
| 312   // We shouldn't have a feature for the last redirect in the chain, since it | 312   // We shouldn't have a feature for the last redirect in the chain, since it | 
| 313   // should always be the URL that we navigated to. | 313   // should always be the URL that we navigated to. | 
| 314   EXPECT_EQ(0.0, | 314   EXPECT_EQ(0.0, | 
| 315             features[StringPrintf("%s[1]=%s", | 315             features[base::StringPrintf("%s[1]=%s", | 
| 316                                   features::kRedirect, | 316                                         features::kRedirect, | 
| 317                                   "http://foo.com/")]); | 317                                         "http://foo.com/")]); | 
| 318   EXPECT_EQ(0.0, features[features::kHasSSLReferrer]); | 318   EXPECT_EQ(0.0, features[features::kHasSSLReferrer]); | 
| 319   EXPECT_EQ(2.0, features[features::kPageTransitionType]); | 319   EXPECT_EQ(2.0, features[features::kPageTransitionType]); | 
| 320   EXPECT_EQ(1.0, features[features::kIsFirstNavigation]); | 320   EXPECT_EQ(1.0, features[features::kIsFirstNavigation]); | 
| 321   EXPECT_EQ(200.0, features[features::kHttpStatusCode]); | 321   EXPECT_EQ(200.0, features[features::kHttpStatusCode]); | 
| 322 | 322 | 
| 323   request.Clear(); | 323   request.Clear(); | 
| 324   request.set_url("http://www.foo.com/page.html"); | 324   request.set_url("http://www.foo.com/page.html"); | 
| 325   request.set_client_score(0.5); | 325   request.set_client_score(0.5); | 
| 326   redirect_chain.clear(); | 326   redirect_chain.clear(); | 
| 327   redirect_chain.push_back(GURL("http://www.foo.com/redirect")); | 327   redirect_chain.push_back(GURL("http://www.foo.com/redirect")); | 
| 328   redirect_chain.push_back(GURL("http://www.foo.com/second_redirect")); | 328   redirect_chain.push_back(GURL("http://www.foo.com/second_redirect")); | 
| 329   redirect_chain.push_back(GURL("http://www.foo.com/page.html")); | 329   redirect_chain.push_back(GURL("http://www.foo.com/page.html")); | 
| 330   SetRedirectChain(redirect_chain, false); | 330   SetRedirectChain(redirect_chain, false); | 
| 331   browse_info_->http_status_code = 404; | 331   browse_info_->http_status_code = 404; | 
| 332   NavigateAndCommit(GURL("http://www.foo.com/page.html"), | 332   NavigateAndCommit(GURL("http://www.foo.com/page.html"), | 
| 333                     GURL("http://www.foo.com"), | 333                     GURL("http://www.foo.com"), | 
| 334                     content::PageTransitionFromInt( | 334                     content::PageTransitionFromInt( | 
| 335                         content::PAGE_TRANSITION_TYPED | | 335                         content::PAGE_TRANSITION_TYPED | | 
| 336                         content::PAGE_TRANSITION_CHAIN_START | | 336                         content::PAGE_TRANSITION_CHAIN_START | | 
| 337                         content::PAGE_TRANSITION_CLIENT_REDIRECT)); | 337                         content::PAGE_TRANSITION_CLIENT_REDIRECT)); | 
| 338 | 338 | 
| 339   EXPECT_TRUE(ExtractFeatures(&request)); | 339   EXPECT_TRUE(ExtractFeatures(&request)); | 
| 340   features.clear(); | 340   features.clear(); | 
| 341   GetFeatureMap(request, &features); | 341   GetFeatureMap(request, &features); | 
| 342 | 342 | 
| 343   EXPECT_EQ(1, | 343   EXPECT_EQ(1, | 
| 344             features[StringPrintf("%s=%s", | 344             features[base::StringPrintf("%s=%s", | 
| 345                                   features::kReferrer, | 345                                         features::kReferrer, | 
| 346                                   "http://www.foo.com/")]); | 346                                         "http://www.foo.com/")]); | 
| 347   EXPECT_EQ(1.0, | 347   EXPECT_EQ(1.0, | 
| 348             features[StringPrintf("%s[0]=%s", | 348             features[base::StringPrintf("%s[0]=%s", | 
| 349                                   features::kRedirect, | 349                                         features::kRedirect, | 
| 350                                   "http://www.foo.com/redirect")]); | 350                                         "http://www.foo.com/redirect")]); | 
| 351   EXPECT_EQ(1.0, | 351   EXPECT_EQ(1.0, | 
| 352             features[StringPrintf("%s[1]=%s", | 352             features[base::StringPrintf("%s[1]=%s", | 
| 353                                   features::kRedirect, | 353                                         features::kRedirect, | 
| 354                                   "http://www.foo.com/second_redirect")]); | 354                                         "http://www.foo.com/second_redirect")]); | 
| 355   EXPECT_EQ(0.0, features[features::kHasSSLReferrer]); | 355   EXPECT_EQ(0.0, features[features::kHasSSLReferrer]); | 
| 356   EXPECT_EQ(1.0, features[features::kPageTransitionType]); | 356   EXPECT_EQ(1.0, features[features::kPageTransitionType]); | 
| 357   EXPECT_EQ(0.0, features[features::kIsFirstNavigation]); | 357   EXPECT_EQ(0.0, features[features::kIsFirstNavigation]); | 
| 358   EXPECT_EQ(1.0, | 358   EXPECT_EQ(1.0, | 
| 359             features[StringPrintf("%s%s=%s", | 359             features[base::StringPrintf("%s%s=%s", | 
| 360                                   features::kHostPrefix, | 360                                         features::kHostPrefix, | 
| 361                                   features::kReferrer, | 361                                         features::kReferrer, | 
| 362                                   "http://google.com/")]); | 362                                         "http://google.com/")]); | 
| 363   EXPECT_EQ(1.0, | 363   EXPECT_EQ(1.0, | 
| 364             features[StringPrintf("%s%s[0]=%s", | 364             features[base::StringPrintf("%s%s[0]=%s", | 
| 365                                   features::kHostPrefix, | 365                                         features::kHostPrefix, | 
| 366                                   features::kRedirect, | 366                                         features::kRedirect, | 
| 367                                   "http://somerandomwebsite.com/")]); | 367                                         "http://somerandomwebsite.com/")]); | 
| 368   EXPECT_EQ(2.0, | 368   EXPECT_EQ(2.0, | 
| 369             features[StringPrintf("%s%s", | 369             features[base::StringPrintf("%s%s", | 
| 370                                   features::kHostPrefix, | 370                                         features::kHostPrefix, | 
| 371                                   features::kPageTransitionType)]); | 371                                         features::kPageTransitionType)]); | 
| 372   EXPECT_EQ(1.0, | 372   EXPECT_EQ(1.0, | 
| 373             features[StringPrintf("%s%s", | 373             features[base::StringPrintf("%s%s", | 
| 374                                   features::kHostPrefix, | 374                                         features::kHostPrefix, | 
| 375                                   features::kIsFirstNavigation)]); | 375                                         features::kIsFirstNavigation)]); | 
| 376   EXPECT_EQ(404.0, features[features::kHttpStatusCode]); | 376   EXPECT_EQ(404.0, features[features::kHttpStatusCode]); | 
| 377 | 377 | 
| 378   request.Clear(); | 378   request.Clear(); | 
| 379   request.set_url("http://www.bar.com/"); | 379   request.set_url("http://www.bar.com/"); | 
| 380   request.set_client_score(0.5); | 380   request.set_client_score(0.5); | 
| 381   redirect_chain.clear(); | 381   redirect_chain.clear(); | 
| 382   redirect_chain.push_back(GURL("http://www.foo.com/page.html")); | 382   redirect_chain.push_back(GURL("http://www.foo.com/page.html")); | 
| 383   redirect_chain.push_back(GURL("http://www.bar.com/")); | 383   redirect_chain.push_back(GURL("http://www.bar.com/")); | 
| 384   SetRedirectChain(redirect_chain, true); | 384   SetRedirectChain(redirect_chain, true); | 
| 385   NavigateAndCommit(GURL("http://www.bar.com/"), | 385   NavigateAndCommit(GURL("http://www.bar.com/"), | 
| 386                     GURL("http://www.foo.com/page.html"), | 386                     GURL("http://www.foo.com/page.html"), | 
| 387                     content::PageTransitionFromInt( | 387                     content::PageTransitionFromInt( | 
| 388                         content::PAGE_TRANSITION_LINK | | 388                         content::PAGE_TRANSITION_LINK | | 
| 389                         content::PAGE_TRANSITION_CHAIN_END | | 389                         content::PAGE_TRANSITION_CHAIN_END | | 
| 390                         content::PAGE_TRANSITION_CLIENT_REDIRECT)); | 390                         content::PAGE_TRANSITION_CLIENT_REDIRECT)); | 
| 391 | 391 | 
| 392   EXPECT_TRUE(ExtractFeatures(&request)); | 392   EXPECT_TRUE(ExtractFeatures(&request)); | 
| 393   features.clear(); | 393   features.clear(); | 
| 394   GetFeatureMap(request, &features); | 394   GetFeatureMap(request, &features); | 
| 395 | 395 | 
| 396   EXPECT_EQ(1.0, | 396   EXPECT_EQ(1.0, | 
| 397             features[StringPrintf("%s=%s", | 397             features[base::StringPrintf("%s=%s", | 
| 398                                   features::kReferrer, | 398                                         features::kReferrer, | 
| 399                                   "http://www.foo.com/page.html")]); | 399                                         "http://www.foo.com/page.html")]); | 
| 400   EXPECT_EQ(1.0, | 400   EXPECT_EQ(1.0, | 
| 401             features[StringPrintf("%s[0]=%s", | 401             features[base::StringPrintf("%s[0]=%s", | 
| 402                                   features::kRedirect, | 402                                         features::kRedirect, | 
| 403                                   "http://www.foo.com/page.html")]); | 403                                         "http://www.foo.com/page.html")]); | 
| 404   EXPECT_EQ(0.0, features[features::kHasSSLReferrer]); | 404   EXPECT_EQ(0.0, features[features::kHasSSLReferrer]); | 
| 405   EXPECT_EQ(0.0, features[features::kPageTransitionType]); | 405   EXPECT_EQ(0.0, features[features::kPageTransitionType]); | 
| 406   EXPECT_EQ(0.0, features[features::kIsFirstNavigation]); | 406   EXPECT_EQ(0.0, features[features::kIsFirstNavigation]); | 
| 407 | 407 | 
| 408   // Should not have host features. | 408   // Should not have host features. | 
| 409   EXPECT_EQ(0U, | 409   EXPECT_EQ(0U, | 
| 410             features.count(StringPrintf("%s%s", | 410             features.count(base::StringPrintf("%s%s", | 
| 411                                         features::kHostPrefix, | 411                                               features::kHostPrefix, | 
| 412                                         features::kPageTransitionType))); | 412                                               features::kPageTransitionType))); | 
| 413   EXPECT_EQ(0U, | 413   EXPECT_EQ(0U, | 
| 414             features.count(StringPrintf("%s%s", | 414             features.count(base::StringPrintf("%s%s", | 
| 415                                         features::kHostPrefix, | 415                                               features::kHostPrefix, | 
| 416                                         features::kIsFirstNavigation))); | 416                                               features::kIsFirstNavigation))); | 
| 417 | 417 | 
| 418   request.Clear(); | 418   request.Clear(); | 
| 419   request.set_url("http://www.bar.com/other_page.html"); | 419   request.set_url("http://www.bar.com/other_page.html"); | 
| 420   request.set_client_score(0.5); | 420   request.set_client_score(0.5); | 
| 421   redirect_chain.clear(); | 421   redirect_chain.clear(); | 
| 422   redirect_chain.push_back(GURL("http://www.bar.com/other_page.html")); | 422   redirect_chain.push_back(GURL("http://www.bar.com/other_page.html")); | 
| 423   SetRedirectChain(redirect_chain, false); | 423   SetRedirectChain(redirect_chain, false); | 
| 424   NavigateAndCommit(GURL("http://www.bar.com/other_page.html"), | 424   NavigateAndCommit(GURL("http://www.bar.com/other_page.html"), | 
| 425                     GURL("http://www.bar.com/"), | 425                     GURL("http://www.bar.com/"), | 
| 426                     content::PAGE_TRANSITION_LINK); | 426                     content::PAGE_TRANSITION_LINK); | 
| 427 | 427 | 
| 428   EXPECT_TRUE(ExtractFeatures(&request)); | 428   EXPECT_TRUE(ExtractFeatures(&request)); | 
| 429   features.clear(); | 429   features.clear(); | 
| 430   GetFeatureMap(request, &features); | 430   GetFeatureMap(request, &features); | 
| 431 | 431 | 
| 432   EXPECT_EQ(1.0, | 432   EXPECT_EQ(1.0, | 
| 433             features[StringPrintf("%s=%s", | 433             features[base::StringPrintf("%s=%s", | 
| 434                                   features::kReferrer, | 434                                         features::kReferrer, | 
| 435                                   "http://www.bar.com/")]); | 435                                         "http://www.bar.com/")]); | 
| 436   EXPECT_EQ(0.0, features[features::kHasSSLReferrer]); | 436   EXPECT_EQ(0.0, features[features::kHasSSLReferrer]); | 
| 437   EXPECT_EQ(0.0, features[features::kPageTransitionType]); | 437   EXPECT_EQ(0.0, features[features::kPageTransitionType]); | 
| 438   EXPECT_EQ(0.0, features[features::kIsFirstNavigation]); | 438   EXPECT_EQ(0.0, features[features::kIsFirstNavigation]); | 
| 439   EXPECT_EQ(1.0, | 439   EXPECT_EQ(1.0, | 
| 440             features[StringPrintf("%s%s=%s", | 440             features[base::StringPrintf("%s%s=%s", | 
| 441                                   features::kHostPrefix, | 441                                         features::kHostPrefix, | 
| 442                                   features::kReferrer, | 442                                         features::kReferrer, | 
| 443                                   "http://www.foo.com/page.html")]); | 443                                         "http://www.foo.com/page.html")]); | 
| 444   EXPECT_EQ(1.0, | 444   EXPECT_EQ(1.0, | 
| 445             features[StringPrintf("%s%s[0]=%s", | 445             features[base::StringPrintf("%s%s[0]=%s", | 
| 446                                   features::kHostPrefix, | 446                                         features::kHostPrefix, | 
| 447                                   features::kRedirect, | 447                                         features::kRedirect, | 
| 448                                   "http://www.foo.com/page.html")]); | 448                                         "http://www.foo.com/page.html")]); | 
| 449   EXPECT_EQ(0.0, | 449   EXPECT_EQ(0.0, | 
| 450             features[StringPrintf("%s%s", | 450             features[base::StringPrintf("%s%s", | 
| 451                                   features::kHostPrefix, | 451                                         features::kHostPrefix, | 
| 452                                   features::kPageTransitionType)]); | 452                                         features::kPageTransitionType)]); | 
| 453   EXPECT_EQ(0.0, | 453   EXPECT_EQ(0.0, | 
| 454             features[StringPrintf("%s%s", | 454             features[base::StringPrintf("%s%s", | 
| 455                                   features::kHostPrefix, | 455                                         features::kHostPrefix, | 
| 456                                   features::kIsFirstNavigation)]); | 456                                         features::kIsFirstNavigation)]); | 
| 457   request.Clear(); | 457   request.Clear(); | 
| 458   request.set_url("http://www.baz.com/"); | 458   request.set_url("http://www.baz.com/"); | 
| 459   request.set_client_score(0.5); | 459   request.set_client_score(0.5); | 
| 460   redirect_chain.clear(); | 460   redirect_chain.clear(); | 
| 461   redirect_chain.push_back(GURL("https://bankofamerica.com")); | 461   redirect_chain.push_back(GURL("https://bankofamerica.com")); | 
| 462   redirect_chain.push_back(GURL("http://www.baz.com/")); | 462   redirect_chain.push_back(GURL("http://www.baz.com/")); | 
| 463   SetRedirectChain(redirect_chain, true); | 463   SetRedirectChain(redirect_chain, true); | 
| 464   NavigateAndCommit(GURL("http://www.baz.com"), | 464   NavigateAndCommit(GURL("http://www.baz.com"), | 
| 465                     GURL("https://bankofamerica.com"), | 465                     GURL("https://bankofamerica.com"), | 
| 466                     content::PAGE_TRANSITION_GENERATED); | 466                     content::PAGE_TRANSITION_GENERATED); | 
| 467 | 467 | 
| 468   browse_info_->ips.insert("193.5.163.8"); | 468   browse_info_->ips.insert("193.5.163.8"); | 
| 469   browse_info_->ips.insert("23.94.78.1"); | 469   browse_info_->ips.insert("23.94.78.1"); | 
| 470   EXPECT_CALL(*service_, IsBadIpAddress("193.5.163.8")).WillOnce(Return(true)); | 470   EXPECT_CALL(*service_, IsBadIpAddress("193.5.163.8")).WillOnce(Return(true)); | 
| 471   EXPECT_CALL(*service_, IsBadIpAddress("23.94.78.1")).WillOnce(Return(false)); | 471   EXPECT_CALL(*service_, IsBadIpAddress("23.94.78.1")).WillOnce(Return(false)); | 
| 472 | 472 | 
| 473   EXPECT_TRUE(ExtractFeatures(&request)); | 473   EXPECT_TRUE(ExtractFeatures(&request)); | 
| 474   features.clear(); | 474   features.clear(); | 
| 475   GetFeatureMap(request, &features); | 475   GetFeatureMap(request, &features); | 
| 476 | 476 | 
| 477   EXPECT_EQ(1.0, | 477   EXPECT_EQ(1.0, | 
| 478             features[StringPrintf("%s[0]=%s", | 478             features[base::StringPrintf("%s[0]=%s", | 
| 479                                   features::kRedirect, | 479                                         features::kRedirect, | 
| 480                                   features::kSecureRedirectValue)]); | 480                                         features::kSecureRedirectValue)]); | 
| 481   EXPECT_EQ(1.0, features[features::kHasSSLReferrer]); | 481   EXPECT_EQ(1.0, features[features::kHasSSLReferrer]); | 
| 482   EXPECT_EQ(5.0, features[features::kPageTransitionType]); | 482   EXPECT_EQ(5.0, features[features::kPageTransitionType]); | 
| 483   // Should not have redirect or host features. | 483   // Should not have redirect or host features. | 
| 484   EXPECT_EQ(0U, | 484   EXPECT_EQ(0U, | 
| 485             features.count(StringPrintf("%s%s", | 485             features.count(base::StringPrintf("%s%s", | 
| 486                                         features::kHostPrefix, | 486                                               features::kHostPrefix, | 
| 487                                         features::kPageTransitionType))); | 487                                               features::kPageTransitionType))); | 
| 488   EXPECT_EQ(0U, | 488   EXPECT_EQ(0U, | 
| 489             features.count(StringPrintf("%s%s", | 489             features.count(base::StringPrintf("%s%s", | 
| 490                                         features::kHostPrefix, | 490                                               features::kHostPrefix, | 
| 491                                         features::kIsFirstNavigation))); | 491                                               features::kIsFirstNavigation))); | 
| 492   EXPECT_EQ(5.0, features[features::kPageTransitionType]); | 492   EXPECT_EQ(5.0, features[features::kPageTransitionType]); | 
| 493   EXPECT_EQ(1.0, features[std::string(features::kBadIpFetch) + "193.5.163.8"]); | 493   EXPECT_EQ(1.0, features[std::string(features::kBadIpFetch) + "193.5.163.8"]); | 
| 494   EXPECT_FALSE(features.count(std::string(features::kBadIpFetch) + | 494   EXPECT_FALSE(features.count(std::string(features::kBadIpFetch) + | 
| 495                               "23.94.78.1")); | 495                               "23.94.78.1")); | 
| 496 } | 496 } | 
| 497 | 497 | 
| 498 TEST_F(BrowserFeatureExtractorTest, SafeBrowsingFeatures) { | 498 TEST_F(BrowserFeatureExtractorTest, SafeBrowsingFeatures) { | 
| 499   SimpleNavigateAndCommit(GURL("http://www.foo.com/malware.html")); | 499   SimpleNavigateAndCommit(GURL("http://www.foo.com/malware.html")); | 
| 500   ClientPhishingRequest request; | 500   ClientPhishingRequest request; | 
| 501   request.set_url("http://www.foo.com/malware.html"); | 501   request.set_url("http://www.foo.com/malware.html"); | 
| 502   request.set_client_score(0.5); | 502   request.set_client_score(0.5); | 
| 503 | 503 | 
| 504   browse_info_->unsafe_resource.reset( | 504   browse_info_->unsafe_resource.reset( | 
| 505       new SafeBrowsingUIManager::UnsafeResource); | 505       new SafeBrowsingUIManager::UnsafeResource); | 
| 506   browse_info_->unsafe_resource->url = GURL("http://www.malware.com/"); | 506   browse_info_->unsafe_resource->url = GURL("http://www.malware.com/"); | 
| 507   browse_info_->unsafe_resource->original_url = GURL("http://www.good.com/"); | 507   browse_info_->unsafe_resource->original_url = GURL("http://www.good.com/"); | 
| 508   browse_info_->unsafe_resource->is_subresource = true; | 508   browse_info_->unsafe_resource->is_subresource = true; | 
| 509   browse_info_->unsafe_resource->threat_type = SB_THREAT_TYPE_URL_MALWARE; | 509   browse_info_->unsafe_resource->threat_type = SB_THREAT_TYPE_URL_MALWARE; | 
| 510 | 510 | 
| 511   ExtractFeatures(&request); | 511   ExtractFeatures(&request); | 
| 512   std::map<std::string, double> features; | 512   std::map<std::string, double> features; | 
| 513   GetFeatureMap(request, &features); | 513   GetFeatureMap(request, &features); | 
| 514   EXPECT_TRUE(features.count(StringPrintf("%s%s", | 514   EXPECT_TRUE(features.count(base::StringPrintf( | 
| 515                                           features::kSafeBrowsingMaliciousUrl, | 515       "%s%s", | 
| 516                                           "http://www.malware.com/"))); | 516       features::kSafeBrowsingMaliciousUrl, | 
| 517   EXPECT_TRUE(features.count(StringPrintf("%s%s", | 517       "http://www.malware.com/"))); | 
| 518                                           features::kSafeBrowsingOriginalUrl, | 518   EXPECT_TRUE(features.count(base::StringPrintf( | 
| 519                                           "http://www.good.com/"))); | 519       "%s%s", | 
|  | 520        features::kSafeBrowsingOriginalUrl, | 
|  | 521         "http://www.good.com/"))); | 
| 520   EXPECT_DOUBLE_EQ(1.0, features[features::kSafeBrowsingIsSubresource]); | 522   EXPECT_DOUBLE_EQ(1.0, features[features::kSafeBrowsingIsSubresource]); | 
| 521   EXPECT_DOUBLE_EQ(2.0, features[features::kSafeBrowsingThreatType]); | 523   EXPECT_DOUBLE_EQ(2.0, features[features::kSafeBrowsingThreatType]); | 
| 522 } | 524 } | 
| 523 }  // namespace safe_browsing | 525 }  // namespace safe_browsing | 
| OLD | NEW | 
|---|