Index: chrome/browser/safe_browsing/client_side_detection_host_unittest.cc |
diff --git a/chrome/browser/safe_browsing/client_side_detection_host_unittest.cc b/chrome/browser/safe_browsing/client_side_detection_host_unittest.cc |
index 57ad5682cb9e272153dcdb5b8439d27c206c52f9..5bbae8bd1d29afc9f2036906b51b04bf8c338005 100644 |
--- a/chrome/browser/safe_browsing/client_side_detection_host_unittest.cc |
+++ b/chrome/browser/safe_browsing/client_side_detection_host_unittest.cc |
@@ -5,6 +5,7 @@ |
#include "base/files/file_path.h" |
#include "base/memory/ref_counted.h" |
#include "base/memory/scoped_ptr.h" |
+#include "base/run_loop.h" |
#include "base/stringprintf.h" |
#include "base/synchronization/waitable_event.h" |
#include "chrome/browser/safe_browsing/browser_feature_extractor.h" |
@@ -172,13 +173,6 @@ class MockBrowserFeatureExtractor : public BrowserFeatureExtractor { |
ClientMalwareRequest*)); |
}; |
-// Helper function which quits the UI message loop from the IO message loop. |
-void QuitUIMessageLoopFromIO() { |
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
- BrowserThread::PostTask(BrowserThread::UI, |
- FROM_HERE, |
- base::MessageLoop::QuitClosure()); |
-} |
} // namespace |
class ClientSideDetectionHostTest : public ChromeRenderViewHostTestHarness { |
@@ -192,16 +186,6 @@ class ClientSideDetectionHostTest : public ChromeRenderViewHostTestHarness { |
mock_profile_ = new NiceMock<MockTestingProfile>(); |
browser_context_.reset(mock_profile_); |
- ui_thread_.reset(new content::TestBrowserThread(BrowserThread::UI, |
- &message_loop_)); |
- file_user_blocking_thread_.reset( |
- new content::TestBrowserThread(BrowserThread::FILE_USER_BLOCKING, |
- &message_loop_)); |
- // Note: we're starting a real IO thread to make sure our DCHECKs that |
- // verify which thread is running are actually tested. |
- io_thread_.reset(new content::TestBrowserThread(BrowserThread::IO)); |
- ASSERT_TRUE(io_thread_->Start()); |
- |
ChromeRenderViewHostTestHarness::SetUp(); |
// Inject service classes. |
@@ -226,11 +210,6 @@ class ClientSideDetectionHostTest : public ChromeRenderViewHostTestHarness { |
csd_host_->malware_report_enabled_ = true; |
} |
- static void RunAllPendingOnIO(base::WaitableEvent* event) { |
- base::MessageLoop::current()->RunUntilIdle(); |
- event->Signal(); |
- } |
- |
virtual void TearDown() { |
// Delete the host object on the UI thread and release the |
// SafeBrowsingService. |
@@ -238,18 +217,8 @@ class ClientSideDetectionHostTest : public ChromeRenderViewHostTestHarness { |
csd_host_.release()); |
database_manager_ = NULL; |
ui_manager_ = NULL; |
- message_loop_.RunUntilIdle(); |
+ base::RunLoop().RunUntilIdle(); |
ChromeRenderViewHostTestHarness::TearDown(); |
- |
- // Let the tasks on the IO thread run to avoid memory leaks. |
- base::WaitableEvent done(false, false); |
- BrowserThread::PostTask(BrowserThread::IO, FROM_HERE, |
- base::Bind(RunAllPendingOnIO, &done)); |
- done.Wait(); |
- io_thread_.reset(); |
- message_loop_.RunUntilIdle(); |
- file_user_blocking_thread_.reset(); |
- ui_thread_.reset(); |
} |
void OnPhishingDetectionDone(const std::string& verdict_str) { |
@@ -264,16 +233,6 @@ class ClientSideDetectionHostTest : public ChromeRenderViewHostTestHarness { |
return csd_host_->browse_info_.get(); |
} |
- void FlushIOMessageLoop() { |
- // If there was a message posted on the IO thread to display the |
- // interstitial page we know that it would have been posted before |
- // we put the quit message there. |
- BrowserThread::PostTask(BrowserThread::IO, |
- FROM_HERE, |
- base::Bind(&QuitUIMessageLoopFromIO)); |
- base::MessageLoop::current()->Run(); |
- } |
- |
void ExpectPreClassificationChecks(const GURL& url, |
const bool* is_private, |
const bool* is_incognito, |
@@ -308,10 +267,8 @@ class ClientSideDetectionHostTest : public ChromeRenderViewHostTestHarness { |
} |
void WaitAndCheckPreClassificationChecks() { |
- // Wait for CheckCsdWhitelist to be called if at all. |
- FlushIOMessageLoop(); |
- // Checks for CheckCache() to be called if at all. |
- base::MessageLoop::current()->RunUntilIdle(); |
+ // Wait for CheckCsdWhitelist and CheckCache() to be called if at all. |
+ base::RunLoop().RunUntilIdle(); |
EXPECT_TRUE(Mock::VerifyAndClear(csd_service_.get())); |
EXPECT_TRUE(Mock::VerifyAndClear(ui_manager_.get())); |
EXPECT_TRUE(Mock::VerifyAndClear(database_manager_.get())); |
@@ -360,11 +317,6 @@ class ClientSideDetectionHostTest : public ChromeRenderViewHostTestHarness { |
scoped_refptr<StrictMock<MockSafeBrowsingUIManager> > ui_manager_; |
scoped_refptr<StrictMock<MockSafeBrowsingDatabaseManager> > database_manager_; |
MockTestingProfile* mock_profile_; // We don't own this object |
- |
- private: |
- scoped_ptr<content::TestBrowserThread> ui_thread_; |
- scoped_ptr<content::TestBrowserThread> file_user_blocking_thread_; |
- scoped_ptr<content::TestBrowserThread> io_thread_; |
}; |
@@ -408,7 +360,7 @@ TEST_F(ClientSideDetectionHostTest, OnPhishingDetectionDoneNotPhishing) { |
// Make sure DoDisplayBlockingPage is not going to be called. |
EXPECT_CALL(*ui_manager_.get(), DoDisplayBlockingPage(_)).Times(0); |
cb.Run(GURL(verdict.url()), false); |
- base::MessageLoop::current()->RunUntilIdle(); |
+ base::RunLoop().RunUntilIdle(); |
EXPECT_TRUE(Mock::VerifyAndClear(ui_manager_.get())); |
} |
@@ -440,7 +392,7 @@ TEST_F(ClientSideDetectionHostTest, OnPhishingDetectionDoneDisabled) { |
// Make sure DoDisplayBlockingPage is not going to be called. |
EXPECT_CALL(*ui_manager_.get(), DoDisplayBlockingPage(_)).Times(0); |
cb.Run(GURL(verdict.url()), false); |
- base::MessageLoop::current()->RunUntilIdle(); |
+ base::RunLoop().RunUntilIdle(); |
EXPECT_TRUE(Mock::VerifyAndClear(ui_manager_.get())); |
} |
@@ -475,7 +427,7 @@ TEST_F(ClientSideDetectionHostTest, OnPhishingDetectionDoneShowInterstitial) { |
.WillOnce(SaveArg<0>(&resource)); |
cb.Run(phishing_url, true); |
- base::MessageLoop::current()->RunUntilIdle(); |
+ base::RunLoop().RunUntilIdle(); |
EXPECT_TRUE(Mock::VerifyAndClear(ui_manager_.get())); |
EXPECT_EQ(phishing_url, resource.url); |
EXPECT_EQ(phishing_url, resource.original_url); |
@@ -492,10 +444,6 @@ TEST_F(ClientSideDetectionHostTest, OnPhishingDetectionDoneShowInterstitial) { |
FROM_HERE, |
base::Bind(&MockSafeBrowsingUIManager::InvokeOnBlockingPageComplete, |
ui_manager_, resource.callback)); |
- // Since the CsdClient object will be deleted on the UI thread I need |
- // to run the UI message loop. Post a task to stop the UI message loop |
- // after the client object destructor is called. |
- FlushIOMessageLoop(); |
} |
TEST_F(ClientSideDetectionHostTest, OnPhishingDetectionDoneMultiplePings) { |
@@ -566,7 +514,7 @@ TEST_F(ClientSideDetectionHostTest, OnPhishingDetectionDoneMultiplePings) { |
cb.Run(phishing_url, true); // Should have no effect. |
cb_other.Run(other_phishing_url, true); // Should show interstitial. |
- base::MessageLoop::current()->RunUntilIdle(); |
+ base::RunLoop().RunUntilIdle(); |
EXPECT_TRUE(Mock::VerifyAndClear(ui_manager_.get())); |
EXPECT_EQ(other_phishing_url, resource.url); |
EXPECT_EQ(other_phishing_url, resource.original_url); |
@@ -583,10 +531,6 @@ TEST_F(ClientSideDetectionHostTest, OnPhishingDetectionDoneMultiplePings) { |
FROM_HERE, |
base::Bind(&MockSafeBrowsingUIManager::InvokeOnBlockingPageComplete, |
ui_manager_, resource.callback)); |
- // Since the CsdClient object will be deleted on the UI thread I need |
- // to run the UI message loop. Post a task to stop the UI message loop |
- // after the client object destructor is called. |
- FlushIOMessageLoop(); |
} |
TEST_F(ClientSideDetectionHostTest, |
@@ -956,10 +900,8 @@ TEST_F(ClientSideDetectionHostTest, ShouldClassifyUrl) { |
.WillOnce(SaveArg<0>(&resource)); |
NavigateAndCommit(url); |
- // Wait for CheckCsdWhitelist to be called on the IO thread. |
- FlushIOMessageLoop(); |
- // Wait for CheckCache() to be called on the UI thread. |
- base::MessageLoop::current()->RunUntilIdle(); |
+ // Wait for CheckCsdWhitelist and CheckCache() to be called. |
+ base::RunLoop().RunUntilIdle(); |
// Now we check that all expected functions were indeed called on the two |
// service objects. |
EXPECT_TRUE(Mock::VerifyAndClear(csd_service_.get())); |