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

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

Issue 10069031: Replace SafeBrowsing MAC with downloads over SSL. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 8 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 | Annotate | Revision Log
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 uses the safebrowsing test server published at 5 // This test uses the safebrowsing test server published at
6 // http://code.google.com/p/google-safe-browsing/ to test the safebrowsing 6 // http://code.google.com/p/google-safe-browsing/ to test the safebrowsing
7 // protocol implemetation. Details of the safebrowsing testing flow is 7 // protocol implemetation. Details of the safebrowsing testing flow is
8 // documented at 8 // documented at
9 // http://code.google.com/p/google-safe-browsing/wiki/ProtocolTesting 9 // http://code.google.com/p/google-safe-browsing/wiki/ProtocolTesting
10 // 10 //
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
45 #include "net/base/load_flags.h" 45 #include "net/base/load_flags.h"
46 #include "net/base/net_log.h" 46 #include "net/base/net_log.h"
47 #include "net/test/python_utils.h" 47 #include "net/test/python_utils.h"
48 #include "net/url_request/url_request_status.h" 48 #include "net/url_request/url_request_status.h"
49 #include "testing/gtest/include/gtest/gtest.h" 49 #include "testing/gtest/include/gtest/gtest.h"
50 50
51 using content::BrowserThread; 51 using content::BrowserThread;
52 52
53 namespace { 53 namespace {
54 54
55 const FilePath::CharType kDataFile[] = FILE_PATH_LITERAL("testing_input.dat"); 55 const FilePath::CharType kDataFile[] =
56 FILE_PATH_LITERAL("testing_input_nomac.dat");
56 const char kUrlVerifyPath[] = "/safebrowsing/verify_urls"; 57 const char kUrlVerifyPath[] = "/safebrowsing/verify_urls";
57 const char kDBVerifyPath[] = "/safebrowsing/verify_database"; 58 const char kDBVerifyPath[] = "/safebrowsing/verify_database";
58 const char kDBResetPath[] = "/reset"; 59 const char kDBResetPath[] = "/reset";
59 const char kTestCompletePath[] = "/test_complete"; 60 const char kTestCompletePath[] = "/test_complete";
60 61
61 struct PhishingUrl { 62 struct PhishingUrl {
62 std::string url; 63 std::string url;
63 std::string list_name; 64 std::string list_name;
64 bool is_phishing; 65 bool is_phishing;
65 }; 66 };
(...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after
199 200
200 const char SafeBrowsingTestServer::kHost_[] = "localhost"; 201 const char SafeBrowsingTestServer::kHost_[] = "localhost";
201 const int SafeBrowsingTestServer::kPort_ = 40102; 202 const int SafeBrowsingTestServer::kPort_ = 40102;
202 203
203 // This starts the browser and keeps status of states related to SafeBrowsing. 204 // This starts the browser and keeps status of states related to SafeBrowsing.
204 class SafeBrowsingServiceTest : public InProcessBrowserTest { 205 class SafeBrowsingServiceTest : public InProcessBrowserTest {
205 public: 206 public:
206 SafeBrowsingServiceTest() 207 SafeBrowsingServiceTest()
207 : safe_browsing_service_(NULL), 208 : safe_browsing_service_(NULL),
208 is_database_ready_(true), 209 is_database_ready_(true),
209 is_initial_request_(false),
210 is_update_scheduled_(false), 210 is_update_scheduled_(false),
211 is_checked_url_in_db_(false), 211 is_checked_url_in_db_(false),
212 is_checked_url_safe_(false) { 212 is_checked_url_safe_(false) {
213 } 213 }
214 214
215 virtual ~SafeBrowsingServiceTest() { 215 virtual ~SafeBrowsingServiceTest() {
216 } 216 }
217 217
218 void UpdateSafeBrowsingStatus() { 218 void UpdateSafeBrowsingStatus() {
219 ASSERT_TRUE(safe_browsing_service_); 219 ASSERT_TRUE(safe_browsing_service_);
220 base::AutoLock lock(update_status_mutex_); 220 base::AutoLock lock(update_status_mutex_);
221 is_initial_request_ =
222 safe_browsing_service_->protocol_manager_->is_initial_request();
223 last_update_ = safe_browsing_service_->protocol_manager_->last_update(); 221 last_update_ = safe_browsing_service_->protocol_manager_->last_update();
224 is_update_scheduled_ = 222 is_update_scheduled_ =
225 safe_browsing_service_->protocol_manager_->update_timer_.IsRunning(); 223 safe_browsing_service_->protocol_manager_->update_timer_.IsRunning();
226 } 224 }
227 225
228 void ForceUpdate() { 226 void ForceUpdate() {
229 ASSERT_TRUE(safe_browsing_service_); 227 ASSERT_TRUE(safe_browsing_service_);
230 safe_browsing_service_->protocol_manager_->ForceScheduleNextUpdate(0); 228 safe_browsing_service_->protocol_manager_->ForceScheduleNextUpdate(0);
231 } 229 }
232 230
(...skipping 30 matching lines...) Expand all
263 bool is_checked_url_safe() { 261 bool is_checked_url_safe() {
264 base::AutoLock l(update_status_mutex_); 262 base::AutoLock l(update_status_mutex_);
265 return is_checked_url_safe_; 263 return is_checked_url_safe_;
266 } 264 }
267 265
268 bool is_database_ready() { 266 bool is_database_ready() {
269 base::AutoLock l(update_status_mutex_); 267 base::AutoLock l(update_status_mutex_);
270 return is_database_ready_; 268 return is_database_ready_;
271 } 269 }
272 270
273 bool is_initial_request() {
274 base::AutoLock l(update_status_mutex_);
275 return is_initial_request_;
276 }
277
278 base::Time last_update() { 271 base::Time last_update() {
279 base::AutoLock l(update_status_mutex_); 272 base::AutoLock l(update_status_mutex_);
280 return last_update_; 273 return last_update_;
281 } 274 }
282 275
283 bool is_update_scheduled() { 276 bool is_update_scheduled() {
284 base::AutoLock l(update_status_mutex_); 277 base::AutoLock l(update_status_mutex_);
285 return is_update_scheduled_; 278 return is_update_scheduled_;
286 } 279 }
287 280
(...skipping 19 matching lines...) Expand all
307 300
308 // TODO(lzheng): The test server does not understand download related 301 // TODO(lzheng): The test server does not understand download related
309 // requests. We need to fix the server. 302 // requests. We need to fix the server.
310 command_line->AppendSwitch(switches::kSbDisableDownloadProtection); 303 command_line->AppendSwitch(switches::kSbDisableDownloadProtection);
311 304
312 // TODO(gcasto): Generate new testing data that includes the 305 // TODO(gcasto): Generate new testing data that includes the
313 // client-side phishing whitelist. 306 // client-side phishing whitelist.
314 command_line->AppendSwitch( 307 command_line->AppendSwitch(
315 switches::kDisableClientSidePhishingDetection); 308 switches::kDisableClientSidePhishingDetection);
316 309
317 // In this test, we fetch SafeBrowsing data and Mac key from the same 310 // Point to the testing server for all SafeBrowsing requests.
318 // server. Although in real production, they are served from different
319 // servers.
320 std::string url_prefix = 311 std::string url_prefix =
321 base::StringPrintf("http://%s:%d/safebrowsing", 312 base::StringPrintf("http://%s:%d/safebrowsing",
322 SafeBrowsingTestServer::Host(), 313 SafeBrowsingTestServer::Host(),
323 SafeBrowsingTestServer::Port()); 314 SafeBrowsingTestServer::Port());
324 command_line->AppendSwitchASCII(switches::kSbInfoURLPrefix, url_prefix); 315 command_line->AppendSwitchASCII(switches::kSbURLPrefix, url_prefix);
325 command_line->AppendSwitchASCII(switches::kSbMacKeyURLPrefix, url_prefix);
326 } 316 }
327 317
328 void SetTestStep(int step) { 318 void SetTestStep(int step) {
329 std::string test_step = base::StringPrintf("test_step=%d", step); 319 std::string test_step = base::StringPrintf("test_step=%d", step);
330 safe_browsing_service_->protocol_manager_->set_additional_query(test_step); 320 safe_browsing_service_->protocol_manager_->set_additional_query(test_step);
331 } 321 }
332 322
333 private: 323 private:
334 SafeBrowsingService* safe_browsing_service_; 324 SafeBrowsingService* safe_browsing_service_;
335 325
336 // Protects all variables below since they are read on UI thread 326 // Protects all variables below since they are read on UI thread
337 // but updated on IO thread or safebrowsing thread. 327 // but updated on IO thread or safebrowsing thread.
338 base::Lock update_status_mutex_; 328 base::Lock update_status_mutex_;
339 329
340 // States associated with safebrowsing service updates. 330 // States associated with safebrowsing service updates.
341 bool is_database_ready_; 331 bool is_database_ready_;
342 bool is_initial_request_;
343 base::Time last_update_; 332 base::Time last_update_;
344 bool is_update_scheduled_; 333 bool is_update_scheduled_;
345 // Indicates if there is a match between a URL's prefix and safebrowsing 334 // Indicates if there is a match between a URL's prefix and safebrowsing
346 // database (thus potentially it is a phishing URL). 335 // database (thus potentially it is a phishing URL).
347 bool is_checked_url_in_db_; 336 bool is_checked_url_in_db_;
348 // True if last verified URL is not a phishing URL and thus it is safe. 337 // True if last verified URL is not a phishing URL and thus it is safe.
349 bool is_checked_url_safe_; 338 bool is_checked_url_safe_;
350 339
351 DISALLOW_COPY_AND_ASSIGN(SafeBrowsingServiceTest); 340 DISALLOW_COPY_AND_ASSIGN(SafeBrowsingServiceTest);
352 }; 341 };
(...skipping 214 matching lines...) Expand 10 before | Expand all | Expand 10 after
567 556
568 // Make sure the server is running. 557 // Make sure the server is running.
569 safe_browsing_helper->WaitTillServerReady(server_host, server_port); 558 safe_browsing_helper->WaitTillServerReady(server_host, server_port);
570 559
571 // Waits and makes sure safebrowsing update is not happening. 560 // Waits and makes sure safebrowsing update is not happening.
572 // The wait will stop once OnWaitForStatusUpdateDone in 561 // The wait will stop once OnWaitForStatusUpdateDone in
573 // safe_browsing_helper is called and status from safe_browsing_service_ 562 // safe_browsing_helper is called and status from safe_browsing_service_
574 // is checked. 563 // is checked.
575 safe_browsing_helper->WaitForStatusUpdate(0); 564 safe_browsing_helper->WaitForStatusUpdate(0);
576 EXPECT_TRUE(is_database_ready()); 565 EXPECT_TRUE(is_database_ready());
577 EXPECT_TRUE(is_initial_request());
578 EXPECT_FALSE(is_update_scheduled()); 566 EXPECT_FALSE(is_update_scheduled());
579 EXPECT_TRUE(last_update().is_null()); 567 EXPECT_TRUE(last_update().is_null());
580 // Starts updates. After each update, the test will fetch a list of URLs with 568 // Starts updates. After each update, the test will fetch a list of URLs with
581 // expected results to verify with safebrowsing service. If there is no error, 569 // expected results to verify with safebrowsing service. If there is no error,
582 // the test moves on to the next step to get more update chunks. 570 // the test moves on to the next step to get more update chunks.
583 // This repeats till there is no update data. 571 // This repeats till there is no update data.
584 for (int step = 1;; step++) { 572 for (int step = 1;; step++) {
585 // Every step should be a fresh start. 573 // Every step should be a fresh start.
586 SCOPED_TRACE(base::StringPrintf("step=%d", step)); 574 SCOPED_TRACE(base::StringPrintf("step=%d", step));
587 EXPECT_TRUE(is_database_ready()); 575 EXPECT_TRUE(is_database_ready());
588 EXPECT_FALSE(is_update_scheduled()); 576 EXPECT_FALSE(is_update_scheduled());
589 577
590 // Starts safebrowsing update on IO thread. Waits till scheduled 578 // Starts safebrowsing update on IO thread. Waits till scheduled
591 // update finishes. Stops waiting after kMaxWaitSecPerStep if the update 579 // update finishes. Stops waiting after kMaxWaitSecPerStep if the update
592 // could not finish. 580 // could not finish.
593 base::Time now = base::Time::Now(); 581 base::Time now = base::Time::Now();
594 SetTestStep(step); 582 SetTestStep(step);
595 safe_browsing_helper->ForceUpdate(); 583 safe_browsing_helper->ForceUpdate();
596 584
597 do { 585 do {
598 // Periodically pull the status. 586 // Periodically pull the status.
599 safe_browsing_helper->WaitForStatusUpdate( 587 safe_browsing_helper->WaitForStatusUpdate(
600 TestTimeouts::tiny_timeout_ms()); 588 TestTimeouts::tiny_timeout_ms());
601 } while (is_update_scheduled() || is_initial_request() || 589 } while (is_update_scheduled() || !is_database_ready());
602 !is_database_ready());
603 590
604 591
605 if (last_update() < now) { 592 if (last_update() < now) {
606 // This means no data available anymore. 593 // This means no data available anymore.
607 break; 594 break;
608 } 595 }
609 596
610 // Fetches URLs to verify and waits till server responses with data. 597 // Fetches URLs to verify and waits till server responses with data.
611 EXPECT_EQ(net::URLRequestStatus::SUCCESS, 598 EXPECT_EQ(net::URLRequestStatus::SUCCESS,
612 safe_browsing_helper->FetchUrlsToVerify(server_host, 599 safe_browsing_helper->FetchUrlsToVerify(server_host,
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
648 } 635 }
649 636
650 // Verifies with server if test is done and waits till server responses. 637 // Verifies with server if test is done and waits till server responses.
651 EXPECT_EQ(net::URLRequestStatus::SUCCESS, 638 EXPECT_EQ(net::URLRequestStatus::SUCCESS,
652 safe_browsing_helper->VerifyTestComplete(server_host, 639 safe_browsing_helper->VerifyTestComplete(server_host,
653 server_port, 640 server_port,
654 last_step)); 641 last_step));
655 EXPECT_EQ("yes", safe_browsing_helper->response_data()); 642 EXPECT_EQ("yes", safe_browsing_helper->response_data());
656 test_server.Stop(); 643 test_server.Stop();
657 } 644 }
OLDNEW
« no previous file with comments | « chrome/browser/safe_browsing/safe_browsing_service_browsertest.cc ('k') | chrome/browser/safe_browsing/safe_browsing_util.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698