blob: adff32d321986d259f5ca8e6a361dcc80bf5a134 [file] [log] [blame]
// Copyright 2014 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 "google_apis/gaia/fake_oauth2_token_service.h"
FakeOAuth2TokenService::PendingRequest::PendingRequest() {
}
FakeOAuth2TokenService::PendingRequest::~PendingRequest() {
}
FakeOAuth2TokenService::FakeOAuth2TokenService() : request_context_(NULL) {
}
FakeOAuth2TokenService::~FakeOAuth2TokenService() {
}
std::vector<std::string> FakeOAuth2TokenService::GetAccounts() {
return std::vector<std::string>(account_ids_.begin(), account_ids_.end());
}
void FakeOAuth2TokenService::FetchOAuth2Token(
RequestImpl* request,
const std::string& account_id,
net::URLRequestContextGetter* getter,
const std::string& client_id,
const std::string& client_secret,
const ScopeSet& scopes) {
PendingRequest pending_request;
pending_request.account_id = account_id;
pending_request.client_id = client_id;
pending_request.client_secret = client_secret;
pending_request.scopes = scopes;
pending_request.request = request->AsWeakPtr();
pending_requests_.push_back(pending_request);
}
void FakeOAuth2TokenService::InvalidateOAuth2Token(
const std::string& account_id,
const std::string& client_id,
const ScopeSet& scopes,
const std::string& access_token) {
}
net::URLRequestContextGetter* FakeOAuth2TokenService::GetRequestContext() {
return request_context_;
}
bool FakeOAuth2TokenService::RefreshTokenIsAvailable(
const std::string& account_id) const {
return account_ids_.count(account_id) != 0;
};
void FakeOAuth2TokenService::AddAccount(const std::string& account_id) {
account_ids_.insert(account_id);
FireRefreshTokenAvailable(account_id);
}
void FakeOAuth2TokenService::RemoveAccount(const std::string& account_id) {
account_ids_.erase(account_id);
FireRefreshTokenRevoked(account_id);
}
void FakeOAuth2TokenService::IssueAllTokensForAccount(
const std::string& account_id,
const std::string& access_token,
const base::Time& expiration) {
// Walk the requests and notify the callbacks.
// Using a copy of pending requests to make sure a new token request triggered
// from the handling code does not invalidate the iterator.
std::vector<PendingRequest> pending_requests_copy = pending_requests_;
for (std::vector<PendingRequest>::iterator it = pending_requests_copy.begin();
it != pending_requests_copy.end();
++it) {
if (it->request && (account_id == it->account_id)) {
it->request->InformConsumer(
GoogleServiceAuthError::AuthErrorNone(), access_token, expiration);
}
}
}
void FakeOAuth2TokenService::IssueErrorForAllPendingRequestsForAccount(
const std::string& account_id,
const GoogleServiceAuthError& auth_error) {
// Walk the requests and notify the callbacks.
// Using a copy of pending requests to make sure retrying a request in
// response to the error does not invalidate the iterator.
std::vector<PendingRequest> pending_requests_copy = pending_requests_;
for (std::vector<PendingRequest>::iterator it = pending_requests_copy.begin();
it != pending_requests_copy.end();
++it) {
if (it->request && (account_id == it->account_id)) {
it->request->InformConsumer(auth_error, std::string(), base::Time());
}
}
}
OAuth2AccessTokenFetcher* FakeOAuth2TokenService::CreateAccessTokenFetcher(
const std::string& account_id,
net::URLRequestContextGetter* getter,
OAuth2AccessTokenConsumer* consumer) {
// |FakeOAuth2TokenService| overrides |FetchOAuth2Token| and thus
// |CreateAccessTokenFetcher| should never be called.
NOTREACHED();
return NULL;
}