fake_oauth2_token_service.h revision 6d86b77056ed63eb6871182f42a9fd5f07550f90
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)
306d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)  // Helper routines to issue tokens for pending requests.
316d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)  void IssueAllTokensForAccount(const std::string& account_id,
326d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)                                const std::string& access_token,
336d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)                                const base::Time& expiration);
34a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
35a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  void set_request_context(net::URLRequestContextGetter* request_context) {
36a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    request_context_ = request_context;
37a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  }
38a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) protected:
405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // OAuth2TokenService overrides.
415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual void FetchOAuth2Token(RequestImpl* request,
425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                const std::string& account_id,
435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                net::URLRequestContextGetter* getter,
445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                const std::string& client_id,
455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                const std::string& client_secret,
465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                const ScopeSet& scopes) OVERRIDE;
475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual void InvalidateOAuth2Token(const std::string& account_id,
495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                     const std::string& client_id,
505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                     const ScopeSet& scopes,
515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                     const std::string& access_token) OVERRIDE;
525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
53a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  virtual bool RefreshTokenIsAvailable(const std::string& account_id) const
54a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      OVERRIDE;
555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) private:
576d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)  struct PendingRequest {
586d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)    PendingRequest();
596d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)    ~PendingRequest();
606d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)
616d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)    std::string account_id;
626d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)    std::string client_id;
636d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)    std::string client_secret;
646d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)    ScopeSet scopes;
656d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)    base::WeakPtr<RequestImpl> request;
666d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)  };
676d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)
685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // OAuth2TokenService overrides.
695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual net::URLRequestContextGetter* GetRequestContext() OVERRIDE;
705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
71a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  virtual OAuth2AccessTokenFetcher* CreateAccessTokenFetcher(
72a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      const std::string& account_id,
73a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      net::URLRequestContextGetter* getter,
74a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      OAuth2AccessTokenConsumer* consumer) OVERRIDE;
75a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
76a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  std::set<std::string> account_ids_;
776d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)  std::vector<PendingRequest> pending_requests_;
786d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)
79a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  net::URLRequestContextGetter* request_context_;  // weak
80a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(FakeOAuth2TokenService);
825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)};
835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#endif  // GOOGLE_APIS_GAIA_FAKE_OAUTH2_TOKEN_SERVICE_H_
85