| Index: chrome/browser/signin/mutable_profile_oauth2_token_service.cc
|
| diff --git a/chrome/browser/signin/mutable_profile_oauth2_token_service.cc b/chrome/browser/signin/mutable_profile_oauth2_token_service.cc
|
| index fe6eb88bde39935d10f02ccaba5f439324bfb4b9..f940bcc6c52cca31781ed6271a621b353bfb052b 100644
|
| --- a/chrome/browser/signin/mutable_profile_oauth2_token_service.cc
|
| +++ b/chrome/browser/signin/mutable_profile_oauth2_token_service.cc
|
| @@ -7,7 +7,10 @@
|
| #include "chrome/browser/profiles/profile.h"
|
| #include "chrome/browser/webdata/token_web_data.h"
|
| #include "components/webdata/common/web_data_service_base.h"
|
| +#include "google_apis/gaia/gaia_auth_fetcher.h"
|
| #include "google_apis/gaia/gaia_constants.h"
|
| +#include "google_apis/gaia/google_service_auth_error.h"
|
| +#include "net/url_request/url_request_context_getter.h"
|
|
|
| #if defined(ENABLE_MANAGED_USERS)
|
| #include "chrome/browser/managed_mode/managed_user_constants.h"
|
| @@ -34,6 +37,39 @@ std::string RemoveAccountIdPrefix(const std::string& prefixed_account_id) {
|
| return prefixed_account_id.substr(kAccountIdPrefixLength);
|
| }
|
|
|
| +// 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 RevokeServerRefreshToken : public GaiaAuthConsumer {
|
| + public:
|
| + RevokeServerRefreshToken(const std::string& account_id,
|
| + net::URLRequestContextGetter* request_context);
|
| + virtual ~RevokeServerRefreshToken();
|
| +
|
| + private:
|
| + // GaiaAuthConsumer overrides:
|
| + virtual void OnOAuth2RevokeTokenCompleted() OVERRIDE;
|
| +
|
| + scoped_refptr<net::URLRequestContextGetter> request_context_;
|
| + GaiaAuthFetcher fetcher_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(RevokeServerRefreshToken);
|
| +};
|
| +
|
| +RevokeServerRefreshToken::RevokeServerRefreshToken(
|
| + const std::string& refresh_token,
|
| + net::URLRequestContextGetter* request_context)
|
| + : request_context_(request_context),
|
| + fetcher_(this, GaiaConstants::kChromeSource, request_context) {
|
| + fetcher_.StartRevokeOAuth2Token(refresh_token);
|
| +}
|
| +
|
| +RevokeServerRefreshToken::~RevokeServerRefreshToken() {}
|
| +
|
| +void RevokeServerRefreshToken::OnOAuth2RevokeTokenCompleted() {
|
| + delete this;
|
| +}
|
| +
|
| } // namespace
|
|
|
| MutableProfileOAuth2TokenService::MutableProfileOAuth2TokenService()
|
| @@ -54,6 +90,11 @@ void MutableProfileOAuth2TokenService::Shutdown() {
|
| ProfileOAuth2TokenService::Shutdown();
|
| }
|
|
|
| +net::URLRequestContextGetter*
|
| +MutableProfileOAuth2TokenService::GetRequestContext() {
|
| + return profile()->GetRequestContext();
|
| +}
|
| +
|
| void MutableProfileOAuth2TokenService::LoadCredentials() {
|
| DCHECK_EQ(0, web_data_service_request_);
|
|
|
| @@ -168,3 +209,9 @@ MutableProfileOAuth2TokenService::GetAccountIdForMigratingRefreshToken() {
|
|
|
| return GetPrimaryAccountId();
|
| }
|
| +
|
| +void MutableProfileOAuth2TokenService::RevokeCredentialsOnServer(
|
| + const std::string& refresh_token) {
|
| + // RevokeServerRefreshToken deletes itself when done.
|
| + new RevokeServerRefreshToken(refresh_token, GetRequestContext());
|
| +}
|
|
|