| 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 462 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 473 request.set_url("http://www.baz.com/"); | 473 request.set_url("http://www.baz.com/"); |
| 474 request.set_client_score(0.5); | 474 request.set_client_score(0.5); |
| 475 redirect_chain.clear(); | 475 redirect_chain.clear(); |
| 476 redirect_chain.push_back(GURL("https://bankofamerica.com")); | 476 redirect_chain.push_back(GURL("https://bankofamerica.com")); |
| 477 redirect_chain.push_back(GURL("http://www.baz.com/")); | 477 redirect_chain.push_back(GURL("http://www.baz.com/")); |
| 478 SetRedirectChain(redirect_chain, true); | 478 SetRedirectChain(redirect_chain, true); |
| 479 NavigateAndCommit(GURL("http://www.baz.com"), | 479 NavigateAndCommit(GURL("http://www.baz.com"), |
| 480 GURL("https://bankofamerica.com"), | 480 GURL("https://bankofamerica.com"), |
| 481 content::PAGE_TRANSITION_GENERATED); | 481 content::PAGE_TRANSITION_GENERATED); |
| 482 | 482 |
| 483 std::set<std::string> hosts; | 483 std::set<std::string> urls; |
| 484 hosts.insert("test.com"); | 484 urls.insert("http://test.com"); |
| 485 browse_info_->ips.insert(std::make_pair("193.5.163.8", hosts)); | 485 browse_info_->ips.insert(std::make_pair("193.5.163.8", urls)); |
| 486 browse_info_->ips.insert(std::make_pair("23.94.78.1", hosts)); | 486 browse_info_->ips.insert(std::make_pair("23.94.78.1", urls)); |
| 487 EXPECT_CALL(*service_, IsBadIpAddress("193.5.163.8")).WillOnce(Return(true)); | 487 EXPECT_CALL(*service_, IsBadIpAddress("193.5.163.8")).WillOnce(Return(true)); |
| 488 EXPECT_CALL(*service_, IsBadIpAddress("23.94.78.1")).WillOnce(Return(false)); | 488 EXPECT_CALL(*service_, IsBadIpAddress("23.94.78.1")).WillOnce(Return(false)); |
| 489 | 489 |
| 490 EXPECT_TRUE(ExtractFeatures(&request)); | 490 EXPECT_TRUE(ExtractFeatures(&request)); |
| 491 features.clear(); | 491 features.clear(); |
| 492 GetFeatureMap(request, &features); | 492 GetFeatureMap(request, &features); |
| 493 | 493 |
| 494 EXPECT_EQ(1.0, | 494 EXPECT_EQ(1.0, |
| 495 features[base::StringPrintf("%s[0]=%s", | 495 features[base::StringPrintf("%s[0]=%s", |
| 496 features::kRedirect, | 496 features::kRedirect, |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 537 features::kSafeBrowsingOriginalUrl, | 537 features::kSafeBrowsingOriginalUrl, |
| 538 "http://www.good.com/"))); | 538 "http://www.good.com/"))); |
| 539 EXPECT_DOUBLE_EQ(1.0, features[features::kSafeBrowsingIsSubresource]); | 539 EXPECT_DOUBLE_EQ(1.0, features[features::kSafeBrowsingIsSubresource]); |
| 540 EXPECT_DOUBLE_EQ(2.0, features[features::kSafeBrowsingThreatType]); | 540 EXPECT_DOUBLE_EQ(2.0, features[features::kSafeBrowsingThreatType]); |
| 541 } | 541 } |
| 542 | 542 |
| 543 TEST_F(BrowserFeatureExtractorTest, MalwareFeatures) { | 543 TEST_F(BrowserFeatureExtractorTest, MalwareFeatures) { |
| 544 ClientMalwareRequest request; | 544 ClientMalwareRequest request; |
| 545 request.set_url("http://www.foo.com/"); | 545 request.set_url("http://www.foo.com/"); |
| 546 | 546 |
| 547 std::set<std::string> bad_hosts; | 547 std::set<std::string> bad_urls; |
| 548 bad_hosts.insert("bad.com"); | 548 bad_urls.insert("http://bad.com"); |
| 549 bad_hosts.insert("evil.com"); | 549 bad_urls.insert("http://evil.com"); |
| 550 browse_info_->ips.insert(std::make_pair("193.5.163.8", bad_hosts)); | 550 browse_info_->ips.insert(std::make_pair("193.5.163.8", bad_urls)); |
| 551 browse_info_->ips.insert(std::make_pair("92.92.92.92", bad_hosts)); | 551 browse_info_->ips.insert(std::make_pair("92.92.92.92", bad_urls)); |
| 552 std::set<std::string> good_hosts; | 552 std::set<std::string> good_urls; |
| 553 good_hosts.insert("ok.com"); | 553 good_urls.insert("http://ok.com"); |
| 554 browse_info_->ips.insert(std::make_pair("23.94.78.1", good_hosts)); | 554 browse_info_->ips.insert(std::make_pair("23.94.78.1", good_urls)); |
| 555 EXPECT_CALL(*service_, IsBadIpAddress("193.5.163.8")).WillOnce(Return(true)); | 555 EXPECT_CALL(*service_, IsBadIpAddress("193.5.163.8")).WillOnce(Return(true)); |
| 556 EXPECT_CALL(*service_, IsBadIpAddress("92.92.92.92")).WillOnce(Return(true)); | 556 EXPECT_CALL(*service_, IsBadIpAddress("92.92.92.92")).WillOnce(Return(true)); |
| 557 EXPECT_CALL(*service_, IsBadIpAddress("23.94.78.1")).WillOnce(Return(false)); | 557 EXPECT_CALL(*service_, IsBadIpAddress("23.94.78.1")).WillOnce(Return(false)); |
| 558 | 558 |
| 559 ExtractMalwareFeatures(&request); | 559 ExtractMalwareFeatures(&request); |
| 560 std::map<std::string, std::set<std::string> > features; | 560 std::map<std::string, std::set<std::string> > features; |
| 561 GetMalwareFeatureMap(request, &features); | 561 GetMalwareFeatureMap(request, &features); |
| 562 | 562 |
| 563 EXPECT_EQ(2U, features.size()); | 563 EXPECT_EQ(2U, features.size()); |
| 564 std::string feature_name = base::StringPrintf("%s%s", features::kBadIpFetch, | 564 std::string feature_name = base::StringPrintf("%s%s", features::kBadIpFetch, |
| 565 "193.5.163.8"); | 565 "193.5.163.8"); |
| 566 EXPECT_TRUE(features.count(feature_name)); | 566 EXPECT_TRUE(features.count(feature_name)); |
| 567 std::set<std::string> hosts = features[feature_name]; | 567 std::set<std::string> urls = features[feature_name]; |
| 568 EXPECT_EQ(2U, hosts.size()); | 568 EXPECT_EQ(2U, urls.size()); |
| 569 EXPECT_TRUE(hosts.find("bad.com") != hosts.end()); | 569 EXPECT_TRUE(urls.find("http://bad.com") != urls.end()); |
| 570 EXPECT_TRUE(hosts.find("evil.com") != hosts.end()); | 570 EXPECT_TRUE(urls.find("http://evil.com") != urls.end()); |
| 571 feature_name = base::StringPrintf("%s%s", features::kBadIpFetch, | 571 feature_name = base::StringPrintf("%s%s", features::kBadIpFetch, |
| 572 "92.92.92.92"); | 572 "92.92.92.92"); |
| 573 EXPECT_TRUE(features.count(feature_name)); | 573 EXPECT_TRUE(features.count(feature_name)); |
| 574 hosts = features[feature_name]; | 574 urls = features[feature_name]; |
| 575 EXPECT_EQ(2U, hosts.size()); | 575 EXPECT_EQ(2U, urls.size()); |
| 576 EXPECT_TRUE(hosts.find("bad.com") != hosts.end()); | 576 EXPECT_TRUE(urls.find("http://bad.com") != urls.end()); |
| 577 EXPECT_TRUE(hosts.find("evil.com") != hosts.end()); | 577 EXPECT_TRUE(urls.find("http://evil.com") != urls.end()); |
| 578 } | 578 } |
| 579 |
| 580 TEST_F(BrowserFeatureExtractorTest, MalwareFeatures_ExceedLimit) { |
| 581 ClientMalwareRequest request; |
| 582 request.set_url("http://www.foo.com/"); |
| 583 |
| 584 std::set<std::string> bad_urls; |
| 585 bad_urls.insert("http://bad.com"); |
| 586 std::vector<std::string> ips; |
| 587 for (int i = 0; i < 7; ++i) { // Add 7 ips |
| 588 std::string ip = base::StringPrintf("%d.%d.%d.%d", i, i, i, i); |
| 589 ips.push_back(ip); |
| 590 browse_info_->ips.insert(std::make_pair(ip, bad_urls)); |
| 591 } |
| 592 |
| 593 // First ip is good, then check the next 5 bad ips. |
| 594 // Not check the 7th as reached limit. |
| 595 EXPECT_CALL(*service_, IsBadIpAddress(ips[0])).WillOnce(Return(false)); |
| 596 for (int i = 1; i < 6; ++i) { |
| 597 EXPECT_CALL(*service_, IsBadIpAddress(ips[i])).WillOnce(Return(true)); |
| 598 } |
| 599 |
| 600 ExtractMalwareFeatures(&request); |
| 601 std::map<std::string, std::set<std::string> > features; |
| 602 GetMalwareFeatureMap(request, &features); |
| 603 |
| 604 // Only keep 5 ips. |
| 605 EXPECT_EQ(5U, features.size()); |
| 606 } |
| 607 |
| 579 } // namespace safe_browsing | 608 } // namespace safe_browsing |
| OLD | NEW |