Index: chrome/browser/google_apis/auth_service.cc |
diff --git a/chrome/browser/google_apis/auth_service.cc b/chrome/browser/google_apis/auth_service.cc |
deleted file mode 100644 |
index e9dca03192107ac4aa18245d72d0afd26ca67249..0000000000000000000000000000000000000000 |
--- a/chrome/browser/google_apis/auth_service.cc |
+++ /dev/null |
@@ -1,239 +0,0 @@ |
-// Copyright (c) 2012 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#include "chrome/browser/google_apis/auth_service.h" |
- |
-#include <string> |
-#include <vector> |
- |
-#include "base/bind.h" |
-#include "base/location.h" |
-#include "base/message_loop/message_loop_proxy.h" |
-#include "base/metrics/histogram.h" |
-#include "chrome/browser/google_apis/auth_service_observer.h" |
-#include "google_apis/gaia/google_service_auth_error.h" |
-#include "net/url_request/url_request_context_getter.h" |
- |
-namespace google_apis { |
- |
-namespace { |
- |
-// Used for success ratio histograms. 0 for failure, 1 for success, |
-// 2 for no connection (likely offline). |
-const int kSuccessRatioHistogramFailure = 0; |
-const int kSuccessRatioHistogramSuccess = 1; |
-const int kSuccessRatioHistogramNoConnection = 2; |
-const int kSuccessRatioHistogramTemporaryFailure = 3; |
-const int kSuccessRatioHistogramMaxValue = 4; // The max value is exclusive. |
- |
-// OAuth2 authorization token retrieval request. |
-class AuthRequest : public OAuth2TokenService::Consumer { |
- public: |
- AuthRequest(OAuth2TokenService* oauth2_token_service, |
- const std::string& account_id, |
- net::URLRequestContextGetter* url_request_context_getter, |
- const AuthStatusCallback& callback, |
- const std::vector<std::string>& scopes); |
- virtual ~AuthRequest(); |
- |
- private: |
- // Overridden from OAuth2TokenService::Consumer: |
- virtual void OnGetTokenSuccess(const OAuth2TokenService::Request* request, |
- const std::string& access_token, |
- const base::Time& expiration_time) OVERRIDE; |
- virtual void OnGetTokenFailure(const OAuth2TokenService::Request* request, |
- const GoogleServiceAuthError& error) OVERRIDE; |
- |
- AuthStatusCallback callback_; |
- scoped_ptr<OAuth2TokenService::Request> request_; |
- base::ThreadChecker thread_checker_; |
- |
- DISALLOW_COPY_AND_ASSIGN(AuthRequest); |
-}; |
- |
-AuthRequest::AuthRequest( |
- OAuth2TokenService* oauth2_token_service, |
- const std::string& account_id, |
- net::URLRequestContextGetter* url_request_context_getter, |
- const AuthStatusCallback& callback, |
- const std::vector<std::string>& scopes) |
- : callback_(callback) { |
- DCHECK(!callback_.is_null()); |
- request_ = oauth2_token_service-> |
- StartRequestWithContext( |
- account_id, |
- url_request_context_getter, |
- OAuth2TokenService::ScopeSet(scopes.begin(), scopes.end()), |
- this); |
-} |
- |
-AuthRequest::~AuthRequest() {} |
- |
-// Callback for OAuth2AccessTokenFetcher on success. |access_token| is the token |
-// used to start fetching user data. |
-void AuthRequest::OnGetTokenSuccess(const OAuth2TokenService::Request* request, |
- const std::string& access_token, |
- const base::Time& expiration_time) { |
- DCHECK(thread_checker_.CalledOnValidThread()); |
- |
- UMA_HISTOGRAM_ENUMERATION("GData.AuthSuccess", |
- kSuccessRatioHistogramSuccess, |
- kSuccessRatioHistogramMaxValue); |
- |
- callback_.Run(HTTP_SUCCESS, access_token); |
- delete this; |
-} |
- |
-// Callback for OAuth2AccessTokenFetcher on failure. |
-void AuthRequest::OnGetTokenFailure(const OAuth2TokenService::Request* request, |
- const GoogleServiceAuthError& error) { |
- DCHECK(thread_checker_.CalledOnValidThread()); |
- |
- LOG(WARNING) << "AuthRequest: token request using refresh token failed: " |
- << error.ToString(); |
- |
- // There are many ways to fail, but if the failure is due to connection, |
- // it's likely that the device is off-line. We treat the error differently |
- // so that the file manager works while off-line. |
- if (error.state() == GoogleServiceAuthError::CONNECTION_FAILED) { |
- UMA_HISTOGRAM_ENUMERATION("GData.AuthSuccess", |
- kSuccessRatioHistogramNoConnection, |
- kSuccessRatioHistogramMaxValue); |
- callback_.Run(GDATA_NO_CONNECTION, std::string()); |
- } else if (error.state() == GoogleServiceAuthError::SERVICE_UNAVAILABLE) { |
- // Temporary auth error. |
- UMA_HISTOGRAM_ENUMERATION("GData.AuthSuccess", |
- kSuccessRatioHistogramTemporaryFailure, |
- kSuccessRatioHistogramMaxValue); |
- callback_.Run(HTTP_FORBIDDEN, std::string()); |
- } else { |
- // Permanent auth error. |
- UMA_HISTOGRAM_ENUMERATION("GData.AuthSuccess", |
- kSuccessRatioHistogramFailure, |
- kSuccessRatioHistogramMaxValue); |
- callback_.Run(HTTP_UNAUTHORIZED, std::string()); |
- } |
- delete this; |
-} |
- |
-} // namespace |
- |
-AuthService::AuthService( |
- OAuth2TokenService* oauth2_token_service, |
- const std::string& account_id, |
- net::URLRequestContextGetter* url_request_context_getter, |
- const std::vector<std::string>& scopes) |
- : oauth2_token_service_(oauth2_token_service), |
- account_id_(account_id), |
- url_request_context_getter_(url_request_context_getter), |
- scopes_(scopes), |
- weak_ptr_factory_(this) { |
- DCHECK(oauth2_token_service); |
- |
- // Get OAuth2 refresh token (if we have any) and register for its updates. |
- oauth2_token_service_->AddObserver(this); |
- has_refresh_token_ = oauth2_token_service_->RefreshTokenIsAvailable( |
- account_id_); |
-} |
- |
-AuthService::~AuthService() { |
- oauth2_token_service_->RemoveObserver(this); |
-} |
- |
-void AuthService::StartAuthentication(const AuthStatusCallback& callback) { |
- DCHECK(thread_checker_.CalledOnValidThread()); |
- scoped_refptr<base::MessageLoopProxy> relay_proxy( |
- base::MessageLoopProxy::current()); |
- |
- if (HasAccessToken()) { |
- // We already have access token. Give it back to the caller asynchronously. |
- relay_proxy->PostTask(FROM_HERE, |
- base::Bind(callback, HTTP_SUCCESS, access_token_)); |
- } else if (HasRefreshToken()) { |
- // We have refresh token, let's get an access token. |
- new AuthRequest(oauth2_token_service_, |
- account_id_, |
- url_request_context_getter_, |
- base::Bind(&AuthService::OnAuthCompleted, |
- weak_ptr_factory_.GetWeakPtr(), |
- callback), |
- scopes_); |
- } else { |
- relay_proxy->PostTask(FROM_HERE, |
- base::Bind(callback, GDATA_NOT_READY, std::string())); |
- } |
-} |
- |
-bool AuthService::HasAccessToken() const { |
- return !access_token_.empty(); |
-} |
- |
-bool AuthService::HasRefreshToken() const { |
- return has_refresh_token_; |
-} |
- |
-const std::string& AuthService::access_token() const { |
- return access_token_; |
-} |
- |
-void AuthService::ClearAccessToken() { |
- access_token_.clear(); |
-} |
- |
-void AuthService::ClearRefreshToken() { |
- has_refresh_token_ = false; |
- |
- FOR_EACH_OBSERVER(AuthServiceObserver, |
- observers_, |
- OnOAuth2RefreshTokenChanged()); |
-} |
- |
-void AuthService::OnAuthCompleted(const AuthStatusCallback& callback, |
- GDataErrorCode error, |
- const std::string& access_token) { |
- DCHECK(thread_checker_.CalledOnValidThread()); |
- DCHECK(!callback.is_null()); |
- |
- if (error == HTTP_SUCCESS) { |
- access_token_ = access_token; |
- } else if (error == HTTP_UNAUTHORIZED) { |
- // Refreshing access token using the refresh token is failed with 401 error |
- // (HTTP_UNAUTHORIZED). This means the current refresh token is invalid for |
- // Drive, hence we clear the refresh token here to make HasRefreshToken() |
- // false, thus the invalidness is clearly observable. |
- // This is not for triggering refetch of the refresh token. UI should |
- // show some message to encourage user to log-off and log-in again in order |
- // to fetch new valid refresh token. |
- ClearRefreshToken(); |
- } |
- |
- callback.Run(error, access_token); |
-} |
- |
-void AuthService::AddObserver(AuthServiceObserver* observer) { |
- observers_.AddObserver(observer); |
-} |
- |
-void AuthService::RemoveObserver(AuthServiceObserver* observer) { |
- observers_.RemoveObserver(observer); |
-} |
- |
-void AuthService::OnRefreshTokenAvailable(const std::string& account_id) { |
- OnHandleRefreshToken(true); |
-} |
- |
-void AuthService::OnRefreshTokenRevoked(const std::string& account_id) { |
- OnHandleRefreshToken(false); |
-} |
- |
-void AuthService::OnHandleRefreshToken(bool has_refresh_token) { |
- access_token_.clear(); |
- has_refresh_token_ = has_refresh_token; |
- |
- FOR_EACH_OBSERVER(AuthServiceObserver, |
- observers_, |
- OnOAuth2RefreshTokenChanged()); |
-} |
- |
-} // namespace google_apis |