OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/browser/safe_browsing/download_protection_service.h" | 5 #include "chrome/browser/safe_browsing/download_protection_service.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 #include <stdint.h> | 8 #include <stdint.h> |
9 | 9 |
10 #include <map> | 10 #include <map> |
(...skipping 948 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
959 &item, | 959 &item, |
960 {"http://www.evil.com/a.exe"}, // url_chain | 960 {"http://www.evil.com/a.exe"}, // url_chain |
961 "http://www.google.com/", // referrer | 961 "http://www.google.com/", // referrer |
962 FILE_PATH_LITERAL("a.tmp"), // tmp_path | 962 FILE_PATH_LITERAL("a.tmp"), // tmp_path |
963 FILE_PATH_LITERAL("a.exe")); // final_path | 963 FILE_PATH_LITERAL("a.exe")); // final_path |
964 | 964 |
965 EXPECT_CALL(*sb_service_->mock_database_manager(), | 965 EXPECT_CALL(*sb_service_->mock_database_manager(), |
966 MatchDownloadWhitelistUrl(_)) | 966 MatchDownloadWhitelistUrl(_)) |
967 .WillRepeatedly(Return(false)); | 967 .WillRepeatedly(Return(false)); |
968 EXPECT_CALL(*binary_feature_extractor_.get(), CheckSignature(tmp_path_, _)) | 968 EXPECT_CALL(*binary_feature_extractor_.get(), CheckSignature(tmp_path_, _)) |
969 .Times(6); | 969 .Times(7); |
970 EXPECT_CALL(*binary_feature_extractor_.get(), | 970 EXPECT_CALL(*binary_feature_extractor_.get(), |
971 ExtractImageFeatures( | 971 ExtractImageFeatures( |
972 tmp_path_, BinaryFeatureExtractor::kDefaultOptions, _, _)) | 972 tmp_path_, BinaryFeatureExtractor::kDefaultOptions, _, _)) |
973 .Times(6); | 973 .Times(7); |
974 | 974 |
975 download_service_->CheckClientDownload( | 975 download_service_->CheckClientDownload( |
976 &item, | 976 &item, |
977 base::Bind(&DownloadProtectionServiceTest::CheckDoneCallback, | 977 base::Bind(&DownloadProtectionServiceTest::CheckDoneCallback, |
978 base::Unretained(this))); | 978 base::Unretained(this))); |
979 base::RunLoop().Run(); | 979 base::RunLoop().Run(); |
980 | 980 |
981 EXPECT_TRUE(IsResult(DownloadProtectionService::SAFE)); | 981 EXPECT_TRUE(IsResult(DownloadProtectionService::SAFE)); |
982 EXPECT_TRUE(HasClientDownloadRequest()); | 982 EXPECT_TRUE(HasClientDownloadRequest()); |
983 ClearClientDownloadRequest(); | 983 ClearClientDownloadRequest(); |
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1068 | 1068 |
1069 download_service_->CheckClientDownload( | 1069 download_service_->CheckClientDownload( |
1070 &item, | 1070 &item, |
1071 base::Bind(&DownloadProtectionServiceTest::CheckDoneCallback, | 1071 base::Bind(&DownloadProtectionServiceTest::CheckDoneCallback, |
1072 base::Unretained(this))); | 1072 base::Unretained(this))); |
1073 base::RunLoop().Run(); | 1073 base::RunLoop().Run(); |
1074 | 1074 |
1075 EXPECT_TRUE(IsResult(DownloadProtectionService::POTENTIALLY_UNWANTED)); | 1075 EXPECT_TRUE(IsResult(DownloadProtectionService::POTENTIALLY_UNWANTED)); |
1076 EXPECT_TRUE(HasClientDownloadRequest()); | 1076 EXPECT_TRUE(HasClientDownloadRequest()); |
1077 ClearClientDownloadRequest(); | 1077 ClearClientDownloadRequest(); |
| 1078 |
| 1079 // If the response is UNKNOWN the result should also be marked as |
| 1080 // UNKNOWN |
| 1081 PrepareResponse( |
| 1082 &factory, ClientDownloadResponse::UNKNOWN, net::HTTP_OK, |
| 1083 net::URLRequestStatus::SUCCESS); |
| 1084 |
| 1085 download_service_->CheckClientDownload( |
| 1086 &item, |
| 1087 base::Bind(&DownloadProtectionServiceTest::CheckDoneCallback, |
| 1088 base::Unretained(this))); |
| 1089 base::RunLoop().Run(); |
| 1090 |
| 1091 EXPECT_TRUE(IsResult(DownloadProtectionService::UNKNOWN)); |
| 1092 EXPECT_TRUE(HasClientDownloadRequest()); |
| 1093 ClearClientDownloadRequest(); |
1078 } | 1094 } |
1079 | 1095 |
1080 TEST_F(DownloadProtectionServiceTest, CheckClientDownloadHTTPS) { | 1096 TEST_F(DownloadProtectionServiceTest, CheckClientDownloadHTTPS) { |
1081 net::FakeURLFetcherFactory factory(NULL); | 1097 net::FakeURLFetcherFactory factory(NULL); |
1082 PrepareResponse( | 1098 PrepareResponse( |
1083 &factory, ClientDownloadResponse::DANGEROUS, net::HTTP_OK, | 1099 &factory, ClientDownloadResponse::DANGEROUS, net::HTTP_OK, |
1084 net::URLRequestStatus::SUCCESS); | 1100 net::URLRequestStatus::SUCCESS); |
1085 | 1101 |
1086 content::MockDownloadItem item; | 1102 content::MockDownloadItem item; |
1087 PrepareBasicDownloadItem(&item, | 1103 PrepareBasicDownloadItem(&item, |
(...skipping 250 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1338 // !is_extended_reporting && !is_incognito | 1354 // !is_extended_reporting && !is_incognito |
1339 CheckClientDownloadReportCorruptZip(true, false); | 1355 CheckClientDownloadReportCorruptZip(true, false); |
1340 } | 1356 } |
1341 | 1357 |
1342 TEST_F(DownloadProtectionServiceTest, | 1358 TEST_F(DownloadProtectionServiceTest, |
1343 CheckClientDownloadReportCorruptZipIncognito) { | 1359 CheckClientDownloadReportCorruptZipIncognito) { |
1344 // is_extended_reporting && is_incognito | 1360 // is_extended_reporting && is_incognito |
1345 CheckClientDownloadReportCorruptZip(true, true); | 1361 CheckClientDownloadReportCorruptZip(true, true); |
1346 } | 1362 } |
1347 | 1363 |
1348 TEST_F(DownloadProtectionServiceTest, CheckClientCrxDownloadSuccess) { | |
1349 // Even if the server verdict is dangerous we should return SAFE because | |
1350 // DownloadProtectionService::IsSupportedDownload() will return false | |
1351 // for crx downloads. | |
1352 net::FakeURLFetcherFactory factory(NULL); | |
1353 PrepareResponse( | |
1354 &factory, ClientDownloadResponse::DANGEROUS, net::HTTP_OK, | |
1355 net::URLRequestStatus::SUCCESS); | |
1356 | |
1357 content::MockDownloadItem item; | |
1358 PrepareBasicDownloadItem( | |
1359 &item, | |
1360 {"http://www.evil.com/a.crx"}, // url_chain | |
1361 "http://www.google.com/", // referrer | |
1362 FILE_PATH_LITERAL("a.tmp"), // tmp_path | |
1363 FILE_PATH_LITERAL("a.crx")); // final_path | |
1364 | |
1365 EXPECT_CALL(*sb_service_->mock_database_manager(), | |
1366 MatchDownloadWhitelistUrl(_)) | |
1367 .WillRepeatedly(Return(false)); | |
1368 EXPECT_CALL(*binary_feature_extractor_.get(), CheckSignature(tmp_path_, _)) | |
1369 .Times(1); | |
1370 EXPECT_CALL(*binary_feature_extractor_.get(), | |
1371 ExtractImageFeatures( | |
1372 tmp_path_, BinaryFeatureExtractor::kDefaultOptions, _, _)) | |
1373 .Times(1); | |
1374 | |
1375 EXPECT_FALSE(download_service_->IsSupportedDownload(item, final_path_)); | |
1376 download_service_->CheckClientDownload( | |
1377 &item, | |
1378 base::Bind(&DownloadProtectionServiceTest::CheckDoneCallback, | |
1379 base::Unretained(this))); | |
1380 base::RunLoop().Run(); | |
1381 EXPECT_TRUE(IsResult(DownloadProtectionService::UNKNOWN)); | |
1382 } | |
1383 | |
1384 TEST_F(DownloadProtectionServiceTest, CheckClientDownloadValidateRequest) { | 1364 TEST_F(DownloadProtectionServiceTest, CheckClientDownloadValidateRequest) { |
1385 net::TestURLFetcherFactory factory; | 1365 net::TestURLFetcherFactory factory; |
1386 | 1366 |
1387 content::MockDownloadItem item; | 1367 content::MockDownloadItem item; |
1388 PrepareBasicDownloadItem( | 1368 PrepareBasicDownloadItem( |
1389 &item, | 1369 &item, |
1390 {"http://www.google.com/", | 1370 {"http://www.google.com/", |
1391 "http://www.google.com/bla.exe"}, // url_chain | 1371 "http://www.google.com/bla.exe"}, // url_chain |
1392 "http://www.google.com/", // referrer | 1372 "http://www.google.com/", // referrer |
1393 FILE_PATH_LITERAL("bla.tmp"), // tmp_path | 1373 FILE_PATH_LITERAL("bla.tmp"), // tmp_path |
(...skipping 602 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1996 ClientDownloadResponse::Verdict verdict; | 1976 ClientDownloadResponse::Verdict verdict; |
1997 DownloadProtectionService::DownloadCheckResult expected_result; | 1977 DownloadProtectionService::DownloadCheckResult expected_result; |
1998 } kExpectedResults[] = { | 1978 } kExpectedResults[] = { |
1999 {ClientDownloadResponse::SAFE, DownloadProtectionService::SAFE}, | 1979 {ClientDownloadResponse::SAFE, DownloadProtectionService::SAFE}, |
2000 {ClientDownloadResponse::DANGEROUS, DownloadProtectionService::DANGEROUS}, | 1980 {ClientDownloadResponse::DANGEROUS, DownloadProtectionService::DANGEROUS}, |
2001 {ClientDownloadResponse::UNCOMMON, DownloadProtectionService::UNCOMMON}, | 1981 {ClientDownloadResponse::UNCOMMON, DownloadProtectionService::UNCOMMON}, |
2002 {ClientDownloadResponse::DANGEROUS_HOST, | 1982 {ClientDownloadResponse::DANGEROUS_HOST, |
2003 DownloadProtectionService::DANGEROUS_HOST}, | 1983 DownloadProtectionService::DANGEROUS_HOST}, |
2004 {ClientDownloadResponse::POTENTIALLY_UNWANTED, | 1984 {ClientDownloadResponse::POTENTIALLY_UNWANTED, |
2005 DownloadProtectionService::POTENTIALLY_UNWANTED}, | 1985 DownloadProtectionService::POTENTIALLY_UNWANTED}, |
| 1986 {ClientDownloadResponse::UNKNOWN, DownloadProtectionService::UNKNOWN}, |
2006 }; | 1987 }; |
2007 | 1988 |
2008 for (const auto& test_case : kExpectedResults) { | 1989 for (const auto& test_case : kExpectedResults) { |
2009 factory.ClearFakeResponses(); | 1990 factory.ClearFakeResponses(); |
2010 PrepareResponse(&factory, test_case.verdict, net::HTTP_OK, | 1991 PrepareResponse(&factory, test_case.verdict, net::HTTP_OK, |
2011 net::URLRequestStatus::SUCCESS); | 1992 net::URLRequestStatus::SUCCESS); |
2012 download_service_->CheckPPAPIDownloadRequest( | 1993 download_service_->CheckPPAPIDownloadRequest( |
2013 GURL("http://example.com/foo"), default_file_path, alternate_extensions, | 1994 GURL("http://example.com/foo"), default_file_path, alternate_extensions, |
2014 base::Bind(&DownloadProtectionServiceTest::CheckDoneCallback, | 1995 base::Bind(&DownloadProtectionServiceTest::CheckDoneCallback, |
2015 base::Unretained(this))); | 1996 base::Unretained(this))); |
(...skipping 239 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2255 &item, base::Bind(&DownloadProtectionServiceTest::CheckDoneCallback, | 2236 &item, base::Bind(&DownloadProtectionServiceTest::CheckDoneCallback, |
2256 base::Unretained(this))); | 2237 base::Unretained(this))); |
2257 base::RunLoop().Run(); | 2238 base::RunLoop().Run(); |
2258 | 2239 |
2259 EXPECT_FALSE(HasClientDownloadRequest()); | 2240 EXPECT_FALSE(HasClientDownloadRequest()); |
2260 // Overriden by flag: | 2241 // Overriden by flag: |
2261 EXPECT_TRUE(IsResult(DownloadProtectionService::DANGEROUS)); | 2242 EXPECT_TRUE(IsResult(DownloadProtectionService::DANGEROUS)); |
2262 } | 2243 } |
2263 | 2244 |
2264 } // namespace safe_browsing | 2245 } // namespace safe_browsing |
OLD | NEW |