| 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 eee257605c41975c25af6db9c2d0516c26379f21..b71b900b2286e7606dcef7c7c88b95c02fffda88 100644
|
| --- a/chrome/browser/safe_browsing/download_protection_service_unittest.cc
|
| +++ b/chrome/browser/safe_browsing/download_protection_service_unittest.cc
|
| @@ -33,6 +33,7 @@
|
| #include "chrome/browser/safe_browsing/incident_reporting/incident_reporting_service.h"
|
| #include "chrome/browser/safe_browsing/local_database_manager.h"
|
| #include "chrome/browser/safe_browsing/safe_browsing_service.h"
|
| +#include "chrome/common/chrome_paths.h"
|
| #include "chrome/common/safe_browsing/binary_feature_extractor.h"
|
| #include "chrome/common/safe_browsing/file_type_policies_test_util.h"
|
| #include "chrome/test/base/testing_profile.h"
|
| @@ -1443,6 +1444,76 @@ TEST_F(DownloadProtectionServiceTest,
|
| CheckClientDownloadReportCorruptDmg) {
|
| CheckClientDownloadReportCorruptArchive(DMG);
|
| }
|
| +
|
| +// Test that downloaded files with no disk image extension that have a 'koly'
|
| +// trailer are treated as disk images and processed accordingly.
|
| +TEST_F(DownloadProtectionServiceTest,
|
| + CheckClientDownloadReportDmgWithoutExtension) {
|
| + net::FakeURLFetcherFactory factory(NULL);
|
| + PrepareResponse(&factory, ClientDownloadResponse::SAFE, net::HTTP_OK,
|
| + net::URLRequestStatus::SUCCESS);
|
| +
|
| + base::FilePath test_data;
|
| + EXPECT_TRUE(PathService::Get(chrome::DIR_GEN_TEST_DATA, &test_data));
|
| + test_data = test_data.AppendASCII("chrome")
|
| + .AppendASCII("safe_browsing_dmg")
|
| + .AppendASCII("mach_o_in_dmg.txt");
|
| +
|
| + NiceMockDownloadItem item;
|
| + PrepareBasicDownloadItemWithFullPaths(
|
| + &item, {"http://www.evil.com/a.dmg"}, // url_chain
|
| + "http://www.google.com/", // referrer
|
| + test_data, // tmp_path
|
| + temp_dir_.GetPath().Append(FILE_PATH_LITERAL("a.dmg"))); // final_path
|
| +
|
| + RunLoop run_loop;
|
| + download_service_->CheckClientDownload(
|
| + &item, base::Bind(&DownloadProtectionServiceTest::CheckDoneCallback,
|
| + base::Unretained(this), run_loop.QuitClosure()));
|
| + run_loop.Run();
|
| +
|
| + ASSERT_TRUE(HasClientDownloadRequest());
|
| + EXPECT_TRUE(GetClientDownloadRequest()->archive_valid());
|
| + ClearClientDownloadRequest();
|
| +
|
| + Mock::VerifyAndClearExpectations(sb_service_.get());
|
| + Mock::VerifyAndClearExpectations(binary_feature_extractor_.get());
|
| +}
|
| +
|
| +// Demonstrate that a .dmg file whose a) extension has been changed to .txt and
|
| +// b) 'koly' signature has been removed is not processed as a disk image.
|
| +TEST_F(DownloadProtectionServiceTest, CheckClientDownloadReportDmgWithoutKoly) {
|
| + net::FakeURLFetcherFactory factory(NULL);
|
| + PrepareResponse(&factory, ClientDownloadResponse::SAFE, net::HTTP_OK,
|
| + net::URLRequestStatus::SUCCESS);
|
| +
|
| + base::FilePath test_data;
|
| + EXPECT_TRUE(PathService::Get(chrome::DIR_GEN_TEST_DATA, &test_data));
|
| + test_data = test_data.AppendASCII("chrome")
|
| + .AppendASCII("safe_browsing_dmg")
|
| + .AppendASCII("mach_o_in_dmg_no_koly_signature.txt");
|
| +
|
| + NiceMockDownloadItem item;
|
| + PrepareBasicDownloadItemWithFullPaths(
|
| + &item, {"http://www.evil.com/a.dmg"}, // url_chain
|
| + "http://www.google.com/", // referrer
|
| + test_data, // tmp_path
|
| + temp_dir_.GetPath().Append(FILE_PATH_LITERAL("a.dmg"))); // final_path
|
| +
|
| + RunLoop run_loop;
|
| + download_service_->CheckClientDownload(
|
| + &item, base::Bind(&DownloadProtectionServiceTest::CheckDoneCallback,
|
| + base::Unretained(this), run_loop.QuitClosure()));
|
| + run_loop.Run();
|
| +
|
| + ASSERT_TRUE(HasClientDownloadRequest());
|
| + EXPECT_FALSE(GetClientDownloadRequest()->archive_valid());
|
| + ClearClientDownloadRequest();
|
| +
|
| + Mock::VerifyAndClearExpectations(sb_service_.get());
|
| + Mock::VerifyAndClearExpectations(binary_feature_extractor_.get());
|
| +}
|
| +
|
| #endif
|
|
|
| TEST_F(DownloadProtectionServiceTest, CheckClientDownloadValidateRequest) {
|
|
|