fake_profile_oauth2_token_service.h revision 3551c9c881056c480085172ff9840cab31610854
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)#ifndef CHROME_BROWSER_SIGNIN_FAKE_PROFILE_OAUTH2_TOKEN_SERVICE_H_ 63551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#define CHROME_BROWSER_SIGNIN_FAKE_PROFILE_OAUTH2_TOKEN_SERVICE_H_ 73551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 83551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "chrome/browser/signin/profile_oauth2_token_service.h" 93551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 103551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include <string> 113551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include <vector> 123551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 133551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "base/compiler_specific.h" 143551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "base/memory/weak_ptr.h" 153551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 163551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)namespace content { 173551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)class BrowserContext; 183551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)} 193551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 203551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)// Helper class to simplify writing unittests that depend on an instance of 213551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)// ProfileOAuth2TokenService. 223551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)// 233551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)// Tests would typically do something like the following: 243551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)// 253551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)// FakeProfileOAuth2TokenService service; 263551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)// ... 273551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)// service.IssueRefreshToken("token"); // Issue refresh token/notify observers 283551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)// ... 293551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)// // Confirm that there is at least one active request. 303551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)// EXPECT_GT(0U, service.GetPendingRequests().size()); 313551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)// ... 323551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)// // Make any pending token fetches for a given scope succeed. 333551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)// ScopeSet scopes; 343551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)// scopes.insert(GaiaConstants::kYourServiceScope); 353551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)// IssueTokenForScope(scopes, "access_token", base::Time()::Max()); 363551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)// ... 373551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)// // ...or make them fail... 383551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)// IssueErrorForScope(scopes, GoogleServiceAuthError(INVALID_GAIA_CREDENTIALS)); 393551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)// 403551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)class FakeProfileOAuth2TokenService : public ProfileOAuth2TokenService { 413551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) public: 423551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) struct PendingRequest { 433551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) PendingRequest(); 443551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) ~PendingRequest(); 453551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 463551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) std::string client_id; 473551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) std::string client_secret; 483551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) ScopeSet scopes; 493551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) base::WeakPtr<RequestImpl> request; 503551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) }; 513551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 523551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) FakeProfileOAuth2TokenService(); 533551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) virtual ~FakeProfileOAuth2TokenService(); 543551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 553551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // Sets the current refresh token. If |token| is non-empty, this will invoke 563551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // OnRefreshTokenAvailable() on all Observers, otherwise this will invoke 573551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // OnRefreshTokenRevoked(). 583551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) void IssueRefreshToken(const std::string& token); 593551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 603551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // Gets a list of active requests (can be used by tests to validate that the 613551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // correct request has been issued). 623551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) std::vector<PendingRequest> GetPendingRequests(); 633551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 643551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // Helper routines to issue tokens for pending requests. 653551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) void IssueTokenForScope(const ScopeSet& scopes, 663551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) const std::string& access_token, 673551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) const base::Time& expiration); 683551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 693551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) void IssueErrorForScope(const ScopeSet& scopes, 703551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) const GoogleServiceAuthError& error); 713551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 723551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) void IssueTokenForAllPendingRequests(const std::string& access_token, 733551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) const base::Time& expiration); 743551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 753551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) void IssueErrorForAllPendingRequests(const GoogleServiceAuthError& error); 763551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 773551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) virtual void Shutdown() OVERRIDE; 783551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 793551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // Helper function to be used with 803551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // BrowserContextKeyedService::SetTestingFactory(). 813551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) static BrowserContextKeyedService* Build(content::BrowserContext* profile); 823551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 833551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) protected: 843551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // OAuth2TokenService overrides. 853551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) virtual void FetchOAuth2Token(RequestImpl* request, 863551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) net::URLRequestContextGetter* getter, 873551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) const std::string& client_id, 883551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) const std::string& client_secret, 893551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) const ScopeSet& scopes) OVERRIDE; 903551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 913551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) virtual std::string GetRefreshToken() OVERRIDE; 923551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 933551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) virtual net::URLRequestContextGetter* GetRequestContext() OVERRIDE; 943551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 953551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) private: 963551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // Helper function to complete pending requests - if |all_scopes| is true, 973551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // then all pending requests are completed, otherwise, only those requests 983551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // matching |scopes| are completed. 993551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) void CompleteRequests(bool all_scopes, 1003551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) const ScopeSet& scopes, 1013551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) const GoogleServiceAuthError& error, 1023551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) const std::string& access_token, 1033551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) const base::Time& expiration); 1043551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 1053551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) std::vector<PendingRequest> pending_requests_; 1063551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) std::string refresh_token_; 1073551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 1083551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(FakeProfileOAuth2TokenService); 1093551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)}; 1103551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 1113551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#endif // CHROME_BROWSER_SIGNIN_FAKE_PROFILE_OAUTH2_TOKEN_SERVICE_H_ 112