#ifndef GOOGLE_APIS_GAIA_FAKE_OAUTH2_ACCESS_TOKEN_MANAGER_H_
#define GOOGLE_APIS_GAIA_FAKE_OAUTH2_ACCESS_TOKEN_MANAGER_H_
#include "base/compiler_specific.h"
#include "base/memory/weak_ptr.h"
#include "google_apis/gaia/oauth2_access_token_manager.h"
namespace network {
class SharedURLLoaderFactory;
}
class GoogleServiceAuthError;
class FakeOAuth2AccessTokenManager : public OAuth2AccessTokenManager {
public:
struct PendingRequest {
PendingRequest();
PendingRequest(const PendingRequest& other);
~PendingRequest();
CoreAccountId account_id;
std::string client_id;
std::string client_secret;
scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory;
OAuth2AccessTokenManager::ScopeSet scopes;
base::WeakPtr<OAuth2AccessTokenManager::RequestImpl> request;
};
explicit FakeOAuth2AccessTokenManager(
OAuth2AccessTokenManager::Delegate* delegate);
FakeOAuth2AccessTokenManager(const FakeOAuth2AccessTokenManager&) = delete;
FakeOAuth2AccessTokenManager& operator=(const FakeOAuth2AccessTokenManager&) =
delete;
~FakeOAuth2AccessTokenManager() override;
std::vector<PendingRequest> GetPendingRequests();
void IssueAllTokensForAccount(const CoreAccountId& account_id,
const std::string& access_token,
const base::Time& expiration);
void IssueAllTokensForAccount(
const CoreAccountId& account_id,
const OAuth2AccessTokenConsumer::TokenResponse& token_response);
void IssueErrorForAllPendingRequestsForAccount(
const CoreAccountId& account_id,
const GoogleServiceAuthError& error);
void IssueTokenForScope(const OAuth2AccessTokenManager::ScopeSet& scopes,
const std::string& access_token,
const base::Time& expiration);
void IssueTokenForScope(
const OAuth2AccessTokenManager::ScopeSet& scopes,
const OAuth2AccessTokenConsumer::TokenResponse& token_response);
void IssueErrorForScope(const OAuth2AccessTokenManager::ScopeSet& scopes,
const GoogleServiceAuthError& error);
void IssueTokenForAllPendingRequests(const std::string& access_token,
const base::Time& expiration);
void IssueTokenForAllPendingRequests(
const OAuth2AccessTokenConsumer::TokenResponse& token_response);
void IssueErrorForAllPendingRequests(const GoogleServiceAuthError& error);
void set_auto_post_fetch_response_on_message_loop(bool auto_post_response) {
auto_post_fetch_response_on_message_loop_ = auto_post_response;
}
void CancelRequestsForAccount(const CoreAccountId& account_id,
const GoogleServiceAuthError& error) override;
void FetchOAuth2Token(
OAuth2AccessTokenManager::RequestImpl* request,
const CoreAccountId& account_id,
scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory,
const std::string& client_id,
const std::string& client_secret,
const std::string& consumer_name,
const OAuth2AccessTokenManager::ScopeSet& scopes) override;
void InvalidateAccessTokenImpl(
const CoreAccountId& account_id,
const std::string& client_id,
const OAuth2AccessTokenManager::ScopeSet& scopes,
const std::string& access_token) override;
private:
void CompleteRequests(
const CoreAccountId& account_id,
bool all_scopes,
const OAuth2AccessTokenManager::ScopeSet& scopes,
const GoogleServiceAuthError& error,
const OAuth2AccessTokenConsumer::TokenResponse& token_response);
std::vector<PendingRequest> pending_requests_;
bool auto_post_fetch_response_on_message_loop_;
base::WeakPtrFactory<FakeOAuth2AccessTokenManager> weak_ptr_factory_{this};
};
#endif