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 aed6afdb35a659f74b8c417035588c379607eaa1..43ca48a485603f60de4997313c1db4a1384b20d6 100644 |
--- a/chrome/browser/signin/dice_response_handler_unittest.cc |
+++ b/chrome/browser/signin/dice_response_handler_unittest.cc |
@@ -100,7 +100,7 @@ TEST_F(DiceResponseHandlerTest, Signin) { |
token_service_.RefreshTokenIsAvailable(dice_params.obfuscated_gaia_id)); |
dice_response_handler_.ProcessDiceHeader(dice_params); |
// Check that a GaiaAuthFetcher has been created. |
- ASSERT_TRUE(signin_client_.consumer_); |
+ ASSERT_THAT(signin_client_.consumer_, testing::NotNull()); |
// Simulate GaiaAuthFetcher success. |
signin_client_.consumer_->OnClientOAuthSuccess( |
GaiaAuthConsumer::ClientOAuthResult("refresh_token", "access_token", 10)); |
@@ -109,6 +109,63 @@ TEST_F(DiceResponseHandlerTest, Signin) { |
token_service_.RefreshTokenIsAvailable(dice_params.obfuscated_gaia_id)); |
} |
+// Checks that a second token for the same account is not requested when a |
+// request is already in flight. |
+TEST_F(DiceResponseHandlerTest, SigninRepeatedWithSameAccount) { |
+ 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. |
+ GaiaAuthConsumer* consumer = signin_client_.consumer_; |
+ ASSERT_THAT(consumer, testing::NotNull()); |
+ // Start a second request for the same account. |
+ signin_client_.consumer_ = nullptr; |
+ dice_response_handler_.ProcessDiceHeader(dice_params); |
+ // Check that there is no new request. |
+ ASSERT_THAT(signin_client_.consumer_, testing::IsNull()); |
+ // Simulate GaiaAuthFetcher success for the first request. |
+ consumer->OnClientOAuthSuccess( |
+ GaiaAuthConsumer::ClientOAuthResult("refresh_token", "access_token", 10)); |
+ // Check that the token has been inserted in the token service. |
+ EXPECT_TRUE( |
+ token_service_.RefreshTokenIsAvailable(dice_params.obfuscated_gaia_id)); |
+} |
+ |
+// Checks that two SIGNIN requests can happen concurrently. |
+TEST_F(DiceResponseHandlerTest, SigninWithTwoAccounts) { |
+ DiceResponseParams dice_params_1 = MakeDiceParams(DiceAction::SIGNIN); |
+ DiceResponseParams dice_params_2 = MakeDiceParams(DiceAction::SIGNIN); |
+ dice_params_2.email = "other_email"; |
+ dice_params_2.obfuscated_gaia_id = "other_gaia_id"; |
+ ASSERT_FALSE( |
+ token_service_.RefreshTokenIsAvailable(dice_params_1.obfuscated_gaia_id)); |
+ ASSERT_FALSE( |
+ token_service_.RefreshTokenIsAvailable(dice_params_2.obfuscated_gaia_id)); |
+ // Start first request. |
+ dice_response_handler_.ProcessDiceHeader(dice_params_1); |
+ // Check that a GaiaAuthFetcher has been created. |
+ GaiaAuthConsumer* consumer_1 = signin_client_.consumer_; |
+ ASSERT_THAT(consumer_1, testing::NotNull()); |
+ // Start second request. |
+ signin_client_.consumer_ = nullptr; |
+ dice_response_handler_.ProcessDiceHeader(dice_params_2); |
+ GaiaAuthConsumer* consumer_2 = signin_client_.consumer_; |
+ ASSERT_THAT(consumer_2, testing::NotNull()); |
+ // Simulate GaiaAuthFetcher success for the first request. |
+ consumer_1->OnClientOAuthSuccess( |
+ GaiaAuthConsumer::ClientOAuthResult("refresh_token", "access_token", 10)); |
+ // Check that the token has been inserted in the token service. |
+ EXPECT_TRUE( |
+ token_service_.RefreshTokenIsAvailable(dice_params_1.obfuscated_gaia_id)); |
+ // Simulate GaiaAuthFetcher success for the second request. |
+ consumer_2->OnClientOAuthSuccess( |
+ GaiaAuthConsumer::ClientOAuthResult("refresh_token", "access_token", 10)); |
+ // Check that the token has been inserted in the token service. |
+ EXPECT_TRUE( |
+ token_service_.RefreshTokenIsAvailable(dice_params_2.obfuscated_gaia_id)); |
+} |
+ |
// Tests that the DiceResponseHandler is created for a normal profile but not |
// for an incognito profile. |
TEST(DiceResponseHandlerFactoryTest, NotInIncognito) { |