1 // Copyright 2013 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.
5 #ifndef REMOTING_HOST_SETUP_OAUTH_CLIENT
6 #define REMOTING_HOST_SETUP_OAUTH_CLIENT
11 #include "base/callback.h"
12 #include "base/memory/ref_counted.h"
13 #include "google_apis/gaia/gaia_oauth_client.h"
14 #include "net/url_request/url_request_context_getter.h"
17 class URLRequestContext
;
22 // A wrapper around GaiaOAuthClient that provides a more convenient interface,
23 // with queueing of requests and a callback rather than a delegate.
24 class OAuthClient
: public gaia::GaiaOAuthClient::Delegate
{
26 // Called when GetCredentialsFromAuthCode is completed, with the |user_email|
27 // and |refresh_token| that correspond to the given |auth_code|, or with empty
29 typedef base::Callback
<void(
30 const std::string
& user_email
,
31 const std::string
& refresh_token
)> CompletionCallback
;
34 scoped_refptr
<net::URLRequestContextGetter
> url_request_context_getter
);
36 virtual ~OAuthClient();
38 // Redeems |auth_code| using |oauth_client_info| to obtain |refresh_token| and
39 // |access_token|, then uses the userinfo endpoint to obtain |user_email|.
40 // Calls CompletionCallback with |user_email| and |refresh_token| when done,
41 // or with empty strings on error.
42 // If a request is received while another one is being processed, it is
43 // enqueued and processed after the first one is finished.
44 void GetCredentialsFromAuthCode(
45 const gaia::OAuthClientInfo
& oauth_client_info
,
46 const std::string
& auth_code
,
47 CompletionCallback on_done
);
49 // gaia::GaiaOAuthClient::Delegate
50 virtual void OnGetTokensResponse(const std::string
& refresh_token
,
51 const std::string
& access_token
,
52 int expires_in_seconds
) OVERRIDE
;
53 virtual void OnRefreshTokenResponse(const std::string
& access_token
,
54 int expires_in_seconds
) OVERRIDE
;
55 virtual void OnGetUserEmailResponse(const std::string
& user_email
) OVERRIDE
;
57 virtual void OnOAuthError() OVERRIDE
;
58 virtual void OnNetworkError(int response_code
) OVERRIDE
;
62 Request(const gaia::OAuthClientInfo
& oauth_client_info
,
63 const std::string
& auth_code
,
64 CompletionCallback on_done
);
66 gaia::OAuthClientInfo oauth_client_info
;
67 std::string auth_code
;
68 CompletionCallback on_done
;
71 void SendResponse(const std::string
& user_email
,
72 const std::string
& refresh_token
);
74 std::queue
<Request
> pending_requests_
;
75 gaia::GaiaOAuthClient gaia_oauth_client_
;
76 std::string refresh_token_
;
77 CompletionCallback on_done_
;
79 DISALLOW_COPY_AND_ASSIGN(OAuthClient
);
82 } // namespace remoting
84 #endif // REMOTING_HOST_SETUP_OAUTH_CLIENT