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) 80116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid FakeOAuth2TokenService::IssueErrorForAllPendingRequestsForAccount( 81116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const std::string& account_id, 82116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const GoogleServiceAuthError& auth_error) { 83116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Walk the requests and notify the callbacks. 84116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch for (std::vector<PendingRequest>::iterator it = pending_requests_.begin(); 85116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch it != pending_requests_.end(); 86116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ++it) { 87116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if (it->request && (account_id == it->account_id)) { 88116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch it->request->InformConsumer(auth_error, std::string(), base::Time()); 89116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 90116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 91116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 926d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 93a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)OAuth2AccessTokenFetcher* FakeOAuth2TokenService::CreateAccessTokenFetcher( 94a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const std::string& account_id, 95a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) net::URLRequestContextGetter* getter, 96a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) OAuth2AccessTokenConsumer* consumer) { 97a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // |FakeOAuth2TokenService| overrides |FetchOAuth2Token| and thus 98a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // |CreateAccessTokenFetcher| should never be called. 99a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) NOTREACHED(); 1005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return NULL; 1015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 102