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 |