Index: components/signin/core/browser/signin_manager.cc |
diff --git a/components/signin/core/browser/signin_manager.cc b/components/signin/core/browser/signin_manager.cc |
index 391030583ca3df2a784c58a6a66887c1a2216f87..5dde5a7cc6db7b872ab2162ae058f55aec1afbec 100644 |
--- a/components/signin/core/browser/signin_manager.cc |
+++ b/components/signin/core/browser/signin_manager.cc |
@@ -13,9 +13,9 @@ |
#include "base/strings/string_util.h" |
#include "base/strings/utf_string_conversions.h" |
#include "base/time/time.h" |
+#include "components/signin/core/browser/account_tracker_service.h" |
#include "components/signin/core/browser/gaia_cookie_manager_service.h" |
#include "components/signin/core/browser/profile_oauth2_token_service.h" |
-#include "components/signin/core/browser/signin_account_id_helper.h" |
#include "components/signin/core/browser/signin_client.h" |
#include "components/signin/core/browser/signin_internals_util.h" |
#include "components/signin/core/browser/signin_manager_cookie_helper.h" |
@@ -33,12 +33,11 @@ SigninManager::SigninManager(SigninClient* client, |
ProfileOAuth2TokenService* token_service, |
AccountTrackerService* account_tracker_service, |
GaiaCookieManagerService* cookie_manager_service) |
- : SigninManagerBase(client), |
+ : SigninManagerBase(client, account_tracker_service), |
prohibit_signout_(false), |
type_(SIGNIN_TYPE_NONE), |
client_(client), |
token_service_(token_service), |
- account_tracker_service_(account_tracker_service), |
cookie_manager_service_(cookie_manager_service), |
signin_manager_signed_in_(false), |
user_info_fetched_by_account_tracker_(false), |
@@ -64,11 +63,14 @@ std::string SigninManager::SigninTypeToString(SigninManager::SigninType type) { |
} |
bool SigninManager::PrepareForSignin(SigninType type, |
+ const std::string& gaia_id, |
const std::string& username, |
const std::string& password) { |
- DCHECK(possibly_invalid_username_.empty() || |
- possibly_invalid_username_ == username); |
- DCHECK(!username.empty()); |
+ std::string account_id = |
+ account_tracker_service()->PickAccountIdForAccount(gaia_id, username); |
+ DCHECK(possibly_invalid_account_id_.empty() || |
+ possibly_invalid_account_id_ == account_id); |
+ DCHECK(!account_id.empty()); |
if (!IsAllowedUsername(username)) { |
// Account is not allowed by admin policy. |
@@ -84,7 +86,9 @@ bool SigninManager::PrepareForSignin(SigninType type, |
// restart we don't think sync setup has never completed. |
ClearTransientSigninData(); |
type_ = type; |
- possibly_invalid_username_.assign(username); |
+ possibly_invalid_account_id_.assign(account_id); |
+ possibly_invalid_gaia_id_.assign(gaia_id); |
+ possibly_invalid_email_.assign(username); |
password_.assign(password); |
signin_manager_signed_in_ = false; |
user_info_fetched_by_account_tracker_ = false; |
@@ -94,18 +98,19 @@ bool SigninManager::PrepareForSignin(SigninType type, |
void SigninManager::StartSignInWithRefreshToken( |
const std::string& refresh_token, |
+ const std::string& gaia_id, |
const std::string& username, |
const std::string& password, |
const OAuthTokenFetchedCallback& callback) { |
- DCHECK(!IsAuthenticated() || |
- gaia::AreEmailsSame(username, GetAuthenticatedUsername())); |
+ DCHECK(!IsAuthenticated()); |
- if (!PrepareForSignin(SIGNIN_TYPE_WITH_REFRESH_TOKEN, username, password)) |
+ if (!PrepareForSignin(SIGNIN_TYPE_WITH_REFRESH_TOKEN, gaia_id, username, |
+ password)) { |
return; |
+ } |
- // Store our callback and token. |
+ // Store our token. |
temp_refresh_token_ = refresh_token; |
- possibly_invalid_username_ = username; |
if (!callback.is_null() && !temp_refresh_token_.empty()) { |
callback.Run(temp_refresh_token_); |
@@ -117,7 +122,9 @@ void SigninManager::StartSignInWithRefreshToken( |
void SigninManager::CopyCredentialsFrom(const SigninManager& source) { |
DCHECK_NE(this, &source); |
- possibly_invalid_username_ = source.possibly_invalid_username_; |
+ possibly_invalid_account_id_ = source.possibly_invalid_account_id_; |
+ possibly_invalid_gaia_id_ = source.possibly_invalid_gaia_id_; |
+ possibly_invalid_email_ = source.possibly_invalid_email_; |
temp_refresh_token_ = source.temp_refresh_token_; |
password_ = source.password_; |
} |
@@ -125,7 +132,9 @@ void SigninManager::CopyCredentialsFrom(const SigninManager& source) { |
void SigninManager::ClearTransientSigninData() { |
DCHECK(IsInitialized()); |
- possibly_invalid_username_.clear(); |
+ possibly_invalid_account_id_.clear(); |
+ possibly_invalid_gaia_id_.clear(); |
+ possibly_invalid_email_.clear(); |
password_.clear(); |
type_ = SIGNIN_TYPE_NONE; |
temp_refresh_token_.clear(); |
@@ -172,9 +181,10 @@ void SigninManager::SignOut( |
const base::Time signin_time = |
base::Time::FromInternalValue( |
client_->GetPrefs()->GetInt64(prefs::kSignedInTime)); |
- ClearAuthenticatedUsername(); |
+ clear_authenticated_user(); |
client_->GetPrefs()->ClearPref(prefs::kGoogleServicesHostedDomain); |
- client_->GetPrefs()->ClearPref(prefs::kGoogleServicesUsername); |
+ client_->GetPrefs()->ClearPref(prefs::kGoogleServicesAccountId); |
+ client_->GetPrefs()->ClearPref(prefs::kGoogleServicesUserAccountId); |
client_->GetPrefs()->ClearPref(prefs::kSignedInTime); |
client_->OnSignedOut(); |
@@ -213,31 +223,29 @@ void SigninManager::Initialize(PrefService* local_state) { |
base::Bind(&SigninManager::OnSigninAllowedPrefChanged, |
base::Unretained(this))); |
- std::string user = |
- client_->GetPrefs()->GetString(prefs::kGoogleServicesUsername); |
- if ((!user.empty() && !IsAllowedUsername(user)) || !IsSigninAllowed()) { |
+ std::string account_id = |
+ client_->GetPrefs()->GetString(prefs::kGoogleServicesAccountId); |
+ std::string user = account_id.empty() ? std::string() : |
+ account_tracker_service()->GetAccountInfo(account_id).email; |
+ if ((!account_id.empty() && !IsAllowedUsername(user)) || !IsSigninAllowed()) { |
// User is signed in, but the username is invalid - the administrator must |
// have changed the policy since the last signin, so sign out the user. |
SignOut(signin_metrics::SIGNIN_PREF_CHANGED_DURING_SIGNIN); |
} |
InitTokenService(); |
- account_id_helper_.reset( |
- new SigninAccountIdHelper(client_, token_service_, this)); |
- |
- account_tracker_service_->AddObserver(this); |
+ account_tracker_service()->AddObserver(this); |
} |
void SigninManager::Shutdown() { |
- account_tracker_service_->RemoveObserver(this); |
+ account_tracker_service()->RemoveObserver(this); |
+ |
Mike Lerman
2015/04/08 14:45:27
nit: Remove empty line.
Roger Tawa OOO till Jul 10th
2015/04/08 20:24:21
Done.
|
local_state_pref_registrar_.RemoveAll(); |
- account_id_helper_.reset(); |
SigninManagerBase::Shutdown(); |
} |
void SigninManager::OnGoogleServicesUsernamePatternChanged() { |
- if (IsAuthenticated() && |
- !IsAllowedUsername(GetAuthenticatedUsername())) { |
+ if (IsAuthenticated() && !IsAllowedUsername(GetAuthenticatedUsername())) { |
// Signed in user is invalid according to the current policy so sign |
// the user out. |
SignOut(signin_metrics::GOOGLE_SERVICE_NAME_PATTERN_CHANGED); |
@@ -297,11 +305,15 @@ bool SigninManager::IsAllowedUsername(const std::string& username) const { |
} |
bool SigninManager::AuthInProgress() const { |
- return !possibly_invalid_username_.empty(); |
+ return !possibly_invalid_account_id_.empty(); |
+} |
+ |
+const std::string& SigninManager::GetAccountIdForAuthInProgress() const { |
+ return possibly_invalid_account_id_; |
} |
const std::string& SigninManager::GetUsernameForAuthInProgress() const { |
- return possibly_invalid_username_; |
+ return possibly_invalid_email_; |
} |
void SigninManager::DisableOneClickSignIn(PrefService* prefs) { |
@@ -320,28 +332,38 @@ void SigninManager::MergeSigninCredentialIntoCookieJar() { |
void SigninManager::CompletePendingSignin() { |
NotifyDiagnosticsObservers(SIGNIN_COMPLETED, "Successful"); |
- |
- DCHECK(!possibly_invalid_username_.empty()); |
- OnSignedIn(possibly_invalid_username_); |
+ DCHECK(!possibly_invalid_account_id_.empty()); |
+ OnSignedIn(); |
DCHECK(!temp_refresh_token_.empty()); |
DCHECK(IsAuthenticated()); |
- token_service_->UpdateCredentials(GetAuthenticatedAccountId(), |
- temp_refresh_token_); |
+ |
+ std::string account_id = GetAuthenticatedAccountId(); |
+ token_service_->UpdateCredentials(account_id, temp_refresh_token_); |
temp_refresh_token_.clear(); |
MergeSigninCredentialIntoCookieJar(); |
} |
void SigninManager::OnExternalSigninCompleted(const std::string& username) { |
- OnSignedIn(username); |
+ AccountTrackerService::AccountInfo info = |
+ account_tracker_service()->FindAccountInfoByEmail(username); |
+ DCHECK(!info.gaia.empty()); |
+ DCHECK(!info.email.empty()); |
+ possibly_invalid_account_id_ = info.account_id; |
+ possibly_invalid_gaia_id_ = info.gaia; |
+ possibly_invalid_email_ = info.email; |
+ OnSignedIn(); |
} |
-void SigninManager::OnSignedIn(const std::string& username) { |
+void SigninManager::OnSignedIn() { |
client_->GetPrefs()->SetInt64(prefs::kSignedInTime, |
base::Time::Now().ToInternalValue()); |
- SetAuthenticatedUsername(username); |
- possibly_invalid_username_.clear(); |
+ SetAuthenticatedAccountInfo(possibly_invalid_gaia_id_, |
+ possibly_invalid_email_); |
+ possibly_invalid_account_id_.clear(); |
+ possibly_invalid_gaia_id_.clear(); |
+ possibly_invalid_email_.clear(); |
signin_manager_signed_in_ = true; |
FOR_EACH_OBSERVER( |