Index: chrome/browser/signin/dice_response_handler_unittest.cc |
diff --git a/chrome/browser/signin/dice_response_handler_unittest.cc b/chrome/browser/signin/dice_response_handler_unittest.cc |
index 43ca48a485603f60de4997313c1db4a1384b20d6..9b1a806ac391d437a4c9d565d5c957adfe8887c9 100644 |
--- a/chrome/browser/signin/dice_response_handler_unittest.cc |
+++ b/chrome/browser/signin/dice_response_handler_unittest.cc |
@@ -7,7 +7,9 @@ |
#include "base/command_line.h" |
#include "base/memory/ref_counted.h" |
#include "base/message_loop/message_loop.h" |
-#include "base/test/test_simple_task_runner.h" |
+#include "base/test/test_mock_time_task_runner.h" |
+#include "base/threading/thread_task_runner_handle.h" |
+#include "base/time/time.h" |
#include "chrome/test/base/testing_profile.h" |
#include "components/signin/core/browser/account_tracker_service.h" |
#include "components/signin/core/browser/profile_oauth2_token_service.h" |
@@ -55,7 +57,8 @@ class DiceTestSigninClient : public TestSigninClient, public GaiaAuthConsumer { |
class DiceResponseHandlerTest : public testing::Test { |
protected: |
DiceResponseHandlerTest() |
- : task_runner_(new base::TestSimpleTaskRunner()), |
+ : loop_(base::MessageLoop::TYPE_IO), // URLRequestContext requires IO. |
+ task_runner_(new base::TestMockTimeTaskRunner()), |
request_context_getter_( |
new net::TestURLRequestContextGetter(task_runner_)), |
signin_client_(&pref_service_), |
@@ -64,6 +67,8 @@ class DiceResponseHandlerTest : public testing::Test { |
dice_response_handler_(&signin_client_, |
&token_service_, |
&account_tracker_service_) { |
+ loop_.SetTaskRunner(task_runner_); |
+ DCHECK_EQ(task_runner_, base::ThreadTaskRunnerHandle::Get()); |
switches::EnableAccountConsistencyDiceForTesting( |
base::CommandLine::ForCurrentProcess()); |
signin_client_.SetURLRequestContext(request_context_getter_.get()); |
@@ -84,7 +89,7 @@ class DiceResponseHandlerTest : public testing::Test { |
} |
base::MessageLoop loop_; |
- scoped_refptr<base::TestSimpleTaskRunner> task_runner_; |
+ scoped_refptr<base::TestMockTimeTaskRunner> task_runner_; |
scoped_refptr<net::TestURLRequestContextGetter> request_context_getter_; |
sync_preferences::TestingPrefServiceSyncable pref_service_; |
DiceTestSigninClient signin_client_; |
@@ -166,6 +171,22 @@ TEST_F(DiceResponseHandlerTest, SigninWithTwoAccounts) { |
token_service_.RefreshTokenIsAvailable(dice_params_2.obfuscated_gaia_id)); |
} |
+TEST_F(DiceResponseHandlerTest, Timeout) { |
+ DiceResponseParams dice_params = MakeDiceParams(DiceAction::SIGNIN); |
+ ASSERT_FALSE( |
+ token_service_.RefreshTokenIsAvailable(dice_params.obfuscated_gaia_id)); |
+ dice_response_handler_.ProcessDiceHeader(dice_params); |
+ // Check that a GaiaAuthFetcher has been created. |
+ ASSERT_THAT(signin_client_.consumer_, testing::NotNull()); |
+ EXPECT_EQ( |
+ 1u, dice_response_handler_.GetPendingDiceTokenFetchersCountForTesting()); |
+ // Force a timeout. |
+ task_runner_->FastForwardBy( |
+ base::TimeDelta::FromSeconds(kDiceTokenFetchTimeoutSeconds + 1)); |
+ EXPECT_EQ( |
+ 0u, dice_response_handler_.GetPendingDiceTokenFetchersCountForTesting()); |
+} |
+ |
// Tests that the DiceResponseHandler is created for a normal profile but not |
// for an incognito profile. |
TEST(DiceResponseHandlerFactoryTest, NotInIncognito) { |