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/download_protection_service.h" | 5 #include "chrome/browser/safe_browsing/download_protection_service.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 #include <stdint.h> | 8 #include <stdint.h> |
9 | 9 |
10 #include <map> | 10 #include <map> |
(...skipping 215 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
226 | 226 |
227 ACTION_P(CheckDownloadUrlDone, threat_type) { | 227 ACTION_P(CheckDownloadUrlDone, threat_type) { |
228 // TODO(nparker): Remove use of SafeBrowsingCheck and instead call | 228 // TODO(nparker): Remove use of SafeBrowsingCheck and instead call |
229 // client->OnCheckDownloadUrlResult(..) directly. | 229 // client->OnCheckDownloadUrlResult(..) directly. |
230 LocalSafeBrowsingDatabaseManager::SafeBrowsingCheck* check = | 230 LocalSafeBrowsingDatabaseManager::SafeBrowsingCheck* check = |
231 new LocalSafeBrowsingDatabaseManager::SafeBrowsingCheck( | 231 new LocalSafeBrowsingDatabaseManager::SafeBrowsingCheck( |
232 arg0, std::vector<SBFullHash>(), arg1, BINURL, | 232 arg0, std::vector<SBFullHash>(), arg1, BINURL, |
233 std::vector<SBThreatType>(1, SB_THREAT_TYPE_BINARY_MALWARE_URL)); | 233 std::vector<SBThreatType>(1, SB_THREAT_TYPE_BINARY_MALWARE_URL)); |
234 for (size_t i = 0; i < check->url_results.size(); ++i) | 234 for (size_t i = 0; i < check->url_results.size(); ++i) |
235 check->url_results[i] = threat_type; | 235 check->url_results[i] = threat_type; |
236 BrowserThread::PostTask(BrowserThread::IO, | 236 BrowserThread::PostTask( |
237 FROM_HERE, | 237 BrowserThread::IO, FROM_HERE, |
238 base::Bind(&OnSafeBrowsingResult, | 238 base::BindOnce(&OnSafeBrowsingResult, base::Owned(check))); |
239 base::Owned(check))); | |
240 } | 239 } |
241 | 240 |
242 class DownloadProtectionServiceTest : public testing::Test { | 241 class DownloadProtectionServiceTest : public testing::Test { |
243 protected: | 242 protected: |
244 DownloadProtectionServiceTest() | 243 DownloadProtectionServiceTest() |
245 : test_browser_thread_bundle_( | 244 : test_browser_thread_bundle_( |
246 content::TestBrowserThreadBundle::IO_MAINLOOP) { | 245 content::TestBrowserThreadBundle::IO_MAINLOOP) { |
247 } | 246 } |
248 void SetUp() override { | 247 void SetUp() override { |
249 // Start real threads for the IO and File threads so that the DCHECKs | 248 // Start real threads for the IO and File threads so that the DCHECKs |
(...skipping 208 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
458 // Helper functions for FlushThreadMessageLoops. | 457 // Helper functions for FlushThreadMessageLoops. |
459 void RunAllPendingAndQuitUI(const base::Closure& quit_closure) { | 458 void RunAllPendingAndQuitUI(const base::Closure& quit_closure) { |
460 RunLoop().RunUntilIdle(); | 459 RunLoop().RunUntilIdle(); |
461 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, quit_closure); | 460 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, quit_closure); |
462 } | 461 } |
463 | 462 |
464 void PostRunMessageLoopTask(BrowserThread::ID thread, | 463 void PostRunMessageLoopTask(BrowserThread::ID thread, |
465 const base::Closure& quit_closure) { | 464 const base::Closure& quit_closure) { |
466 BrowserThread::PostTask( | 465 BrowserThread::PostTask( |
467 thread, FROM_HERE, | 466 thread, FROM_HERE, |
468 base::Bind(&DownloadProtectionServiceTest::RunAllPendingAndQuitUI, | 467 base::BindOnce(&DownloadProtectionServiceTest::RunAllPendingAndQuitUI, |
469 base::Unretained(this), quit_closure)); | 468 base::Unretained(this), quit_closure)); |
470 } | 469 } |
471 | 470 |
472 void FlushMessageLoop(BrowserThread::ID thread) { | 471 void FlushMessageLoop(BrowserThread::ID thread) { |
473 RunLoop run_loop; | 472 RunLoop run_loop; |
474 BrowserThread::PostTask( | 473 BrowserThread::PostTask( |
475 BrowserThread::UI, FROM_HERE, | 474 BrowserThread::UI, FROM_HERE, |
476 base::Bind(&DownloadProtectionServiceTest::PostRunMessageLoopTask, | 475 base::BindOnce(&DownloadProtectionServiceTest::PostRunMessageLoopTask, |
477 base::Unretained(this), thread, run_loop.QuitClosure())); | 476 base::Unretained(this), thread, run_loop.QuitClosure())); |
478 run_loop.Run(); | 477 run_loop.Run(); |
479 } | 478 } |
480 | 479 |
481 void OnClientDownloadRequest(content::DownloadItem* download, | 480 void OnClientDownloadRequest(content::DownloadItem* download, |
482 const ClientDownloadRequest* request) { | 481 const ClientDownloadRequest* request) { |
483 if (request) | 482 if (request) |
484 last_client_download_request_.reset(new ClientDownloadRequest(*request)); | 483 last_client_download_request_.reset(new ClientDownloadRequest(*request)); |
485 else | 484 else |
486 last_client_download_request_.reset(); | 485 last_client_download_request_.reset(); |
487 } | 486 } |
(...skipping 1017 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1505 EXPECT_TRUE(request.has_image_headers()); | 1504 EXPECT_TRUE(request.has_image_headers()); |
1506 const ClientDownloadRequest_ImageHeaders& headers = | 1505 const ClientDownloadRequest_ImageHeaders& headers = |
1507 request.image_headers(); | 1506 request.image_headers(); |
1508 EXPECT_TRUE(headers.has_pe_headers()); | 1507 EXPECT_TRUE(headers.has_pe_headers()); |
1509 EXPECT_TRUE(headers.pe_headers().has_dos_header()); | 1508 EXPECT_TRUE(headers.pe_headers().has_dos_header()); |
1510 EXPECT_EQ("dummy dos header", headers.pe_headers().dos_header()); | 1509 EXPECT_EQ("dummy dos header", headers.pe_headers().dos_header()); |
1511 | 1510 |
1512 // Simulate the request finishing. | 1511 // Simulate the request finishing. |
1513 base::ThreadTaskRunnerHandle::Get()->PostTask( | 1512 base::ThreadTaskRunnerHandle::Get()->PostTask( |
1514 FROM_HERE, | 1513 FROM_HERE, |
1515 base::Bind(&DownloadProtectionServiceTest::SendURLFetchComplete, | 1514 base::BindOnce(&DownloadProtectionServiceTest::SendURLFetchComplete, |
1516 base::Unretained(this), fetcher)); | 1515 base::Unretained(this), fetcher)); |
1517 run_loop.Run(); | 1516 run_loop.Run(); |
1518 } | 1517 } |
1519 | 1518 |
1520 // Similar to above, but with an unsigned binary. | 1519 // Similar to above, but with an unsigned binary. |
1521 TEST_F(DownloadProtectionServiceTest, | 1520 TEST_F(DownloadProtectionServiceTest, |
1522 CheckClientDownloadValidateRequestNoSignature) { | 1521 CheckClientDownloadValidateRequestNoSignature) { |
1523 net::TestURLFetcherFactory factory; | 1522 net::TestURLFetcherFactory factory; |
1524 | 1523 |
1525 content::MockDownloadItem item; | 1524 content::MockDownloadItem item; |
1526 PrepareBasicDownloadItem( | 1525 PrepareBasicDownloadItem( |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1565 EXPECT_TRUE(RequestContainsResource(request, | 1564 EXPECT_TRUE(RequestContainsResource(request, |
1566 ClientDownloadRequest::DOWNLOAD_URL, | 1565 ClientDownloadRequest::DOWNLOAD_URL, |
1567 "ftp://www.google.com/bla.exe", | 1566 "ftp://www.google.com/bla.exe", |
1568 referrer_.spec())); | 1567 referrer_.spec())); |
1569 EXPECT_TRUE(request.has_signature()); | 1568 EXPECT_TRUE(request.has_signature()); |
1570 EXPECT_EQ(0, request.signature().certificate_chain_size()); | 1569 EXPECT_EQ(0, request.signature().certificate_chain_size()); |
1571 | 1570 |
1572 // Simulate the request finishing. | 1571 // Simulate the request finishing. |
1573 base::ThreadTaskRunnerHandle::Get()->PostTask( | 1572 base::ThreadTaskRunnerHandle::Get()->PostTask( |
1574 FROM_HERE, | 1573 FROM_HERE, |
1575 base::Bind(&DownloadProtectionServiceTest::SendURLFetchComplete, | 1574 base::BindOnce(&DownloadProtectionServiceTest::SendURLFetchComplete, |
1576 base::Unretained(this), fetcher)); | 1575 base::Unretained(this), fetcher)); |
1577 run_loop.Run(); | 1576 run_loop.Run(); |
1578 } | 1577 } |
1579 | 1578 |
1580 // Similar to above, but with tab history. | 1579 // Similar to above, but with tab history. |
1581 TEST_F(DownloadProtectionServiceTest, | 1580 TEST_F(DownloadProtectionServiceTest, |
1582 CheckClientDownloadValidateRequestTabHistory) { | 1581 CheckClientDownloadValidateRequestTabHistory) { |
1583 net::TestURLFetcherFactory factory; | 1582 net::TestURLFetcherFactory factory; |
1584 | 1583 |
1585 content::MockDownloadItem item; | 1584 content::MockDownloadItem item; |
1586 PrepareBasicDownloadItem( | 1585 PrepareBasicDownloadItem( |
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1653 EXPECT_TRUE(request.has_image_headers()); | 1652 EXPECT_TRUE(request.has_image_headers()); |
1654 const ClientDownloadRequest_ImageHeaders& headers = | 1653 const ClientDownloadRequest_ImageHeaders& headers = |
1655 request.image_headers(); | 1654 request.image_headers(); |
1656 EXPECT_TRUE(headers.has_pe_headers()); | 1655 EXPECT_TRUE(headers.has_pe_headers()); |
1657 EXPECT_TRUE(headers.pe_headers().has_dos_header()); | 1656 EXPECT_TRUE(headers.pe_headers().has_dos_header()); |
1658 EXPECT_EQ("dummy dos header", headers.pe_headers().dos_header()); | 1657 EXPECT_EQ("dummy dos header", headers.pe_headers().dos_header()); |
1659 | 1658 |
1660 // Simulate the request finishing. | 1659 // Simulate the request finishing. |
1661 base::ThreadTaskRunnerHandle::Get()->PostTask( | 1660 base::ThreadTaskRunnerHandle::Get()->PostTask( |
1662 FROM_HERE, | 1661 FROM_HERE, |
1663 base::Bind(&DownloadProtectionServiceTest::SendURLFetchComplete, | 1662 base::BindOnce(&DownloadProtectionServiceTest::SendURLFetchComplete, |
1664 base::Unretained(this), fetcher)); | 1663 base::Unretained(this), fetcher)); |
1665 run_loop.Run(); | 1664 run_loop.Run(); |
1666 } | 1665 } |
1667 | 1666 |
1668 // Now try with a history match. | 1667 // Now try with a history match. |
1669 { | 1668 { |
1670 history::RedirectList redirects; | 1669 history::RedirectList redirects; |
1671 redirects.push_back(GURL("http://tab.com/ref1")); | 1670 redirects.push_back(GURL("http://tab.com/ref1")); |
1672 redirects.push_back(GURL("http://tab.com/ref2")); | 1671 redirects.push_back(GURL("http://tab.com/ref2")); |
1673 redirects.push_back(tab_url); | 1672 redirects.push_back(tab_url); |
1674 HistoryServiceFactory::GetForProfile(profile_.get(), | 1673 HistoryServiceFactory::GetForProfile(profile_.get(), |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1725 EXPECT_TRUE(request.has_signature()); | 1724 EXPECT_TRUE(request.has_signature()); |
1726 ASSERT_EQ(1, request.signature().certificate_chain_size()); | 1725 ASSERT_EQ(1, request.signature().certificate_chain_size()); |
1727 const ClientDownloadRequest_CertificateChain& chain = | 1726 const ClientDownloadRequest_CertificateChain& chain = |
1728 request.signature().certificate_chain(0); | 1727 request.signature().certificate_chain(0); |
1729 ASSERT_EQ(1, chain.element_size()); | 1728 ASSERT_EQ(1, chain.element_size()); |
1730 EXPECT_EQ("dummy cert data", chain.element(0).certificate()); | 1729 EXPECT_EQ("dummy cert data", chain.element(0).certificate()); |
1731 | 1730 |
1732 // Simulate the request finishing. | 1731 // Simulate the request finishing. |
1733 base::ThreadTaskRunnerHandle::Get()->PostTask( | 1732 base::ThreadTaskRunnerHandle::Get()->PostTask( |
1734 FROM_HERE, | 1733 FROM_HERE, |
1735 base::Bind(&DownloadProtectionServiceTest::SendURLFetchComplete, | 1734 base::BindOnce(&DownloadProtectionServiceTest::SendURLFetchComplete, |
1736 base::Unretained(this), fetcher)); | 1735 base::Unretained(this), fetcher)); |
1737 run_loop.Run(); | 1736 run_loop.Run(); |
1738 } | 1737 } |
1739 } | 1738 } |
1740 | 1739 |
1741 TEST_F(DownloadProtectionServiceTest, TestCheckDownloadUrl) { | 1740 TEST_F(DownloadProtectionServiceTest, TestCheckDownloadUrl) { |
1742 net::TestURLFetcherFactory factory; | 1741 net::TestURLFetcherFactory factory; |
1743 | 1742 |
1744 std::vector<GURL> url_chain; | 1743 std::vector<GURL> url_chain; |
1745 url_chain.push_back(GURL("http://www.google.com/")); | 1744 url_chain.push_back(GURL("http://www.google.com/")); |
1746 url_chain.push_back(GURL("http://www.google.com/bla.exe")); | 1745 url_chain.push_back(GURL("http://www.google.com/bla.exe")); |
(...skipping 599 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2346 &item, base::Bind(&DownloadProtectionServiceTest::CheckDoneCallback, | 2345 &item, base::Bind(&DownloadProtectionServiceTest::CheckDoneCallback, |
2347 base::Unretained(this), run_loop.QuitClosure())); | 2346 base::Unretained(this), run_loop.QuitClosure())); |
2348 run_loop.Run(); | 2347 run_loop.Run(); |
2349 | 2348 |
2350 EXPECT_FALSE(HasClientDownloadRequest()); | 2349 EXPECT_FALSE(HasClientDownloadRequest()); |
2351 // Overriden by flag: | 2350 // Overriden by flag: |
2352 EXPECT_TRUE(IsResult(DownloadProtectionService::DANGEROUS)); | 2351 EXPECT_TRUE(IsResult(DownloadProtectionService::DANGEROUS)); |
2353 } | 2352 } |
2354 | 2353 |
2355 } // namespace safe_browsing | 2354 } // namespace safe_browsing |
OLD | NEW |