google_service_auth_error.cc revision a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "google_apis/gaia/google_service_auth_error.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string> 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/json/json_reader.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/logging.h" 11868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/string_util.h" 12868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/stringprintf.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/values.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/base/net_errors.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)GoogleServiceAuthError::Captcha::Captcha() : image_width(0), image_height(0) { 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)GoogleServiceAuthError::Captcha::Captcha( 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& token, const GURL& audio, const GURL& img, 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& unlock, int width, int height) 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : token(token), audio_url(audio), image_url(img), unlock_url(unlock), 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) image_width(width), image_height(height) { 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)GoogleServiceAuthError::Captcha::~Captcha() { 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool GoogleServiceAuthError::Captcha::operator==(const Captcha& b) const { 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return (token == b.token && 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) audio_url == b.audio_url && 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) image_url == b.image_url && 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) unlock_url == b.unlock_url && 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) image_width == b.image_width && 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) image_height == b.image_height); 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)GoogleServiceAuthError::SecondFactor::SecondFactor() : field_length(0) { 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)GoogleServiceAuthError::SecondFactor::SecondFactor( 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& token, const std::string& prompt, 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& alternate, int length) 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : token(token), prompt_text(prompt), alternate_text(alternate), 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) field_length(length) { 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)GoogleServiceAuthError::SecondFactor::~SecondFactor() { 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool GoogleServiceAuthError::SecondFactor::operator==( 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const SecondFactor& b) const { 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return (token == b.token && 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prompt_text == b.prompt_text && 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) alternate_text == b.alternate_text && 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) field_length == b.field_length); 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool GoogleServiceAuthError::operator==( 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GoogleServiceAuthError& b) const { 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return (state_ == b.state_ && 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) network_error_ == b.network_error_ && 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) captcha_ == b.captcha_ && 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) second_factor_ == b.second_factor_); 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)GoogleServiceAuthError::GoogleServiceAuthError(State s) 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : state_(s), 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) network_error_(0) { 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If the caller has no idea, then we just set it to a generic failure. 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (s == CONNECTION_FAILED) { 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) network_error_ = net::ERR_FAILED; 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 76eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochGoogleServiceAuthError::GoogleServiceAuthError( 77eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch State state, 78eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const std::string& error_message) 79eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch : state_(state), 80eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch network_error_(0), 81eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch error_message_(error_message) { 82eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 83eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)GoogleServiceAuthError::GoogleServiceAuthError(const std::string& error_message) 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : state_(INVALID_GAIA_CREDENTIALS), 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) network_error_(0), 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) error_message_(error_message) { 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)GoogleServiceAuthError 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GoogleServiceAuthError::FromConnectionError(int error) { 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return GoogleServiceAuthError(CONNECTION_FAILED, error); 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)GoogleServiceAuthError GoogleServiceAuthError::FromClientLoginCaptchaChallenge( 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& captcha_token, 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& captcha_image_url, 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& captcha_unlock_url) { 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return GoogleServiceAuthError(CAPTCHA_REQUIRED, captcha_token, GURL(), 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) captcha_image_url, captcha_unlock_url, 0, 0); 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 105eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// static 106eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochGoogleServiceAuthError GoogleServiceAuthError::FromServiceError( 107eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const std::string& error_message) { 108eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return GoogleServiceAuthError(SERVICE_ERROR, error_message); 109eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 110eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 111eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// static 112eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochGoogleServiceAuthError GoogleServiceAuthError::FromUnexpectedServiceResponse( 113eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const std::string& error_message) { 114eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return GoogleServiceAuthError(UNEXPECTED_SERVICE_RESPONSE, error_message); 115eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 116eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 117eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// static 1182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)GoogleServiceAuthError GoogleServiceAuthError::AuthErrorNone() { 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return GoogleServiceAuthError(NONE); 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)GoogleServiceAuthError::State GoogleServiceAuthError::state() const { 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return state_; 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const GoogleServiceAuthError::Captcha& GoogleServiceAuthError::captcha() const { 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return captcha_; 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const GoogleServiceAuthError::SecondFactor& 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)GoogleServiceAuthError::second_factor() const { 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return second_factor_; 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int GoogleServiceAuthError::network_error() const { 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return network_error_; 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const std::string& GoogleServiceAuthError::token() const { 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switch (state_) { 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case CAPTCHA_REQUIRED: 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return captcha_.token; 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case TWO_FACTOR: 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return second_factor_.token; 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) default: 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NOTREACHED(); 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 150a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) return base::EmptyString(); 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const std::string& GoogleServiceAuthError::error_message() const { 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return error_message_; 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 157eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochbase::DictionaryValue* GoogleServiceAuthError::ToValue() const { 158eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch base::DictionaryValue* value = new base::DictionaryValue(); 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string state_str; 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switch (state_) { 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define STATE_CASE(x) case x: state_str = #x; break 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) STATE_CASE(NONE); 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) STATE_CASE(INVALID_GAIA_CREDENTIALS); 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) STATE_CASE(USER_NOT_SIGNED_UP); 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) STATE_CASE(CONNECTION_FAILED); 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) STATE_CASE(CAPTCHA_REQUIRED); 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) STATE_CASE(ACCOUNT_DELETED); 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) STATE_CASE(ACCOUNT_DISABLED); 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) STATE_CASE(SERVICE_UNAVAILABLE); 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) STATE_CASE(TWO_FACTOR); 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) STATE_CASE(REQUEST_CANCELED); 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) STATE_CASE(HOSTED_NOT_ALLOWED); 173eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch STATE_CASE(UNEXPECTED_SERVICE_RESPONSE); 174eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch STATE_CASE(SERVICE_ERROR); 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#undef STATE_CASE 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) default: 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NOTREACHED(); 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) value->SetString("state", state_str); 181eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch if (!error_message_.empty()) { 182eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch value->SetString("errorMessage", error_message_); 183eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (state_ == CAPTCHA_REQUIRED) { 185eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch base::DictionaryValue* captcha_value = new base::DictionaryValue(); 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) value->Set("captcha", captcha_value); 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) captcha_value->SetString("token", captcha_.token); 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) captcha_value->SetString("audioUrl", captcha_.audio_url.spec()); 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) captcha_value->SetString("imageUrl", captcha_.image_url.spec()); 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) captcha_value->SetString("unlockUrl", captcha_.unlock_url.spec()); 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) captcha_value->SetInteger("imageWidth", captcha_.image_width); 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) captcha_value->SetInteger("imageHeight", captcha_.image_height); 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if (state_ == CONNECTION_FAILED) { 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) value->SetString("networkError", net::ErrorToString(network_error_)); 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if (state_ == TWO_FACTOR) { 196eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch base::DictionaryValue* two_factor_value = new base::DictionaryValue(); 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) value->Set("two_factor", two_factor_value); 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) two_factor_value->SetString("token", second_factor_.token); 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) two_factor_value->SetString("promptText", second_factor_.prompt_text); 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) two_factor_value->SetString("alternateText", second_factor_.alternate_text); 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) two_factor_value->SetInteger("fieldLength", second_factor_.field_length); 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return value; 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)std::string GoogleServiceAuthError::ToString() const { 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switch (state_) { 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case NONE: 209c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return std::string(); 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case INVALID_GAIA_CREDENTIALS: 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return "Invalid credentials."; 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case USER_NOT_SIGNED_UP: 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return "Not authorized."; 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case CONNECTION_FAILED: 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return base::StringPrintf("Connection failed (%d).", network_error_); 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case CAPTCHA_REQUIRED: 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return base::StringPrintf("CAPTCHA required (%s).", 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) captcha_.token.c_str()); 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case ACCOUNT_DELETED: 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return "Account deleted."; 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case ACCOUNT_DISABLED: 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return "Account disabled."; 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case SERVICE_UNAVAILABLE: 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return "Service unavailable; try again later."; 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case TWO_FACTOR: 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return base::StringPrintf("2-step verification required (%s).", 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) second_factor_.token.c_str()); 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case REQUEST_CANCELED: 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return "Request canceled."; 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case HOSTED_NOT_ALLOWED: 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return "Google account required."; 232eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch case UNEXPECTED_SERVICE_RESPONSE: 233eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return base::StringPrintf("Unexpected service response (%s)", 234eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch error_message_.c_str()); 235eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch case SERVICE_ERROR: 236eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return base::StringPrintf("Service responded with error: '%s'", 237eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch error_message_.c_str()); 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) default: 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NOTREACHED(); 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return std::string(); 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)GoogleServiceAuthError::GoogleServiceAuthError(State s, int error) 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : state_(s), 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) network_error_(error) { 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)GoogleServiceAuthError::GoogleServiceAuthError( 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) State s, 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& captcha_token, 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& captcha_audio_url, 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& captcha_image_url, 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& captcha_unlock_url, 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int image_width, 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int image_height) 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : state_(s), 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) captcha_(captcha_token, captcha_audio_url, captcha_image_url, 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) captcha_unlock_url, image_width, image_height), 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) network_error_(0) { 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)GoogleServiceAuthError::GoogleServiceAuthError( 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) State s, 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& captcha_token, 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& prompt_text, 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& alternate_text, 2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int field_length) 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : state_(s), 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) second_factor_(captcha_token, prompt_text, alternate_text, field_length), 2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) network_error_(0) { 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 273