| Index: chrome/browser/net/gaia/gaia_oauth_fetcher.cc
|
| diff --git a/chrome/browser/net/gaia/gaia_oauth_fetcher.cc b/chrome/browser/net/gaia/gaia_oauth_fetcher.cc
|
| index 4ede11e4527865e6ac390263b491ee015398498e..2f9e1f602dd8e1942f8accd8c2e30c2e9df9c93a 100644
|
| --- a/chrome/browser/net/gaia/gaia_oauth_fetcher.cc
|
| +++ b/chrome/browser/net/gaia/gaia_oauth_fetcher.cc
|
| @@ -11,6 +11,7 @@
|
| #include "base/json/json_reader.h"
|
| #include "base/string_split.h"
|
| #include "base/string_util.h"
|
| +#include "chrome/browser/net/browser_url_util.h"
|
| #include "chrome/browser/net/gaia/gaia_oauth_consumer.h"
|
| #include "chrome/browser/profiles/profile.h"
|
| #include "chrome/browser/tabs/tab_strip_model.h"
|
| @@ -671,6 +672,9 @@ void GaiaOAuthFetcher::OnURLFetchComplete(const content::URLFetcher* source) {
|
| source->GetResponseAsString(&data);
|
| net::URLRequestStatus status = source->GetStatus();
|
| int response_code = source->GetResponseCode();
|
| + VLOG(1) << "GaiaOAuthFetcher::OnURLFetchComplete"
|
| + << ", url=" << url.spec()
|
| + << ", status=" << response_code;
|
| if (StartsWithASCII(url.spec(), gaia_urls->get_oauth_token_url(), true)) {
|
| OnGetOAuthTokenUrlFetched(source->GetCookies(), status, response_code);
|
| } else if (url.spec() == gaia_urls->oauth1_login_url()) {
|
| @@ -686,7 +690,45 @@ void GaiaOAuthFetcher::OnURLFetchComplete(const content::URLFetcher* source) {
|
| true)) {
|
| OnOAuthRevokeTokenFetched(data, status, response_code);
|
| } else {
|
| - NOTREACHED();
|
| + // Invalid cookies cause Gaia to redirect to ServiceLogin. Check if
|
| + // this is the case and report failure properly.
|
| + std::string url_no_query = url.GetOrigin().spec() + url.path().substr(1);
|
| + std::string continue_url;
|
| + if (url_no_query == gaia_urls->service_login_url() &&
|
| + chrome_browser_net::GetValueForKeyInQuery(url, "continue",
|
| + &continue_url)) {
|
| + LOG(ERROR) << "GaiaOAuthFetcher redirected to service login"
|
| + << " , url=" << url.spec();
|
| +
|
| + if (StartsWithASCII(continue_url,
|
| + gaia_urls->get_oauth_token_url(),
|
| + true)) {
|
| + consumer_->OnGetOAuthTokenFailure(GoogleServiceAuthError(
|
| + GoogleServiceAuthError::SERVICE_UNAVAILABLE));
|
| + } else if (continue_url == gaia_urls->oauth1_login_url()) {
|
| + consumer_->OnOAuthLoginFailure(GoogleServiceAuthError(
|
| + GoogleServiceAuthError::SERVICE_UNAVAILABLE));
|
| + } else if (continue_url == gaia_urls->oauth_get_access_token_url()) {
|
| + consumer_->OnOAuthGetAccessTokenFailure(GoogleServiceAuthError(
|
| + GoogleServiceAuthError::SERVICE_UNAVAILABLE));
|
| + } else if (continue_url == gaia_urls->oauth_wrap_bridge_url()) {
|
| + consumer_->OnOAuthWrapBridgeFailure(service_scope_,
|
| + GoogleServiceAuthError(
|
| + GoogleServiceAuthError::SERVICE_UNAVAILABLE));
|
| + } else if (continue_url == gaia_urls->oauth_user_info_url()) {
|
| + consumer_->OnUserInfoFailure(GoogleServiceAuthError(
|
| + GoogleServiceAuthError::SERVICE_UNAVAILABLE));
|
| + } else if (StartsWithASCII(continue_url,
|
| + gaia_urls->oauth_revoke_token_url(),
|
| + true)) {
|
| + consumer_->OnOAuthRevokeTokenFailure(GoogleServiceAuthError(
|
| + GoogleServiceAuthError::SERVICE_UNAVAILABLE));
|
| + } else {
|
| + NOTREACHED();
|
| + }
|
| + } else {
|
| + NOTREACHED() << "GaiaOAuthFetcher unknown url=" << url.spec();
|
| + }
|
| }
|
| }
|
|
|
|
|