| 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);
|
| }
|
|
|