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 15d8dd297da16c0f600be1887f301a6b2432e8e4..9242ef4097a133015948cd640c149ed0d3555d17 100644 |
--- a/chrome/browser/safe_browsing/download_protection_service_unittest.cc |
+++ b/chrome/browser/safe_browsing/download_protection_service_unittest.cc |
@@ -41,6 +41,11 @@ |
#include "third_party/zlib/google/zip.h" |
#include "url/gurl.h" |
+#if defined(OS_MACOSX) |
+#include "base/metrics/field_trial.h" |
+#include "components/variations/entropy_provider.h" |
+#endif |
+ |
using ::testing::Assign; |
using ::testing::ContainerEq; |
using ::testing::DoAll; |
@@ -197,6 +202,13 @@ class DownloadProtectionServiceTest : public testing::Test { |
content::TestBrowserThreadBundle::IO_MAINLOOP) { |
} |
virtual void SetUp() { |
+#if defined(OS_MACOSX) |
+ field_trial_list_.reset(new base::FieldTrialList( |
+ new metrics::SHA1EntropyProvider("42"))); |
+ ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial( |
+ "SafeBrowsingOSXClientDownloadPings", |
+ "Enabled")); |
+#endif |
// Start real threads for the IO and File threads so that the DCHECKs |
// to test that we're on the correct thread work. |
sb_service_ = new StrictMock<FakeSafeBrowsingService>(); |
@@ -358,6 +370,9 @@ class DownloadProtectionServiceTest : public testing::Test { |
content::TestBrowserThreadBundle test_browser_thread_bundle_; |
content::InProcessUtilityThreadHelper in_process_utility_thread_helper_; |
base::FilePath testdata_path_; |
+#if defined(OS_MACOSX) |
+ scoped_ptr<base::FieldTrialList> field_trial_list_; |
+#endif |
}; |
TEST_F(DownloadProtectionServiceTest, CheckClientDownloadInvalidUrl) { |
@@ -510,7 +525,11 @@ TEST_F(DownloadProtectionServiceTest, CheckClientDownloadWhitelistedUrl) { |
base::Bind(&DownloadProtectionServiceTest::CheckDoneCallback, |
base::Unretained(this))); |
MessageLoop::current()->Run(); |
+#if defined(OS_MACOSX) |
+ EXPECT_TRUE(IsResult(DownloadProtectionService::UNKNOWN)); |
+#else |
EXPECT_TRUE(IsResult(DownloadProtectionService::SAFE)); |
+#endif |
} |
TEST_F(DownloadProtectionServiceTest, CheckClientDownloadFetchFailed) { |
@@ -943,6 +962,57 @@ TEST_F(DownloadProtectionServiceTest, CheckClientCrxDownloadSuccess) { |
EXPECT_TRUE(IsResult(DownloadProtectionService::UNKNOWN)); |
} |
+#if defined(OS_MACOSX) |
+// TODO(mattm): remove this (see crbug.com/414834). |
+TEST_F(DownloadProtectionServiceTest, |
+ CheckClientDownloadPingOnOSXRequiresFieldTrial) { |
+ // Clear the field trial that was set in SetUp(). |
+ field_trial_list_.reset(); |
+ |
+ net::TestURLFetcherFactory factory; |
+ |
+ base::FilePath tmp_path(FILE_PATH_LITERAL("bla.tmp")); |
+ base::FilePath final_path(FILE_PATH_LITERAL("bla.exe")); |
+ std::vector<GURL> url_chain; |
+ url_chain.push_back(GURL("http://www.google.com/")); |
+ url_chain.push_back(GURL("http://www.google.com/bla.exe")); |
+ GURL referrer("http://www.google.com/"); |
+ std::string hash = "hash"; |
+ std::string remote_address = "10.11.12.13"; |
+ |
+ content::MockDownloadItem item; |
+ 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(GURL::EmptyGURL())); |
+ 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(remote_address)); |
+ |
+ EXPECT_CALL(*sb_service_->mock_database_manager(), |
+ MatchDownloadWhitelistUrl(_)) |
+ .WillRepeatedly(Return(false)); |
+ EXPECT_CALL(*binary_feature_extractor_.get(), CheckSignature(tmp_path, _)) |
+ .WillOnce(SetCertificateContents("dummy cert data")); |
+ EXPECT_CALL(*binary_feature_extractor_.get(), |
+ ExtractImageHeaders(tmp_path, _)) |
+ .WillOnce(SetDosHeaderContents("dummy dos header")); |
+ download_service_->CheckClientDownload( |
+ &item, |
+ base::Bind(&DownloadProtectionServiceTest::CheckDoneCallback, |
+ base::Unretained(this))); |
+ |
+ // SendRequest is not called. Wait for FinishRequest to call our callback. |
+ MessageLoop::current()->Run(); |
+ net::TestURLFetcher* fetcher = factory.GetFetcherByID(0); |
+ EXPECT_EQ(NULL, fetcher); |
+} |
+#endif |
+ |
TEST_F(DownloadProtectionServiceTest, CheckClientDownloadValidateRequest) { |
net::TestURLFetcherFactory factory; |
@@ -981,7 +1051,7 @@ TEST_F(DownloadProtectionServiceTest, CheckClientDownloadValidateRequest) { |
base::Bind(&DownloadProtectionServiceTest::CheckDoneCallback, |
base::Unretained(this))); |
-#if !defined(OS_WIN) |
+#if !defined(OS_WIN) && !defined(OS_MACOSX) |
// SendRequest is not called. Wait for FinishRequest to call our callback. |
MessageLoop::current()->Run(); |
net::TestURLFetcher* fetcher = factory.GetFetcherByID(0); |
@@ -1066,7 +1136,7 @@ TEST_F(DownloadProtectionServiceTest, |
base::Bind(&DownloadProtectionServiceTest::CheckDoneCallback, |
base::Unretained(this))); |
-#if !defined(OS_WIN) |
+#if !defined(OS_WIN) && !defined(OS_MACOSX) |
// SendRequest is not called. Wait for FinishRequest to call our callback. |
MessageLoop::current()->Run(); |
net::TestURLFetcher* fetcher = factory.GetFetcherByID(0); |
@@ -1154,7 +1224,7 @@ TEST_F(DownloadProtectionServiceTest, |
base::Bind(&DownloadProtectionServiceTest::CheckDoneCallback, |
base::Unretained(this))); |
-#if !defined(OS_WIN) |
+#if !defined(OS_WIN) && !defined(OS_MACOSX) |
// SendRequest is not called. Wait for FinishRequest to call our callback. |
MessageLoop::current()->Run(); |
net::TestURLFetcher* fetcher = factory.GetFetcherByID(0); |
@@ -1229,7 +1299,7 @@ TEST_F(DownloadProtectionServiceTest, |
&item, |
base::Bind(&DownloadProtectionServiceTest::CheckDoneCallback, |
base::Unretained(this))); |
-#if !defined(OS_WIN) |
+#if !defined(OS_WIN) && !defined(OS_MACOSX) |
// SendRequest is not called. Wait for FinishRequest to call our callback. |
MessageLoop::current()->Run(); |
net::TestURLFetcher* fetcher = factory.GetFetcherByID(0); |