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

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

Issue 10827189: SafeBrowsingSystemTest: use notification for end of update instead of polling. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fix comments Created 8 years, 4 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 15 matching lines...) Expand all
26 #include "base/stringprintf.h" 26 #include "base/stringprintf.h"
27 #include "base/synchronization/lock.h" 27 #include "base/synchronization/lock.h"
28 #include "base/test/test_timeouts.h" 28 #include "base/test/test_timeouts.h"
29 #include "base/threading/platform_thread.h" 29 #include "base/threading/platform_thread.h"
30 #include "base/threading/thread.h" 30 #include "base/threading/thread.h"
31 #include "base/time.h" 31 #include "base/time.h"
32 #include "base/utf_string_conversions.h" 32 #include "base/utf_string_conversions.h"
33 #include "chrome/browser/browser_process.h" 33 #include "chrome/browser/browser_process.h"
34 #include "chrome/browser/safe_browsing/protocol_manager.h" 34 #include "chrome/browser/safe_browsing/protocol_manager.h"
35 #include "chrome/browser/safe_browsing/safe_browsing_service.h" 35 #include "chrome/browser/safe_browsing/safe_browsing_service.h"
36 #include "chrome/common/chrome_notification_types.h"
36 #include "chrome/common/chrome_switches.h" 37 #include "chrome/common/chrome_switches.h"
37 #include "chrome/common/url_constants.h" 38 #include "chrome/common/url_constants.h"
38 #include "chrome/test/base/in_process_browser_test.h" 39 #include "chrome/test/base/in_process_browser_test.h"
39 #include "chrome/test/base/ui_test_utils.h" 40 #include "chrome/test/base/ui_test_utils.h"
40 #include "content/public/browser/browser_context.h" 41 #include "content/public/browser/browser_context.h"
41 #include "content/public/test/test_browser_thread.h" 42 #include "content/public/test/test_browser_thread.h"
42 #include "net/base/host_resolver.h" 43 #include "net/base/host_resolver.h"
43 #include "net/base/load_flags.h" 44 #include "net/base/load_flags.h"
44 #include "net/base/net_log.h" 45 #include "net/base/net_log.h"
45 #include "net/test/python_utils.h" 46 #include "net/test/python_utils.h"
(...skipping 174 matching lines...) Expand 10 before | Expand all | Expand 10 after
220 221
221 void UpdateSafeBrowsingStatus() { 222 void UpdateSafeBrowsingStatus() {
222 ASSERT_TRUE(safe_browsing_service_); 223 ASSERT_TRUE(safe_browsing_service_);
223 base::AutoLock lock(update_status_mutex_); 224 base::AutoLock lock(update_status_mutex_);
224 last_update_ = safe_browsing_service_->protocol_manager_->last_update(); 225 last_update_ = safe_browsing_service_->protocol_manager_->last_update();
225 is_update_scheduled_ = 226 is_update_scheduled_ =
226 safe_browsing_service_->protocol_manager_->update_timer_.IsRunning(); 227 safe_browsing_service_->protocol_manager_->update_timer_.IsRunning();
227 } 228 }
228 229
229 void ForceUpdate() { 230 void ForceUpdate() {
231 content::WindowedNotificationObserver observer(
232 chrome::NOTIFICATION_SAFE_BROWSING_UPDATE_COMPLETE,
233 content::Source<SafeBrowsingService>(safe_browsing_service_));
234 BrowserThread::PostTask(BrowserThread::IO, FROM_HERE,
235 base::Bind(&SafeBrowsingServiceTest::ForceUpdateOnIOThread,
236 this));
237 observer.Wait();
238 }
239
240 void ForceUpdateOnIOThread() {
241 EXPECT_TRUE(BrowserThread::CurrentlyOn(BrowserThread::IO));
230 ASSERT_TRUE(safe_browsing_service_); 242 ASSERT_TRUE(safe_browsing_service_);
231 safe_browsing_service_->protocol_manager_->ForceScheduleNextUpdate(0); 243 safe_browsing_service_->protocol_manager_->ForceScheduleNextUpdate(0);
232 } 244 }
233 245
234 void CheckIsDatabaseReady() { 246 void CheckIsDatabaseReady() {
235 base::AutoLock lock(update_status_mutex_); 247 base::AutoLock lock(update_status_mutex_);
236 is_database_ready_ = 248 is_database_ready_ =
237 !safe_browsing_service_->database_update_in_progress_; 249 !safe_browsing_service_->database_update_in_progress_;
238 } 250 }
239 251
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after
371 virtual void OnDownloadUrlCheckResult( 383 virtual void OnDownloadUrlCheckResult(
372 const std::vector<GURL>& url_chain, 384 const std::vector<GURL>& url_chain,
373 SafeBrowsingService::UrlCheckResult result) { 385 SafeBrowsingService::UrlCheckResult result) {
374 // TODO(lzheng): Add test for DownloadUrl. 386 // TODO(lzheng): Add test for DownloadUrl.
375 } 387 }
376 388
377 virtual void OnBlockingPageComplete(bool proceed) { 389 virtual void OnBlockingPageComplete(bool proceed) {
378 NOTREACHED() << "Not implemented."; 390 NOTREACHED() << "Not implemented.";
379 } 391 }
380 392
381 // Functions and callbacks to start the safebrowsing database update.
382 void ForceUpdate() {
383 BrowserThread::PostTask(BrowserThread::IO, FROM_HERE,
384 base::Bind(&SafeBrowsingServiceTestHelper::ForceUpdateInIOThread,
385 this));
386 // Will continue after OnForceUpdateDone().
387 content::RunMessageLoop();
388 }
389 void ForceUpdateInIOThread() {
390 EXPECT_TRUE(BrowserThread::CurrentlyOn(BrowserThread::IO));
391 safe_browsing_test_->ForceUpdate();
392 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE,
393 base::Bind(&SafeBrowsingServiceTestHelper::OnForceUpdateDone,
394 this));
395 }
396 void OnForceUpdateDone() {
397 StopUILoop();
398 }
399
400 // Functions and callbacks related to CheckUrl. These are used to verify 393 // Functions and callbacks related to CheckUrl. These are used to verify
401 // phishing URLs. 394 // phishing URLs.
402 void CheckUrl(const GURL& url) { 395 void CheckUrl(const GURL& url) {
403 BrowserThread::PostTask(BrowserThread::IO, FROM_HERE, 396 BrowserThread::PostTask(BrowserThread::IO, FROM_HERE,
404 base::Bind(&SafeBrowsingServiceTestHelper::CheckUrlOnIOThread, 397 base::Bind(&SafeBrowsingServiceTestHelper::CheckUrlOnIOThread,
405 this, url)); 398 this, url));
406 content::RunMessageLoop(); 399 content::RunMessageLoop();
407 } 400 }
408 void CheckUrlOnIOThread(const GURL& url) { 401 void CheckUrlOnIOThread(const GURL& url) {
409 EXPECT_TRUE(BrowserThread::CurrentlyOn(BrowserThread::IO)); 402 EXPECT_TRUE(BrowserThread::CurrentlyOn(BrowserThread::IO));
(...skipping 27 matching lines...) Expand all
437 safe_browsing_test_->CheckIsDatabaseReady(); 430 safe_browsing_test_->CheckIsDatabaseReady();
438 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, 431 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE,
439 base::Bind(&SafeBrowsingServiceTestHelper::OnWaitForStatusUpdateDone, 432 base::Bind(&SafeBrowsingServiceTestHelper::OnWaitForStatusUpdateDone,
440 this)); 433 this));
441 } 434 }
442 435
443 void OnWaitForStatusUpdateDone() { 436 void OnWaitForStatusUpdateDone() {
444 StopUILoop(); 437 StopUILoop();
445 } 438 }
446 439
447 // Wait for a given period to get safebrowsing status updated. 440 // Update safebrowsing status.
448 void WaitForStatusUpdate(base::TimeDelta wait_time) { 441 void UpdateStatus() {
449 BrowserThread::PostDelayedTask( 442 BrowserThread::PostTask(
450 BrowserThread::IO, 443 BrowserThread::IO,
451 FROM_HERE, 444 FROM_HERE,
452 base::Bind(&SafeBrowsingServiceTestHelper::CheckStatusOnIOThread, 445 base::Bind(&SafeBrowsingServiceTestHelper::CheckStatusOnIOThread,
453 this), 446 this));
454 wait_time);
455 // Will continue after OnWaitForStatusUpdateDone(). 447 // Will continue after OnWaitForStatusUpdateDone().
456 content::RunMessageLoop(); 448 content::RunMessageLoop();
457 } 449 }
458 450
459 void WaitTillServerReady(const char* host, int port) { 451 void WaitTillServerReady(const char* host, int port) {
460 response_status_ = net::URLRequestStatus::FAILED; 452 response_status_ = net::URLRequestStatus::FAILED;
461 GURL url(base::StringPrintf("http://%s:%d%s?test_step=0", 453 GURL url(base::StringPrintf("http://%s:%d%s?test_step=0",
462 host, port, kDBResetPath)); 454 host, port, kDBResetPath));
463 // TODO(lzheng): We should have a way to reliably tell when a server is 455 // TODO(lzheng): We should have a way to reliably tell when a server is
464 // ready so we could get rid of the Sleep and retry loop. 456 // ready so we could get rid of the Sleep and retry loop.
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after
563 SafeBrowsingTestServer test_server(datafile_path); 555 SafeBrowsingTestServer test_server(datafile_path);
564 ASSERT_TRUE(test_server.Start()); 556 ASSERT_TRUE(test_server.Start());
565 557
566 // Make sure the server is running. 558 // Make sure the server is running.
567 safe_browsing_helper->WaitTillServerReady(server_host, server_port); 559 safe_browsing_helper->WaitTillServerReady(server_host, server_port);
568 560
569 // Waits and makes sure safebrowsing update is not happening. 561 // Waits and makes sure safebrowsing update is not happening.
570 // The wait will stop once OnWaitForStatusUpdateDone in 562 // The wait will stop once OnWaitForStatusUpdateDone in
571 // safe_browsing_helper is called and status from safe_browsing_service_ 563 // safe_browsing_helper is called and status from safe_browsing_service_
572 // is checked. 564 // is checked.
573 safe_browsing_helper->WaitForStatusUpdate(base::TimeDelta()); 565 safe_browsing_helper->UpdateStatus();
574 EXPECT_TRUE(is_database_ready()); 566 EXPECT_TRUE(is_database_ready());
575 EXPECT_FALSE(is_update_scheduled()); 567 EXPECT_FALSE(is_update_scheduled());
576 EXPECT_TRUE(last_update().is_null()); 568 EXPECT_TRUE(last_update().is_null());
577 // Starts updates. After each update, the test will fetch a list of URLs with 569 // Starts updates. After each update, the test will fetch a list of URLs with
578 // expected results to verify with safebrowsing service. If there is no error, 570 // expected results to verify with safebrowsing service. If there is no error,
579 // the test moves on to the next step to get more update chunks. 571 // the test moves on to the next step to get more update chunks.
580 // This repeats till there is no update data. 572 // This repeats till there is no update data.
581 for (int step = 1;; step++) { 573 for (int step = 1;; step++) {
582 // Every step should be a fresh start. 574 // Every step should be a fresh start.
583 SCOPED_TRACE(base::StringPrintf("step=%d", step)); 575 SCOPED_TRACE(base::StringPrintf("step=%d", step));
584 EXPECT_TRUE(is_database_ready()); 576 EXPECT_TRUE(is_database_ready());
585 EXPECT_FALSE(is_update_scheduled()); 577 EXPECT_FALSE(is_update_scheduled());
586 578
587 // Starts safebrowsing update on IO thread. Waits till scheduled 579 // Starts safebrowsing update on IO thread. Waits till scheduled
588 // update finishes. Stops waiting after kMaxWaitSecPerStep if the update 580 // update finishes.
589 // could not finish.
590 base::Time now = base::Time::Now(); 581 base::Time now = base::Time::Now();
591 SetTestStep(step); 582 SetTestStep(step);
592 safe_browsing_helper->ForceUpdate(); 583 ForceUpdate();
593 584
594 // TODO(mattm): use NOTIFICATION_SAFE_BROWSING_UPDATE_COMPLETE instead. 585 safe_browsing_helper->UpdateStatus();
595 do { 586 EXPECT_TRUE(is_database_ready());
596 // Periodically pull the status. 587 EXPECT_FALSE(is_update_scheduled());
597 safe_browsing_helper->WaitForStatusUpdate( 588 EXPECT_FALSE(last_update().is_null());
598 TestTimeouts::tiny_timeout());
599 } while (is_update_scheduled() || !is_database_ready());
600
601
602 if (last_update() < now) { 589 if (last_update() < now) {
603 // This means no data available anymore. 590 // This means no data available anymore.
604 break; 591 break;
605 } 592 }
606 593
607 // Fetches URLs to verify and waits till server responses with data. 594 // Fetches URLs to verify and waits till server responses with data.
608 EXPECT_EQ(net::URLRequestStatus::SUCCESS, 595 EXPECT_EQ(net::URLRequestStatus::SUCCESS,
609 safe_browsing_helper->FetchUrlsToVerify(server_host, 596 safe_browsing_helper->FetchUrlsToVerify(server_host,
610 server_port, 597 server_port,
611 step)); 598 step));
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
645 } 632 }
646 633
647 // Verifies with server if test is done and waits till server responses. 634 // Verifies with server if test is done and waits till server responses.
648 EXPECT_EQ(net::URLRequestStatus::SUCCESS, 635 EXPECT_EQ(net::URLRequestStatus::SUCCESS,
649 safe_browsing_helper->VerifyTestComplete(server_host, 636 safe_browsing_helper->VerifyTestComplete(server_host,
650 server_port, 637 server_port,
651 last_step)); 638 last_step));
652 EXPECT_EQ("yes", safe_browsing_helper->response_data()); 639 EXPECT_EQ("yes", safe_browsing_helper->response_data());
653 test_server.Stop(); 640 test_server.Stop();
654 } 641 }
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698