1// Copyright 2013 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
5package org.chromium.chrome.browser.sync;
6
7import org.chromium.chrome.R;
8
9/**
10 * This class mirrors the native GoogleServiceAuthError class State enum from:
11 * google_apis/gaia/google_service_auth_error.h.
12 */
13public class GoogleServiceAuthError {
14
15    public enum State {
16        // The user is authenticated.
17        NONE(0, R.string.sync_error_generic),
18
19        // The credentials supplied to GAIA were either invalid, or the locally
20        // cached credentials have expired.
21        INVALID_GAIA_CREDENTIALS(1, R.string.sync_error_ga),
22
23        // The GAIA user is not authorized to use the service.
24        USER_NOT_SIGNED_UP(2, R.string.sync_error_generic),
25
26        // Could not connect to server to verify credentials. This could be in
27        // response to either failure to connect to GAIA or failure to connect to
28        // the service needing GAIA tokens during authentication.
29        CONNECTION_FAILED(3, R.string.sync_error_connection),
30
31        // The user needs to satisfy a CAPTCHA challenge to unlock their account.
32        // If no other information is available, this can be resolved by visiting
33        // https://www.google.com/accounts/DisplayUnlockCaptcha. Otherwise,
34        // captcha() will provide details about the associated challenge.
35        CAPTCHA_REQUIRED(4, R.string.sync_error_generic),
36
37        // The user account has been deleted.
38        ACCOUNT_DELETED(5, R.string.sync_error_generic),
39
40        // The user account has been disabled.
41        ACCOUNT_DISABLED(6, R.string.sync_error_generic),
42
43        // The service is not available; try again later.
44        SERVICE_UNAVAILABLE(7, R.string.sync_error_service_unavailable),
45
46        // The password is valid but we need two factor to get a token.
47        TWO_FACTOR(8, R.string.sync_error_generic),
48
49        // The requestor of the authentication step cancelled the request
50        // prior to completion.
51        REQUEST_CANCELED(9, R.string.sync_error_generic),
52
53        // The user has provided a HOSTED account, when this service requires
54        // a GOOGLE account.
55        HOSTED_NOT_ALLOWED(10, R.string.sync_error_domain);
56
57        private final int mCode;
58        private final int mMessage;
59
60        State(int code, int message) {
61            mCode = code;
62            mMessage = message;
63        }
64
65        public static State fromCode(int code) {
66            for (State state : State.values()) {
67                if (state.mCode == code) {
68                    return state;
69                }
70            }
71            throw new IllegalArgumentException("No state for code: " + code);
72        }
73
74        public int getMessage() {
75            return mMessage;
76        }
77    }
78
79    private final State mState;
80
81    GoogleServiceAuthError(int code) {
82        mState = State.fromCode(code);
83    }
84
85    State getState() {
86        return mState;
87    }
88}
89