1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "google_apis/gaia/fake_oauth2_token_service.h"
7 FakeOAuth2TokenService::PendingRequest::PendingRequest() {
10 FakeOAuth2TokenService::PendingRequest::~PendingRequest() {
13 FakeOAuth2TokenService::FakeOAuth2TokenService()
14 : OAuth2TokenService(new FakeOAuth2TokenServiceDelegate(nullptr)) {
17 FakeOAuth2TokenService::~FakeOAuth2TokenService() {
20 void FakeOAuth2TokenService::FetchOAuth2Token(
22 const std::string
& account_id
,
23 net::URLRequestContextGetter
* getter
,
24 const std::string
& client_id
,
25 const std::string
& client_secret
,
26 const ScopeSet
& scopes
) {
27 PendingRequest pending_request
;
28 pending_request
.account_id
= account_id
;
29 pending_request
.client_id
= client_id
;
30 pending_request
.client_secret
= client_secret
;
31 pending_request
.scopes
= scopes
;
32 pending_request
.request
= request
->AsWeakPtr();
33 pending_requests_
.push_back(pending_request
);
36 void FakeOAuth2TokenService::InvalidateAccessTokenImpl(
37 const std::string
& account_id
,
38 const std::string
& client_id
,
39 const ScopeSet
& scopes
,
40 const std::string
& access_token
) {
43 void FakeOAuth2TokenService::AddAccount(const std::string
& account_id
) {
44 GetDelegate()->UpdateCredentials(account_id
, "fake_refresh_token");
47 void FakeOAuth2TokenService::RemoveAccount(const std::string
& account_id
) {
48 GetDelegate()->RevokeCredentials(account_id
);
51 void FakeOAuth2TokenService::IssueAllTokensForAccount(
52 const std::string
& account_id
,
53 const std::string
& access_token
,
54 const base::Time
& expiration
) {
55 // Walk the requests and notify the callbacks.
56 // Using a copy of pending requests to make sure a new token request triggered
57 // from the handling code does not invalidate the iterator.
58 std::vector
<PendingRequest
> pending_requests_copy
= pending_requests_
;
59 for (std::vector
<PendingRequest
>::iterator it
= pending_requests_copy
.begin();
60 it
!= pending_requests_copy
.end();
62 if (it
->request
&& (account_id
== it
->account_id
)) {
63 it
->request
->InformConsumer(
64 GoogleServiceAuthError::AuthErrorNone(), access_token
, expiration
);
69 void FakeOAuth2TokenService::IssueErrorForAllPendingRequestsForAccount(
70 const std::string
& account_id
,
71 const GoogleServiceAuthError
& auth_error
) {
72 // Walk the requests and notify the callbacks.
73 // Using a copy of pending requests to make sure retrying a request in
74 // response to the error does not invalidate the iterator.
75 std::vector
<PendingRequest
> pending_requests_copy
= pending_requests_
;
76 for (std::vector
<PendingRequest
>::iterator it
= pending_requests_copy
.begin();
77 it
!= pending_requests_copy
.end();
79 if (it
->request
&& (account_id
== it
->account_id
)) {
80 it
->request
->InformConsumer(auth_error
, std::string(), base::Time());
85 FakeOAuth2TokenServiceDelegate
*
86 FakeOAuth2TokenService::GetFakeOAuth2TokenServiceDelegate() {
87 return static_cast<FakeOAuth2TokenServiceDelegate
*>(GetDelegate());