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

Side by Side Diff: chrome/browser/safe_browsing/download_protection_service_unittest.cc

Issue 2128583005: DownloadProtection: Add more graceful handling of verdict=UNKNOWN (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 5 months 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 unified diff | Download patch
OLDNEW
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
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
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698