ubertoken_fetcher.h revision 5d1f7b1de12d16ceb2c938c56701a3e8bfa558f7
1// Copyright 2014 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef GOOGLE_APIS_GAIA_UBERTOKEN_FETCHER_H_
6#define GOOGLE_APIS_GAIA_UBERTOKEN_FETCHER_H_
7
8#include "base/memory/scoped_ptr.h"
9#include "google_apis/gaia/gaia_auth_consumer.h"
10#include "google_apis/gaia/oauth2_token_service.h"
11
12// Allow to retrieves an uber-auth token for the user. This class uses the
13// |OAuth2TokenService| and considers that the user is already logged in. It
14// will use the OAuth2 access token to generate the uber-auth token.
15//
16// This class should be used on a single thread, but it can be whichever thread
17// that you like.
18//
19// This class can handle one request at a time.
20
21class GaiaAuthFetcher;
22class GoogleServiceAuthError;
23
24namespace net {
25class URLRequestContextGetter;
26}
27
28// Callback for the |UbertokenFetcher| class.
29class UbertokenConsumer {
30 public:
31  UbertokenConsumer() {}
32  virtual ~UbertokenConsumer() {}
33  virtual void OnUbertokenSuccess(const std::string& token) {}
34  virtual void OnUbertokenFailure(const GoogleServiceAuthError& error) {}
35};
36
37// Allows to retrieve an uber-auth token.
38class UbertokenFetcher : public GaiaAuthConsumer,
39                         public OAuth2TokenService::Consumer {
40 public:
41  UbertokenFetcher(OAuth2TokenService* token_service,
42                   UbertokenConsumer* consumer,
43                   net::URLRequestContextGetter* request_context);
44  virtual ~UbertokenFetcher();
45
46  // Start fetching the token for |account_id|.
47  virtual void StartFetchingToken(const std::string& account_id);
48
49  // Overriden from GaiaAuthConsumer
50  virtual void OnUberAuthTokenSuccess(const std::string& token) OVERRIDE;
51  virtual void OnUberAuthTokenFailure(
52      const GoogleServiceAuthError& error) OVERRIDE;
53
54  // Overriden from OAuth2TokenService::Consumer:
55  virtual void OnGetTokenSuccess(const OAuth2TokenService::Request* request,
56                                 const std::string& access_token,
57                                 const base::Time& expiration_time) OVERRIDE;
58  virtual void OnGetTokenFailure(const OAuth2TokenService::Request* request,
59                                 const GoogleServiceAuthError& error) OVERRIDE;
60
61 private:
62  OAuth2TokenService* token_service_;
63  UbertokenConsumer* consumer_;
64  net::URLRequestContextGetter* request_context_;
65  scoped_ptr<GaiaAuthFetcher> gaia_auth_fetcher_;
66  scoped_ptr<OAuth2TokenService::Request> access_token_request_;
67
68  DISALLOW_COPY_AND_ASSIGN(UbertokenFetcher);
69};
70
71#endif  // GOOGLE_APIS_GAIA_UBERTOKEN_FETCHER_H_
72