fake_oauth2_token_service.cc revision 6d86b77056ed63eb6871182f42a9fd5f07550f90
15d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
25d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// found in the LICENSE file.
45d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
55d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "google_apis/gaia/fake_oauth2_token_service.h"
65d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
76d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)FakeOAuth2TokenService::PendingRequest::PendingRequest() {
86d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)}
96d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)
106d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)FakeOAuth2TokenService::PendingRequest::~PendingRequest() {
116d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)}
126d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)
136d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)FakeOAuth2TokenService::FakeOAuth2TokenService() : request_context_(NULL) {
146d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)}
155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)FakeOAuth2TokenService::~FakeOAuth2TokenService() {
175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
196d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)std::vector<std::string> FakeOAuth2TokenService::GetAccounts() {
206d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)  return std::vector<std::string>(account_ids_.begin(), account_ids_.end());
216d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)}
226d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)
235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void FakeOAuth2TokenService::FetchOAuth2Token(
245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    RequestImpl* request,
255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    const std::string& account_id,
265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    net::URLRequestContextGetter* getter,
275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    const std::string& client_id,
285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    const std::string& client_secret,
295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    const ScopeSet& scopes) {
306d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)  PendingRequest pending_request;
316d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)  pending_request.account_id = account_id;
326d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)  pending_request.client_id = client_id;
336d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)  pending_request.client_secret = client_secret;
346d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)  pending_request.scopes = scopes;
356d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)  pending_request.request = request->AsWeakPtr();
366d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)  pending_requests_.push_back(pending_request);
375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void FakeOAuth2TokenService::InvalidateOAuth2Token(
405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    const std::string& account_id,
415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    const std::string& client_id,
425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    const ScopeSet& scopes,
435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    const std::string& access_token) {
445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)net::URLRequestContextGetter* FakeOAuth2TokenService::GetRequestContext() {
47a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  return request_context_;
48a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)}
49a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
50a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)bool FakeOAuth2TokenService::RefreshTokenIsAvailable(
51a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    const std::string& account_id) const {
52a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  return account_ids_.count(account_id) != 0;
53a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)};
54a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
55a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)void FakeOAuth2TokenService::AddAccount(const std::string& account_id) {
56a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  account_ids_.insert(account_id);
576d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)  FireRefreshTokenAvailable(account_id);
58a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)}
59a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
606d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)void FakeOAuth2TokenService::RemoveAccount(const std::string& account_id) {
616d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)  account_ids_.erase(account_id);
626d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)  FireRefreshTokenRevoked(account_id);
636d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)}
646d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)
656d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)void FakeOAuth2TokenService::IssueAllTokensForAccount(
666d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)    const std::string& account_id,
676d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)    const std::string& access_token,
686d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)    const base::Time& expiration) {
696d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)
706d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)  // Walk the requests and notify the callbacks.
716d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)  for (std::vector<PendingRequest>::iterator it = pending_requests_.begin();
726d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)       it != pending_requests_.end(); ++it) {
736d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)    if (it->request && (account_id == it->account_id)) {
746d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)      it->request->InformConsumer(
756d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)          GoogleServiceAuthError::AuthErrorNone(), access_token, expiration);
766d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)    }
776d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)  }
786d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)}
796d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)
806d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)
81a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)OAuth2AccessTokenFetcher* FakeOAuth2TokenService::CreateAccessTokenFetcher(
82a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    const std::string& account_id,
83a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    net::URLRequestContextGetter* getter,
84a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    OAuth2AccessTokenConsumer* consumer) {
85a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // |FakeOAuth2TokenService| overrides |FetchOAuth2Token| and thus
86a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // |CreateAccessTokenFetcher| should never be called.
87a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  NOTREACHED();
885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  return NULL;
895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
90