fake_profile_oauth2_token_service.cc revision 68043e1e95eeb07d5cae7aca370b26518b0867d6
13551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 23551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 33551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)// found in the LICENSE file. 43551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 53551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "chrome/browser/signin/fake_profile_oauth2_token_service.h" 63551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 73551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)FakeProfileOAuth2TokenService::PendingRequest::PendingRequest() { 83551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)} 93551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 103551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)FakeProfileOAuth2TokenService::PendingRequest::~PendingRequest() { 113551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)} 123551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 133551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)// static 143551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)BrowserContextKeyedService* FakeProfileOAuth2TokenService::Build( 153551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) content::BrowserContext* profile) { 1658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) FakeProfileOAuth2TokenService* service = new FakeProfileOAuth2TokenService(); 1758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) service->Initialize(reinterpret_cast<Profile*>(profile)); 1858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) return service; 193551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)} 203551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 213551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)FakeProfileOAuth2TokenService::FakeProfileOAuth2TokenService() { 223551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)} 233551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 243551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)FakeProfileOAuth2TokenService::~FakeProfileOAuth2TokenService() { 253551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)} 263551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 2768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)bool FakeProfileOAuth2TokenService::RefreshTokenIsAvailable( 2868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) const std::string& account_id) { 2968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) return !GetRefreshToken(account_id).empty(); 3068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)} 3168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 323551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)void FakeProfileOAuth2TokenService::IssueRefreshToken( 333551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) const std::string& token) { 343551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) refresh_token_ = token; 353551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) if (refresh_token_.empty()) 363551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) FireRefreshTokenRevoked("account_id"); 373551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) else 383551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) FireRefreshTokenAvailable("account_id"); 393551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // TODO(atwilson): Maybe we should also call FireRefreshTokensLoaded() here? 403551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)} 413551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 423551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)void FakeProfileOAuth2TokenService::IssueTokenForScope( 433551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) const ScopeSet& scope, 443551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) const std::string& access_token, 453551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) const base::Time& expiration) { 463551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) CompleteRequests(false, 473551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) scope, 483551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) GoogleServiceAuthError::AuthErrorNone(), 493551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) access_token, 503551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) expiration); 513551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)} 523551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 533551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)void FakeProfileOAuth2TokenService::IssueErrorForScope( 543551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) const ScopeSet& scope, 553551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) const GoogleServiceAuthError& error) { 563551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) CompleteRequests(false, scope, error, std::string(), base::Time()); 573551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)} 583551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 593551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)void FakeProfileOAuth2TokenService::IssueErrorForAllPendingRequests( 603551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) const GoogleServiceAuthError& error) { 613551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) CompleteRequests(true, ScopeSet(), error, std::string(), base::Time()); 623551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)} 633551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 643551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)void FakeProfileOAuth2TokenService::IssueTokenForAllPendingRequests( 653551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) const std::string& access_token, 663551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) const base::Time& expiration) { 673551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) CompleteRequests(true, 683551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) ScopeSet(), 693551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) GoogleServiceAuthError::AuthErrorNone(), 703551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) access_token, 713551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) expiration); 723551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)} 733551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 743551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)void FakeProfileOAuth2TokenService::CompleteRequests( 753551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) bool all_scopes, 763551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) const ScopeSet& scope, 773551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) const GoogleServiceAuthError& error, 783551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) const std::string& access_token, 793551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) const base::Time& expiration) { 803551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) std::vector<FakeProfileOAuth2TokenService::PendingRequest> requests = 813551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) GetPendingRequests(); 823551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // Walk the requests and notify the callbacks. 833551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) for (std::vector<PendingRequest>::iterator it = pending_requests_.begin(); 843551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) it != pending_requests_.end(); ++it) { 853551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) if (it->request && (all_scopes || it->scopes == scope)) 863551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) it->request->InformConsumer(error, access_token, expiration); 873551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 883551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)} 893551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 9068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)std::string FakeProfileOAuth2TokenService::GetRefreshToken( 9168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) const std::string& account_id) { 923551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) return refresh_token_; 933551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)} 943551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 953551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)net::URLRequestContextGetter* 963551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)FakeProfileOAuth2TokenService::GetRequestContext() { 973551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) return NULL; 983551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)} 993551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 1003551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)std::vector<FakeProfileOAuth2TokenService::PendingRequest> 1013551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)FakeProfileOAuth2TokenService::GetPendingRequests() { 1023551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) std::vector<PendingRequest> valid_requests; 1033551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) for (std::vector<PendingRequest>::iterator it = pending_requests_.begin(); 1043551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) it != pending_requests_.end(); ++it) { 1053551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) if (it->request) 1063551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) valid_requests.push_back(*it); 1073551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 1083551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) return valid_requests; 1093551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)} 1103551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 1113551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)void FakeProfileOAuth2TokenService::FetchOAuth2Token( 1123551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) RequestImpl* request, 11368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) const std::string& account_id, 1143551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) net::URLRequestContextGetter* getter, 1153551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) const std::string& client_id, 1163551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) const std::string& client_secret, 1173551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) const ScopeSet& scopes) { 1183551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) PendingRequest pending_request; 11968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) pending_request.account_id = account_id; 1203551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) pending_request.client_id = client_id; 1213551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) pending_request.client_secret = client_secret; 1223551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) pending_request.scopes = scopes; 1233551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) pending_request.request = request->AsWeakPtr(); 1243551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) pending_requests_.push_back(pending_request); 1253551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)} 126