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

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

Issue 1673733002: Support new Safe Browsing list "goog-badresource-shavar" in SafeBrowsingDatabase. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Post-merge test fix Created 4 years, 10 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 // This test creates a safebrowsing service using test safebrowsing database 5 // This test creates a safebrowsing service using test safebrowsing database
6 // and a test protocol manager. It is used to test logics in safebrowsing 6 // and a test protocol manager. It is used to test logics in safebrowsing
7 // service. 7 // service.
8 8
9 #include "chrome/browser/safe_browsing/safe_browsing_service.h" 9 #include "chrome/browser/safe_browsing/safe_browsing_service.h"
10 10
(...skipping 245 matching lines...) Expand 10 before | Expand all | Expand 10 after
256 bool ContainsModuleWhitelistedString(const std::string& str) override { 256 bool ContainsModuleWhitelistedString(const std::string& str) override {
257 return true; 257 return true;
258 } 258 }
259 bool ContainsExtensionPrefixes(const std::vector<SBPrefix>& prefixes, 259 bool ContainsExtensionPrefixes(const std::vector<SBPrefix>& prefixes,
260 std::vector<SBPrefix>* prefix_hits) override { 260 std::vector<SBPrefix>* prefix_hits) override {
261 return false; 261 return false;
262 } 262 }
263 bool ContainsMalwareIP(const std::string& ip_address) override { 263 bool ContainsMalwareIP(const std::string& ip_address) override {
264 return true; 264 return true;
265 } 265 }
266 bool ContainsResourceUrlPrefixes(
267 const std::vector<SBPrefix>& prefixes,
268 std::vector<SBPrefix>* prefix_hits) override {
269 prefix_hits->clear();
270 return ContainsUrlPrefixes(RESOURCEBLACKLIST, RESOURCEBLACKLIST,
271 prefixes, prefix_hits);
272 }
266 bool UpdateStarted(std::vector<SBListChunkRanges>* lists) override { 273 bool UpdateStarted(std::vector<SBListChunkRanges>* lists) override {
267 ADD_FAILURE() << "Not implemented."; 274 ADD_FAILURE() << "Not implemented.";
268 return false; 275 return false;
269 } 276 }
270 void InsertChunks( 277 void InsertChunks(
271 const std::string& list_name, 278 const std::string& list_name,
272 const std::vector<scoped_ptr<SBChunkData>>& chunks) override { 279 const std::vector<scoped_ptr<SBChunkData>>& chunks) override {
273 ADD_FAILURE() << "Not implemented."; 280 ADD_FAILURE() << "Not implemented.";
274 } 281 }
275 void DeleteChunks(const std::vector<SBChunkDelete>& chunk_deletes) override { 282 void DeleteChunks(const std::vector<SBChunkDelete>& chunk_deletes) override {
(...skipping 858 matching lines...) Expand 10 before | Expand all | Expand 10 after
1134 1141
1135 class TestSBClient : public base::RefCountedThreadSafe<TestSBClient>, 1142 class TestSBClient : public base::RefCountedThreadSafe<TestSBClient>,
1136 public SafeBrowsingDatabaseManager::Client { 1143 public SafeBrowsingDatabaseManager::Client {
1137 public: 1144 public:
1138 TestSBClient() 1145 TestSBClient()
1139 : threat_type_(SB_THREAT_TYPE_SAFE), 1146 : threat_type_(SB_THREAT_TYPE_SAFE),
1140 safe_browsing_service_(g_browser_process->safe_browsing_service()) {} 1147 safe_browsing_service_(g_browser_process->safe_browsing_service()) {}
1141 1148
1142 SBThreatType GetThreatType() const { return threat_type_; } 1149 SBThreatType GetThreatType() const { return threat_type_; }
1143 1150
1151 std::string GetThreatHash() const { return threat_hash_; }
1152
1144 void CheckDownloadUrl(const std::vector<GURL>& url_chain) { 1153 void CheckDownloadUrl(const std::vector<GURL>& url_chain) {
1145 BrowserThread::PostTask( 1154 BrowserThread::PostTask(
1146 BrowserThread::IO, FROM_HERE, 1155 BrowserThread::IO, FROM_HERE,
1147 base::Bind(&TestSBClient::CheckDownloadUrlOnIOThread, this, url_chain)); 1156 base::Bind(&TestSBClient::CheckDownloadUrlOnIOThread, this, url_chain));
1148 content::RunMessageLoop(); // Will stop in OnCheckDownloadUrlResult. 1157 content::RunMessageLoop(); // Will stop in OnCheckDownloadUrlResult.
1149 } 1158 }
1150 1159
1151 void CheckBrowseUrl(const GURL& url) { 1160 void CheckBrowseUrl(const GURL& url) {
1152 BrowserThread::PostTask( 1161 BrowserThread::PostTask(
1153 BrowserThread::IO, FROM_HERE, 1162 BrowserThread::IO, FROM_HERE,
1154 base::Bind(&TestSBClient::CheckBrowseUrlOnIOThread, this, url)); 1163 base::Bind(&TestSBClient::CheckBrowseUrlOnIOThread, this, url));
1155 content::RunMessageLoop(); // Will stop in OnCheckBrowseUrlResult. 1164 content::RunMessageLoop(); // Will stop in OnCheckBrowseUrlResult.
1156 } 1165 }
1157 1166
1167 void CheckResourceUrl(const GURL& url) {
1168 BrowserThread::PostTask(
1169 BrowserThread::IO, FROM_HERE,
1170 base::Bind(&TestSBClient::CheckResourceUrlOnIOThread, this, url));
1171 content::RunMessageLoop(); // Will stop in OnCheckResourceUrlResult.
1172 }
1173
1158 private: 1174 private:
1159 friend class base::RefCountedThreadSafe<TestSBClient>; 1175 friend class base::RefCountedThreadSafe<TestSBClient>;
1160 ~TestSBClient() override {} 1176 ~TestSBClient() override {}
1161 1177
1162 void CheckDownloadUrlOnIOThread(const std::vector<GURL>& url_chain) { 1178 void CheckDownloadUrlOnIOThread(const std::vector<GURL>& url_chain) {
1163 bool synchronous_safe_signal = 1179 bool synchronous_safe_signal =
1164 safe_browsing_service_->database_manager()->CheckDownloadUrl(url_chain, 1180 safe_browsing_service_->database_manager()->CheckDownloadUrl(url_chain,
1165 this); 1181 this);
1166 if (synchronous_safe_signal) { 1182 if (synchronous_safe_signal) {
1167 threat_type_ = SB_THREAT_TYPE_SAFE; 1183 threat_type_ = SB_THREAT_TYPE_SAFE;
1168 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, 1184 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE,
1169 base::Bind(&TestSBClient::CheckDone, this)); 1185 base::Bind(&TestSBClient::CheckDone, this));
1170 } 1186 }
1171 } 1187 }
1172 1188
1173 void CheckBrowseUrlOnIOThread(const GURL& url) { 1189 void CheckBrowseUrlOnIOThread(const GURL& url) {
1174 // The async CheckDone() hook will not be called when we have a synchronous 1190 // The async CheckDone() hook will not be called when we have a synchronous
1175 // safe signal, handle it right away. 1191 // safe signal, handle it right away.
1176 bool synchronous_safe_signal = 1192 bool synchronous_safe_signal =
1177 safe_browsing_service_->database_manager()->CheckBrowseUrl(url, this); 1193 safe_browsing_service_->database_manager()->CheckBrowseUrl(url, this);
1178 if (synchronous_safe_signal) { 1194 if (synchronous_safe_signal) {
1179 threat_type_ = SB_THREAT_TYPE_SAFE; 1195 threat_type_ = SB_THREAT_TYPE_SAFE;
1180 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, 1196 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE,
1181 base::Bind(&TestSBClient::CheckDone, this)); 1197 base::Bind(&TestSBClient::CheckDone, this));
1182 } 1198 }
1183 } 1199 }
1184 1200
1201 void CheckResourceUrlOnIOThread(const GURL& url) {
1202 bool synchronous_safe_signal =
1203 safe_browsing_service_->database_manager()->CheckResourceUrl(url, this);
1204 if (synchronous_safe_signal) {
1205 threat_type_ = SB_THREAT_TYPE_SAFE;
1206 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE,
1207 base::Bind(&TestSBClient::CheckDone, this));
1208 }
1209 }
1210
1185 // Called when the result of checking a download URL is known. 1211 // Called when the result of checking a download URL is known.
1186 void OnCheckDownloadUrlResult(const std::vector<GURL>& /* url_chain */, 1212 void OnCheckDownloadUrlResult(const std::vector<GURL>& /* url_chain */,
1187 SBThreatType threat_type) override { 1213 SBThreatType threat_type) override {
1188 threat_type_ = threat_type; 1214 threat_type_ = threat_type;
1189 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, 1215 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE,
1190 base::Bind(&TestSBClient::CheckDone, this)); 1216 base::Bind(&TestSBClient::CheckDone, this));
1191 } 1217 }
1192 1218
1193 // Called when the result of checking a browse URL is known. 1219 // Called when the result of checking a browse URL is known.
1194 void OnCheckBrowseUrlResult(const GURL& /* url */, 1220 void OnCheckBrowseUrlResult(const GURL& /* url */,
1195 SBThreatType threat_type, 1221 SBThreatType threat_type,
1196 const std::string& /* metadata */) override { 1222 const std::string& /* metadata */) override {
1197 threat_type_ = threat_type; 1223 threat_type_ = threat_type;
1198 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, 1224 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE,
1199 base::Bind(&TestSBClient::CheckDone, this)); 1225 base::Bind(&TestSBClient::CheckDone, this));
1200 } 1226 }
1201 1227
1228 // Called when the result of checking a resource URL is known.
1229 void OnCheckResourceUrlResult(const GURL& /* url */,
1230 SBThreatType threat_type,
1231 const std::string& threat_hash) override {
1232 threat_type_ = threat_type;
1233 threat_hash_ = threat_hash;
1234 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE,
1235 base::Bind(&TestSBClient::CheckDone, this));
1236 }
1237
1202 void CheckDone() { base::MessageLoopForUI::current()->QuitWhenIdle(); } 1238 void CheckDone() { base::MessageLoopForUI::current()->QuitWhenIdle(); }
1203 1239
1204 SBThreatType threat_type_; 1240 SBThreatType threat_type_;
1241 std::string threat_hash_;
1205 SafeBrowsingService* safe_browsing_service_; 1242 SafeBrowsingService* safe_browsing_service_;
1206 1243
1207 DISALLOW_COPY_AND_ASSIGN(TestSBClient); 1244 DISALLOW_COPY_AND_ASSIGN(TestSBClient);
1208 }; 1245 };
1209 1246
1210 } // namespace 1247 } // namespace
1211 1248
1212 // These tests use SafeBrowsingService::Client to directly interact with 1249 // These tests use SafeBrowsingService::Client to directly interact with
1213 // SafeBrowsingService. 1250 // SafeBrowsingService.
1214 IN_PROC_BROWSER_TEST_F(SafeBrowsingServiceTest, CheckDownloadUrl) { 1251 IN_PROC_BROWSER_TEST_F(SafeBrowsingServiceTest, CheckDownloadUrl) {
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after
1330 SBFullHashResult full_hash_result; 1367 SBFullHashResult full_hash_result;
1331 GenUrlFullhashResult(badbin_url, BINURL, &full_hash_result); 1368 GenUrlFullhashResult(badbin_url, BINURL, &full_hash_result);
1332 SetupResponseForUrl(badbin_url, full_hash_result); 1369 SetupResponseForUrl(badbin_url, full_hash_result);
1333 1370
1334 client->CheckDownloadUrl(badbin_urls); 1371 client->CheckDownloadUrl(badbin_urls);
1335 1372
1336 // Now, the badbin_url is not safe since it is added to download database. 1373 // Now, the badbin_url is not safe since it is added to download database.
1337 EXPECT_EQ(SB_THREAT_TYPE_BINARY_MALWARE_URL, client->GetThreatType()); 1374 EXPECT_EQ(SB_THREAT_TYPE_BINARY_MALWARE_URL, client->GetThreatType());
1338 } 1375 }
1339 1376
1377 IN_PROC_BROWSER_TEST_F(SafeBrowsingServiceTest, CheckResourceUrl) {
1378 const char* kBlacklistResource = "/blacklisted/script.js";
1379 GURL blacklist_resource = embedded_test_server()->GetURL(kBlacklistResource);
1380 std::string blacklist_resource_hash;
1381 const char* kMaliciousResource = "/malware/script.js";
1382 GURL malware_resource = embedded_test_server()->GetURL(kMaliciousResource);
1383 std::string malware_resource_hash;
1384
1385 {
1386 SBFullHashResult full_hash;
1387 GenUrlFullhashResult(blacklist_resource, RESOURCEBLACKLIST, &full_hash);
1388 SetupResponseForUrl(blacklist_resource, full_hash);
1389 blacklist_resource_hash = std::string(full_hash.hash.full_hash,
1390 full_hash.hash.full_hash + 32);
1391 }
1392 {
1393 SBFullHashResult full_hash;
1394 GenUrlFullhashResult(malware_resource, MALWARE, &full_hash);
1395 SetupResponseForUrl(malware_resource, full_hash);
1396 full_hash.list_id = RESOURCEBLACKLIST;
1397 SetupResponseForUrl(malware_resource, full_hash);
1398 malware_resource_hash = std::string(full_hash.hash.full_hash,
1399 full_hash.hash.full_hash + 32);
1400 }
1401
1402 scoped_refptr<TestSBClient> client(new TestSBClient);
1403 client->CheckResourceUrl(blacklist_resource);
1404 EXPECT_EQ(SB_THREAT_TYPE_BLACKLISTED_RESOURCE, client->GetThreatType());
1405 EXPECT_EQ(blacklist_resource_hash, client->GetThreatHash());
1406
1407 // Since we're checking a resource url, we should receive result that it's
1408 // a blacklisted resource, not a malware.
1409 client = new TestSBClient;
1410 client->CheckResourceUrl(malware_resource);
1411 EXPECT_EQ(SB_THREAT_TYPE_BLACKLISTED_RESOURCE, client->GetThreatType());
1412 EXPECT_EQ(malware_resource_hash, client->GetThreatHash());
1413
1414 client->CheckResourceUrl(embedded_test_server()->GetURL(kEmptyPage));
1415 EXPECT_EQ(SB_THREAT_TYPE_SAFE, client->GetThreatType());
1416 }
1417
1340 #if defined(OS_WIN) 1418 #if defined(OS_WIN)
1341 // http://crbug.com/396409 1419 // http://crbug.com/396409
1342 #define MAYBE_CheckDownloadUrlTimedOut DISABLED_CheckDownloadUrlTimedOut 1420 #define MAYBE_CheckDownloadUrlTimedOut DISABLED_CheckDownloadUrlTimedOut
1343 #else 1421 #else
1344 #define MAYBE_CheckDownloadUrlTimedOut CheckDownloadUrlTimedOut 1422 #define MAYBE_CheckDownloadUrlTimedOut CheckDownloadUrlTimedOut
1345 #endif 1423 #endif
1346 IN_PROC_BROWSER_TEST_F(SafeBrowsingServiceTest, 1424 IN_PROC_BROWSER_TEST_F(SafeBrowsingServiceTest,
1347 MAYBE_CheckDownloadUrlTimedOut) { 1425 MAYBE_CheckDownloadUrlTimedOut) {
1348 GURL badbin_url = embedded_test_server()->GetURL(kMalwareFile); 1426 GURL badbin_url = embedded_test_server()->GetURL(kMalwareFile);
1349 std::vector<GURL> badbin_urls(1, badbin_url); 1427 std::vector<GURL> badbin_urls(1, badbin_url);
(...skipping 321 matching lines...) Expand 10 before | Expand all | Expand 10 after
1671 chrome::NOTIFICATION_SAFE_BROWSING_UPDATE_COMPLETE, 1749 chrome::NOTIFICATION_SAFE_BROWSING_UPDATE_COMPLETE,
1672 content::Source<SafeBrowsingDatabaseManager>( 1750 content::Source<SafeBrowsingDatabaseManager>(
1673 sb_service_->database_manager().get())); 1751 sb_service_->database_manager().get()));
1674 BrowserThread::PostTask( 1752 BrowserThread::PostTask(
1675 BrowserThread::IO, FROM_HERE, 1753 BrowserThread::IO, FROM_HERE,
1676 base::Bind(&SafeBrowsingDatabaseManagerCookieTest::ForceUpdate, this)); 1754 base::Bind(&SafeBrowsingDatabaseManagerCookieTest::ForceUpdate, this));
1677 observer.Wait(); 1755 observer.Wait();
1678 } 1756 }
1679 1757
1680 } // namespace safe_browsing 1758 } // namespace safe_browsing
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698