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

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

Powered by Google App Engine
This is Rietveld 408576698