Chromium Code Reviews| Index: remoting/host/oauth_token_getter.h |
| diff --git a/remoting/host/oauth_token_getter.h b/remoting/host/oauth_token_getter.h |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..92ab46e0aa3bfa4f5e74223fba282df1d873195f |
| --- /dev/null |
| +++ b/remoting/host/oauth_token_getter.h |
| @@ -0,0 +1,95 @@ |
| +// Copyright (c) 2012 The Chromium Authors. All rights reserved. |
|
Sergey Ulanov
2014/02/08 03:16:36
lose (c), 2014
rmsousa
2014/02/10 23:07:39
Done.
|
| +// Use of this source code is governed by a BSD-style license that can be |
| +// found in the LICENSE file. |
| + |
| +#ifndef REMOTING_HOST_OAUTH_TOKEN_GETTER_H_ |
| +#define REMOTING_HOST_OAUTH_TOKEN_GETTER_H_ |
| + |
| +#include <queue> |
| + |
| +#include "base/basictypes.h" |
| +#include "base/callback.h" |
| +#include "base/threading/non_thread_safe.h" |
| +#include "google_apis/gaia/gaia_oauth_client.h" |
| + |
| +namespace net { |
| +class URLRequestContextGetter; |
| +} // namespace net |
| + |
| +namespace remoting { |
| + |
| +// OAuthTokenGetter caches OAuth access tokens and refreshes them as needed. |
| +class OAuthTokenGetter : |
| + public base::NonThreadSafe, |
| + public gaia::GaiaOAuthClient::Delegate { |
| + public: |
| + typedef base::Callback<void(const std::string& user_email, |
| + const std::string& access_token)> TokenCallback; |
| + |
| + // This structure contains information required to perform |
| + // authentication to OAuth2. |
| + struct OAuthCredentials { |
| + OAuthCredentials(const std::string& login_value, |
| + const std::string& refresh_token_value, |
| + bool is_service_account); |
| + |
| + // The user's account name (i.e. their email address). |
| + std::string login; |
| + |
| + // Token delegating authority to us to act as the user. |
| + std::string refresh_token; |
| + |
| + // Whether these credentials belong to a service account. |
| + bool is_service_account; |
| + }; |
| + |
| + OAuthTokenGetter( |
| + scoped_ptr<OAuthCredentials> oauth_credentials, |
| + scoped_refptr<net::URLRequestContextGetter> url_request_context_getter); |
| + virtual ~OAuthTokenGetter(); |
| + |
| + // Call |on_access_token| with an access token, or one of the callbacks. |
| + // These are individual callbacks, rather than a delegate object, to provide |
| + // flexibility for the caller to keep state or use WeakPtrs where needed. |
| + void CallWithToken(const TokenCallback& on_access_token, |
| + const base::Closure& on_network_error, |
| + const base::Closure& on_auth_error); |
|
Sergey Ulanov
2014/02/08 03:16:36
Do we need three separate callbacks? Maybe just ad
rmsousa
2014/02/10 23:07:39
Done.
|
| + |
| + // gaia::GaiaOAuthClient::Delegate interface. |
| + virtual void OnGetTokensResponse(const std::string& user_email, |
| + const std::string& access_token, |
| + int expires_seconds) OVERRIDE; |
| + virtual void OnRefreshTokenResponse(const std::string& access_token, |
| + int expires_in_seconds) OVERRIDE; |
| + virtual void OnGetUserEmailResponse(const std::string& user_email) OVERRIDE; |
| + virtual void OnOAuthError() OVERRIDE; |
| + virtual void OnNetworkError(int response_code) OVERRIDE; |
| + |
| + private: |
| + struct Callbacks { |
| + Callbacks(const TokenCallback& on_access_token, |
| + const base::Closure& on_network_error, |
| + const base::Closure& on_auth_error); |
| + ~Callbacks(); |
| + TokenCallback on_access_token; |
| + base::Closure on_network_error; |
| + base::Closure on_auth_error; |
| + }; |
| + |
| + void RefreshOAuthToken(); |
| + |
| + scoped_ptr<OAuthCredentials> oauth_credentials_; |
| + scoped_ptr<gaia::GaiaOAuthClient> gaia_oauth_client_; |
| + scoped_refptr<net::URLRequestContextGetter> url_request_context_getter_; |
| + |
| + bool refreshing_oauth_token_; |
| + std::string oauth_access_token_; |
| + base::Time auth_token_expiry_time_; |
| + std::queue<Callbacks> pending_callbacks_; |
| + |
| + DISALLOW_COPY_AND_ASSIGN(OAuthTokenGetter); |
| +}; |
| + |
| +} // namespace remoting |
| + |
| +#endif // REMOTING_HOST_OAUTH_TOKEN_GETTER_H_ |