Chromium Code Reviews| Index: chrome/common/net/gaia/gaia_auth_fetcher.cc |
| diff --git a/chrome/common/net/gaia/gaia_auth_fetcher.cc b/chrome/common/net/gaia/gaia_auth_fetcher.cc |
| index 94b73fa83de273513cc29f1919f36989695440b8..ba2f6b73a25c4f9ab58b6c7e06e152979f7ac9c6 100644 |
| --- a/chrome/common/net/gaia/gaia_auth_fetcher.cc |
| +++ b/chrome/common/net/gaia/gaia_auth_fetcher.cc |
| @@ -80,6 +80,10 @@ const char GaiaAuthFetcher::kMergeSessionFormat[] = |
| "uberauth=%s&" |
| "continue=%s&" |
| "source=%s"; |
| +// static |
| +const char GaiaAuthFetcher::kUberAuthTokenURLFormat[] = |
| + "%s?source=%s&" |
| + "issueuberauth=1"; |
|
Roger Tawa OOO till Jul 10th
2012/02/01 21:47:14
Why use url request parameters instead of putting
qsr
2012/02/02 09:26:55
Unfortunately it doesn't. I did try with the POST
|
| // static |
| const char GaiaAuthFetcher::kAccountDeletedError[] = "AccountDeleted"; |
| @@ -124,6 +128,8 @@ const char GaiaAuthFetcher::kSecondFactor[] = "Info=InvalidSecondFactor"; |
| const char GaiaAuthFetcher::kAuthHeaderFormat[] = |
| "Authorization: GoogleLogin auth=%s"; |
| // static |
| +const char GaiaAuthFetcher::kOAuthHeaderFormat[] = "Authorization: OAuth %s"; |
| +// static |
| const char GaiaAuthFetcher::kClientLoginToOAuth2CookiePartSecure[] = "Secure"; |
| // static |
| const char GaiaAuthFetcher::kClientLoginToOAuth2CookiePartHttpOnly[] = |
| @@ -155,6 +161,8 @@ GaiaAuthFetcher::GaiaAuthFetcher(GaiaAuthConsumer* consumer, |
| get_user_info_gurl_(GaiaUrls::GetInstance()->get_user_info_url()), |
| token_auth_gurl_(GaiaUrls::GetInstance()->token_auth_url()), |
| merge_session_gurl_(GaiaUrls::GetInstance()->merge_session_url()), |
| + uberauth_token_gurl_(base::StringPrintf(kUberAuthTokenURLFormat, |
| + GaiaUrls::GetInstance()->oauth1_login_url().c_str(), source.c_str())), |
| fetch_pending_(false) {} |
| GaiaAuthFetcher::~GaiaAuthFetcher() {} |
| @@ -177,7 +185,9 @@ content::URLFetcher* GaiaAuthFetcher::CreateGaiaFetcher( |
| bool use_cookies, |
| content::URLFetcherDelegate* delegate) { |
| content::URLFetcher* to_return = content::URLFetcher::Create( |
| - 0, gaia_gurl, content::URLFetcher::POST, delegate); |
| + 0, gaia_gurl, |
| + body == "" ? content::URLFetcher::GET : content::URLFetcher::POST, |
| + delegate); |
| to_return->SetRequestContext(getter); |
| to_return->SetUploadData("application/x-www-form-urlencoded", body); |
| @@ -571,6 +581,24 @@ void GaiaAuthFetcher::StartMergeSession(const std::string& auth_token) { |
| } |
| // static |
| +void GaiaAuthFetcher::StartUberAuthTokenFetch(const std::string& access_token) { |
| + DCHECK(!fetch_pending_) << "Tried to fetch two things at once!"; |
| + |
| + DVLOG(1) << "Starting StartUberAuthTokenFetch with access_token=" |
| + << access_token; |
| + std::string authentication_header = |
| + base::StringPrintf(kOAuthHeaderFormat, access_token.c_str()); |
| + fetcher_.reset(CreateGaiaFetcher(getter_, |
| + "", |
| + authentication_header, |
| + uberauth_token_gurl_, |
| + false, |
| + this)); |
| + fetch_pending_ = true; |
| + fetcher_->Start(); |
| +} |
| + |
| +// static |
| GoogleServiceAuthError GaiaAuthFetcher::GenerateAuthError( |
| const std::string& data, |
| const net::URLRequestStatus& status) { |
| @@ -797,6 +825,16 @@ void GaiaAuthFetcher::OnMergeSessionFetched(const std::string& data, |
| } |
| } |
| +void GaiaAuthFetcher::OnUberAuthTokenFetch(const std::string& data, |
| + const net::URLRequestStatus& status, |
| + int response_code) { |
| + if (status.is_success() && response_code == RC_REQUEST_OK) { |
| + consumer_->OnUberAuthTokenSuccess(data); |
| + } else { |
| + consumer_->OnUberAuthTokenFailure(GenerateAuthError(data, status)); |
| + } |
| +} |
| + |
| void GaiaAuthFetcher::OnURLFetchComplete(const content::URLFetcher* source) { |
| fetch_pending_ = false; |
| const GURL& url = source->GetURL(); |
| @@ -821,6 +859,8 @@ void GaiaAuthFetcher::OnURLFetchComplete(const content::URLFetcher* source) { |
| (source && source->GetOriginalURL() == merge_session_gurl_)) { |
| // MergeSession may redirect, so check the original URL of the fetcher. |
| OnMergeSessionFetched(data, status, response_code); |
| + } else if (url == uberauth_token_gurl_) { |
| + OnUberAuthTokenFetch(data, status, response_code); |
| } else { |
| NOTREACHED(); |
| } |