| Index: google_apis/drive/auth_service.cc
|
| diff --git a/google_apis/drive/auth_service.cc b/google_apis/drive/auth_service.cc
|
| index 51229f92b6a148e50793ab649955a9b8e262c5fa..0ab8fdfc73f99c782c1780ec194d0f40b353f258 100644
|
| --- a/google_apis/drive/auth_service.cc
|
| +++ b/google_apis/drive/auth_service.cc
|
| @@ -9,7 +9,7 @@
|
|
|
| #include "base/bind.h"
|
| #include "base/location.h"
|
| -#include "base/message_loop/message_loop_proxy.h"
|
| +#include "base/message_loop/message_loop.h"
|
| #include "base/metrics/histogram.h"
|
| #include "google_apis/drive/auth_service_observer.h"
|
| #include "google_apis/gaia/google_service_auth_error.h"
|
| @@ -27,6 +27,12 @@ const int kSuccessRatioHistogramNoConnection = 2;
|
| const int kSuccessRatioHistogramTemporaryFailure = 3;
|
| const int kSuccessRatioHistogramMaxValue = 4; // The max value is exclusive.
|
|
|
| +void RecordAuthResultHistogram(int value) {
|
| + UMA_HISTOGRAM_ENUMERATION("GData.AuthSuccess",
|
| + value,
|
| + kSuccessRatioHistogramMaxValue);
|
| +}
|
| +
|
| // OAuth2 authorization token retrieval request.
|
| class AuthRequest : public OAuth2TokenService::Consumer {
|
| public:
|
| @@ -78,10 +84,7 @@ void AuthRequest::OnGetTokenSuccess(const OAuth2TokenService::Request* request,
|
| const base::Time& expiration_time) {
|
| DCHECK(thread_checker_.CalledOnValidThread());
|
|
|
| - UMA_HISTOGRAM_ENUMERATION("GData.AuthSuccess",
|
| - kSuccessRatioHistogramSuccess,
|
| - kSuccessRatioHistogramMaxValue);
|
| -
|
| + RecordAuthResultHistogram(kSuccessRatioHistogramSuccess);
|
| callback_.Run(HTTP_SUCCESS, access_token);
|
| delete this;
|
| }
|
| @@ -98,21 +101,14 @@ void AuthRequest::OnGetTokenFailure(const OAuth2TokenService::Request* request,
|
| // 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);
|
| + RecordAuthResultHistogram(kSuccessRatioHistogramNoConnection);
|
| callback_.Run(GDATA_NO_CONNECTION, std::string());
|
| } else if (error.state() == GoogleServiceAuthError::SERVICE_UNAVAILABLE) {
|
| - // Temporary auth error.
|
| - UMA_HISTOGRAM_ENUMERATION("GData.AuthSuccess",
|
| - kSuccessRatioHistogramTemporaryFailure,
|
| - kSuccessRatioHistogramMaxValue);
|
| + RecordAuthResultHistogram(kSuccessRatioHistogramTemporaryFailure);
|
| callback_.Run(HTTP_FORBIDDEN, std::string());
|
| } else {
|
| // Permanent auth error.
|
| - UMA_HISTOGRAM_ENUMERATION("GData.AuthSuccess",
|
| - kSuccessRatioHistogramFailure,
|
| - kSuccessRatioHistogramMaxValue);
|
| + RecordAuthResultHistogram(kSuccessRatioHistogramFailure);
|
| callback_.Run(HTTP_UNAUTHORIZED, std::string());
|
| }
|
| delete this;
|
| @@ -144,13 +140,11 @@ AuthService::~AuthService() {
|
|
|
| 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_));
|
| + base::MessageLoop::current()->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_,
|
| @@ -161,8 +155,8 @@ void AuthService::StartAuthentication(const AuthStatusCallback& callback) {
|
| callback),
|
| scopes_);
|
| } else {
|
| - relay_proxy->PostTask(FROM_HERE,
|
| - base::Bind(callback, GDATA_NOT_READY, std::string()));
|
| + base::MessageLoop::current()->PostTask(
|
| + FROM_HERE, base::Bind(callback, GDATA_NOT_READY, std::string()));
|
| }
|
| }
|
|
|
| @@ -183,11 +177,7 @@ void AuthService::ClearAccessToken() {
|
| }
|
|
|
| void AuthService::ClearRefreshToken() {
|
| - has_refresh_token_ = false;
|
| -
|
| - FOR_EACH_OBSERVER(AuthServiceObserver,
|
| - observers_,
|
| - OnOAuth2RefreshTokenChanged());
|
| + OnHandleRefreshToken(false);
|
| }
|
|
|
| void AuthService::OnAuthCompleted(const AuthStatusCallback& callback,
|
| @@ -221,11 +211,13 @@ void AuthService::RemoveObserver(AuthServiceObserver* observer) {
|
| }
|
|
|
| void AuthService::OnRefreshTokenAvailable(const std::string& account_id) {
|
| - OnHandleRefreshToken(true);
|
| + if (account_id == account_id_)
|
| + OnHandleRefreshToken(true);
|
| }
|
|
|
| void AuthService::OnRefreshTokenRevoked(const std::string& account_id) {
|
| - OnHandleRefreshToken(false);
|
| + if (account_id == account_id_)
|
| + OnHandleRefreshToken(false);
|
| }
|
|
|
| void AuthService::OnHandleRefreshToken(bool has_refresh_token) {
|
|
|