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