Chromium Code Reviews| Index: chrome/browser/net/gaia/token_service.h |
| diff --git a/chrome/browser/net/gaia/token_service.h b/chrome/browser/net/gaia/token_service.h |
| index adeb977fec54b698444268e687f95a375c077c2f..8725c667f1118f273f2b3ce0a848af0cffd7e370 100644 |
| --- a/chrome/browser/net/gaia/token_service.h |
| +++ b/chrome/browser/net/gaia/token_service.h |
| @@ -4,11 +4,12 @@ |
| // |
| // The TokenService will supply authentication tokens for any service that |
| // needs it, such as sync. Whenever the user logs in, a controller watching |
| -// the token service is expected to call ClientLogin to derive a new SID and |
| -// LSID. Whenever such credentials are available, the TokenService should be |
| -// updated with new credentials. The controller should then start fetching |
| -// tokens, which will be written to the database after retrieval, as well as |
| -// provided to listeners. |
| +// the token service is expected either to call ClientLogin to derive a new |
| +// SID and LSID, or to use GAIA OAuth requests to derive an OAuth1 access |
| +// token for the OAuthLogin scope. Whenever such credentials are available, |
| +// the TokenService should be updated with new credentials. The controller |
| +// should then start fetching tokens, which will be written to the database |
| +// after retrieval, as well as provided to listeners. |
| // |
| // A token service controller like the ChromiumOS login is expected to: |
| // |
| @@ -40,6 +41,8 @@ |
| #include "base/gtest_prod_util.h" |
| #include "base/memory/scoped_ptr.h" |
| +#include "chrome/browser/net/gaia/gaia_oauth_consumer.h" |
| +#include "chrome/browser/net/gaia/gaia_oauth_fetcher.h" |
| #include "chrome/browser/webdata/web_data_service.h" |
| #include "chrome/common/net/gaia/gaia_auth_consumer.h" |
| #include "chrome/common/net/gaia/gaia_auth_fetcher.h" |
| @@ -56,6 +59,7 @@ class URLRequestContextGetter; |
| // The TokenService is a Profile member, so all calls are expected |
| // from the UI thread. |
| class TokenService : public GaiaAuthConsumer, |
| + public GaiaOAuthConsumer, |
| public WebDataServiceConsumer, |
| public NotificationObserver { |
| public: |
| @@ -98,16 +102,23 @@ class TokenService : public GaiaAuthConsumer, |
| // Used to determine whether Initialize() has been called. |
| bool Initialized() const { return !source_.empty(); } |
| - // Update the credentials in the token service. |
| + // Update ClientLogin credentials in the token service. |
| // Afterwards you can StartFetchingTokens. |
| void UpdateCredentials( |
| const GaiaAuthConsumer::ClientLoginResult& credentials); |
| + // Update OAuth credentials in the token service. |
| + // Afterwards you can StartFetchingOAuthTokens. |
| + void UpdateOAuthCredentials( |
| + const std::string& oauth_token, |
| + const std::string& oauth_secret); |
| + |
| // Terminate any running requests and reset the TokenService to a clean |
| // slate. Resets in memory structures. Does not modify the DB. |
| // When this is done, no tokens will be left in memory and no |
| // user credentials will be left. Useful if a user is logging out. |
| - // Initialize doesn't need to be called again but UpdateCredentials does. |
| + // Initialize doesn't need to be called again but UpdateCredentials and |
| + // UpdateOAuthCredentials do. |
| void ResetCredentialsInMemory(); |
| // Async load all tokens for services we know of from the DB. |
| @@ -125,11 +136,14 @@ class TokenService : public GaiaAuthConsumer, |
| const std::string& GetLsid() const; |
| // Did we get a proper LSID? |
| bool AreCredentialsValid() const; |
| + // Do we have an OAuth access token and secret. |
| + bool AreOAuthCredentialsValid() const; |
| // Tokens will be fetched for all services(sync, talk) in the background. |
| // Results come back via event channel. Services can also poll before events |
| // are issued. |
| void StartFetchingTokens(); |
| + void StartFetchingOAuthTokens(); |
| bool HasTokenForService(const char* const service) const; |
| const std::string& GetTokenForService(const char* const service) const; |
| @@ -139,9 +153,23 @@ class TokenService : public GaiaAuthConsumer, |
| // GaiaAuthConsumer implementation. |
| virtual void OnIssueAuthTokenSuccess(const std::string& service, |
| - const std::string& auth_token); |
| + const std::string& auth_token) OVERRIDE; |
| virtual void OnIssueAuthTokenFailure(const std::string& service, |
| - const GoogleServiceAuthError& error); |
| + const GoogleServiceAuthError& error) |
| + OVERRIDE; |
| + |
| + // GaiaOAuthConsumer implementation. |
| + virtual void OnOAuthGetAccessTokenSuccess(const std::string& token, |
| + const std::string& secret) OVERRIDE; |
| + virtual void OnOAuthGetAccessTokenFailure( |
| + const GoogleServiceAuthError& error) OVERRIDE; |
| + |
| + virtual void OnOAuthWrapBridgeSuccess(const std::string& service_scope, |
| + const std::string& token, |
| + const std::string& expires_in) OVERRIDE; |
| + virtual void OnOAuthWrapBridgeFailure(const std::string& service_name, |
| + const GoogleServiceAuthError& error) |
| + OVERRIDE; |
| // WebDataServiceConsumer implementation. |
| virtual void OnWebDataServiceRequestDone(WebDataService::Handle h, |
| @@ -166,6 +194,9 @@ class TokenService : public GaiaAuthConsumer, |
| void SaveAuthTokenToDB(const std::string& service, |
| const std::string& auth_token); |
| + // The profile with which this instance was initialized, or NULL. |
| + Profile* profile_; |
|
Mattias Nissler (ping if slow)
2011/08/04 13:39:57
I kind of dislike this, since Profile is a super-h
Rick Campbell
2011/08/04 17:24:42
My current thinking is to leave things as they are
|
| + |
| // Web data service to access tokens from. |
| scoped_refptr<WebDataService> web_data_service_; |
| // Getter to use for fetchers. |
| @@ -177,14 +208,37 @@ class TokenService : public GaiaAuthConsumer, |
| std::string source_; |
| // Credentials from ClientLogin for Issuing auth tokens. |
| GaiaAuthConsumer::ClientLoginResult credentials_; |
| - |
| - // Size of array of services (must be defined here). |
| + // Credentials from Gaia OAuth (uber/login token) |
| + std::string oauth_token_; |
| + std::string oauth_secret_; |
| + |
| + // Size of array of services capable of ClientLogin-based authentication. |
| + // This value must be defined here. |
| + // NOTE: The use of --enable-sync-oauth does not affect this count. The |
| + // TokenService can continue to do some degree of ClientLogin token |
| + // management, mostly related to persistence while Sync and possibly other |
| + // services are using OAuth-based authentication. |
| static const int kNumServices = 4; |
| - // List of services that we're performing operations for. |
| + // List of services that we're performing operations for which are capable |
|
Roger Tawa OOO till Jul 10th
2011/08/04 14:02:14
remove "for" ?
Rick Campbell
2011/08/04 17:24:42
Thanks. I went for "List of services that are cap
|
| + // of ClientLogin-based authentication. |
| static const char* kServices[kNumServices]; |
| - // A bunch of fetchers suitable for token issuing. We don't care about |
| - // the ordering, nor do we care which is for which service. |
| + // A bunch of fetchers suitable for ClientLogin token issuing. We don't care |
| + // about the ordering, nor do we care which is for which service. |
| scoped_ptr<GaiaAuthFetcher> fetchers_[kNumServices]; |
| + |
| + // Size of array of services capable of OAuth-based authentication. This |
| + // value must be defined here. |
| + // NOTE: The use of --enable-sync-oauth does not affect this count. The |
| + // TokenService can continue to do some degree of OAuth token |
| + // management, mostly related to persistence while Sync and possibly other |
| + // services are using ClientLogin-based authentication. |
| + static const int kNumOAuthServices = 1; |
| + // List of services that we're performing operations for. |
| + static const char* kOAuthServices[kNumOAuthServices]; |
| + // A bunch of fetchers suitable for OAuth token issuing. We don't care about |
| + // the ordering, nor do we care which is for which service. |
| + scoped_ptr<GaiaOAuthFetcher> oauth_fetchers_[kNumOAuthServices]; |
| + |
| // Map from service to token. |
| std::map<std::string, std::string> token_map_; |