| 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 2d126970ee537354043fbc5fe1a4da9db82f9277..17c8a086a600d5499cbb0517ced20b361322ab75 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"
|
| @@ -685,7 +686,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();
|
| + }
|
| }
|
| }
|
|
|
|
|