• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include "chrome/common/net/gaia/google_service_auth_error.h"
6 
7 #include <string>
8 
9 #include "base/logging.h"
10 #include "base/values.h"
11 #include "net/base/net_errors.h"
12 
Captcha(const std::string & t,const GURL & img,const GURL & unlock)13 GoogleServiceAuthError::Captcha::Captcha(
14     const std::string& t, const GURL& img, const GURL& unlock)
15     : token(t), image_url(img), unlock_url(unlock) {}
16 
operator ==(const GoogleServiceAuthError & b) const17 bool GoogleServiceAuthError::operator==(
18     const GoogleServiceAuthError &b) const {
19   return (state_ == b.state_ &&
20           network_error_ == b.network_error_ &&
21           captcha_.token == b.captcha_.token &&
22           captcha_.image_url == b.captcha_.image_url &&
23           captcha_.unlock_url == b.captcha_.unlock_url);
24 }
25 
GoogleServiceAuthError(State s)26 GoogleServiceAuthError::GoogleServiceAuthError(State s)
27     : state_(s),
28       captcha_("", GURL(), GURL()),
29       network_error_(0) {
30   // If the caller has no idea, then we just set it to a generic failure.
31   if (s == CONNECTION_FAILED) {
32     network_error_ = net::ERR_FAILED;
33   }
34 }
35 
36 GoogleServiceAuthError
FromConnectionError(int error)37     GoogleServiceAuthError::FromConnectionError(int error) {
38   return GoogleServiceAuthError(CONNECTION_FAILED, error);
39 }
40 
FromCaptchaChallenge(const std::string & captcha_token,const GURL & captcha_image_url,const GURL & captcha_unlock_url)41 GoogleServiceAuthError GoogleServiceAuthError::FromCaptchaChallenge(
42     const std::string& captcha_token,
43     const GURL& captcha_image_url,
44     const GURL& captcha_unlock_url) {
45   return GoogleServiceAuthError(CAPTCHA_REQUIRED, captcha_token,
46                                 captcha_image_url, captcha_unlock_url);
47 }
48 
None()49 GoogleServiceAuthError GoogleServiceAuthError::None() {
50   return GoogleServiceAuthError(NONE);
51 }
52 
state() const53 const GoogleServiceAuthError::State& GoogleServiceAuthError::state() const {
54   return state_;
55 }
56 
captcha() const57 const GoogleServiceAuthError::Captcha& GoogleServiceAuthError::captcha() const {
58   return captcha_;
59 }
60 
network_error() const61 int GoogleServiceAuthError::network_error() const {
62   return network_error_;
63 }
64 
ToValue() const65 DictionaryValue* GoogleServiceAuthError::ToValue() const {
66   DictionaryValue* value = new DictionaryValue();
67   std::string state_str;
68   switch (state_) {
69 #define STATE_CASE(x) case x: state_str = #x; break
70     STATE_CASE(NONE);
71     STATE_CASE(INVALID_GAIA_CREDENTIALS);
72     STATE_CASE(USER_NOT_SIGNED_UP);
73     STATE_CASE(CONNECTION_FAILED);
74     STATE_CASE(CAPTCHA_REQUIRED);
75     STATE_CASE(ACCOUNT_DELETED);
76     STATE_CASE(ACCOUNT_DISABLED);
77     STATE_CASE(SERVICE_UNAVAILABLE);
78     STATE_CASE(TWO_FACTOR);
79     STATE_CASE(REQUEST_CANCELED);
80     STATE_CASE(HOSTED_NOT_ALLOWED);
81 #undef STATE_CASE
82     default:
83       NOTREACHED();
84       break;
85   }
86   value->SetString("state", state_str);
87   if (state_ == CAPTCHA_REQUIRED) {
88     DictionaryValue* captcha_value = new DictionaryValue();
89     value->Set("captcha", captcha_value);
90     captcha_value->SetString("token", captcha_.token);
91     captcha_value->SetString("imageUrl", captcha_.image_url.spec());
92     captcha_value->SetString("unlockUrl", captcha_.unlock_url.spec());
93   } else if (state_ == CONNECTION_FAILED) {
94     value->SetString("networkError", net::ErrorToString(network_error_));
95   }
96   return value;
97 }
98 
GoogleServiceAuthError(State s,int error)99 GoogleServiceAuthError::GoogleServiceAuthError(State s, int error)
100     : state_(s),
101       captcha_("", GURL(), GURL()),
102       network_error_(error) {}
103 
GoogleServiceAuthError(State s,const std::string & captcha_token,const GURL & captcha_image_url,const GURL & captcha_unlock_url)104 GoogleServiceAuthError::GoogleServiceAuthError(
105     State s, const std::string& captcha_token,
106     const GURL& captcha_image_url,
107     const GURL& captcha_unlock_url)
108     : state_(s),
109       captcha_(captcha_token, captcha_image_url, captcha_unlock_url),
110       network_error_(0) {}
111