Index: chrome/common/net/gaia/gaia_authenticator2.h |
diff --git a/chrome/common/net/gaia/gaia_authenticator2.h b/chrome/common/net/gaia/gaia_authenticator2.h |
index bbb3761c5d0309d26c17dee31d88af2209460660..57ea5a3d0b3910f09c9a68dc7d5a832b1f879e41 100644 |
--- a/chrome/common/net/gaia/gaia_authenticator2.h |
+++ b/chrome/common/net/gaia/gaia_authenticator2.h |
@@ -8,6 +8,7 @@ |
#include <string> |
#include "base/gtest_prod_util.h" |
+#include "chrome/common/net/gaia/gaia_auth_consumer.h" |
#include "chrome/common/net/url_fetcher.h" |
#include "googleurl/src/gurl.h" |
@@ -17,8 +18,10 @@ |
// In the future, we will also issue auth tokens from this class. |
// This class should be used on a single thread, but it can be whichever thread |
// that you like. |
+// |
+// This class can handle one request at a time. To parallelize requests, |
+// create multiple GaiaAuthenticator2's. |
-class GaiaAuthConsumer; |
class GaiaAuthenticator2Test; |
class GaiaAuthenticator2 : public URLFetcher::Delegate { |
@@ -30,8 +33,6 @@ class GaiaAuthenticator2 : public URLFetcher::Delegate { |
// The URLs for different calls in the Google Accounts programmatic login API. |
static const char kClientLoginUrl[]; |
static const char kIssueAuthTokenUrl[]; |
- static const char kTokenAuthUrl[]; |
- |
// Magic string indicating that, while a second factor is still |
// needed to complete authentication, the user provided the right password. |
@@ -46,12 +47,20 @@ class GaiaAuthenticator2 : public URLFetcher::Delegate { |
// GaiaAuthConsumer will be called on the original thread |
// after results come back. This class is thread agnostic. |
+ // You can't make more than request at a time. |
void StartClientLogin(const std::string& username, |
const std::string& password, |
const char* const service, |
const std::string& login_token, |
const std::string& login_captcha); |
+ // GaiaAuthConsumer will be called on the original thread |
+ // after results come back. This class is thread agnostic. |
+ // You can't make more than one request at a time. |
+ void StartIssueAuthToken(const std::string& sid, |
+ const std::string& lsid, |
+ const char* const service); |
+ |
// Implementation of URLFetcher::Delegate |
void OnURLFetchComplete(const URLFetcher* source, |
const GURL& url, |
@@ -75,41 +84,64 @@ class GaiaAuthenticator2 : public URLFetcher::Delegate { |
static const char kClientLoginFormat[]; |
// The format of said POST body when CAPTCHA token & answer are specified. |
static const char kClientLoginCaptchaFormat[]; |
+ // The format of the POST body for IssueAuthToken. |
+ static const char kIssueAuthTokenFormat[]; |
// Process the results of a ClientLogin fetch. |
void OnClientLoginFetched(const std::string& data, |
const URLRequestStatus& status, |
int response_code); |
+ void OnIssueAuthTokenFetched(const std::string& data, |
+ const URLRequestStatus& status, |
+ int response_code); |
+ |
// Tokenize the results of a ClientLogin fetch. |
static void ParseClientLoginResponse(const std::string& data, |
std::string* sid, |
std::string* lsid, |
std::string* token); |
+ // From a URLFetcher result, generate an appropriate GaiaAuthError. |
+ // From the API documentation, both IssueAuthToken and ClientLogin have |
+ // the same error returns. |
+ static GaiaAuthConsumer::GaiaAuthError GenerateAuthError( |
+ const std::string& data, |
+ const URLRequestStatus& status); |
+ |
// Is this a special case Gaia error for TwoFactor auth? |
static bool IsSecondFactorSuccess(const std::string& alleged_error); |
// Given parameters, create a ClientLogin request body. |
- static std::string GenerateRequestBody(const std::string& username, |
+ static std::string MakeClientLoginBody(const std::string& username, |
const std::string& password, |
const std::string& source, |
- const char* service, |
+ const char* const service, |
const std::string& login_token, |
const std::string& login_captcha); |
- // Create a fetcher useable for making a ClientLogin request. |
- static URLFetcher* CreateClientLoginFetcher(URLRequestContextGetter* getter, |
- const std::string& body, |
- const GURL& client_login_gurl_, |
- URLFetcher::Delegate* delegate); |
+ static std::string MakeIssueAuthTokenBody(const std::string& sid, |
+ const std::string& lsid, |
+ const char* const service); |
+ |
+ // Create a fetcher useable for making any Gaia request. |
+ static URLFetcher* CreateGaiaFetcher(URLRequestContextGetter* getter, |
+ const std::string& body, |
+ const GURL& gaia_gurl_, |
+ URLFetcher::Delegate* delegate); |
+ |
+ // Unique per GaiaAuthenticator2 |
GaiaAuthConsumer* const consumer_; |
- scoped_ptr<URLFetcher> fetcher_; |
URLRequestContextGetter* const getter_; |
std::string source_; |
const GURL client_login_gurl_; |
+ const GURL issue_auth_token_gurl_; |
+ |
+ // While a fetch is going on: |
+ scoped_ptr<URLFetcher> fetcher_; |
std::string request_body_; |
+ std::string requested_service_; // Currently tracked for IssueAuthToken only |
bool fetch_pending_; |
friend class GaiaAuthenticator2Test; |