fake_oauth2_token_service.h revision 116680a4aac90f2aa7413d9095a592090648e557
130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun// Copyright 2014 The Chromium Authors. All rights reserved.
230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun// Use of this source code is governed by a BSD-style license that can be
330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun// found in the LICENSE file.
430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun#ifndef GOOGLE_APIS_GAIA_FAKE_OAUTH2_TOKEN_SERVICE_H_
630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun#define GOOGLE_APIS_GAIA_FAKE_OAUTH2_TOKEN_SERVICE_H_
730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun#include <set>
930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun#include <string>
1030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
1130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun#include "base/compiler_specific.h"
1230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun#include "base/memory/weak_ptr.h"
1330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun#include "google_apis/gaia/oauth2_token_service.h"
1430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
1530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunnamespace net {
1630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunclass URLRequestContextGetter;
1730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun}
1830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
1930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun// Do-nothing implementation of OAuth2TokenService.
2030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunclass FakeOAuth2TokenService : public OAuth2TokenService {
2130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun public:
2230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  FakeOAuth2TokenService();
2330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  virtual ~FakeOAuth2TokenService();
2430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
2530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  virtual std::vector<std::string> GetAccounts() OVERRIDE;
2630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
2730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  void AddAccount(const std::string& account_id);
2830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  void RemoveAccount(const std::string& account_id);
2930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
3030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  // Helper routines to issue tokens for pending requests or complete them with
3130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  // error.
3230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  void IssueAllTokensForAccount(const std::string& account_id,
3330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun                                const std::string& access_token,
3430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun                                const base::Time& expiration);
3530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  void IssueErrorForAllPendingRequestsForAccount(
3630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun      const std::string& account_id,
3730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun      const GoogleServiceAuthError& auth_error);
3830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
3930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  void set_request_context(net::URLRequestContextGetter* request_context) {
4030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun    request_context_ = request_context;
4130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  }
4230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
4330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun protected:
4430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  // OAuth2TokenService overrides.
4530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  virtual void FetchOAuth2Token(RequestImpl* request,
4630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun                                const std::string& account_id,
4730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun                                net::URLRequestContextGetter* getter,
4830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun                                const std::string& client_id,
4930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun                                const std::string& client_secret,
5030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun                                const ScopeSet& scopes) OVERRIDE;
5130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
5230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  virtual void InvalidateOAuth2Token(const std::string& account_id,
5330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun                                     const std::string& client_id,
5430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun                                     const ScopeSet& scopes,
5530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun                                     const std::string& access_token) OVERRIDE;
5630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
5730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  virtual bool RefreshTokenIsAvailable(const std::string& account_id) const
5830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun      OVERRIDE;
5930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
6030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun private:
6130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  struct PendingRequest {
6230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun    PendingRequest();
6330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun    ~PendingRequest();
6430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
6530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun    std::string account_id;
6630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun    std::string client_id;
6730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun    std::string client_secret;
6830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun    ScopeSet scopes;
6930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun    base::WeakPtr<RequestImpl> request;
7030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  };
7130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
7230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  // OAuth2TokenService overrides.
7330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  virtual net::URLRequestContextGetter* GetRequestContext() OVERRIDE;
7430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
7530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  virtual OAuth2AccessTokenFetcher* CreateAccessTokenFetcher(
7630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun      const std::string& account_id,
7730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun      net::URLRequestContextGetter* getter,
7830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun      OAuth2AccessTokenConsumer* consumer) OVERRIDE;
7930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
8030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  std::set<std::string> account_ids_;
8130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  std::vector<PendingRequest> pending_requests_;
8230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
8330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  net::URLRequestContextGetter* request_context_;  // weak
8430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
8530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun  DISALLOW_COPY_AND_ASSIGN(FakeOAuth2TokenService);
8630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun};
8730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun
8830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun#endif  // GOOGLE_APIS_GAIA_FAKE_OAUTH2_TOKEN_SERVICE_H_
8930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun