fake_profile_oauth2_token_service.cc revision 8bcbed890bc3ce4d7a057a8f32cab53fa534672e
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) { 348bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) IssueRefreshTokenForUser("account_id", token); 358bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)} 368bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 378bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)void FakeProfileOAuth2TokenService::IssueRefreshTokenForUser( 388bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) const std::string& account_id, 398bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) const std::string& token) { 403551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) refresh_token_ = token; 413551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) if (refresh_token_.empty()) 428bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) FireRefreshTokenRevoked(account_id); 433551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) else 448bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) FireRefreshTokenAvailable(account_id); 453551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // TODO(atwilson): Maybe we should also call FireRefreshTokensLoaded() here? 463551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)} 473551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 483551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)void FakeProfileOAuth2TokenService::IssueTokenForScope( 493551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) const ScopeSet& scope, 503551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) const std::string& access_token, 513551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) const base::Time& expiration) { 523551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) CompleteRequests(false, 533551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) scope, 543551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) GoogleServiceAuthError::AuthErrorNone(), 553551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) access_token, 563551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) expiration); 573551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)} 583551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 593551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)void FakeProfileOAuth2TokenService::IssueErrorForScope( 603551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) const ScopeSet& scope, 613551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) const GoogleServiceAuthError& error) { 623551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) CompleteRequests(false, scope, error, std::string(), base::Time()); 633551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)} 643551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 653551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)void FakeProfileOAuth2TokenService::IssueErrorForAllPendingRequests( 663551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) const GoogleServiceAuthError& error) { 673551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) CompleteRequests(true, ScopeSet(), error, std::string(), base::Time()); 683551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)} 693551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 703551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)void FakeProfileOAuth2TokenService::IssueTokenForAllPendingRequests( 713551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) const std::string& access_token, 723551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) const base::Time& expiration) { 733551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) CompleteRequests(true, 743551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) ScopeSet(), 753551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) GoogleServiceAuthError::AuthErrorNone(), 763551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) access_token, 773551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) expiration); 783551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)} 793551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 803551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)void FakeProfileOAuth2TokenService::CompleteRequests( 813551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) bool all_scopes, 823551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) const ScopeSet& scope, 833551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) const GoogleServiceAuthError& error, 843551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) const std::string& access_token, 853551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) const base::Time& expiration) { 863551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) std::vector<FakeProfileOAuth2TokenService::PendingRequest> requests = 873551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) GetPendingRequests(); 888bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 893551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // Walk the requests and notify the callbacks. 903551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) for (std::vector<PendingRequest>::iterator it = pending_requests_.begin(); 913551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) it != pending_requests_.end(); ++it) { 923551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) if (it->request && (all_scopes || it->scopes == scope)) 933551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) it->request->InformConsumer(error, access_token, expiration); 943551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 953551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)} 963551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 9768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)std::string FakeProfileOAuth2TokenService::GetRefreshToken( 9868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) const std::string& account_id) { 993551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) return refresh_token_; 1003551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)} 1013551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 1023551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)net::URLRequestContextGetter* 1033551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)FakeProfileOAuth2TokenService::GetRequestContext() { 1043551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) return NULL; 1053551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)} 1063551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 1073551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)std::vector<FakeProfileOAuth2TokenService::PendingRequest> 1083551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)FakeProfileOAuth2TokenService::GetPendingRequests() { 1093551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) std::vector<PendingRequest> valid_requests; 1103551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) for (std::vector<PendingRequest>::iterator it = pending_requests_.begin(); 1113551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) it != pending_requests_.end(); ++it) { 1123551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) if (it->request) 1133551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) valid_requests.push_back(*it); 1143551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 1153551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) return valid_requests; 1163551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)} 1173551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 1183551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)void FakeProfileOAuth2TokenService::FetchOAuth2Token( 1193551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) RequestImpl* request, 12068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) const std::string& account_id, 1213551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) net::URLRequestContextGetter* getter, 1223551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) const std::string& client_id, 1233551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) const std::string& client_secret, 1243551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) const ScopeSet& scopes) { 1253551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) PendingRequest pending_request; 12668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) pending_request.account_id = account_id; 1273551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) pending_request.client_id = client_id; 1283551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) pending_request.client_secret = client_secret; 1293551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) pending_request.scopes = scopes; 1303551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) pending_request.request = request->AsWeakPtr(); 1313551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) pending_requests_.push_back(pending_request); 1323551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)} 133