15d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
25d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// found in the LICENSE file.
45d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
55d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#ifndef GOOGLE_APIS_GAIA_FAKE_OAUTH2_TOKEN_SERVICE_H_
65d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#define GOOGLE_APIS_GAIA_FAKE_OAUTH2_TOKEN_SERVICE_H_
75d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
8a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include <set>
95d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include <string>
105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/compiler_specific.h"
126d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)#include "base/memory/weak_ptr.h"
135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "google_apis/gaia/oauth2_token_service.h"
145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)namespace net {
165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class URLRequestContextGetter;
175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Do-nothing implementation of OAuth2TokenService.
205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class FakeOAuth2TokenService : public OAuth2TokenService {
215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) public:
225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  FakeOAuth2TokenService();
235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual ~FakeOAuth2TokenService();
245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
256d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)  virtual std::vector<std::string> GetAccounts() OVERRIDE;
266d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)
27a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  void AddAccount(const std::string& account_id);
286d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)  void RemoveAccount(const std::string& account_id);
296d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)
30116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // Helper routines to issue tokens for pending requests or complete them with
31116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // error.
326d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)  void IssueAllTokensForAccount(const std::string& account_id,
336d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)                                const std::string& access_token,
346d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)                                const base::Time& expiration);
35116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  void IssueErrorForAllPendingRequestsForAccount(
36116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      const std::string& account_id,
37116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      const GoogleServiceAuthError& auth_error);
38a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
39a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  void set_request_context(net::URLRequestContextGetter* request_context) {
40a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    request_context_ = request_context;
41a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  }
42a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) protected:
445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // OAuth2TokenService overrides.
455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual void FetchOAuth2Token(RequestImpl* request,
465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                const std::string& account_id,
475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                net::URLRequestContextGetter* getter,
485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                const std::string& client_id,
495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                const std::string& client_secret,
505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                const ScopeSet& scopes) OVERRIDE;
515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual void InvalidateOAuth2Token(const std::string& account_id,
535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                     const std::string& client_id,
545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                     const ScopeSet& scopes,
555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                     const std::string& access_token) OVERRIDE;
565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
57a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  virtual bool RefreshTokenIsAvailable(const std::string& account_id) const
58a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      OVERRIDE;
595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) private:
616d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)  struct PendingRequest {
626d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)    PendingRequest();
636d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)    ~PendingRequest();
646d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)
656d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)    std::string account_id;
666d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)    std::string client_id;
676d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)    std::string client_secret;
686d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)    ScopeSet scopes;
696d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)    base::WeakPtr<RequestImpl> request;
706d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)  };
716d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)
725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // OAuth2TokenService overrides.
735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual net::URLRequestContextGetter* GetRequestContext() OVERRIDE;
745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
75a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  virtual OAuth2AccessTokenFetcher* CreateAccessTokenFetcher(
76a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      const std::string& account_id,
77a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      net::URLRequestContextGetter* getter,
78a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      OAuth2AccessTokenConsumer* consumer) OVERRIDE;
79a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
80a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  std::set<std::string> account_ids_;
816d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)  std::vector<PendingRequest> pending_requests_;
826d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)
83a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  net::URLRequestContextGetter* request_context_;  // weak
84a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(FakeOAuth2TokenService);
865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)};
875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#endif  // GOOGLE_APIS_GAIA_FAKE_OAUTH2_TOKEN_SERVICE_H_
89