fake_profile_oauth2_token_service.cc revision 8bcbed890bc3ce4d7a057a8f32cab53fa534672e
1// Copyright 2013 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.
4
5#include "chrome/browser/signin/fake_profile_oauth2_token_service.h"
6
7FakeProfileOAuth2TokenService::PendingRequest::PendingRequest() {
8}
9
10FakeProfileOAuth2TokenService::PendingRequest::~PendingRequest() {
11}
12
13// static
14BrowserContextKeyedService* FakeProfileOAuth2TokenService::Build(
15    content::BrowserContext* profile) {
16  FakeProfileOAuth2TokenService* service = new FakeProfileOAuth2TokenService();
17  service->Initialize(reinterpret_cast<Profile*>(profile));
18  return service;
19}
20
21FakeProfileOAuth2TokenService::FakeProfileOAuth2TokenService() {
22}
23
24FakeProfileOAuth2TokenService::~FakeProfileOAuth2TokenService() {
25}
26
27bool FakeProfileOAuth2TokenService::RefreshTokenIsAvailable(
28    const std::string& account_id) {
29  return !GetRefreshToken(account_id).empty();
30}
31
32void FakeProfileOAuth2TokenService::IssueRefreshToken(
33    const std::string& token) {
34  IssueRefreshTokenForUser("account_id", token);
35}
36
37void FakeProfileOAuth2TokenService::IssueRefreshTokenForUser(
38    const std::string& account_id,
39    const std::string& token) {
40  refresh_token_ = token;
41  if (refresh_token_.empty())
42    FireRefreshTokenRevoked(account_id);
43  else
44    FireRefreshTokenAvailable(account_id);
45  // TODO(atwilson): Maybe we should also call FireRefreshTokensLoaded() here?
46}
47
48void FakeProfileOAuth2TokenService::IssueTokenForScope(
49    const ScopeSet& scope,
50    const std::string& access_token,
51    const base::Time& expiration) {
52  CompleteRequests(false,
53                   scope,
54                   GoogleServiceAuthError::AuthErrorNone(),
55                   access_token,
56                   expiration);
57}
58
59void FakeProfileOAuth2TokenService::IssueErrorForScope(
60    const ScopeSet& scope,
61    const GoogleServiceAuthError& error) {
62  CompleteRequests(false, scope, error, std::string(), base::Time());
63}
64
65void FakeProfileOAuth2TokenService::IssueErrorForAllPendingRequests(
66    const GoogleServiceAuthError& error) {
67  CompleteRequests(true, ScopeSet(), error, std::string(), base::Time());
68}
69
70void FakeProfileOAuth2TokenService::IssueTokenForAllPendingRequests(
71    const std::string& access_token,
72    const base::Time& expiration) {
73  CompleteRequests(true,
74                   ScopeSet(),
75                   GoogleServiceAuthError::AuthErrorNone(),
76                   access_token,
77                   expiration);
78}
79
80void FakeProfileOAuth2TokenService::CompleteRequests(
81    bool all_scopes,
82    const ScopeSet& scope,
83    const GoogleServiceAuthError& error,
84    const std::string& access_token,
85    const base::Time& expiration) {
86  std::vector<FakeProfileOAuth2TokenService::PendingRequest> requests =
87      GetPendingRequests();
88
89  // Walk the requests and notify the callbacks.
90  for (std::vector<PendingRequest>::iterator it = pending_requests_.begin();
91       it != pending_requests_.end(); ++it) {
92    if (it->request && (all_scopes || it->scopes == scope))
93      it->request->InformConsumer(error, access_token, expiration);
94  }
95}
96
97std::string FakeProfileOAuth2TokenService::GetRefreshToken(
98    const std::string& account_id) {
99  return refresh_token_;
100}
101
102net::URLRequestContextGetter*
103FakeProfileOAuth2TokenService::GetRequestContext() {
104  return NULL;
105}
106
107std::vector<FakeProfileOAuth2TokenService::PendingRequest>
108FakeProfileOAuth2TokenService::GetPendingRequests() {
109  std::vector<PendingRequest> valid_requests;
110  for (std::vector<PendingRequest>::iterator it = pending_requests_.begin();
111       it != pending_requests_.end(); ++it) {
112    if (it->request)
113      valid_requests.push_back(*it);
114  }
115  return valid_requests;
116}
117
118void FakeProfileOAuth2TokenService::FetchOAuth2Token(
119    RequestImpl* request,
120    const std::string& account_id,
121    net::URLRequestContextGetter* getter,
122    const std::string& client_id,
123    const std::string& client_secret,
124    const ScopeSet& scopes) {
125  PendingRequest pending_request;
126  pending_request.account_id = account_id;
127  pending_request.client_id = client_id;
128  pending_request.client_secret = client_secret;
129  pending_request.scopes = scopes;
130  pending_request.request = request->AsWeakPtr();
131  pending_requests_.push_back(pending_request);
132}
133