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

Unified Diff: chrome/browser/safe_browsing/protocol_manager_unittest.cc

Issue 2487343005: Fix Thread::SetMessageLoop(nullptr). (Closed)
Patch Set: Merge up to r434093 Created 4 years, 1 month 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/safe_browsing/protocol_manager.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/safe_browsing/protocol_manager_unittest.cc
diff --git a/chrome/browser/safe_browsing/protocol_manager_unittest.cc b/chrome/browser/safe_browsing/protocol_manager_unittest.cc
index b9ebc90b7c8eb7d82604958d3fcdae6ff4446655..8e47595f659f24ad608a9e6e4f2fd4bbb432de1e 100644
--- a/chrome/browser/safe_browsing/protocol_manager_unittest.cc
+++ b/chrome/browser/safe_browsing/protocol_manager_unittest.cc
@@ -9,14 +9,14 @@
#include "base/message_loop/message_loop.h"
#include "base/strings/stringprintf.h"
-#include "base/test/test_simple_task_runner.h"
+#include "base/test/scoped_mock_time_message_loop_task_runner.h"
#include "base/threading/thread_task_runner_handle.h"
#include "base/time/time.h"
#include "chrome/browser/safe_browsing/chunk.pb.h"
#include "components/safe_browsing_db/safe_browsing_prefs.h"
#include "components/safe_browsing_db/safebrowsing.pb.h"
#include "components/safe_browsing_db/util.h"
-#include "content/public/test/test_browser_thread.h"
+#include "content/public/test/test_browser_thread_bundle.h"
#include "google_apis/google_api_keys.h"
#include "net/base/escape.h"
#include "net/base/load_flags.h"
@@ -74,9 +74,8 @@ namespace safe_browsing {
class SafeBrowsingProtocolManagerTest : public testing::Test {
protected:
SafeBrowsingProtocolManagerTest()
- : runner_(new base::TestSimpleTaskRunner),
- runner_handler_(runner_),
- io_thread_(content::BrowserThread::IO, base::MessageLoop::current()) {}
+ : thread_bundle_(content::TestBrowserThreadBundle::Options::IO_MAINLOOP) {
+ }
~SafeBrowsingProtocolManagerTest() override {}
@@ -130,9 +129,13 @@ class SafeBrowsingProtocolManagerTest : public testing::Test {
EXPECT_EQ(GURL(expected_url), url_fetcher->GetOriginalURL());
}
- scoped_refptr<base::TestSimpleTaskRunner> runner_;
- base::ThreadTaskRunnerHandle runner_handler_;
- content::TestBrowserThread io_thread_;
+ // Fakes BrowserThreads and the main MessageLoop.
+ content::TestBrowserThreadBundle thread_bundle_;
+
+ // Replaces the main MessageLoop's TaskRunner with a TaskRunner on which time
+ // is mocked to allow testing of things bound to timers below.
+ base::ScopedMockTimeMessageLoopTaskRunner mock_time_task_runner_;
+
std::string key_param_;
};
@@ -424,7 +427,7 @@ TEST_F(SafeBrowsingProtocolManagerTest, ProblemAccessingDatabase) {
CreateProtocolManager(&test_delegate));
pm->ForceScheduleNextUpdate(TimeDelta());
- runner_->RunPendingTasks();
+ mock_time_task_runner_->RunUntilIdle();
EXPECT_TRUE(pm->IsUpdateScheduled());
}
@@ -459,7 +462,7 @@ TEST_F(SafeBrowsingProtocolManagerTest, ExistingDatabase) {
// Kick off initialization. This returns chunks from the DB synchronously.
pm->ForceScheduleNextUpdate(TimeDelta());
- runner_->RunPendingTasks();
+ mock_time_task_runner_->RunUntilIdle();
// We should have an URLFetcher at this point in time.
net::TestURLFetcher* url_fetcher = url_fetcher_factory.GetFetcherByID(0);
@@ -499,7 +502,7 @@ TEST_F(SafeBrowsingProtocolManagerTest, UpdateResponseBadBodyBackupSuccess) {
// Kick off initialization. This returns chunks from the DB synchronously.
pm->ForceScheduleNextUpdate(TimeDelta());
- runner_->RunPendingTasks();
+ mock_time_task_runner_->RunUntilIdle();
// We should have an URLFetcher at this point in time.
net::TestURLFetcher* url_fetcher = url_fetcher_factory.GetFetcherByID(0);
@@ -543,7 +546,7 @@ TEST_F(SafeBrowsingProtocolManagerTest, UpdateResponseHttpErrorBackupError) {
// Kick off initialization. This returns chunks from the DB synchronously.
pm->ForceScheduleNextUpdate(TimeDelta());
- runner_->RunPendingTasks();
+ mock_time_task_runner_->RunUntilIdle();
// We should have an URLFetcher at this point in time.
net::TestURLFetcher* url_fetcher = url_fetcher_factory.GetFetcherByID(0);
@@ -587,7 +590,7 @@ TEST_F(SafeBrowsingProtocolManagerTest, UpdateResponseHttpErrorBackupSuccess) {
// Kick off initialization. This returns chunks from the DB synchronously.
pm->ForceScheduleNextUpdate(TimeDelta());
- runner_->RunPendingTasks();
+ mock_time_task_runner_->RunUntilIdle();
// We should have an URLFetcher at this point in time.
net::TestURLFetcher* url_fetcher = url_fetcher_factory.GetFetcherByID(0);
@@ -631,7 +634,7 @@ TEST_F(SafeBrowsingProtocolManagerTest, UpdateResponseHttpErrorBackupTimeout) {
// Kick off initialization. This returns chunks from the DB synchronously.
pm->ForceScheduleNextUpdate(TimeDelta());
- runner_->RunPendingTasks();
+ mock_time_task_runner_->RunUntilIdle();
// We should have an URLFetcher at this point in time.
net::TestURLFetcher* url_fetcher = url_fetcher_factory.GetFetcherByID(0);
@@ -648,15 +651,21 @@ TEST_F(SafeBrowsingProtocolManagerTest, UpdateResponseHttpErrorBackupTimeout) {
url_fetcher_factory.GetFetcherByID(1);
ValidateUpdateFetcherRequest(backup_url_fetcher, kBackupHttpUrlPrefix, "");
- // Either one or two calls to RunPendingTasks are needed here. The first run
- // of RunPendingTasks will run the canceled timeout task associated with
- // the first Update request. Depending on timing, this will either directly
- // call the timeout task from the backup request, or schedule another task
- // to run that in the future.
- // TODO(cbentzel): Less fragile approach.
- runner_->RunPendingTasks();
- if (!pm->IsUpdateScheduled())
- runner_->RunPendingTasks();
+ // Confirm that no update is scheduled (still waiting on a response to the
+ // backup request).
+ EXPECT_FALSE(pm->IsUpdateScheduled());
+
+ // Force the timeout to fire. Need to fast forward by twice the timeout amount
+ // as issuing the backup request above restarted the timeout timer but that
+ // Timer's clock isn't mocked and its impl is such that it will re-use its
+ // initial delayed task and re-post by the remainder of the timeout when it
+ // fires (which is pretty much the full timeout in real time since we mock the
+ // wait). A cleaner solution would be to pass
+ // |mock_time_task_runner_->GetMockTickClock()| to the
+ // SafeBrowsingProtocolManager's Timers but such hooks were deemed overkill
+ // per this being the only use case at this point.
+ mock_time_task_runner_->FastForwardBy(
+ SafeBrowsingProtocolManager::GetUpdateTimeoutForTesting() * 2);
EXPECT_TRUE(pm->IsUpdateScheduled());
}
@@ -679,7 +688,7 @@ TEST_F(SafeBrowsingProtocolManagerTest,
// Kick off initialization. This returns chunks from the DB synchronously.
pm->ForceScheduleNextUpdate(TimeDelta());
- runner_->RunPendingTasks();
+ mock_time_task_runner_->RunUntilIdle();
// We should have an URLFetcher at this point in time.
net::TestURLFetcher* url_fetcher = url_fetcher_factory.GetFetcherByID(0);
@@ -723,7 +732,7 @@ TEST_F(SafeBrowsingProtocolManagerTest,
// Kick off initialization. This returns chunks from the DB synchronously.
pm->ForceScheduleNextUpdate(TimeDelta());
- runner_->RunPendingTasks();
+ mock_time_task_runner_->RunUntilIdle();
// We should have an URLFetcher at this point in time.
net::TestURLFetcher* url_fetcher = url_fetcher_factory.GetFetcherByID(0);
@@ -766,7 +775,7 @@ TEST_F(SafeBrowsingProtocolManagerTest,
// Kick off initialization. This returns chunks from the DB synchronously.
pm->ForceScheduleNextUpdate(TimeDelta());
- runner_->RunPendingTasks();
+ mock_time_task_runner_->RunUntilIdle();
// We should have an URLFetcher at this point in time.
net::TestURLFetcher* url_fetcher = url_fetcher_factory.GetFetcherByID(0);
@@ -811,7 +820,7 @@ TEST_F(SafeBrowsingProtocolManagerTest,
// Kick off initialization. This returns chunks from the DB synchronously.
pm->ForceScheduleNextUpdate(TimeDelta());
- runner_->RunPendingTasks();
+ mock_time_task_runner_->RunUntilIdle();
// We should have an URLFetcher at this point in time.
net::TestURLFetcher* url_fetcher = url_fetcher_factory.GetFetcherByID(0);
@@ -854,15 +863,15 @@ TEST_F(SafeBrowsingProtocolManagerTest, UpdateResponseTimeoutBackupSuccess) {
// Kick off initialization. This returns chunks from the DB synchronously.
pm->ForceScheduleNextUpdate(TimeDelta());
- runner_->RunPendingTasks();
+ mock_time_task_runner_->RunUntilIdle();
// We should have an URLFetcher at this point in time.
net::TestURLFetcher* url_fetcher = url_fetcher_factory.GetFetcherByID(0);
ValidateUpdateFetcherRequest(url_fetcher);
- // The first time RunPendingTasks is called above, the update timeout timer is
- // not handled. This call of RunPendingTasks will handle the update.
- runner_->RunPendingTasks();
+ // Force the timeout to fire.
+ mock_time_task_runner_->FastForwardBy(
+ SafeBrowsingProtocolManager::GetUpdateTimeoutForTesting());
// There should be a backup URLFetcher now.
net::TestURLFetcher* backup_url_fetcher =
@@ -896,7 +905,7 @@ TEST_F(SafeBrowsingProtocolManagerTest, UpdateResponseReset) {
// Kick off initialization. This returns chunks from the DB synchronously.
pm->ForceScheduleNextUpdate(TimeDelta());
- runner_->RunPendingTasks();
+ mock_time_task_runner_->RunUntilIdle();
net::TestURLFetcher* url_fetcher = url_fetcher_factory.GetFetcherByID(0);
ValidateUpdateFetcherRequest(url_fetcher);
@@ -928,7 +937,7 @@ TEST_F(SafeBrowsingProtocolManagerTest, EmptyRedirectResponse) {
// Kick off initialization. This returns chunks from the DB synchronously.
pm->ForceScheduleNextUpdate(TimeDelta());
- runner_->RunPendingTasks();
+ mock_time_task_runner_->RunUntilIdle();
// The update response contains a single redirect command.
net::TestURLFetcher* url_fetcher = url_fetcher_factory.GetFetcherByID(0);
@@ -972,7 +981,7 @@ TEST_F(SafeBrowsingProtocolManagerTest, InvalidRedirectResponse) {
// Kick off initialization. This returns chunks from the DB synchronously.
pm->ForceScheduleNextUpdate(TimeDelta());
- runner_->RunPendingTasks();
+ mock_time_task_runner_->RunUntilIdle();
// The update response contains a single redirect command.
net::TestURLFetcher* url_fetcher = url_fetcher_factory.GetFetcherByID(0);
@@ -1018,7 +1027,7 @@ TEST_F(SafeBrowsingProtocolManagerTest, SingleRedirectResponseWithChunks) {
// Kick off initialization. This returns chunks from the DB synchronously.
pm->ForceScheduleNextUpdate(TimeDelta());
- runner_->RunPendingTasks();
+ mock_time_task_runner_->RunUntilIdle();
// The update response contains a single redirect command.
net::TestURLFetcher* url_fetcher = url_fetcher_factory.GetFetcherByID(0);
@@ -1044,7 +1053,7 @@ TEST_F(SafeBrowsingProtocolManagerTest, SingleRedirectResponseWithChunks) {
EXPECT_FALSE(pm->IsUpdateScheduled());
// The AddChunksCallback needs to be invoked.
- runner_->RunPendingTasks();
+ mock_time_task_runner_->RunUntilIdle();
EXPECT_TRUE(pm->IsUpdateScheduled());
}
@@ -1069,7 +1078,7 @@ TEST_F(SafeBrowsingProtocolManagerTest, MultipleRedirectResponsesWithChunks) {
// Kick off initialization. This returns chunks from the DB synchronously.
pm->ForceScheduleNextUpdate(TimeDelta());
- runner_->RunPendingTasks();
+ mock_time_task_runner_->RunUntilIdle();
// The update response contains multiple redirect commands.
net::TestURLFetcher* url_fetcher = url_fetcher_factory.GetFetcherByID(0);
@@ -1095,7 +1104,7 @@ TEST_F(SafeBrowsingProtocolManagerTest, MultipleRedirectResponsesWithChunks) {
first_chunk_url_fetcher);
// Invoke the AddChunksCallback to trigger the second request.
- runner_->RunPendingTasks();
+ mock_time_task_runner_->RunUntilIdle();
EXPECT_FALSE(pm->IsUpdateScheduled());
@@ -1113,7 +1122,7 @@ TEST_F(SafeBrowsingProtocolManagerTest, MultipleRedirectResponsesWithChunks) {
EXPECT_FALSE(pm->IsUpdateScheduled());
// Invoke the AddChunksCallback to finish the update.
- runner_->RunPendingTasks();
+ mock_time_task_runner_->RunUntilIdle();
EXPECT_TRUE(pm->IsUpdateScheduled());
}
« no previous file with comments | « chrome/browser/safe_browsing/protocol_manager.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698