Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3080)

Unified Diff: chrome/browser/safe_browsing/download_protection_service_unittest.cc

Issue 734843002: Safebrowsing: Fix crash if DownloadItem is destroyed before history check. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: . Created 6 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/safe_browsing/download_protection_service.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 b06e8c8e7fb4675594dbd5d91e637bae479ab9fa..84fd01d55bd24c6f97644531a82f61d264f9c7cd 100644
--- a/chrome/browser/safe_browsing/download_protection_service_unittest.cc
+++ b/chrome/browser/safe_browsing/download_protection_service_unittest.cc
@@ -50,6 +50,7 @@ using ::testing::Assign;
using ::testing::ContainerEq;
using ::testing::DoAll;
using ::testing::ElementsAre;
+using ::testing::Invoke;
using ::testing::Mock;
using ::testing::NotNull;
using ::testing::Return;
@@ -1599,6 +1600,7 @@ TEST_F(DownloadProtectionServiceTest, TestDownloadItemDestroyed) {
std::vector<GURL> url_chain;
url_chain.push_back(GURL("http://www.evil.com/bla.exe"));
GURL referrer("http://www.google.com/");
+ GURL tab_url("http://www.google.com/tab");
base::FilePath tmp_path(FILE_PATH_LITERAL("a.tmp"));
base::FilePath final_path(FILE_PATH_LITERAL("a.exe"));
std::string hash = "hash";
@@ -1610,7 +1612,7 @@ TEST_F(DownloadProtectionServiceTest, TestDownloadItemDestroyed) {
.WillRepeatedly(ReturnRef(final_path));
EXPECT_CALL(item, GetUrlChain()).WillRepeatedly(ReturnRef(url_chain));
EXPECT_CALL(item, GetReferrerUrl()).WillRepeatedly(ReturnRef(referrer));
- EXPECT_CALL(item, GetTabUrl()).WillRepeatedly(ReturnRef(GURL::EmptyGURL()));
+ EXPECT_CALL(item, GetTabUrl()).WillRepeatedly(ReturnRef(tab_url));
EXPECT_CALL(item, GetTabReferrerUrl())
.WillRepeatedly(ReturnRef(GURL::EmptyGURL()));
EXPECT_CALL(item, GetHash()).WillRepeatedly(ReturnRef(hash));
@@ -1637,6 +1639,52 @@ TEST_F(DownloadProtectionServiceTest, TestDownloadItemDestroyed) {
EXPECT_FALSE(HasClientDownloadRequest());
}
+TEST_F(DownloadProtectionServiceTest,
+ TestDownloadItemDestroyedDuringWhitelistCheck) {
+ net::TestURLFetcherFactory factory;
+
+ std::vector<GURL> url_chain;
+ url_chain.push_back(GURL("http://www.evil.com/bla.exe"));
+ GURL referrer("http://www.google.com/");
+ GURL tab_url("http://www.google.com/tab");
+ base::FilePath tmp_path(FILE_PATH_LITERAL("a.tmp"));
+ base::FilePath final_path(FILE_PATH_LITERAL("a.exe"));
+ std::string hash = "hash";
+
+ scoped_ptr<content::MockDownloadItem> item(new content::MockDownloadItem);
+ EXPECT_CALL(*item, GetFullPath()).WillRepeatedly(ReturnRef(tmp_path));
+ EXPECT_CALL(*item, GetTargetFilePath())
+ .WillRepeatedly(ReturnRef(final_path));
+ EXPECT_CALL(*item, GetUrlChain()).WillRepeatedly(ReturnRef(url_chain));
+ EXPECT_CALL(*item, GetReferrerUrl()).WillRepeatedly(ReturnRef(referrer));
+ EXPECT_CALL(*item, GetTabUrl()).WillRepeatedly(ReturnRef(tab_url));
+ EXPECT_CALL(*item, GetTabReferrerUrl())
+ .WillRepeatedly(ReturnRef(GURL::EmptyGURL()));
+ 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(*sb_service_->mock_database_manager(),
+ MatchDownloadWhitelistUrl(_))
+ .WillRepeatedly(Invoke([&item](const GURL&) {
+ item.reset();
+ return false;
+ }));
+ EXPECT_CALL(*binary_feature_extractor_.get(), CheckSignature(tmp_path, _));
+ EXPECT_CALL(*binary_feature_extractor_.get(),
+ ExtractImageHeaders(tmp_path, _));
+
+ download_service_->CheckClientDownload(
+ item.get(),
+ base::Bind(&DownloadProtectionServiceTest::CheckDoneCallback,
+ base::Unretained(this)));
+
+ MessageLoop::current()->Run();
+ EXPECT_TRUE(IsResult(DownloadProtectionService::UNKNOWN));
+ EXPECT_FALSE(HasClientDownloadRequest());
+}
+
TEST_F(DownloadProtectionServiceTest, GetCertificateWhitelistStrings) {
// We'll pass this cert in as the "issuer", even though it isn't really
// used to sign the certs below. GetCertificateWhitelistStirngs doesn't care
« no previous file with comments | « chrome/browser/safe_browsing/download_protection_service.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698