| 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 // 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 |
| OLD | NEW |