172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved. 272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// Use of this source code is governed by a BSD-style license that can be 372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// found in the LICENSE file. 472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "chrome/common/net/gaia/google_service_auth_error.h" 672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include <string> 872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "base/logging.h" 1072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "base/values.h" 1172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "net/base/net_errors.h" 1272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 1372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian MonsenGoogleServiceAuthError::Captcha::Captcha( 1472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen const std::string& t, const GURL& img, const GURL& unlock) 1572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen : token(t), image_url(img), unlock_url(unlock) {} 1672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 1772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsenbool GoogleServiceAuthError::operator==( 1872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen const GoogleServiceAuthError &b) const { 1972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen return (state_ == b.state_ && 2072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen network_error_ == b.network_error_ && 2172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen captcha_.token == b.captcha_.token && 2272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen captcha_.image_url == b.captcha_.image_url && 2372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen captcha_.unlock_url == b.captcha_.unlock_url); 2472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen} 2572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 2672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian MonsenGoogleServiceAuthError::GoogleServiceAuthError(State s) 2772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen : state_(s), 2872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen captcha_("", GURL(), GURL()), 2972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen network_error_(0) { 3072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // If the caller has no idea, then we just set it to a generic failure. 3172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen if (s == CONNECTION_FAILED) { 3272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen network_error_ = net::ERR_FAILED; 3372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen } 3472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen} 3572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 3672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian MonsenGoogleServiceAuthError 3772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen GoogleServiceAuthError::FromConnectionError(int error) { 3872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen return GoogleServiceAuthError(CONNECTION_FAILED, error); 3972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen} 4072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 4172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian MonsenGoogleServiceAuthError GoogleServiceAuthError::FromCaptchaChallenge( 4272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen const std::string& captcha_token, 4372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen const GURL& captcha_image_url, 4472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen const GURL& captcha_unlock_url) { 4572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen return GoogleServiceAuthError(CAPTCHA_REQUIRED, captcha_token, 4672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen captcha_image_url, captcha_unlock_url); 4772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen} 4872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 4972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian MonsenGoogleServiceAuthError GoogleServiceAuthError::None() { 5072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen return GoogleServiceAuthError(NONE); 5172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen} 5272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 5372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsenconst GoogleServiceAuthError::State& GoogleServiceAuthError::state() const { 5472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen return state_; 5572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen} 5672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 5772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsenconst GoogleServiceAuthError::Captcha& GoogleServiceAuthError::captcha() const { 5872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen return captcha_; 5972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen} 6072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 6172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsenint GoogleServiceAuthError::network_error() const { 6272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen return network_error_; 6372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen} 6472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 6572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian MonsenDictionaryValue* GoogleServiceAuthError::ToValue() const { 6672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen DictionaryValue* value = new DictionaryValue(); 6772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen std::string state_str; 6872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen switch (state_) { 6972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#define STATE_CASE(x) case x: state_str = #x; break 7072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen STATE_CASE(NONE); 7172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen STATE_CASE(INVALID_GAIA_CREDENTIALS); 7272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen STATE_CASE(USER_NOT_SIGNED_UP); 7372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen STATE_CASE(CONNECTION_FAILED); 7472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen STATE_CASE(CAPTCHA_REQUIRED); 7572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen STATE_CASE(ACCOUNT_DELETED); 7672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen STATE_CASE(ACCOUNT_DISABLED); 7772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen STATE_CASE(SERVICE_UNAVAILABLE); 7872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen STATE_CASE(TWO_FACTOR); 7972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen STATE_CASE(REQUEST_CANCELED); 8072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen STATE_CASE(HOSTED_NOT_ALLOWED); 8172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#undef STATE_CASE 8272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen default: 8372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen NOTREACHED(); 8472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen break; 8572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen } 8672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen value->SetString("state", state_str); 8772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen if (state_ == CAPTCHA_REQUIRED) { 8872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen DictionaryValue* captcha_value = new DictionaryValue(); 8972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen value->Set("captcha", captcha_value); 9072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen captcha_value->SetString("token", captcha_.token); 9172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen captcha_value->SetString("imageUrl", captcha_.image_url.spec()); 9272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen captcha_value->SetString("unlockUrl", captcha_.unlock_url.spec()); 9372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen } else if (state_ == CONNECTION_FAILED) { 9472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen value->SetString("networkError", net::ErrorToString(network_error_)); 9572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen } 9672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen return value; 9772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen} 9872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 9972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian MonsenGoogleServiceAuthError::GoogleServiceAuthError(State s, int error) 10072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen : state_(s), 10172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen captcha_("", GURL(), GURL()), 10272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen network_error_(error) {} 10372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 10472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian MonsenGoogleServiceAuthError::GoogleServiceAuthError( 10572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen State s, const std::string& captcha_token, 10672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen const GURL& captcha_image_url, 10772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen const GURL& captcha_unlock_url) 10872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen : state_(s), 10972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen captcha_(captcha_token, captcha_image_url, captcha_unlock_url), 11072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen network_error_(0) {} 111