Index: chrome/browser/signin/signin_manager_unittest.cc |
diff --git a/chrome/browser/signin/signin_manager_unittest.cc b/chrome/browser/signin/signin_manager_unittest.cc |
index 44d2f11f5024426d22758ca3bac2c5bcd6520aba..750333eda6facda6a64cdead2ade09a4b8368647 100644 |
--- a/chrome/browser/signin/signin_manager_unittest.cc |
+++ b/chrome/browser/signin/signin_manager_unittest.cc |
@@ -29,6 +29,7 @@ |
#include "chrome/common/url_constants.h" |
#include "chrome/test/base/testing_browser_process.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" |
#include "components/signin/core/browser/test_signin_client.h" |
#include "content/public/browser/child_process_security_policy.h" |
@@ -115,7 +116,10 @@ class SigninManagerTest : public testing::Test { |
FakeAccountTrackerService::Build); |
profile_ = builder.Build(); |
- signin_client()->SetURLRequestContext(profile_->GetRequestContext()); |
+ TestSigninClient* client = |
+ static_cast<TestSigninClient*>( |
+ ChromeSigninClientFactory::GetForProfile(profile())); |
+ client->SetURLRequestContext(profile_->GetRequestContext()); |
} |
void TearDown() override { |
@@ -144,6 +148,17 @@ class SigninManagerTest : public testing::Test { |
ChromeSigninClientFactory::GetInstance()->GetForProfile(profile())); |
} |
+ // Seed the account tracker with information from logged in user. Normally |
+ // this is done by UI code before calling SigninManager. Returns the string |
+ // to use as the account_id. |
+ std::string AddToAccountTracker(const std::string& gaia_id, |
+ const std::string& email) { |
+ AccountTrackerService* service = |
+ AccountTrackerServiceFactory::GetForProfile(profile()); |
+ service->SeedAccountInfo(gaia_id, email); |
+ return service->PickAccountIdForAccount(gaia_id, email); |
+ } |
+ |
// Sets up the signin manager as a service if other code will try to get it as |
// a PKS. |
void SetUpSigninManagerAsService() { |
@@ -179,11 +194,13 @@ class SigninManagerTest : public testing::Test { |
void ExpectSignInWithRefreshTokenSuccess() { |
EXPECT_TRUE(manager_->IsAuthenticated()); |
+ EXPECT_FALSE(manager_->GetAuthenticatedAccountId().empty()); |
+ EXPECT_FALSE(manager_->GetAuthenticatedUsername().empty()); |
ProfileOAuth2TokenService* token_service = |
ProfileOAuth2TokenServiceFactory::GetForProfile(profile()); |
EXPECT_TRUE(token_service->RefreshTokenIsAvailable( |
- manager_->GetAuthenticatedUsername())); |
+ manager_->GetAuthenticatedAccountId())); |
// Should go into token service and stop. |
EXPECT_EQ(1, test_observer_.num_successful_signins_); |
@@ -210,8 +227,10 @@ TEST_F(SigninManagerTest, SignInWithRefreshToken) { |
SetUpSigninManagerAsService(); |
EXPECT_FALSE(manager_->IsAuthenticated()); |
+ std::string account_id = AddToAccountTracker("gaia_id", "user@gmail.com"); |
manager_->StartSignInWithRefreshToken( |
- "rt1", |
+ "rt", |
+ "gaia_id", |
"user@gmail.com", |
"password", |
SigninManager::OAuthTokenFetchedCallback()); |
@@ -222,7 +241,7 @@ TEST_F(SigninManagerTest, SignInWithRefreshToken) { |
ShutDownManager(); |
CreateNakedSigninManager(); |
manager_->Initialize(NULL); |
- EXPECT_EQ("user@gmail.com", manager_->GetAuthenticatedUsername()); |
+ EXPECT_EQ(account_id, manager_->GetAuthenticatedAccountId()); |
} |
TEST_F(SigninManagerTest, SignInWithRefreshTokenCallbackComplete) { |
@@ -234,14 +253,15 @@ TEST_F(SigninManagerTest, SignInWithRefreshTokenCallbackComplete) { |
base::Bind(&SigninManagerTest::CompleteSigninCallback, |
base::Unretained(this)); |
manager_->StartSignInWithRefreshToken( |
- "rt1", |
+ "rt", |
+ "gaia_id", |
"user@gmail.com", |
"password", |
callback); |
ExpectSignInWithRefreshTokenSuccess(); |
ASSERT_EQ(1U, oauth_tokens_fetched_.size()); |
- EXPECT_EQ(oauth_tokens_fetched_[0], "rt1"); |
+ EXPECT_EQ(oauth_tokens_fetched_[0], "rt"); |
} |
TEST_F(SigninManagerTest, SignInWithRefreshTokenCallsPostSignout) { |
@@ -263,6 +283,7 @@ TEST_F(SigninManagerTest, SignInWithRefreshTokenCallsPostSignout) { |
manager_->StartSignInWithRefreshToken( |
"rt1", |
+ gaia_id, |
email, |
"password", |
SigninManager::OAuthTokenFetchedCallback()); |
@@ -283,24 +304,31 @@ TEST_F(SigninManagerTest, SignInWithRefreshTokenCallsPostSignout) { |
TEST_F(SigninManagerTest, SignOut) { |
SetUpSigninManagerAsService(); |
manager_->StartSignInWithRefreshToken( |
- "rt1", |
+ "rt", |
+ "gaia_id", |
"user@gmail.com", |
"password", |
SigninManager::OAuthTokenFetchedCallback()); |
manager_->SignOut(signin_metrics::SIGNOUT_TEST); |
EXPECT_FALSE(manager_->IsAuthenticated()); |
+ EXPECT_TRUE(manager_->GetAuthenticatedUsername().empty()); |
+ EXPECT_TRUE(manager_->GetAuthenticatedAccountId().empty()); |
// Should not be persisted anymore |
ShutDownManager(); |
CreateNakedSigninManager(); |
manager_->Initialize(NULL); |
EXPECT_FALSE(manager_->IsAuthenticated()); |
+ EXPECT_TRUE(manager_->GetAuthenticatedUsername().empty()); |
+ EXPECT_TRUE(manager_->GetAuthenticatedAccountId().empty()); |
} |
TEST_F(SigninManagerTest, SignOutWhileProhibited) { |
SetUpSigninManagerAsService(); |
EXPECT_FALSE(manager_->IsAuthenticated()); |
+ EXPECT_TRUE(manager_->GetAuthenticatedUsername().empty()); |
+ EXPECT_TRUE(manager_->GetAuthenticatedAccountId().empty()); |
- manager_->SetAuthenticatedUsername("user@gmail.com"); |
+ manager_->SetAuthenticatedAccountInfo("gaia_id", "user@gmail.com"); |
manager_->ProhibitSignout(true); |
manager_->SignOut(signin_metrics::SIGNOUT_TEST); |
EXPECT_TRUE(manager_->IsAuthenticated()); |
@@ -336,47 +364,80 @@ TEST_F(SigninManagerTest, TestAlternateWildcard) { |
} |
TEST_F(SigninManagerTest, ProhibitedAtStartup) { |
- profile()->GetPrefs()->SetString(prefs::kGoogleServicesUsername, |
- "monkey@invalid.com"); |
+ std::string account_id = AddToAccountTracker("gaia_id", "user@gmail.com"); |
+ profile()->GetPrefs()->SetString(prefs::kGoogleServicesAccountId, account_id); |
g_browser_process->local_state()->SetString( |
prefs::kGoogleServicesUsernamePattern, ".*@google.com"); |
CreateNakedSigninManager(); |
manager_->Initialize(g_browser_process->local_state()); |
// Currently signed in user is prohibited by policy, so should be signed out. |
EXPECT_EQ("", manager_->GetAuthenticatedUsername()); |
+ EXPECT_EQ("", manager_->GetAuthenticatedAccountId()); |
} |
TEST_F(SigninManagerTest, ProhibitedAfterStartup) { |
- std::string user("monkey@invalid.com"); |
- profile()->GetPrefs()->SetString(prefs::kGoogleServicesUsername, user); |
+ std::string account_id = AddToAccountTracker("gaia_id", "user@gmail.com"); |
+ profile()->GetPrefs()->SetString(prefs::kGoogleServicesAccountId, account_id); |
CreateNakedSigninManager(); |
manager_->Initialize(g_browser_process->local_state()); |
- EXPECT_EQ(user, manager_->GetAuthenticatedUsername()); |
+ EXPECT_EQ("user@gmail.com", manager_->GetAuthenticatedUsername()); |
+ EXPECT_EQ(account_id, manager_->GetAuthenticatedAccountId()); |
// Update the profile - user should be signed out. |
g_browser_process->local_state()->SetString( |
prefs::kGoogleServicesUsernamePattern, ".*@google.com"); |
EXPECT_EQ("", manager_->GetAuthenticatedUsername()); |
+ EXPECT_EQ("", manager_->GetAuthenticatedAccountId()); |
} |
TEST_F(SigninManagerTest, ExternalSignIn) { |
CreateNakedSigninManager(); |
manager_->Initialize(g_browser_process->local_state()); |
- EXPECT_EQ("", |
- profile()->GetPrefs()->GetString(prefs::kGoogleServicesUsername)); |
EXPECT_EQ("", manager_->GetAuthenticatedUsername()); |
+ EXPECT_EQ("", manager_->GetAuthenticatedAccountId()); |
EXPECT_EQ(0, test_observer_.num_successful_signins_); |
- manager_->OnExternalSigninCompleted("external@example.com"); |
+ std::string account_id = AddToAccountTracker("gaia_id", "user@gmail.com"); |
+ manager_->OnExternalSigninCompleted(account_id); |
EXPECT_EQ(1, test_observer_.num_successful_signins_); |
EXPECT_EQ(0, test_observer_.num_failed_signins_); |
- EXPECT_EQ("external@example.com", |
- profile()->GetPrefs()->GetString(prefs::kGoogleServicesUsername)); |
- EXPECT_EQ("external@example.com", manager_->GetAuthenticatedUsername()); |
+ EXPECT_EQ("user@gmail.com", manager_->GetAuthenticatedUsername()); |
+ EXPECT_EQ(account_id, manager_->GetAuthenticatedAccountId()); |
} |
TEST_F(SigninManagerTest, SigninNotAllowed) { |
std::string user("user@google.com"); |
- profile()->GetPrefs()->SetString(prefs::kGoogleServicesUsername, user); |
+ profile()->GetPrefs()->SetString(prefs::kGoogleServicesAccountId, user); |
profile()->GetPrefs()->SetBoolean(prefs::kSigninAllowed, false); |
- SetUpSigninManagerAsService(); |
+ CreateNakedSigninManager(); |
+ AddToAccountTracker("gaia_id", user); |
+ manager_->Initialize(g_browser_process->local_state()); |
+ // Currently signing in is prohibited by policy, so should be signed out. |
+ EXPECT_EQ("", manager_->GetAuthenticatedUsername()); |
+ EXPECT_EQ("", manager_->GetAuthenticatedAccountId()); |
+} |
+ |
+TEST_F(SigninManagerTest, UpgradeToNewPrefs) { |
+ profile()->GetPrefs()->SetString(prefs::kGoogleServicesUsername, |
+ "user@gmail.com"); |
+ profile()->GetPrefs()->SetString(prefs::kGoogleServicesUserAccountId, |
+ "account_id"); |
+ CreateNakedSigninManager(); |
+ manager_->Initialize(g_browser_process->local_state()); |
+ EXPECT_EQ("user@gmail.com", manager_->GetAuthenticatedUsername()); |
+ |
+ // TODO(rogerta): until the migration to gaia id, the account id will remain |
+ // the old username. |
+ EXPECT_EQ("user@gmail.com", manager_->GetAuthenticatedAccountId()); |
+ EXPECT_EQ("user@gmail.com", |
+ profile()->GetPrefs()->GetString(prefs::kGoogleServicesAccountId)); |
+ EXPECT_EQ("", |
+ profile()->GetPrefs()->GetString(prefs::kGoogleServicesUsername)); |
+ |
+ // Make sure account tracker was updated. |
+ AccountTrackerService* service = |
+ AccountTrackerServiceFactory::GetForProfile(profile()); |
+ AccountTrackerService::AccountInfo info = service->GetAccountInfo( |
+ manager_->GetAuthenticatedAccountId()); |
+ EXPECT_EQ("user@gmail.com", info.email); |
+ EXPECT_EQ("account_id", info.gaia); |
} |