Chromium Code Reviews| Index: chrome/browser/signin/mutable_profile_oauth2_token_service_delegate.cc |
| diff --git a/components/signin/core/browser/mutable_profile_oauth2_token_service.cc b/chrome/browser/signin/mutable_profile_oauth2_token_service_delegate.cc |
| similarity index 71% |
| copy from components/signin/core/browser/mutable_profile_oauth2_token_service.cc |
| copy to chrome/browser/signin/mutable_profile_oauth2_token_service_delegate.cc |
| index 849c7731fc76e784ab7c90948b1c661b353c4f30..02dc3904f08b8d2046d9f294261a98bd05911894 100644 |
| --- a/components/signin/core/browser/mutable_profile_oauth2_token_service.cc |
| +++ b/chrome/browser/signin/mutable_profile_oauth2_token_service_delegate.cc |
| @@ -2,7 +2,7 @@ |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| -#include "components/signin/core/browser/mutable_profile_oauth2_token_service.h" |
| +#include "chrome/browser/signin/mutable_profile_oauth2_token_service_delegate.h" |
| #include "base/profiler/scoped_tracker.h" |
| #include "components/signin/core/browser/signin_client.h" |
| @@ -42,64 +42,66 @@ std::string RemoveAccountIdPrefix(const std::string& prefixed_account_id) { |
| // This class sends a request to GAIA to revoke the given refresh token from |
| // the server. This is a best effort attempt only. This class deletes itself |
| // when done sucessfully or otherwise. |
| -class MutableProfileOAuth2TokenService::RevokeServerRefreshToken |
| +class MutableProfileOAuth2TokenServiceDelegate::RevokeServerRefreshToken |
| : public GaiaAuthConsumer { |
| public: |
| - RevokeServerRefreshToken(MutableProfileOAuth2TokenService* token_service, |
| - const std::string& account_id); |
| + RevokeServerRefreshToken( |
| + MutableProfileOAuth2TokenServiceDelegate* token_service_delegate, |
| + const std::string& account_id); |
| ~RevokeServerRefreshToken() override; |
| private: |
| // GaiaAuthConsumer overrides: |
| void OnOAuth2RevokeTokenCompleted() override; |
| - MutableProfileOAuth2TokenService* token_service_; |
| + MutableProfileOAuth2TokenServiceDelegate* token_service_delegate_; |
| GaiaAuthFetcher fetcher_; |
| DISALLOW_COPY_AND_ASSIGN(RevokeServerRefreshToken); |
| }; |
| -MutableProfileOAuth2TokenService:: |
| - RevokeServerRefreshToken::RevokeServerRefreshToken( |
| - MutableProfileOAuth2TokenService* token_service, |
| - const std::string& refresh_token) |
| - : token_service_(token_service), |
| - fetcher_(this, GaiaConstants::kChromeSource, |
| - token_service_->GetRequestContext()) { |
| +MutableProfileOAuth2TokenServiceDelegate::RevokeServerRefreshToken:: |
| + RevokeServerRefreshToken( |
| + MutableProfileOAuth2TokenServiceDelegate* token_service_delegate, |
| + const std::string& refresh_token) |
| + : token_service_delegate_(token_service_delegate), |
| + fetcher_(this, |
| + GaiaConstants::kChromeSource, |
| + token_service_delegate_->GetRequestContext()) { |
| fetcher_.StartRevokeOAuth2Token(refresh_token); |
| } |
| -MutableProfileOAuth2TokenService:: |
| - RevokeServerRefreshToken::~RevokeServerRefreshToken() {} |
| +MutableProfileOAuth2TokenServiceDelegate::RevokeServerRefreshToken:: |
| + ~RevokeServerRefreshToken() { |
| +} |
| -void MutableProfileOAuth2TokenService:: |
| - RevokeServerRefreshToken::OnOAuth2RevokeTokenCompleted() { |
| +void MutableProfileOAuth2TokenServiceDelegate::RevokeServerRefreshToken:: |
| + OnOAuth2RevokeTokenCompleted() { |
| // |this| pointer will be deleted when removed from the vector, so don't |
| // access any members after call to erase(). |
| - token_service_->server_revokes_.erase( |
| - std::find(token_service_->server_revokes_.begin(), |
| - token_service_->server_revokes_.end(), |
| - this)); |
| + token_service_delegate_->server_revokes_.erase( |
| + std::find(token_service_delegate_->server_revokes_.begin(), |
| + token_service_delegate_->server_revokes_.end(), this)); |
| } |
| -MutableProfileOAuth2TokenService::AccountInfo::AccountInfo( |
| +MutableProfileOAuth2TokenServiceDelegate::AccountInfo::AccountInfo( |
| SigninErrorController* signin_error_controller, |
| const std::string& account_id, |
| const std::string& refresh_token) |
| - : signin_error_controller_(signin_error_controller), |
| - account_id_(account_id), |
| - refresh_token_(refresh_token), |
| - last_auth_error_(GoogleServiceAuthError::NONE) { |
| + : signin_error_controller_(signin_error_controller), |
| + account_id_(account_id), |
| + refresh_token_(refresh_token), |
| + last_auth_error_(GoogleServiceAuthError::NONE) { |
| DCHECK(signin_error_controller_); |
| DCHECK(!account_id_.empty()); |
| signin_error_controller_->AddProvider(this); |
| } |
| -MutableProfileOAuth2TokenService::AccountInfo::~AccountInfo() { |
| +MutableProfileOAuth2TokenServiceDelegate::AccountInfo::~AccountInfo() { |
| signin_error_controller_->RemoveProvider(this); |
| } |
| -void MutableProfileOAuth2TokenService::AccountInfo::SetLastAuthError( |
| +void MutableProfileOAuth2TokenServiceDelegate::AccountInfo::SetLastAuthError( |
| const GoogleServiceAuthError& error) { |
| if (error.state() != last_auth_error_.state()) { |
| last_auth_error_ = error; |
| @@ -108,20 +110,27 @@ void MutableProfileOAuth2TokenService::AccountInfo::SetLastAuthError( |
| } |
| std::string |
| -MutableProfileOAuth2TokenService::AccountInfo::GetAccountId() const { |
| +MutableProfileOAuth2TokenServiceDelegate::AccountInfo::GetAccountId() const { |
| return account_id_; |
| } |
| GoogleServiceAuthError |
| -MutableProfileOAuth2TokenService::AccountInfo::GetAuthStatus() const { |
| +MutableProfileOAuth2TokenServiceDelegate::AccountInfo::GetAuthStatus() const { |
| return last_auth_error_; |
| } |
| -MutableProfileOAuth2TokenService::MutableProfileOAuth2TokenService() |
| +MutableProfileOAuth2TokenServiceDelegate:: |
| + MutableProfileOAuth2TokenServiceDelegate( |
| + SigninClient* client, |
| + SigninErrorController* signin_error_controller) |
| : web_data_service_request_(0), |
| backoff_entry_(&backoff_policy_), |
| backoff_error_(GoogleServiceAuthError::NONE) { |
| VLOG(1) << "MutablePO2TS::MutablePO2TS"; |
| + DCHECK(client); |
| + DCHECK(signin_error_controller); |
| + client_ = client; |
| + signin_error_controller_ = signin_error_controller; |
|
Roger Tawa OOO till Jul 10th
2015/05/28 14:54:43
Move lines 132 and 133 to the initializer list at
gogerald1
2015/06/03 18:12:58
Done.
|
| // It's okay to fill the backoff policy after being used in construction. |
| backoff_policy_.num_errors_to_ignore = 0; |
| backoff_policy_.initial_delay_ms = 1000; |
| @@ -132,46 +141,19 @@ MutableProfileOAuth2TokenService::MutableProfileOAuth2TokenService() |
| backoff_policy_.always_use_initial_delay = false; |
| } |
| -MutableProfileOAuth2TokenService::~MutableProfileOAuth2TokenService() { |
| +MutableProfileOAuth2TokenServiceDelegate:: |
| + ~MutableProfileOAuth2TokenServiceDelegate() { |
| VLOG(1) << "MutablePO2TS::~MutablePO2TS"; |
| DCHECK(server_revokes_.empty()); |
| } |
| -void MutableProfileOAuth2TokenService::Shutdown() { |
| - VLOG(1) << "MutablePO2TS::Shutdown"; |
| - server_revokes_.clear(); |
| - CancelWebTokenFetch(); |
| - CancelAllRequests(); |
| - refresh_tokens_.clear(); |
| - |
| - ProfileOAuth2TokenService::Shutdown(); |
| -} |
| - |
| -bool MutableProfileOAuth2TokenService::RefreshTokenIsAvailable( |
| - const std::string& account_id) const { |
| - return !GetRefreshToken(account_id).empty(); |
| -} |
| - |
| -std::string MutableProfileOAuth2TokenService::GetRefreshToken( |
| - const std::string& account_id) const { |
| - AccountInfoMap::const_iterator iter = refresh_tokens_.find(account_id); |
| - if (iter != refresh_tokens_.end()) |
| - return iter->second->refresh_token(); |
| - return std::string(); |
| -} |
| - |
| -bool MutableProfileOAuth2TokenService::HasPersistentError( |
| - const std::string& account_id) { |
| - return refresh_tokens_[account_id]->GetAuthStatus().IsPersistentError(); |
| -} |
| - |
| OAuth2AccessTokenFetcher* |
| -MutableProfileOAuth2TokenService::CreateAccessTokenFetcher( |
| +MutableProfileOAuth2TokenServiceDelegate::CreateAccessTokenFetcher( |
| const std::string& account_id, |
| net::URLRequestContextGetter* getter, |
| OAuth2AccessTokenConsumer* consumer) { |
| ValidateAccountId(account_id); |
| - if (HasPersistentError(account_id)) { |
| + if (refresh_tokens_[account_id]->GetAuthStatus().IsPersistentError()) { |
|
Roger Tawa OOO till Jul 10th
2015/05/28 14:54:43
Better to leave the call to HasPersistentError().
gogerald1
2015/06/03 18:12:58
The reason I am thinking to keep this function is
Roger Tawa OOO till Jul 10th
2015/06/04 18:19:55
Acknowledged.
|
| VLOG(1) << "Request for token has been rejected due to persistent error #" |
| << refresh_tokens_[account_id]->GetAuthStatus().state(); |
| return new OAuth2AccessTokenFetcherImmediateError( |
| @@ -187,20 +169,69 @@ MutableProfileOAuth2TokenService::CreateAccessTokenFetcher( |
| return new OAuth2AccessTokenFetcherImpl(consumer, getter, refresh_token); |
| } |
| +void MutableProfileOAuth2TokenServiceDelegate::UpdateAuthError( |
| + const std::string& account_id, |
| + const GoogleServiceAuthError& error) { |
| + VLOG(1) << "MutablePO2TS::UpdateAuthError. Error: " << error.state(); |
| + backoff_entry_.InformOfRequest(!error.IsTransientError()); |
| + ValidateAccountId(account_id); |
| + |
| + // Do not report connection errors as these are not actually auth errors. |
| + // We also want to avoid masking a "real" auth error just because we |
| + // subsequently get a transient network error. We do keep it around though |
| + // to report for future requests being denied for "backoff" reasons. |
| + if (error.IsTransientError()) { |
| + backoff_error_ = error; |
| + return; |
| + } |
| + |
| + if (refresh_tokens_.count(account_id) == 0) { |
| + // This could happen if the preferences have been corrupted (see |
| + // http://crbug.com/321370). In a Debug build that would be a bug, but in a |
| + // Release build we want to deal with it gracefully. |
| + NOTREACHED(); |
| + return; |
| + } |
| + refresh_tokens_[account_id]->SetLastAuthError(error); |
| +} |
| + |
| +bool MutableProfileOAuth2TokenServiceDelegate::RefreshTokenIsAvailable( |
| + const std::string& account_id) const { |
| + VLOG(1) << "MutablePO2TS::RefreshTokenIsAvailable"; |
| + return !GetRefreshToken(account_id).empty(); |
| +} |
| + |
| +std::string MutableProfileOAuth2TokenServiceDelegate::GetRefreshToken( |
| + const std::string& account_id) const { |
| + AccountInfoMap::const_iterator iter = refresh_tokens_.find(account_id); |
| + if (iter != refresh_tokens_.end()) |
| + return iter->second->refresh_token(); |
| + return std::string(); |
| +} |
| + |
| +std::vector<std::string> |
| +MutableProfileOAuth2TokenServiceDelegate::GetAccounts() { |
| + std::vector<std::string> account_ids; |
| + for (AccountInfoMap::const_iterator iter = refresh_tokens_.begin(); |
| + iter != refresh_tokens_.end(); ++iter) { |
| + account_ids.push_back(iter->first); |
| + } |
| + return account_ids; |
| +} |
| + |
| net::URLRequestContextGetter* |
| -MutableProfileOAuth2TokenService::GetRequestContext() { |
| - return client()->GetURLRequestContext(); |
| +MutableProfileOAuth2TokenServiceDelegate::GetRequestContext() const { |
| + return client_->GetURLRequestContext(); |
| } |
| -void MutableProfileOAuth2TokenService::LoadCredentials( |
| +void MutableProfileOAuth2TokenServiceDelegate::LoadCredentials( |
| const std::string& primary_account_id) { |
| DCHECK(!primary_account_id.empty()); |
| ValidateAccountId(primary_account_id); |
| DCHECK(loading_primary_account_id_.empty()); |
| DCHECK_EQ(0, web_data_service_request_); |
| - CancelAllRequests(); |
| - refresh_tokens().clear(); |
| + refresh_tokens_.clear(); |
| // If the account_id is an email address, then canonicalize it. This |
| // is to support legacy account_ids, and will not be needed after |
| @@ -211,12 +242,12 @@ void MutableProfileOAuth2TokenService::LoadCredentials( |
| loading_primary_account_id_ = primary_account_id; |
| } |
| - scoped_refptr<TokenWebData> token_web_data = client()->GetDatabase(); |
| + scoped_refptr<TokenWebData> token_web_data = client_->GetDatabase(); |
| if (token_web_data.get()) |
| web_data_service_request_ = token_web_data->GetAllTokens(this); |
| } |
| -void MutableProfileOAuth2TokenService::OnWebDataServiceRequestDone( |
| +void MutableProfileOAuth2TokenServiceDelegate::OnWebDataServiceRequestDone( |
| WebDataServiceBase::Handle handle, |
| const WDTypedResult* result) { |
| VLOG(1) << "MutablePO2TS::OnWebDataServiceRequestDone. Result type: " |
| @@ -233,8 +264,8 @@ void MutableProfileOAuth2TokenService::OnWebDataServiceRequestDone( |
| if (result) { |
| DCHECK(result->GetType() == TOKEN_RESULT); |
| - const WDResult<std::map<std::string, std::string> > * token_result = |
| - static_cast<const WDResult<std::map<std::string, std::string> > * > ( |
| + const WDResult<std::map<std::string, std::string>>* token_result = |
| + static_cast<const WDResult<std::map<std::string, std::string>>*>( |
| result); |
| LoadAllCredentialsIntoMemory(token_result->GetValue()); |
| } |
| @@ -243,21 +274,18 @@ void MutableProfileOAuth2TokenService::OnWebDataServiceRequestDone( |
| // map. The entry could be missing if there is a corruption in the token DB |
| // while this profile is connected to an account. |
| DCHECK(!loading_primary_account_id_.empty()); |
| - if (refresh_tokens().count(loading_primary_account_id_) == 0) { |
| - refresh_tokens()[loading_primary_account_id_].reset( |
| - new AccountInfo(signin_error_controller(), |
| - loading_primary_account_id_, |
| - std::string())); |
| + if (refresh_tokens_.count(loading_primary_account_id_) == 0) { |
| + refresh_tokens_[loading_primary_account_id_].reset(new AccountInfo( |
| + signin_error_controller_, loading_primary_account_id_, std::string())); |
| } |
| // If we don't have a refresh token for a known account, signal an error. |
| for (AccountInfoMap::const_iterator i = refresh_tokens_.begin(); |
| i != refresh_tokens_.end(); ++i) { |
| - if (!RefreshTokenIsAvailable(i->first)) { |
| - UpdateAuthError( |
| - i->first, |
| - GoogleServiceAuthError( |
| - GoogleServiceAuthError::INVALID_GAIA_CREDENTIALS)); |
| + if (RefreshTokenIsAvailable(i->first)) { |
| + UpdateAuthError(i->first, |
| + GoogleServiceAuthError( |
| + GoogleServiceAuthError::INVALID_GAIA_CREDENTIALS)); |
| break; |
| } |
| } |
| @@ -265,7 +293,7 @@ void MutableProfileOAuth2TokenService::OnWebDataServiceRequestDone( |
| loading_primary_account_id_.clear(); |
| } |
| -void MutableProfileOAuth2TokenService::LoadAllCredentialsIntoMemory( |
| +void MutableProfileOAuth2TokenServiceDelegate::LoadAllCredentialsIntoMemory( |
| const std::map<std::string, std::string>& db_tokens) { |
| std::string old_login_token; |
| @@ -276,8 +304,7 @@ void MutableProfileOAuth2TokenService::LoadAllCredentialsIntoMemory( |
| << db_tokens.size() << " Credential(s)."; |
| for (std::map<std::string, std::string>::const_iterator iter = |
| db_tokens.begin(); |
| - iter != db_tokens.end(); |
| - ++iter) { |
| + iter != db_tokens.end(); ++iter) { |
| std::string prefixed_account_id = iter->first; |
| std::string refresh_token = iter->second; |
| @@ -285,7 +312,7 @@ void MutableProfileOAuth2TokenService::LoadAllCredentialsIntoMemory( |
| old_login_token = refresh_token; |
| if (IsLegacyServiceId(prefixed_account_id)) { |
| - scoped_refptr<TokenWebData> token_web_data = client()->GetDatabase(); |
| + scoped_refptr<TokenWebData> token_web_data = client_->GetDatabase(); |
| if (token_web_data.get()) |
| token_web_data->RemoveTokenForService(prefixed_account_id); |
| } else { |
| @@ -298,17 +325,15 @@ void MutableProfileOAuth2TokenService::LoadAllCredentialsIntoMemory( |
| if (account_id.find('@') != std::string::npos) |
| account_id = gaia::CanonicalizeEmail(account_id); |
| - refresh_tokens()[account_id].reset( |
| - new AccountInfo(signin_error_controller(), |
| - account_id, |
| - refresh_token)); |
| + refresh_tokens_[account_id].reset(new AccountInfo( |
| + signin_error_controller_, account_id, refresh_token)); |
| FireRefreshTokenAvailable(account_id); |
| } |
| } |
| if (!old_login_token.empty()) { |
| DCHECK(!loading_primary_account_id_.empty()); |
| - if (refresh_tokens().count(loading_primary_account_id_) == 0) |
| + if (refresh_tokens_.count(loading_primary_account_id_) == 0) |
| UpdateCredentials(loading_primary_account_id_, old_login_token); |
| } |
| } |
| @@ -316,42 +341,7 @@ void MutableProfileOAuth2TokenService::LoadAllCredentialsIntoMemory( |
| FireRefreshTokensLoaded(); |
| } |
| -void MutableProfileOAuth2TokenService::UpdateAuthError( |
| - const std::string& account_id, |
| - const GoogleServiceAuthError& error) { |
| - VLOG(1) << "MutablePO2TS::UpdateAuthError. Error: " << error.state(); |
| - backoff_entry_.InformOfRequest(!error.IsTransientError()); |
| - ValidateAccountId(account_id); |
| - |
| - // Do not report connection errors as these are not actually auth errors. |
| - // We also want to avoid masking a "real" auth error just because we |
| - // subsequently get a transient network error. We do keep it around though |
| - // to report for future requests being denied for "backoff" reasons. |
| - if (error.IsTransientError()) { |
| - backoff_error_ = error; |
| - return; |
| - } |
| - |
| - if (refresh_tokens_.count(account_id) == 0) { |
| - // This could happen if the preferences have been corrupted (see |
| - // http://crbug.com/321370). In a Debug build that would be a bug, but in a |
| - // Release build we want to deal with it gracefully. |
| - NOTREACHED(); |
| - return; |
| - } |
| - refresh_tokens_[account_id]->SetLastAuthError(error); |
| -} |
| - |
| -std::vector<std::string> MutableProfileOAuth2TokenService::GetAccounts() { |
| - std::vector<std::string> account_ids; |
| - for (AccountInfoMap::const_iterator iter = refresh_tokens_.begin(); |
| - iter != refresh_tokens_.end(); ++iter) { |
| - account_ids.push_back(iter->first); |
| - } |
| - return account_ids; |
| -} |
| - |
| -void MutableProfileOAuth2TokenService::UpdateCredentials( |
| +void MutableProfileOAuth2TokenServiceDelegate::UpdateCredentials( |
| const std::string& account_id, |
| const std::string& refresh_token) { |
| DCHECK(thread_checker_.CalledOnValidThread()); |
| @@ -371,21 +361,17 @@ void MutableProfileOAuth2TokenService::UpdateCredentials( |
| if (refresh_token_present) { |
| VLOG(1) << "MutablePO2TS::UpdateCredentials; Refresh Token was present. " |
| << "account_id=" << account_id; |
| - std::string revoke_reason = refresh_token_present ? "token differs" : |
| - "token is missing"; |
| + std::string revoke_reason = |
| + refresh_token_present ? "token differs" : "token is missing"; |
| LOG(WARNING) << "Revoking refresh token on server. " |
| << "Reason: token update, " << revoke_reason; |
| RevokeCredentialsOnServer(refresh_tokens_[account_id]->refresh_token()); |
| - CancelRequestsForAccount(account_id); |
| - ClearCacheForAccount(account_id); |
| refresh_tokens_[account_id]->set_refresh_token(refresh_token); |
| } else { |
| VLOG(1) << "MutablePO2TS::UpdateCredentials; Refresh Token was absent. " |
| << "account_id=" << account_id; |
| refresh_tokens_[account_id].reset( |
| - new AccountInfo(signin_error_controller(), |
| - account_id, |
| - refresh_token)); |
| + new AccountInfo(signin_error_controller_, account_id, refresh_token)); |
| } |
| // Save the token in memory and in persistent store. |
| @@ -396,27 +382,10 @@ void MutableProfileOAuth2TokenService::UpdateCredentials( |
| } |
| } |
| -void MutableProfileOAuth2TokenService::RevokeCredentials( |
| - const std::string& account_id) { |
| - ValidateAccountId(account_id); |
| - DCHECK(thread_checker_.CalledOnValidThread()); |
| - |
| - if (refresh_tokens_.count(account_id) > 0) { |
| - VLOG(1) << "MutablePO2TS::RevokeCredentials for account_id=" << account_id; |
| - ScopedBatchChange batch(this); |
| - RevokeCredentialsOnServer(refresh_tokens_[account_id]->refresh_token()); |
| - CancelRequestsForAccount(account_id); |
| - ClearCacheForAccount(account_id); |
| - refresh_tokens_.erase(account_id); |
| - ClearPersistedCredentials(account_id); |
| - FireRefreshTokenRevoked(account_id); |
| - } |
| -} |
| - |
| -void MutableProfileOAuth2TokenService::PersistCredentials( |
| +void MutableProfileOAuth2TokenServiceDelegate::PersistCredentials( |
| const std::string& account_id, |
| const std::string& refresh_token) { |
| - scoped_refptr<TokenWebData> token_web_data = client()->GetDatabase(); |
| + scoped_refptr<TokenWebData> token_web_data = client_->GetDatabase(); |
| if (token_web_data.get()) { |
| VLOG(1) << "MutablePO2TS::PersistCredentials for account_id=" << account_id; |
| token_web_data->SetTokenForService(ApplyAccountIdPrefix(account_id), |
| @@ -424,18 +393,8 @@ void MutableProfileOAuth2TokenService::PersistCredentials( |
| } |
| } |
| -void MutableProfileOAuth2TokenService::ClearPersistedCredentials( |
| - const std::string& account_id) { |
| - scoped_refptr<TokenWebData> token_web_data = client()->GetDatabase(); |
| - if (token_web_data.get()) { |
| - VLOG(1) << "MutablePO2TS::ClearPersistedCredentials for account_id=" |
| - << account_id; |
| - token_web_data->RemoveTokenForService(ApplyAccountIdPrefix(account_id)); |
| - } |
| -} |
| - |
| -void MutableProfileOAuth2TokenService::RevokeAllCredentials() { |
| - if (!client()->CanRevokeCredentials()) |
| +void MutableProfileOAuth2TokenServiceDelegate::RevokeAllCredentials() { |
| + if (!client_->CanRevokeCredentials()) |
| return; |
| DCHECK(thread_checker_.CalledOnValidThread()); |
| @@ -443,8 +402,6 @@ void MutableProfileOAuth2TokenService::RevokeAllCredentials() { |
| VLOG(1) << "MutablePO2TS::RevokeAllCredentials"; |
| CancelWebTokenFetch(); |
| - CancelAllRequests(); |
| - ClearCache(); |
| AccountInfoMap tokens = refresh_tokens_; |
| for (AccountInfoMap::iterator i = tokens.begin(); i != tokens.end(); ++i) |
| RevokeCredentials(i->first); |
| @@ -452,19 +409,50 @@ void MutableProfileOAuth2TokenService::RevokeAllCredentials() { |
| DCHECK_EQ(0u, refresh_tokens_.size()); |
| } |
| -void MutableProfileOAuth2TokenService::RevokeCredentialsOnServer( |
| +void MutableProfileOAuth2TokenServiceDelegate::RevokeCredentials( |
| + const std::string& account_id) { |
| + ValidateAccountId(account_id); |
| + DCHECK(thread_checker_.CalledOnValidThread()); |
| + |
| + if (refresh_tokens_.count(account_id) > 0) { |
| + VLOG(1) << "MutablePO2TS::RevokeCredentials for account_id=" << account_id; |
| + ScopedBatchChange batch(this); |
| + RevokeCredentialsOnServer(refresh_tokens_[account_id]->refresh_token()); |
| + refresh_tokens_.erase(account_id); |
| + ClearPersistedCredentials(account_id); |
| + FireRefreshTokenRevoked(account_id); |
| + } |
| +} |
| + |
| +void MutableProfileOAuth2TokenServiceDelegate::ClearPersistedCredentials( |
| + const std::string& account_id) { |
| + scoped_refptr<TokenWebData> token_web_data = client_->GetDatabase(); |
| + if (token_web_data.get()) { |
| + VLOG(1) << "MutablePO2TS::ClearPersistedCredentials for account_id=" |
| + << account_id; |
| + token_web_data->RemoveTokenForService(ApplyAccountIdPrefix(account_id)); |
| + } |
| +} |
| + |
| +void MutableProfileOAuth2TokenServiceDelegate::RevokeCredentialsOnServer( |
| const std::string& refresh_token) { |
| // Keep track or all server revoke requests. This way they can be deleted |
| // before the token service is shutdown and won't outlive the profile. |
| - server_revokes_.push_back( |
| - new RevokeServerRefreshToken(this, refresh_token)); |
| + server_revokes_.push_back(new RevokeServerRefreshToken(this, refresh_token)); |
| } |
| -void MutableProfileOAuth2TokenService::CancelWebTokenFetch() { |
| +void MutableProfileOAuth2TokenServiceDelegate::CancelWebTokenFetch() { |
| if (web_data_service_request_ != 0) { |
| - scoped_refptr<TokenWebData> token_web_data = client()->GetDatabase(); |
| + scoped_refptr<TokenWebData> token_web_data = client_->GetDatabase(); |
| DCHECK(token_web_data.get()); |
| token_web_data->CancelRequest(web_data_service_request_); |
| - web_data_service_request_ = 0; |
| + web_data_service_request_ = 0; |
| } |
| } |
| + |
| +void MutableProfileOAuth2TokenServiceDelegate::Shutdown() { |
| + VLOG(1) << "MutablePO2TS::Shutdown"; |
| + server_revokes_.clear(); |
| + CancelWebTokenFetch(); |
| + refresh_tokens_.clear(); |
| +} |