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 <map> | 7 #include <map> |
8 #include <string> | 8 #include <string> |
9 | 9 |
10 #include "base/base_paths.h" | 10 #include "base/base_paths.h" |
(...skipping 355 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
366 EXPECT_CALL(item, GetFullPath()).WillRepeatedly(ReturnRef(a_tmp)); | 366 EXPECT_CALL(item, GetFullPath()).WillRepeatedly(ReturnRef(a_tmp)); |
367 EXPECT_CALL(item, GetTargetFilePath()).WillRepeatedly(ReturnRef(a_exe)); | 367 EXPECT_CALL(item, GetTargetFilePath()).WillRepeatedly(ReturnRef(a_exe)); |
368 EXPECT_CALL(item, GetUrlChain()).WillRepeatedly(ReturnRef(url_chain)); | 368 EXPECT_CALL(item, GetUrlChain()).WillRepeatedly(ReturnRef(url_chain)); |
369 EXPECT_CALL(item, GetReferrerUrl()).WillRepeatedly(ReturnRef(referrer)); | 369 EXPECT_CALL(item, GetReferrerUrl()).WillRepeatedly(ReturnRef(referrer)); |
370 EXPECT_CALL(*sb_service_->mock_database_manager(), | 370 EXPECT_CALL(*sb_service_->mock_database_manager(), |
371 MatchDownloadWhitelistUrl(_)) | 371 MatchDownloadWhitelistUrl(_)) |
372 .WillRepeatedly(Return(false)); | 372 .WillRepeatedly(Return(false)); |
373 EXPECT_CALL(*sb_service_->mock_database_manager(), | 373 EXPECT_CALL(*sb_service_->mock_database_manager(), |
374 MatchDownloadWhitelistUrl(GURL("http://www.google.com/a.exe"))) | 374 MatchDownloadWhitelistUrl(GURL("http://www.google.com/a.exe"))) |
375 .WillRepeatedly(Return(true)); | 375 .WillRepeatedly(Return(true)); |
376 EXPECT_CALL(*signature_util_, CheckSignature(a_tmp, _)).Times(2); | 376 EXPECT_CALL(*signature_util_.get(), CheckSignature(a_tmp, _)).Times(2); |
377 | 377 |
378 download_service_->CheckClientDownload( | 378 download_service_->CheckClientDownload( |
379 &item, | 379 &item, |
380 base::Bind(&DownloadProtectionServiceTest::CheckDoneCallback, | 380 base::Bind(&DownloadProtectionServiceTest::CheckDoneCallback, |
381 base::Unretained(this))); | 381 base::Unretained(this))); |
382 msg_loop_.Run(); | 382 msg_loop_.Run(); |
383 EXPECT_TRUE(IsResult(DownloadProtectionService::SAFE)); | 383 EXPECT_TRUE(IsResult(DownloadProtectionService::SAFE)); |
384 | 384 |
385 // Check that the referrer is matched against the whitelist. | 385 // Check that the referrer is matched against the whitelist. |
386 url_chain.pop_back(); | 386 url_chain.pop_back(); |
(...skipping 27 matching lines...) Expand all Loading... |
414 EXPECT_CALL(item, GetUrlChain()).WillRepeatedly(ReturnRef(url_chain)); | 414 EXPECT_CALL(item, GetUrlChain()).WillRepeatedly(ReturnRef(url_chain)); |
415 EXPECT_CALL(item, GetReferrerUrl()).WillRepeatedly(ReturnRef(referrer)); | 415 EXPECT_CALL(item, GetReferrerUrl()).WillRepeatedly(ReturnRef(referrer)); |
416 EXPECT_CALL(item, GetHash()).WillRepeatedly(ReturnRef(hash)); | 416 EXPECT_CALL(item, GetHash()).WillRepeatedly(ReturnRef(hash)); |
417 EXPECT_CALL(item, GetReceivedBytes()).WillRepeatedly(Return(100)); | 417 EXPECT_CALL(item, GetReceivedBytes()).WillRepeatedly(Return(100)); |
418 EXPECT_CALL(item, HasUserGesture()).WillRepeatedly(Return(true)); | 418 EXPECT_CALL(item, HasUserGesture()).WillRepeatedly(Return(true)); |
419 EXPECT_CALL(item, GetRemoteAddress()).WillRepeatedly(Return("")); | 419 EXPECT_CALL(item, GetRemoteAddress()).WillRepeatedly(Return("")); |
420 | 420 |
421 EXPECT_CALL(*sb_service_->mock_database_manager(), | 421 EXPECT_CALL(*sb_service_->mock_database_manager(), |
422 MatchDownloadWhitelistUrl(_)) | 422 MatchDownloadWhitelistUrl(_)) |
423 .WillRepeatedly(Return(false)); | 423 .WillRepeatedly(Return(false)); |
424 EXPECT_CALL(*signature_util_, CheckSignature(a_tmp, _)); | 424 EXPECT_CALL(*signature_util_.get(), CheckSignature(a_tmp, _)); |
425 | 425 |
426 download_service_->CheckClientDownload( | 426 download_service_->CheckClientDownload( |
427 &item, | 427 &item, |
428 base::Bind(&DownloadProtectionServiceTest::CheckDoneCallback, | 428 base::Bind(&DownloadProtectionServiceTest::CheckDoneCallback, |
429 base::Unretained(this))); | 429 base::Unretained(this))); |
430 msg_loop_.Run(); | 430 msg_loop_.Run(); |
431 EXPECT_TRUE(IsResult(DownloadProtectionService::SAFE)); | 431 EXPECT_TRUE(IsResult(DownloadProtectionService::SAFE)); |
432 } | 432 } |
433 | 433 |
434 TEST_F(DownloadProtectionServiceTest, CheckClientDownloadSuccess) { | 434 TEST_F(DownloadProtectionServiceTest, CheckClientDownloadSuccess) { |
(...skipping 21 matching lines...) Expand all Loading... |
456 EXPECT_CALL(item, GetUrlChain()).WillRepeatedly(ReturnRef(url_chain)); | 456 EXPECT_CALL(item, GetUrlChain()).WillRepeatedly(ReturnRef(url_chain)); |
457 EXPECT_CALL(item, GetReferrerUrl()).WillRepeatedly(ReturnRef(referrer)); | 457 EXPECT_CALL(item, GetReferrerUrl()).WillRepeatedly(ReturnRef(referrer)); |
458 EXPECT_CALL(item, GetHash()).WillRepeatedly(ReturnRef(hash)); | 458 EXPECT_CALL(item, GetHash()).WillRepeatedly(ReturnRef(hash)); |
459 EXPECT_CALL(item, GetReceivedBytes()).WillRepeatedly(Return(100)); | 459 EXPECT_CALL(item, GetReceivedBytes()).WillRepeatedly(Return(100)); |
460 EXPECT_CALL(item, HasUserGesture()).WillRepeatedly(Return(true)); | 460 EXPECT_CALL(item, HasUserGesture()).WillRepeatedly(Return(true)); |
461 EXPECT_CALL(item, GetRemoteAddress()).WillRepeatedly(Return("")); | 461 EXPECT_CALL(item, GetRemoteAddress()).WillRepeatedly(Return("")); |
462 | 462 |
463 EXPECT_CALL(*sb_service_->mock_database_manager(), | 463 EXPECT_CALL(*sb_service_->mock_database_manager(), |
464 MatchDownloadWhitelistUrl(_)) | 464 MatchDownloadWhitelistUrl(_)) |
465 .WillRepeatedly(Return(false)); | 465 .WillRepeatedly(Return(false)); |
466 EXPECT_CALL(*signature_util_, CheckSignature(a_tmp, _)).Times(5); | 466 EXPECT_CALL(*signature_util_.get(), CheckSignature(a_tmp, _)).Times(5); |
467 | 467 |
468 download_service_->CheckClientDownload( | 468 download_service_->CheckClientDownload( |
469 &item, | 469 &item, |
470 base::Bind(&DownloadProtectionServiceTest::CheckDoneCallback, | 470 base::Bind(&DownloadProtectionServiceTest::CheckDoneCallback, |
471 base::Unretained(this))); | 471 base::Unretained(this))); |
472 msg_loop_.Run(); | 472 msg_loop_.Run(); |
473 EXPECT_TRUE(IsResult(DownloadProtectionService::SAFE)); | 473 EXPECT_TRUE(IsResult(DownloadProtectionService::SAFE)); |
474 | 474 |
475 // Invalid response should be safe too. | 475 // Invalid response should be safe too. |
476 response.Clear(); | 476 response.Clear(); |
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
566 EXPECT_CALL(item, GetUrlChain()).WillRepeatedly(ReturnRef(url_chain)); | 566 EXPECT_CALL(item, GetUrlChain()).WillRepeatedly(ReturnRef(url_chain)); |
567 EXPECT_CALL(item, GetReferrerUrl()).WillRepeatedly(ReturnRef(referrer)); | 567 EXPECT_CALL(item, GetReferrerUrl()).WillRepeatedly(ReturnRef(referrer)); |
568 EXPECT_CALL(item, GetHash()).WillRepeatedly(ReturnRef(hash)); | 568 EXPECT_CALL(item, GetHash()).WillRepeatedly(ReturnRef(hash)); |
569 EXPECT_CALL(item, GetReceivedBytes()).WillRepeatedly(Return(100)); | 569 EXPECT_CALL(item, GetReceivedBytes()).WillRepeatedly(Return(100)); |
570 EXPECT_CALL(item, HasUserGesture()).WillRepeatedly(Return(true)); | 570 EXPECT_CALL(item, HasUserGesture()).WillRepeatedly(Return(true)); |
571 EXPECT_CALL(item, GetRemoteAddress()).WillRepeatedly(Return("")); | 571 EXPECT_CALL(item, GetRemoteAddress()).WillRepeatedly(Return("")); |
572 | 572 |
573 EXPECT_CALL(*sb_service_->mock_database_manager(), | 573 EXPECT_CALL(*sb_service_->mock_database_manager(), |
574 MatchDownloadWhitelistUrl(_)) | 574 MatchDownloadWhitelistUrl(_)) |
575 .WillRepeatedly(Return(false)); | 575 .WillRepeatedly(Return(false)); |
576 EXPECT_CALL(*signature_util_, CheckSignature(a_tmp, _)).Times(1); | 576 EXPECT_CALL(*signature_util_.get(), CheckSignature(a_tmp, _)).Times(1); |
577 | 577 |
578 download_service_->CheckClientDownload( | 578 download_service_->CheckClientDownload( |
579 &item, | 579 &item, |
580 base::Bind(&DownloadProtectionServiceTest::CheckDoneCallback, | 580 base::Bind(&DownloadProtectionServiceTest::CheckDoneCallback, |
581 base::Unretained(this))); | 581 base::Unretained(this))); |
582 msg_loop_.Run(); | 582 msg_loop_.Run(); |
583 #if defined(OS_WIN) | 583 #if defined(OS_WIN) |
584 EXPECT_TRUE(IsResult(DownloadProtectionService::DANGEROUS)); | 584 EXPECT_TRUE(IsResult(DownloadProtectionService::DANGEROUS)); |
585 #else | 585 #else |
586 EXPECT_TRUE(IsResult(DownloadProtectionService::SAFE)); | 586 EXPECT_TRUE(IsResult(DownloadProtectionService::SAFE)); |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
628 zip_source_dir.path().Append(FILE_PATH_LITERAL("file.txt")), | 628 zip_source_dir.path().Append(FILE_PATH_LITERAL("file.txt")), |
629 file_contents.data(), file_contents.size())); | 629 file_contents.data(), file_contents.size())); |
630 ASSERT_TRUE(zip::Zip(zip_source_dir.path(), a_tmp, false)); | 630 ASSERT_TRUE(zip::Zip(zip_source_dir.path(), a_tmp, false)); |
631 | 631 |
632 download_service_->CheckClientDownload( | 632 download_service_->CheckClientDownload( |
633 &item, | 633 &item, |
634 base::Bind(&DownloadProtectionServiceTest::CheckDoneCallback, | 634 base::Bind(&DownloadProtectionServiceTest::CheckDoneCallback, |
635 base::Unretained(this))); | 635 base::Unretained(this))); |
636 msg_loop_.Run(); | 636 msg_loop_.Run(); |
637 EXPECT_TRUE(IsResult(DownloadProtectionService::SAFE)); | 637 EXPECT_TRUE(IsResult(DownloadProtectionService::SAFE)); |
638 Mock::VerifyAndClearExpectations(sb_service_); | 638 Mock::VerifyAndClearExpectations(sb_service_.get()); |
639 Mock::VerifyAndClearExpectations(signature_util_); | 639 Mock::VerifyAndClearExpectations(signature_util_.get()); |
640 | 640 |
641 // Now check with an executable in the zip file as well. | 641 // Now check with an executable in the zip file as well. |
642 ASSERT_EQ(static_cast<int>(file_contents.size()), file_util::WriteFile( | 642 ASSERT_EQ(static_cast<int>(file_contents.size()), file_util::WriteFile( |
643 zip_source_dir.path().Append(FILE_PATH_LITERAL("file.exe")), | 643 zip_source_dir.path().Append(FILE_PATH_LITERAL("file.exe")), |
644 file_contents.data(), file_contents.size())); | 644 file_contents.data(), file_contents.size())); |
645 ASSERT_TRUE(zip::Zip(zip_source_dir.path(), a_tmp, false)); | 645 ASSERT_TRUE(zip::Zip(zip_source_dir.path(), a_tmp, false)); |
646 | 646 |
647 EXPECT_CALL(*sb_service_->mock_database_manager(), | 647 EXPECT_CALL(*sb_service_->mock_database_manager(), |
648 MatchDownloadWhitelistUrl(_)) | 648 MatchDownloadWhitelistUrl(_)) |
649 .WillRepeatedly(Return(false)); | 649 .WillRepeatedly(Return(false)); |
650 | 650 |
651 download_service_->CheckClientDownload( | 651 download_service_->CheckClientDownload( |
652 &item, | 652 &item, |
653 base::Bind(&DownloadProtectionServiceTest::CheckDoneCallback, | 653 base::Bind(&DownloadProtectionServiceTest::CheckDoneCallback, |
654 base::Unretained(this))); | 654 base::Unretained(this))); |
655 msg_loop_.Run(); | 655 msg_loop_.Run(); |
656 EXPECT_TRUE(IsResult(DownloadProtectionService::SAFE)); | 656 EXPECT_TRUE(IsResult(DownloadProtectionService::SAFE)); |
657 Mock::VerifyAndClearExpectations(signature_util_); | 657 Mock::VerifyAndClearExpectations(signature_util_.get()); |
658 | 658 |
659 // If the response is dangerous the result should also be marked as | 659 // If the response is dangerous the result should also be marked as |
660 // dangerous. | 660 // dangerous. |
661 response.set_verdict(ClientDownloadResponse::DANGEROUS); | 661 response.set_verdict(ClientDownloadResponse::DANGEROUS); |
662 factory.SetFakeResponse( | 662 factory.SetFakeResponse( |
663 DownloadProtectionService::GetDownloadRequestUrl(), | 663 DownloadProtectionService::GetDownloadRequestUrl(), |
664 response.SerializeAsString(), | 664 response.SerializeAsString(), |
665 true); | 665 true); |
666 | 666 |
667 download_service_->CheckClientDownload( | 667 download_service_->CheckClientDownload( |
668 &item, | 668 &item, |
669 base::Bind(&DownloadProtectionServiceTest::CheckDoneCallback, | 669 base::Bind(&DownloadProtectionServiceTest::CheckDoneCallback, |
670 base::Unretained(this))); | 670 base::Unretained(this))); |
671 msg_loop_.Run(); | 671 msg_loop_.Run(); |
672 #if defined(OS_WIN) | 672 #if defined(OS_WIN) |
673 EXPECT_TRUE(IsResult(DownloadProtectionService::DANGEROUS)); | 673 EXPECT_TRUE(IsResult(DownloadProtectionService::DANGEROUS)); |
674 #else | 674 #else |
675 EXPECT_TRUE(IsResult(DownloadProtectionService::SAFE)); | 675 EXPECT_TRUE(IsResult(DownloadProtectionService::SAFE)); |
676 #endif | 676 #endif |
677 Mock::VerifyAndClearExpectations(signature_util_); | 677 Mock::VerifyAndClearExpectations(signature_util_.get()); |
678 } | 678 } |
679 | 679 |
680 TEST_F(DownloadProtectionServiceTest, CheckClientDownloadCorruptZip) { | 680 TEST_F(DownloadProtectionServiceTest, CheckClientDownloadCorruptZip) { |
681 base::ScopedTempDir download_dir; | 681 base::ScopedTempDir download_dir; |
682 ASSERT_TRUE(download_dir.CreateUniqueTempDir()); | 682 ASSERT_TRUE(download_dir.CreateUniqueTempDir()); |
683 | 683 |
684 base::FilePath a_tmp(download_dir.path().Append(FILE_PATH_LITERAL("a.tmp"))); | 684 base::FilePath a_tmp(download_dir.path().Append(FILE_PATH_LITERAL("a.tmp"))); |
685 base::FilePath a_zip(FILE_PATH_LITERAL("a.zip")); | 685 base::FilePath a_zip(FILE_PATH_LITERAL("a.zip")); |
686 std::vector<GURL> url_chain; | 686 std::vector<GURL> url_chain; |
687 url_chain.push_back(GURL("http://www.evil.com/a.zip")); | 687 url_chain.push_back(GURL("http://www.evil.com/a.zip")); |
(...skipping 15 matching lines...) Expand all Loading... |
703 std::string file_contents = "corrupt zip file"; | 703 std::string file_contents = "corrupt zip file"; |
704 ASSERT_EQ(static_cast<int>(file_contents.size()), file_util::WriteFile( | 704 ASSERT_EQ(static_cast<int>(file_contents.size()), file_util::WriteFile( |
705 a_tmp, file_contents.data(), file_contents.size())); | 705 a_tmp, file_contents.data(), file_contents.size())); |
706 | 706 |
707 download_service_->CheckClientDownload( | 707 download_service_->CheckClientDownload( |
708 &item, | 708 &item, |
709 base::Bind(&DownloadProtectionServiceTest::CheckDoneCallback, | 709 base::Bind(&DownloadProtectionServiceTest::CheckDoneCallback, |
710 base::Unretained(this))); | 710 base::Unretained(this))); |
711 msg_loop_.Run(); | 711 msg_loop_.Run(); |
712 EXPECT_TRUE(IsResult(DownloadProtectionService::SAFE)); | 712 EXPECT_TRUE(IsResult(DownloadProtectionService::SAFE)); |
713 Mock::VerifyAndClearExpectations(sb_service_); | 713 Mock::VerifyAndClearExpectations(sb_service_.get()); |
714 Mock::VerifyAndClearExpectations(signature_util_); | 714 Mock::VerifyAndClearExpectations(signature_util_.get()); |
715 } | 715 } |
716 | 716 |
717 TEST_F(DownloadProtectionServiceTest, CheckClientCrxDownloadSuccess) { | 717 TEST_F(DownloadProtectionServiceTest, CheckClientCrxDownloadSuccess) { |
718 ClientDownloadResponse response; | 718 ClientDownloadResponse response; |
719 // Even if the server verdict is dangerous we should return SAFE because | 719 // Even if the server verdict is dangerous we should return SAFE because |
720 // DownloadProtectionService::IsSupportedDownload() will return false | 720 // DownloadProtectionService::IsSupportedDownload() will return false |
721 // for crx downloads. | 721 // for crx downloads. |
722 response.set_verdict(ClientDownloadResponse::DANGEROUS); | 722 response.set_verdict(ClientDownloadResponse::DANGEROUS); |
723 net::FakeURLFetcherFactory factory(NULL); | 723 net::FakeURLFetcherFactory factory(NULL); |
724 // Empty response means SAFE. | 724 // Empty response means SAFE. |
(...skipping 17 matching lines...) Expand all Loading... |
742 EXPECT_CALL(item, GetUrlChain()).WillRepeatedly(ReturnRef(url_chain)); | 742 EXPECT_CALL(item, GetUrlChain()).WillRepeatedly(ReturnRef(url_chain)); |
743 EXPECT_CALL(item, GetReferrerUrl()).WillRepeatedly(ReturnRef(referrer)); | 743 EXPECT_CALL(item, GetReferrerUrl()).WillRepeatedly(ReturnRef(referrer)); |
744 EXPECT_CALL(item, GetHash()).WillRepeatedly(ReturnRef(hash)); | 744 EXPECT_CALL(item, GetHash()).WillRepeatedly(ReturnRef(hash)); |
745 EXPECT_CALL(item, GetReceivedBytes()).WillRepeatedly(Return(100)); | 745 EXPECT_CALL(item, GetReceivedBytes()).WillRepeatedly(Return(100)); |
746 EXPECT_CALL(item, HasUserGesture()).WillRepeatedly(Return(true)); | 746 EXPECT_CALL(item, HasUserGesture()).WillRepeatedly(Return(true)); |
747 EXPECT_CALL(item, GetRemoteAddress()).WillRepeatedly(Return("")); | 747 EXPECT_CALL(item, GetRemoteAddress()).WillRepeatedly(Return("")); |
748 | 748 |
749 EXPECT_CALL(*sb_service_->mock_database_manager(), | 749 EXPECT_CALL(*sb_service_->mock_database_manager(), |
750 MatchDownloadWhitelistUrl(_)) | 750 MatchDownloadWhitelistUrl(_)) |
751 .WillRepeatedly(Return(false)); | 751 .WillRepeatedly(Return(false)); |
752 EXPECT_CALL(*signature_util_, CheckSignature(a_tmp, _)).Times(1); | 752 EXPECT_CALL(*signature_util_.get(), CheckSignature(a_tmp, _)).Times(1); |
753 | 753 |
754 EXPECT_FALSE(download_service_->IsSupportedDownload(item, a_crx)); | 754 EXPECT_FALSE(download_service_->IsSupportedDownload(item, a_crx)); |
755 download_service_->CheckClientDownload( | 755 download_service_->CheckClientDownload( |
756 &item, | 756 &item, |
757 base::Bind(&DownloadProtectionServiceTest::CheckDoneCallback, | 757 base::Bind(&DownloadProtectionServiceTest::CheckDoneCallback, |
758 base::Unretained(this))); | 758 base::Unretained(this))); |
759 msg_loop_.Run(); | 759 msg_loop_.Run(); |
760 EXPECT_TRUE(IsResult(DownloadProtectionService::SAFE)); | 760 EXPECT_TRUE(IsResult(DownloadProtectionService::SAFE)); |
761 } | 761 } |
762 | 762 |
(...skipping 17 matching lines...) Expand all Loading... |
780 EXPECT_CALL(item, GetUrlChain()).WillRepeatedly(ReturnRef(url_chain)); | 780 EXPECT_CALL(item, GetUrlChain()).WillRepeatedly(ReturnRef(url_chain)); |
781 EXPECT_CALL(item, GetReferrerUrl()).WillRepeatedly(ReturnRef(referrer)); | 781 EXPECT_CALL(item, GetReferrerUrl()).WillRepeatedly(ReturnRef(referrer)); |
782 EXPECT_CALL(item, GetHash()).WillRepeatedly(ReturnRef(hash)); | 782 EXPECT_CALL(item, GetHash()).WillRepeatedly(ReturnRef(hash)); |
783 EXPECT_CALL(item, GetReceivedBytes()).WillRepeatedly(Return(100)); | 783 EXPECT_CALL(item, GetReceivedBytes()).WillRepeatedly(Return(100)); |
784 EXPECT_CALL(item, HasUserGesture()).WillRepeatedly(Return(true)); | 784 EXPECT_CALL(item, HasUserGesture()).WillRepeatedly(Return(true)); |
785 EXPECT_CALL(item, GetRemoteAddress()).WillRepeatedly(Return(remote_address)); | 785 EXPECT_CALL(item, GetRemoteAddress()).WillRepeatedly(Return(remote_address)); |
786 | 786 |
787 EXPECT_CALL(*sb_service_->mock_database_manager(), | 787 EXPECT_CALL(*sb_service_->mock_database_manager(), |
788 MatchDownloadWhitelistUrl(_)) | 788 MatchDownloadWhitelistUrl(_)) |
789 .WillRepeatedly(Return(false)); | 789 .WillRepeatedly(Return(false)); |
790 EXPECT_CALL(*signature_util_, CheckSignature(tmp_path, _)) | 790 EXPECT_CALL(*signature_util_.get(), CheckSignature(tmp_path, _)) |
791 .WillOnce(SetCertificateContents("dummy cert data")); | 791 .WillOnce(SetCertificateContents("dummy cert data")); |
792 download_service_->CheckClientDownload( | 792 download_service_->CheckClientDownload( |
793 &item, | 793 &item, |
794 base::Bind(&DownloadProtectionServiceTest::CheckDoneCallback, | 794 base::Bind(&DownloadProtectionServiceTest::CheckDoneCallback, |
795 base::Unretained(this))); | 795 base::Unretained(this))); |
796 | 796 |
797 #if !defined(OS_WIN) | 797 #if !defined(OS_WIN) |
798 // SendRequest is not called. Wait for FinishRequest to call our callback. | 798 // SendRequest is not called. Wait for FinishRequest to call our callback. |
799 msg_loop_.Run(); | 799 msg_loop_.Run(); |
800 net::TestURLFetcher* fetcher = factory.GetFetcherByID(0); | 800 net::TestURLFetcher* fetcher = factory.GetFetcherByID(0); |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
857 EXPECT_CALL(item, GetUrlChain()).WillRepeatedly(ReturnRef(url_chain)); | 857 EXPECT_CALL(item, GetUrlChain()).WillRepeatedly(ReturnRef(url_chain)); |
858 EXPECT_CALL(item, GetReferrerUrl()).WillRepeatedly(ReturnRef(referrer)); | 858 EXPECT_CALL(item, GetReferrerUrl()).WillRepeatedly(ReturnRef(referrer)); |
859 EXPECT_CALL(item, GetHash()).WillRepeatedly(ReturnRef(hash)); | 859 EXPECT_CALL(item, GetHash()).WillRepeatedly(ReturnRef(hash)); |
860 EXPECT_CALL(item, GetReceivedBytes()).WillRepeatedly(Return(100)); | 860 EXPECT_CALL(item, GetReceivedBytes()).WillRepeatedly(Return(100)); |
861 EXPECT_CALL(item, HasUserGesture()).WillRepeatedly(Return(true)); | 861 EXPECT_CALL(item, HasUserGesture()).WillRepeatedly(Return(true)); |
862 EXPECT_CALL(item, GetRemoteAddress()).WillRepeatedly(Return(remote_address)); | 862 EXPECT_CALL(item, GetRemoteAddress()).WillRepeatedly(Return(remote_address)); |
863 | 863 |
864 EXPECT_CALL(*sb_service_->mock_database_manager(), | 864 EXPECT_CALL(*sb_service_->mock_database_manager(), |
865 MatchDownloadWhitelistUrl(_)) | 865 MatchDownloadWhitelistUrl(_)) |
866 .WillRepeatedly(Return(false)); | 866 .WillRepeatedly(Return(false)); |
867 EXPECT_CALL(*signature_util_, CheckSignature(tmp_path, _)); | 867 EXPECT_CALL(*signature_util_.get(), CheckSignature(tmp_path, _)); |
868 download_service_->CheckClientDownload( | 868 download_service_->CheckClientDownload( |
869 &item, | 869 &item, |
870 base::Bind(&DownloadProtectionServiceTest::CheckDoneCallback, | 870 base::Bind(&DownloadProtectionServiceTest::CheckDoneCallback, |
871 base::Unretained(this))); | 871 base::Unretained(this))); |
872 | 872 |
873 #if !defined(OS_WIN) | 873 #if !defined(OS_WIN) |
874 // SendRequest is not called. Wait for FinishRequest to call our callback. | 874 // SendRequest is not called. Wait for FinishRequest to call our callback. |
875 msg_loop_.Run(); | 875 msg_loop_.Run(); |
876 net::TestURLFetcher* fetcher = factory.GetFetcherByID(0); | 876 net::TestURLFetcher* fetcher = factory.GetFetcherByID(0); |
877 EXPECT_EQ(NULL, fetcher); | 877 EXPECT_EQ(NULL, fetcher); |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
923 // CheckClientDownload must still be called. | 923 // CheckClientDownload must still be called. |
924 EXPECT_CALL(*sb_service_->mock_database_manager(), | 924 EXPECT_CALL(*sb_service_->mock_database_manager(), |
925 CheckDownloadUrl(ContainerEq(url_chain), NotNull())) | 925 CheckDownloadUrl(ContainerEq(url_chain), NotNull())) |
926 .WillOnce(Return(true)); | 926 .WillOnce(Return(true)); |
927 download_service_->CheckDownloadUrl( | 927 download_service_->CheckDownloadUrl( |
928 item, | 928 item, |
929 base::Bind(&DownloadProtectionServiceTest::CheckDoneCallback, | 929 base::Bind(&DownloadProtectionServiceTest::CheckDoneCallback, |
930 base::Unretained(this))); | 930 base::Unretained(this))); |
931 msg_loop_.Run(); | 931 msg_loop_.Run(); |
932 EXPECT_TRUE(IsResult(DownloadProtectionService::SAFE)); | 932 EXPECT_TRUE(IsResult(DownloadProtectionService::SAFE)); |
933 Mock::VerifyAndClearExpectations(sb_service_); | 933 Mock::VerifyAndClearExpectations(sb_service_.get()); |
934 | 934 |
935 EXPECT_CALL(*sb_service_->mock_database_manager(), | 935 EXPECT_CALL(*sb_service_->mock_database_manager(), |
936 CheckDownloadUrl(ContainerEq(url_chain), NotNull())) | 936 CheckDownloadUrl(ContainerEq(url_chain), NotNull())) |
937 .WillOnce(DoAll(CheckDownloadUrlDone(SB_THREAT_TYPE_SAFE), | 937 .WillOnce(DoAll(CheckDownloadUrlDone(SB_THREAT_TYPE_SAFE), |
938 Return(false))); | 938 Return(false))); |
939 download_service_->CheckDownloadUrl( | 939 download_service_->CheckDownloadUrl( |
940 item, | 940 item, |
941 base::Bind(&DownloadProtectionServiceTest::CheckDoneCallback, | 941 base::Bind(&DownloadProtectionServiceTest::CheckDoneCallback, |
942 base::Unretained(this))); | 942 base::Unretained(this))); |
943 msg_loop_.Run(); | 943 msg_loop_.Run(); |
944 EXPECT_TRUE(IsResult(DownloadProtectionService::SAFE)); | 944 EXPECT_TRUE(IsResult(DownloadProtectionService::SAFE)); |
945 Mock::VerifyAndClearExpectations(sb_service_); | 945 Mock::VerifyAndClearExpectations(sb_service_.get()); |
946 | 946 |
947 EXPECT_CALL(*sb_service_->mock_database_manager(), | 947 EXPECT_CALL(*sb_service_->mock_database_manager(), |
948 CheckDownloadUrl(ContainerEq(url_chain), NotNull())) | 948 CheckDownloadUrl(ContainerEq(url_chain), NotNull())) |
949 .WillOnce(DoAll( | 949 .WillOnce(DoAll( |
950 CheckDownloadUrlDone(SB_THREAT_TYPE_URL_MALWARE), | 950 CheckDownloadUrlDone(SB_THREAT_TYPE_URL_MALWARE), |
951 Return(false))); | 951 Return(false))); |
952 download_service_->CheckDownloadUrl( | 952 download_service_->CheckDownloadUrl( |
953 item, | 953 item, |
954 base::Bind(&DownloadProtectionServiceTest::CheckDoneCallback, | 954 base::Bind(&DownloadProtectionServiceTest::CheckDoneCallback, |
955 base::Unretained(this))); | 955 base::Unretained(this))); |
956 msg_loop_.Run(); | 956 msg_loop_.Run(); |
957 EXPECT_TRUE(IsResult(DownloadProtectionService::SAFE)); | 957 EXPECT_TRUE(IsResult(DownloadProtectionService::SAFE)); |
958 Mock::VerifyAndClearExpectations(sb_service_); | 958 Mock::VerifyAndClearExpectations(sb_service_.get()); |
959 | 959 |
960 EXPECT_CALL(*sb_service_->mock_database_manager(), | 960 EXPECT_CALL(*sb_service_->mock_database_manager(), |
961 CheckDownloadUrl(ContainerEq(url_chain), | 961 CheckDownloadUrl(ContainerEq(url_chain), |
962 NotNull())) | 962 NotNull())) |
963 .WillOnce(DoAll( | 963 .WillOnce(DoAll( |
964 CheckDownloadUrlDone(SB_THREAT_TYPE_BINARY_MALWARE_URL), | 964 CheckDownloadUrlDone(SB_THREAT_TYPE_BINARY_MALWARE_URL), |
965 Return(false))); | 965 Return(false))); |
966 download_service_->CheckDownloadUrl( | 966 download_service_->CheckDownloadUrl( |
967 item, | 967 item, |
968 base::Bind(&DownloadProtectionServiceTest::CheckDoneCallback, | 968 base::Bind(&DownloadProtectionServiceTest::CheckDoneCallback, |
(...skipping 20 matching lines...) Expand all Loading... |
989 EXPECT_CALL(item, GetUrlChain()).WillRepeatedly(ReturnRef(url_chain)); | 989 EXPECT_CALL(item, GetUrlChain()).WillRepeatedly(ReturnRef(url_chain)); |
990 EXPECT_CALL(item, GetReferrerUrl()).WillRepeatedly(ReturnRef(referrer)); | 990 EXPECT_CALL(item, GetReferrerUrl()).WillRepeatedly(ReturnRef(referrer)); |
991 EXPECT_CALL(item, GetHash()).WillRepeatedly(ReturnRef(hash)); | 991 EXPECT_CALL(item, GetHash()).WillRepeatedly(ReturnRef(hash)); |
992 EXPECT_CALL(item, GetReceivedBytes()).WillRepeatedly(Return(100)); | 992 EXPECT_CALL(item, GetReceivedBytes()).WillRepeatedly(Return(100)); |
993 EXPECT_CALL(item, HasUserGesture()).WillRepeatedly(Return(true)); | 993 EXPECT_CALL(item, HasUserGesture()).WillRepeatedly(Return(true)); |
994 EXPECT_CALL(item, GetRemoteAddress()).WillRepeatedly(Return("")); | 994 EXPECT_CALL(item, GetRemoteAddress()).WillRepeatedly(Return("")); |
995 | 995 |
996 EXPECT_CALL(*sb_service_->mock_database_manager(), | 996 EXPECT_CALL(*sb_service_->mock_database_manager(), |
997 MatchDownloadWhitelistUrl(_)) | 997 MatchDownloadWhitelistUrl(_)) |
998 .WillRepeatedly(Return(false)); | 998 .WillRepeatedly(Return(false)); |
999 EXPECT_CALL(*signature_util_, CheckSignature(tmp_path, _)); | 999 EXPECT_CALL(*signature_util_.get(), CheckSignature(tmp_path, _)); |
1000 | 1000 |
1001 download_service_->download_request_timeout_ms_ = 10; | 1001 download_service_->download_request_timeout_ms_ = 10; |
1002 download_service_->CheckClientDownload( | 1002 download_service_->CheckClientDownload( |
1003 &item, | 1003 &item, |
1004 base::Bind(&DownloadProtectionServiceTest::CheckDoneCallback, | 1004 base::Bind(&DownloadProtectionServiceTest::CheckDoneCallback, |
1005 base::Unretained(this))); | 1005 base::Unretained(this))); |
1006 | 1006 |
1007 // The request should time out because the HTTP request hasn't returned | 1007 // The request should time out because the HTTP request hasn't returned |
1008 // anything yet. | 1008 // anything yet. |
1009 msg_loop_.Run(); | 1009 msg_loop_.Run(); |
(...skipping 20 matching lines...) Expand all Loading... |
1030 EXPECT_CALL(item, GetUrlChain()).WillRepeatedly(ReturnRef(url_chain)); | 1030 EXPECT_CALL(item, GetUrlChain()).WillRepeatedly(ReturnRef(url_chain)); |
1031 EXPECT_CALL(item, GetReferrerUrl()).WillRepeatedly(ReturnRef(referrer)); | 1031 EXPECT_CALL(item, GetReferrerUrl()).WillRepeatedly(ReturnRef(referrer)); |
1032 EXPECT_CALL(item, GetHash()).WillRepeatedly(ReturnRef(hash)); | 1032 EXPECT_CALL(item, GetHash()).WillRepeatedly(ReturnRef(hash)); |
1033 EXPECT_CALL(item, GetReceivedBytes()).WillRepeatedly(Return(100)); | 1033 EXPECT_CALL(item, GetReceivedBytes()).WillRepeatedly(Return(100)); |
1034 EXPECT_CALL(item, HasUserGesture()).WillRepeatedly(Return(true)); | 1034 EXPECT_CALL(item, HasUserGesture()).WillRepeatedly(Return(true)); |
1035 EXPECT_CALL(item, GetRemoteAddress()).WillRepeatedly(Return("")); | 1035 EXPECT_CALL(item, GetRemoteAddress()).WillRepeatedly(Return("")); |
1036 | 1036 |
1037 EXPECT_CALL(*sb_service_->mock_database_manager(), | 1037 EXPECT_CALL(*sb_service_->mock_database_manager(), |
1038 MatchDownloadWhitelistUrl(_)) | 1038 MatchDownloadWhitelistUrl(_)) |
1039 .WillRepeatedly(Return(false)); | 1039 .WillRepeatedly(Return(false)); |
1040 EXPECT_CALL(*signature_util_, CheckSignature(tmp_path, _)); | 1040 EXPECT_CALL(*signature_util_.get(), CheckSignature(tmp_path, _)); |
1041 | 1041 |
1042 download_service_->CheckClientDownload( | 1042 download_service_->CheckClientDownload( |
1043 &item, | 1043 &item, |
1044 base::Bind(&DownloadProtectionServiceTest::SyncCheckDoneCallback, | 1044 base::Bind(&DownloadProtectionServiceTest::SyncCheckDoneCallback, |
1045 base::Unretained(this))); | 1045 base::Unretained(this))); |
1046 | 1046 |
1047 ASSERT_TRUE(observer != NULL); | 1047 ASSERT_TRUE(observer != NULL); |
1048 observer->OnDownloadDestroyed(&item); | 1048 observer->OnDownloadDestroyed(&item); |
1049 | 1049 |
1050 EXPECT_TRUE(observer == NULL); | 1050 EXPECT_TRUE(observer == NULL); |
1051 EXPECT_TRUE(IsResult(DownloadProtectionService::SAFE)); | 1051 EXPECT_TRUE(IsResult(DownloadProtectionService::SAFE)); |
1052 } | 1052 } |
1053 | 1053 |
1054 TEST_F(DownloadProtectionServiceTest, GetCertificateWhitelistStrings) { | 1054 TEST_F(DownloadProtectionServiceTest, GetCertificateWhitelistStrings) { |
1055 // We'll pass this cert in as the "issuer", even though it isn't really | 1055 // We'll pass this cert in as the "issuer", even though it isn't really |
1056 // used to sign the certs below. GetCertificateWhitelistStirngs doesn't care | 1056 // used to sign the certs below. GetCertificateWhitelistStirngs doesn't care |
1057 // about this. | 1057 // about this. |
1058 scoped_refptr<net::X509Certificate> issuer_cert( | 1058 scoped_refptr<net::X509Certificate> issuer_cert( |
1059 ReadTestCertificate("issuer.pem")); | 1059 ReadTestCertificate("issuer.pem")); |
1060 ASSERT_TRUE(issuer_cert.get()); | 1060 ASSERT_TRUE(issuer_cert.get()); |
1061 std::string cert_base = "cert/" + base::HexEncode( | 1061 std::string cert_base = "cert/" + base::HexEncode( |
1062 issuer_cert->fingerprint().data, | 1062 issuer_cert->fingerprint().data, |
1063 sizeof(issuer_cert->fingerprint().data)); | 1063 sizeof(issuer_cert->fingerprint().data)); |
1064 | 1064 |
1065 scoped_refptr<net::X509Certificate> cert(ReadTestCertificate("test_cn.pem")); | 1065 scoped_refptr<net::X509Certificate> cert(ReadTestCertificate("test_cn.pem")); |
1066 ASSERT_TRUE(cert.get()); | 1066 ASSERT_TRUE(cert.get()); |
1067 std::vector<std::string> whitelist_strings; | 1067 std::vector<std::string> whitelist_strings; |
1068 GetCertificateWhitelistStrings(*cert, *issuer_cert, &whitelist_strings); | 1068 GetCertificateWhitelistStrings( |
| 1069 *cert.get(), *issuer_cert.get(), &whitelist_strings); |
1069 // This also tests escaping of characters in the certificate attributes. | 1070 // This also tests escaping of characters in the certificate attributes. |
1070 EXPECT_THAT(whitelist_strings, ElementsAre( | 1071 EXPECT_THAT(whitelist_strings, ElementsAre( |
1071 cert_base + "/CN=subject%2F%251")); | 1072 cert_base + "/CN=subject%2F%251")); |
1072 | 1073 |
1073 cert = ReadTestCertificate("test_cn_o.pem"); | 1074 cert = ReadTestCertificate("test_cn_o.pem"); |
1074 ASSERT_TRUE(cert.get()); | 1075 ASSERT_TRUE(cert.get()); |
1075 whitelist_strings.clear(); | 1076 whitelist_strings.clear(); |
1076 GetCertificateWhitelistStrings(*cert, *issuer_cert, &whitelist_strings); | 1077 GetCertificateWhitelistStrings( |
1077 EXPECT_THAT(whitelist_strings, ElementsAre( | 1078 *cert.get(), *issuer_cert.get(), &whitelist_strings); |
1078 cert_base + "/CN=subject", | 1079 EXPECT_THAT(whitelist_strings, |
1079 cert_base + "/CN=subject/O=org", | 1080 ElementsAre(cert_base + "/CN=subject", |
1080 cert_base + "/O=org")); | 1081 cert_base + "/CN=subject/O=org", |
| 1082 cert_base + "/O=org")); |
1081 | 1083 |
1082 cert = ReadTestCertificate("test_cn_o_ou.pem"); | 1084 cert = ReadTestCertificate("test_cn_o_ou.pem"); |
1083 ASSERT_TRUE(cert.get()); | 1085 ASSERT_TRUE(cert.get()); |
1084 whitelist_strings.clear(); | 1086 whitelist_strings.clear(); |
1085 GetCertificateWhitelistStrings(*cert, *issuer_cert, &whitelist_strings); | 1087 GetCertificateWhitelistStrings( |
1086 EXPECT_THAT(whitelist_strings, ElementsAre( | 1088 *cert.get(), *issuer_cert.get(), &whitelist_strings); |
1087 cert_base + "/CN=subject", | 1089 EXPECT_THAT(whitelist_strings, |
1088 cert_base + "/CN=subject/O=org", | 1090 ElementsAre(cert_base + "/CN=subject", |
1089 cert_base + "/CN=subject/O=org/OU=unit", | 1091 cert_base + "/CN=subject/O=org", |
1090 cert_base + "/CN=subject/OU=unit", | 1092 cert_base + "/CN=subject/O=org/OU=unit", |
1091 cert_base + "/O=org", | 1093 cert_base + "/CN=subject/OU=unit", |
1092 cert_base + "/O=org/OU=unit", | 1094 cert_base + "/O=org", |
1093 cert_base + "/OU=unit")); | 1095 cert_base + "/O=org/OU=unit", |
| 1096 cert_base + "/OU=unit")); |
1094 | 1097 |
1095 cert = ReadTestCertificate("test_cn_ou.pem"); | 1098 cert = ReadTestCertificate("test_cn_ou.pem"); |
1096 ASSERT_TRUE(cert.get()); | 1099 ASSERT_TRUE(cert.get()); |
1097 whitelist_strings.clear(); | 1100 whitelist_strings.clear(); |
1098 GetCertificateWhitelistStrings(*cert, *issuer_cert, &whitelist_strings); | 1101 GetCertificateWhitelistStrings( |
1099 EXPECT_THAT(whitelist_strings, ElementsAre( | 1102 *cert.get(), *issuer_cert.get(), &whitelist_strings); |
1100 cert_base + "/CN=subject", | 1103 EXPECT_THAT(whitelist_strings, |
1101 cert_base + "/CN=subject/OU=unit", | 1104 ElementsAre(cert_base + "/CN=subject", |
1102 cert_base + "/OU=unit")); | 1105 cert_base + "/CN=subject/OU=unit", |
| 1106 cert_base + "/OU=unit")); |
1103 | 1107 |
1104 cert = ReadTestCertificate("test_o.pem"); | 1108 cert = ReadTestCertificate("test_o.pem"); |
1105 ASSERT_TRUE(cert.get()); | 1109 ASSERT_TRUE(cert.get()); |
1106 whitelist_strings.clear(); | 1110 whitelist_strings.clear(); |
1107 GetCertificateWhitelistStrings(*cert, *issuer_cert, &whitelist_strings); | 1111 GetCertificateWhitelistStrings( |
| 1112 *cert.get(), *issuer_cert.get(), &whitelist_strings); |
1108 EXPECT_THAT(whitelist_strings, ElementsAre(cert_base + "/O=org")); | 1113 EXPECT_THAT(whitelist_strings, ElementsAre(cert_base + "/O=org")); |
1109 | 1114 |
1110 cert = ReadTestCertificate("test_o_ou.pem"); | 1115 cert = ReadTestCertificate("test_o_ou.pem"); |
1111 ASSERT_TRUE(cert.get()); | 1116 ASSERT_TRUE(cert.get()); |
1112 whitelist_strings.clear(); | 1117 whitelist_strings.clear(); |
1113 GetCertificateWhitelistStrings(*cert, *issuer_cert, &whitelist_strings); | 1118 GetCertificateWhitelistStrings( |
1114 EXPECT_THAT(whitelist_strings, ElementsAre( | 1119 *cert.get(), *issuer_cert.get(), &whitelist_strings); |
1115 cert_base + "/O=org", | 1120 EXPECT_THAT(whitelist_strings, |
1116 cert_base + "/O=org/OU=unit", | 1121 ElementsAre(cert_base + "/O=org", |
1117 cert_base + "/OU=unit")); | 1122 cert_base + "/O=org/OU=unit", |
| 1123 cert_base + "/OU=unit")); |
1118 | 1124 |
1119 cert = ReadTestCertificate("test_ou.pem"); | 1125 cert = ReadTestCertificate("test_ou.pem"); |
1120 ASSERT_TRUE(cert.get()); | 1126 ASSERT_TRUE(cert.get()); |
1121 whitelist_strings.clear(); | 1127 whitelist_strings.clear(); |
1122 GetCertificateWhitelistStrings(*cert, *issuer_cert, &whitelist_strings); | 1128 GetCertificateWhitelistStrings( |
| 1129 *cert.get(), *issuer_cert.get(), &whitelist_strings); |
1123 EXPECT_THAT(whitelist_strings, ElementsAre(cert_base + "/OU=unit")); | 1130 EXPECT_THAT(whitelist_strings, ElementsAre(cert_base + "/OU=unit")); |
1124 | 1131 |
1125 cert = ReadTestCertificate("test_c.pem"); | 1132 cert = ReadTestCertificate("test_c.pem"); |
1126 ASSERT_TRUE(cert.get()); | 1133 ASSERT_TRUE(cert.get()); |
1127 whitelist_strings.clear(); | 1134 whitelist_strings.clear(); |
1128 GetCertificateWhitelistStrings(*cert, *issuer_cert, &whitelist_strings); | 1135 GetCertificateWhitelistStrings( |
| 1136 *cert.get(), *issuer_cert.get(), &whitelist_strings); |
1129 EXPECT_THAT(whitelist_strings, ElementsAre()); | 1137 EXPECT_THAT(whitelist_strings, ElementsAre()); |
1130 } | 1138 } |
1131 } // namespace safe_browsing | 1139 } // namespace safe_browsing |
OLD | NEW |