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 9aed0ae9f8e86c9fca16856e0f144d78327e58f4..b8fc84087ac89cd284a32e5fd82fa8c9ecd46c4c 100644 |
--- a/chrome/browser/safe_browsing/download_protection_service_unittest.cc |
+++ b/chrome/browser/safe_browsing/download_protection_service_unittest.cc |
@@ -217,6 +217,10 @@ class DownloadProtectionServiceTest : public testing::Test { |
download_service_ = sb_service_->download_protection_service(); |
download_service_->binary_feature_extractor_ = binary_feature_extractor_; |
download_service_->SetEnabled(true); |
+ client_download_request_subscription_ = |
+ download_service_->RegisterClientDownloadRequestCallback( |
+ base::Bind(&DownloadProtectionServiceTest::OnClientDownloadRequest, |
+ base::Unretained(this))); |
base::RunLoop().RunUntilIdle(); |
has_result_ = false; |
@@ -231,6 +235,7 @@ class DownloadProtectionServiceTest : public testing::Test { |
} |
virtual void TearDown() { |
+ client_download_request_subscription_.reset(); |
sb_service_->ShutDown(); |
// Flush all of the thread message loops to ensure that there are no |
// tasks currently running. |
@@ -300,6 +305,12 @@ class DownloadProtectionServiceTest : public testing::Test { |
return certs.empty() ? NULL : certs[0]; |
} |
+ bool HasClientDownloadRequest() const { |
+ return last_client_download_request_.get() != NULL; |
+ } |
+ |
+ void ClearClientDownloadRequest() { last_client_download_request_.reset(); } |
+ |
private: |
// Helper functions for FlushThreadMessageLoops. |
void RunAllPendingAndQuitUI() { |
@@ -332,6 +343,14 @@ class DownloadProtectionServiceTest : public testing::Test { |
MessageLoop::current()->Run(); |
} |
+ void OnClientDownloadRequest(content::DownloadItem* download, |
+ const ClientDownloadRequest* request) { |
+ if (request) |
+ last_client_download_request_.reset(new ClientDownloadRequest(*request)); |
+ else |
+ last_client_download_request_.reset(); |
+ } |
+ |
public: |
void CheckDoneCallback( |
DownloadProtectionService::DownloadCheckResult result) { |
@@ -373,6 +392,9 @@ class DownloadProtectionServiceTest : public testing::Test { |
#if defined(OS_MACOSX) |
scoped_ptr<base::FieldTrialList> field_trial_list_; |
#endif |
+ DownloadProtectionService::ClientDownloadRequestSubscription |
+ client_download_request_subscription_; |
+ scoped_ptr<ClientDownloadRequest> last_client_download_request_; |
}; |
TEST_F(DownloadProtectionServiceTest, CheckClientDownloadInvalidUrl) { |
@@ -395,6 +417,7 @@ TEST_F(DownloadProtectionServiceTest, CheckClientDownloadInvalidUrl) { |
base::Unretained(this))); |
MessageLoop::current()->Run(); |
EXPECT_TRUE(IsResult(DownloadProtectionService::UNKNOWN)); |
+ EXPECT_FALSE(HasClientDownloadRequest()); |
Mock::VerifyAndClearExpectations(&item); |
url_chain.push_back(GURL("file://www.google.com/")); |
@@ -411,6 +434,7 @@ TEST_F(DownloadProtectionServiceTest, CheckClientDownloadInvalidUrl) { |
base::Unretained(this))); |
MessageLoop::current()->Run(); |
EXPECT_TRUE(IsResult(DownloadProtectionService::UNKNOWN)); |
+ EXPECT_FALSE(HasClientDownloadRequest()); |
} |
TEST_F(DownloadProtectionServiceTest, CheckClientDownloadNotABinary) { |
@@ -434,6 +458,7 @@ TEST_F(DownloadProtectionServiceTest, CheckClientDownloadNotABinary) { |
base::Unretained(this))); |
MessageLoop::current()->Run(); |
EXPECT_TRUE(IsResult(DownloadProtectionService::UNKNOWN)); |
+ EXPECT_FALSE(HasClientDownloadRequest()); |
} |
TEST_F(DownloadProtectionServiceTest, CheckClientDownloadWhitelistedUrl) { |
@@ -488,8 +513,17 @@ TEST_F(DownloadProtectionServiceTest, CheckClientDownloadWhitelistedUrl) { |
MessageLoop::current()->Run(); |
#if defined(OS_WIN) |
EXPECT_TRUE(IsResult(DownloadProtectionService::DANGEROUS)); |
+ EXPECT_TRUE(HasClientDownloadRequest()); |
+ ClearClientDownloadRequest(); |
#else |
EXPECT_TRUE(IsResult(DownloadProtectionService::UNKNOWN)); |
+#if defined(OS_MACOSX) |
mattm
2014/10/24 02:11:10
These nested/repetitious ifdefs are a little ick.
grt (UTC plus 2)
2014/10/30 19:07:35
Looks better. Done.
|
+ // OSX sends pings for evaluation purposes. |
+ EXPECT_TRUE(HasClientDownloadRequest()); |
+ ClearClientDownloadRequest(); |
+#else |
+ EXPECT_FALSE(HasClientDownloadRequest()); |
+#endif |
#endif |
// Check that the referrer is not matched against the whitelist. |
@@ -501,8 +535,17 @@ TEST_F(DownloadProtectionServiceTest, CheckClientDownloadWhitelistedUrl) { |
MessageLoop::current()->Run(); |
#if defined(OS_WIN) |
EXPECT_TRUE(IsResult(DownloadProtectionService::DANGEROUS)); |
+ EXPECT_TRUE(HasClientDownloadRequest()); |
+ ClearClientDownloadRequest(); |
#else |
EXPECT_TRUE(IsResult(DownloadProtectionService::UNKNOWN)); |
+#if defined(OS_MACOSX) |
+ // OSX sends pings for evaluation purposes. |
+ EXPECT_TRUE(HasClientDownloadRequest()); |
+ ClearClientDownloadRequest(); |
+#else |
+ EXPECT_FALSE(HasClientDownloadRequest()); |
+#endif |
#endif |
// Redirect from a site shouldn't be checked either. |
@@ -514,8 +557,17 @@ TEST_F(DownloadProtectionServiceTest, CheckClientDownloadWhitelistedUrl) { |
MessageLoop::current()->Run(); |
#if defined(OS_WIN) |
EXPECT_TRUE(IsResult(DownloadProtectionService::DANGEROUS)); |
+ EXPECT_TRUE(HasClientDownloadRequest()); |
+ ClearClientDownloadRequest(); |
#else |
EXPECT_TRUE(IsResult(DownloadProtectionService::UNKNOWN)); |
+#if defined(OS_MACOSX) |
+ // OSX sends pings for evaluation purposes. |
+ EXPECT_TRUE(HasClientDownloadRequest()); |
+ ClearClientDownloadRequest(); |
+#else |
+ EXPECT_FALSE(HasClientDownloadRequest()); |
+#endif |
#endif |
// Only if the final url is whitelisted should it be SAFE. |
@@ -527,8 +579,19 @@ TEST_F(DownloadProtectionServiceTest, CheckClientDownloadWhitelistedUrl) { |
MessageLoop::current()->Run(); |
#if defined(OS_MACOSX) |
EXPECT_TRUE(IsResult(DownloadProtectionService::UNKNOWN)); |
+ EXPECT_FALSE(HasClientDownloadRequest()); |
#else |
EXPECT_TRUE(IsResult(DownloadProtectionService::SAFE)); |
+ EXPECT_FALSE(HasClientDownloadRequest()); |
+#if defined(OS_MACOSX) |
+ // OSX sends pings for evaluation purposes. |
+ EXPECT_TRUE(HasClientDownloadRequest()); |
+ ClearClientDownloadRequest(); |
+#else |
+ // TODO(grt): Make the service produce the request even when the URL is |
+ // whitelisted. |
+ EXPECT_FALSE(HasClientDownloadRequest()); |
+#endif |
#endif |
} |
@@ -618,10 +681,19 @@ TEST_F(DownloadProtectionServiceTest, CheckClientDownloadSuccess) { |
MessageLoop::current()->Run(); |
#if defined(OS_WIN) |
EXPECT_TRUE(IsResult(DownloadProtectionService::SAFE)); |
+ EXPECT_TRUE(HasClientDownloadRequest()); |
+ ClearClientDownloadRequest(); |
#else |
- // On !OS_WIN, no file types are currently supported. Hence all erquests to |
+ // On !OS_WIN, no file types are currently supported. Hence all requests to |
// CheckClientDownload() result in a verdict of UNKNOWN. |
EXPECT_TRUE(IsResult(DownloadProtectionService::UNKNOWN)); |
+#if defined(OS_MACOSX) |
+ // OSX sends pings for evaluation purposes. |
+ EXPECT_TRUE(HasClientDownloadRequest()); |
+ ClearClientDownloadRequest(); |
+#else |
+ EXPECT_FALSE(HasClientDownloadRequest()); |
+#endif |
#endif |
// Invalid response should result in UNKNOWN. |
@@ -637,6 +709,12 @@ TEST_F(DownloadProtectionServiceTest, CheckClientDownloadSuccess) { |
base::Unretained(this))); |
MessageLoop::current()->Run(); |
EXPECT_TRUE(IsResult(DownloadProtectionService::UNKNOWN)); |
+#if defined(OS_WIN) || defined(OS_MACOSX) |
+ EXPECT_TRUE(HasClientDownloadRequest()); |
+ ClearClientDownloadRequest(); |
+#else |
+ EXPECT_FALSE(HasClientDownloadRequest()); |
+#endif |
std::string feedback_ping; |
std::string feedback_response; |
EXPECT_FALSE(DownloadFeedbackService::GetPingsForDownloadForTesting( |
@@ -658,8 +736,17 @@ TEST_F(DownloadProtectionServiceTest, CheckClientDownloadSuccess) { |
item, &feedback_ping, &feedback_response)); |
#if defined(OS_WIN) |
EXPECT_TRUE(IsResult(DownloadProtectionService::DANGEROUS)); |
+ EXPECT_TRUE(HasClientDownloadRequest()); |
+ ClearClientDownloadRequest(); |
#else |
EXPECT_TRUE(IsResult(DownloadProtectionService::UNKNOWN)); |
+#if defined(OS_MACOSX) |
+ // OSX sends pings for evaluation purposes. |
+ EXPECT_TRUE(HasClientDownloadRequest()); |
+ ClearClientDownloadRequest(); |
+#else |
+ EXPECT_FALSE(HasClientDownloadRequest()); |
+#endif |
#endif |
// If the response is uncommon the result should also be marked as uncommon. |
@@ -682,6 +769,8 @@ TEST_F(DownloadProtectionServiceTest, CheckClientDownloadSuccess) { |
EXPECT_TRUE(decoded_request.ParseFromString(feedback_ping)); |
EXPECT_EQ(url_chain.back().spec(), decoded_request.url()); |
EXPECT_EQ(response.SerializeAsString(), feedback_response); |
+ EXPECT_TRUE(HasClientDownloadRequest()); |
+ ClearClientDownloadRequest(); |
#else |
EXPECT_TRUE(IsResult(DownloadProtectionService::UNKNOWN)); |
#endif |
@@ -704,6 +793,8 @@ TEST_F(DownloadProtectionServiceTest, CheckClientDownloadSuccess) { |
EXPECT_TRUE(DownloadFeedbackService::GetPingsForDownloadForTesting( |
item, &feedback_ping, &feedback_response)); |
EXPECT_EQ(response.SerializeAsString(), feedback_response); |
+ EXPECT_TRUE(HasClientDownloadRequest()); |
+ ClearClientDownloadRequest(); |
#else |
EXPECT_TRUE(IsResult(DownloadProtectionService::UNKNOWN)); |
#endif |
@@ -723,8 +814,17 @@ TEST_F(DownloadProtectionServiceTest, CheckClientDownloadSuccess) { |
MessageLoop::current()->Run(); |
#if defined(OS_WIN) |
EXPECT_TRUE(IsResult(DownloadProtectionService::POTENTIALLY_UNWANTED)); |
+ EXPECT_TRUE(HasClientDownloadRequest()); |
+ ClearClientDownloadRequest(); |
#else |
EXPECT_TRUE(IsResult(DownloadProtectionService::UNKNOWN)); |
+#if defined(OS_MACOSX) |
+ // OSX sends pings for evaluation purposes. |
+ EXPECT_TRUE(HasClientDownloadRequest()); |
+ ClearClientDownloadRequest(); |
+#else |
+ EXPECT_FALSE(HasClientDownloadRequest()); |
+#endif |
#endif |
} |
@@ -772,8 +872,17 @@ TEST_F(DownloadProtectionServiceTest, CheckClientDownloadHTTPS) { |
MessageLoop::current()->Run(); |
#if defined(OS_WIN) |
EXPECT_TRUE(IsResult(DownloadProtectionService::DANGEROUS)); |
+ EXPECT_TRUE(HasClientDownloadRequest()); |
+ ClearClientDownloadRequest(); |
#else |
EXPECT_TRUE(IsResult(DownloadProtectionService::UNKNOWN)); |
+#if defined(OS_MACOSX) |
+ // OSX sends pings for evaluation purposes. |
+ EXPECT_TRUE(HasClientDownloadRequest()); |
+ ClearClientDownloadRequest(); |
+#else |
+ EXPECT_FALSE(HasClientDownloadRequest()); |
+#endif |
#endif |
} |
@@ -826,6 +935,7 @@ TEST_F(DownloadProtectionServiceTest, CheckClientDownloadZip) { |
base::Unretained(this))); |
MessageLoop::current()->Run(); |
EXPECT_TRUE(IsResult(DownloadProtectionService::UNKNOWN)); |
+ EXPECT_FALSE(HasClientDownloadRequest()); |
Mock::VerifyAndClearExpectations(sb_service_.get()); |
Mock::VerifyAndClearExpectations(binary_feature_extractor_.get()); |
@@ -846,10 +956,19 @@ TEST_F(DownloadProtectionServiceTest, CheckClientDownloadZip) { |
MessageLoop::current()->Run(); |
#if defined(OS_WIN) |
EXPECT_TRUE(IsResult(DownloadProtectionService::SAFE)); |
+ EXPECT_TRUE(HasClientDownloadRequest()); |
+ ClearClientDownloadRequest(); |
#else |
// For !OS_WIN, no file types are currently supported. Hence the resulting |
// verdict is UNKNOWN. |
EXPECT_TRUE(IsResult(DownloadProtectionService::UNKNOWN)); |
+#if defined(OS_MACOSX) |
+ // OSX sends pings for evaluation purposes. |
+ EXPECT_TRUE(HasClientDownloadRequest()); |
+ ClearClientDownloadRequest(); |
+#else |
+ EXPECT_FALSE(HasClientDownloadRequest()); |
+#endif |
#endif |
Mock::VerifyAndClearExpectations(binary_feature_extractor_.get()); |
@@ -868,8 +987,17 @@ TEST_F(DownloadProtectionServiceTest, CheckClientDownloadZip) { |
MessageLoop::current()->Run(); |
#if defined(OS_WIN) |
EXPECT_TRUE(IsResult(DownloadProtectionService::DANGEROUS)); |
+ EXPECT_TRUE(HasClientDownloadRequest()); |
+ ClearClientDownloadRequest(); |
#else |
EXPECT_TRUE(IsResult(DownloadProtectionService::UNKNOWN)); |
+#if defined(OS_MACOSX) |
+ // OSX sends pings for evaluation purposes. |
+ EXPECT_TRUE(HasClientDownloadRequest()); |
+ ClearClientDownloadRequest(); |
+#else |
+ EXPECT_FALSE(HasClientDownloadRequest()); |
+#endif |
#endif |
Mock::VerifyAndClearExpectations(binary_feature_extractor_.get()); |
} |
@@ -908,6 +1036,7 @@ TEST_F(DownloadProtectionServiceTest, CheckClientDownloadCorruptZip) { |
base::Unretained(this))); |
MessageLoop::current()->Run(); |
EXPECT_TRUE(IsResult(DownloadProtectionService::UNKNOWN)); |
+ EXPECT_FALSE(HasClientDownloadRequest()); |
Mock::VerifyAndClearExpectations(sb_service_.get()); |
Mock::VerifyAndClearExpectations(binary_feature_extractor_.get()); |
} |
@@ -1010,6 +1139,7 @@ TEST_F(DownloadProtectionServiceTest, |
MessageLoop::current()->Run(); |
net::TestURLFetcher* fetcher = factory.GetFetcherByID(0); |
EXPECT_EQ(NULL, fetcher); |
+ EXPECT_FALSE(HasClientDownloadRequest()); |
} |
#endif |
@@ -1056,9 +1186,12 @@ TEST_F(DownloadProtectionServiceTest, CheckClientDownloadValidateRequest) { |
MessageLoop::current()->Run(); |
net::TestURLFetcher* fetcher = factory.GetFetcherByID(0); |
EXPECT_EQ(NULL, fetcher); |
+ EXPECT_FALSE(HasClientDownloadRequest()); |
#else |
// Run the message loop(s) until SendRequest is called. |
FlushThreadMessageLoops(); |
+ EXPECT_TRUE(HasClientDownloadRequest()); |
+ ClearClientDownloadRequest(); |
net::TestURLFetcher* fetcher = factory.GetFetcherByID(0); |
ASSERT_TRUE(fetcher); |
ClientDownloadRequest request; |
@@ -1141,9 +1274,12 @@ TEST_F(DownloadProtectionServiceTest, |
MessageLoop::current()->Run(); |
net::TestURLFetcher* fetcher = factory.GetFetcherByID(0); |
EXPECT_EQ(NULL, fetcher); |
+ EXPECT_FALSE(HasClientDownloadRequest()); |
#else |
// Run the message loop(s) until SendRequest is called. |
FlushThreadMessageLoops(); |
+ EXPECT_TRUE(HasClientDownloadRequest()); |
+ ClearClientDownloadRequest(); |
net::TestURLFetcher* fetcher = factory.GetFetcherByID(0); |
ASSERT_TRUE(fetcher); |
ClientDownloadRequest request; |
@@ -1229,8 +1365,11 @@ TEST_F(DownloadProtectionServiceTest, |
MessageLoop::current()->Run(); |
net::TestURLFetcher* fetcher = factory.GetFetcherByID(0); |
EXPECT_EQ(NULL, fetcher); |
+ EXPECT_FALSE(HasClientDownloadRequest()); |
#else |
EXPECT_EQ(0, fetcher_watcher.WaitForRequest()); |
+ EXPECT_TRUE(HasClientDownloadRequest()); |
+ ClearClientDownloadRequest(); |
net::TestURLFetcher* fetcher = factory.GetFetcherByID(0); |
ASSERT_TRUE(fetcher); |
ClientDownloadRequest request; |
@@ -1304,8 +1443,11 @@ TEST_F(DownloadProtectionServiceTest, |
MessageLoop::current()->Run(); |
net::TestURLFetcher* fetcher = factory.GetFetcherByID(0); |
EXPECT_EQ(NULL, fetcher); |
+ EXPECT_FALSE(HasClientDownloadRequest()); |
#else |
EXPECT_EQ(0, fetcher_watcher.WaitForRequest()); |
+ EXPECT_TRUE(HasClientDownloadRequest()); |
+ ClearClientDownloadRequest(); |
net::TestURLFetcher* fetcher = factory.GetFetcherByID(0); |
ASSERT_TRUE(fetcher); |
ClientDownloadRequest request; |
@@ -1460,6 +1602,12 @@ TEST_F(DownloadProtectionServiceTest, TestDownloadRequestTimeout) { |
// anything yet. |
MessageLoop::current()->Run(); |
EXPECT_TRUE(IsResult(DownloadProtectionService::UNKNOWN)); |
+#if defined(OS_WIN) || defined(OS_MACOSX) |
+ EXPECT_TRUE(HasClientDownloadRequest()); |
+ ClearClientDownloadRequest(); |
+#else |
+ EXPECT_FALSE(HasClientDownloadRequest()); |
+#endif |
} |
TEST_F(DownloadProtectionServiceTest, TestDownloadItemDestroyed) { |
@@ -1503,6 +1651,7 @@ TEST_F(DownloadProtectionServiceTest, TestDownloadItemDestroyed) { |
} |
EXPECT_TRUE(IsResult(DownloadProtectionService::UNKNOWN)); |
+ EXPECT_FALSE(HasClientDownloadRequest()); |
} |
TEST_F(DownloadProtectionServiceTest, GetCertificateWhitelistStrings) { |