Index: chrome/browser/safe_browsing/download_protection_service_unittest.cc |
diff --git a/chrome/browser/safe_browsing/download_protection_service_unittest.cc b/chrome/browser/safe_browsing/download_protection_service_unittest.cc |
index 4752b16f9d62d429103953d34fecfe0ca53c35d1..34bcf1a3ddabff50b99c62c28f89cf9e0eda97af 100644 |
--- a/chrome/browser/safe_browsing/download_protection_service_unittest.cc |
+++ b/chrome/browser/safe_browsing/download_protection_service_unittest.cc |
@@ -357,38 +357,85 @@ TEST_F(DownloadProtectionServiceTest, CheckClientDownloadInvalidUrl) { |
} |
TEST_F(DownloadProtectionServiceTest, CheckClientDownloadWhitelistedUrl) { |
+ // Response to any requests will be DANGEROUS. |
+ ClientDownloadResponse response; |
+ response.set_verdict(ClientDownloadResponse::DANGEROUS); |
+ net::FakeURLFetcherFactory factory(NULL); |
+ factory.SetFakeResponse( |
+ DownloadProtectionService::GetDownloadRequestUrl(), |
+ response.SerializeAsString(), |
+ net::HTTP_OK, net::URLRequestStatus::SUCCESS); |
+ |
+ std::string hash = "hash"; |
base::FilePath a_tmp(FILE_PATH_LITERAL("a.tmp")); |
base::FilePath a_exe(FILE_PATH_LITERAL("a.exe")); |
std::vector<GURL> url_chain; |
- url_chain.push_back(GURL("http://www.evil.com/bla.exe")); |
- url_chain.push_back(GURL("http://www.google.com/a.exe")); |
- GURL referrer("http://www.google.com/"); |
+ GURL referrer; |
content::MockDownloadItem item; |
- EXPECT_CALL(item, AddObserver(_)).Times(2); |
- EXPECT_CALL(item, RemoveObserver(_)).Times(2); |
+ EXPECT_CALL(item, AddObserver(_)).Times(4); |
+ EXPECT_CALL(item, RemoveObserver(_)).Times(4); |
EXPECT_CALL(item, GetFullPath()).WillRepeatedly(ReturnRef(a_tmp)); |
EXPECT_CALL(item, GetTargetFilePath()).WillRepeatedly(ReturnRef(a_exe)); |
EXPECT_CALL(item, GetUrlChain()).WillRepeatedly(ReturnRef(url_chain)); |
EXPECT_CALL(item, GetReferrerUrl()).WillRepeatedly(ReturnRef(referrer)); |
+ EXPECT_CALL(item, GetHash()).WillRepeatedly(ReturnRef(hash)); |
+ EXPECT_CALL(item, GetReceivedBytes()).WillRepeatedly(Return(100)); |
+ EXPECT_CALL(item, HasUserGesture()).WillRepeatedly(Return(true)); |
+ EXPECT_CALL(item, GetRemoteAddress()).WillRepeatedly(Return("")); |
+ EXPECT_CALL(*signature_util_.get(), CheckSignature(a_tmp, _)).Times(4); |
+ |
+ // We should not get whilelist checks for other URLs than specified below. |
EXPECT_CALL(*sb_service_->mock_database_manager(), |
- MatchDownloadWhitelistUrl(_)) |
+ MatchDownloadWhitelistUrl(_)).Times(0); |
+ EXPECT_CALL(*sb_service_->mock_database_manager(), |
+ MatchDownloadWhitelistUrl(GURL("http://www.evil.com/bla.exe"))) |
.WillRepeatedly(Return(false)); |
EXPECT_CALL(*sb_service_->mock_database_manager(), |
MatchDownloadWhitelistUrl(GURL("http://www.google.com/a.exe"))) |
.WillRepeatedly(Return(true)); |
- EXPECT_CALL(*signature_util_.get(), CheckSignature(a_tmp, _)).Times(2); |
+ // With no referrer and just the bad url, should be marked DANGEROUS. |
+ url_chain.push_back(GURL("http://www.evil.com/bla.exe")); |
download_service_->CheckClientDownload( |
&item, |
base::Bind(&DownloadProtectionServiceTest::CheckDoneCallback, |
base::Unretained(this))); |
MessageLoop::current()->Run(); |
+#if defined(OS_WIN) |
+ EXPECT_TRUE(IsResult(DownloadProtectionService::DANGEROUS)); |
+#else |
EXPECT_TRUE(IsResult(DownloadProtectionService::SAFE)); |
+#endif |
- // Check that the referrer is matched against the whitelist. |
- url_chain.pop_back(); |
- referrer = GURL("http://www.google.com/a.exe"); |
+ // Check that the referrer is not matched against the whitelist. |
+ referrer = GURL("http://www.google.com/"); |
+ download_service_->CheckClientDownload( |
+ &item, |
+ base::Bind(&DownloadProtectionServiceTest::CheckDoneCallback, |
+ base::Unretained(this))); |
+ MessageLoop::current()->Run(); |
+#if defined(OS_WIN) |
+ EXPECT_TRUE(IsResult(DownloadProtectionService::DANGEROUS)); |
+#else |
+ EXPECT_TRUE(IsResult(DownloadProtectionService::SAFE)); |
+#endif |
+ |
+ // Redirect from a site shouldn't be checked either. |
+ url_chain.insert(url_chain.begin(), GURL("http://www.google.com/redirect")); |
+ download_service_->CheckClientDownload( |
+ &item, |
+ base::Bind(&DownloadProtectionServiceTest::CheckDoneCallback, |
+ base::Unretained(this))); |
+ MessageLoop::current()->Run(); |
+#if defined(OS_WIN) |
+ EXPECT_TRUE(IsResult(DownloadProtectionService::DANGEROUS)); |
+#else |
+ EXPECT_TRUE(IsResult(DownloadProtectionService::SAFE)); |
+#endif |
+ |
+ // Only if the final url is whitelisted should it be SAFE. |
+ url_chain.push_back(GURL("http://www.google.com/a.exe")); |
download_service_->CheckClientDownload( |
&item, |
base::Bind(&DownloadProtectionServiceTest::CheckDoneCallback, |