blob: 3a6c00c904e84e9fc2d44305e9ef84ee83e50bd6 [file] [log] [blame]
// Copyright 2015 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 "base/macros.h"
#include "base/observer_list.h"
#include "google_apis/gaia/gaia_auth_util.h"
#include "google_apis/gaia/oauth2_token_service.h"
#include "net/base/backoff_entry.h"
namespace net {
class URLRequestContextGetter;
class SigninClient;
// Abstract base class to fetch and maintain refresh tokens from various
// entities. Concrete subclasses should implement RefreshTokenIsAvailable and
// CreateAccessTokenFetcher properly.
class OAuth2TokenServiceDelegate {
virtual ~OAuth2TokenServiceDelegate();
virtual OAuth2AccessTokenFetcher* CreateAccessTokenFetcher(
const std::string& account_id,
net::URLRequestContextGetter* getter,
OAuth2AccessTokenConsumer* consumer) = 0;
virtual bool RefreshTokenIsAvailable(const std::string& account_id) const = 0;
virtual bool RefreshTokenHasError(const std::string& account_id) const;
virtual void UpdateAuthError(const std::string& account_id,
const GoogleServiceAuthError& error) {}
virtual std::vector<std::string> GetAccounts();
virtual void RevokeAllCredentials(){};
virtual void InvalidateAccessToken(const std::string& account_id,
const std::string& client_id,
const std::set<std::string>& scopes,
const std::string& access_token) {}
virtual void Shutdown() {}
virtual void LoadCredentials(const std::string& primary_account_id) {}
virtual void UpdateCredentials(const std::string& account_id,
const std::string& refresh_token) {}
virtual void RevokeCredentials(const std::string& account_id) {}
virtual net::URLRequestContextGetter* GetRequestContext() const;
bool ValidateAccountId(const std::string& account_id) const;
// Add or remove observers of this token service.
void AddObserver(OAuth2TokenService::Observer* observer);
void RemoveObserver(OAuth2TokenService::Observer* observer);
// Returns a pointer to its instance of net::BackoffEntry if it has one, or
// a nullptr otherwise.
virtual const net::BackoffEntry* BackoffEntry() const;
// Called by subclasses to notify observers.
virtual void FireRefreshTokenAvailable(const std::string& account_id);
virtual void FireRefreshTokenRevoked(const std::string& account_id);
virtual void FireRefreshTokensLoaded();
// Helper class to scope batch changes.
class ScopedBatchChange {
explicit ScopedBatchChange(OAuth2TokenServiceDelegate* delegate);
OAuth2TokenServiceDelegate* delegate_; // Weak.
// This function is called by derived classes to help implement
// RefreshTokenHasError(). It centralizes the code for determining if
// |error| is worthy of being reported as an error for purposes of
// RefreshTokenHasError().
static bool IsError(const GoogleServiceAuthError& error);
// List of observers to notify when refresh token availability changes.
// Makes sure list is empty on destruction.
base::ObserverList<OAuth2TokenService::Observer, true> observer_list_;
void StartBatchChanges();
void EndBatchChanges();
// The depth of batch changes.
int batch_change_depth_;