| Index: chrome/android/java/src/org/chromium/chrome/browser/sync/GoogleServiceAuthError.java | 
| diff --git a/chrome/android/java/src/org/chromium/chrome/browser/sync/GoogleServiceAuthError.java b/chrome/android/java/src/org/chromium/chrome/browser/sync/GoogleServiceAuthError.java | 
| new file mode 100644 | 
| index 0000000000000000000000000000000000000000..4ac498fa14f11f10414ebd426ffc4aa486e2843d | 
| --- /dev/null | 
| +++ b/chrome/android/java/src/org/chromium/chrome/browser/sync/GoogleServiceAuthError.java | 
| @@ -0,0 +1,88 @@ | 
| +// Copyright 2013 The Chromium Authors. All rights reserved. | 
| +// Use of this source code is governed by a BSD-style license that can be | 
| +// found in the LICENSE file. | 
| + | 
| +package org.chromium.chrome.browser.sync; | 
| + | 
| +import org.chromium.chrome.R; | 
| + | 
| +/** | 
| + * This class mirrors the native GoogleServiceAuthError class State enum from: | 
| + * google_apis/gaia/google_service_auth_error.h. | 
| + */ | 
| +public class GoogleServiceAuthError { | 
| + | 
| +    public enum State { | 
| +        // The user is authenticated. | 
| +        NONE(0, R.string.sync_error_generic), | 
| + | 
| +        // The credentials supplied to GAIA were either invalid, or the locally | 
| +        // cached credentials have expired. | 
| +        INVALID_GAIA_CREDENTIALS(1, R.string.sync_error_ga), | 
| + | 
| +        // The GAIA user is not authorized to use the service. | 
| +        USER_NOT_SIGNED_UP(2, R.string.sync_error_generic), | 
| + | 
| +        // Could not connect to server to verify credentials. This could be in | 
| +        // response to either failure to connect to GAIA or failure to connect to | 
| +        // the service needing GAIA tokens during authentication. | 
| +        CONNECTION_FAILED(3, R.string.sync_error_connection), | 
| + | 
| +        // The user needs to satisfy a CAPTCHA challenge to unlock their account. | 
| +        // If no other information is available, this can be resolved by visiting | 
| +        // https://www.google.com/accounts/DisplayUnlockCaptcha. Otherwise, | 
| +        // captcha() will provide details about the associated challenge. | 
| +        CAPTCHA_REQUIRED(4, R.string.sync_error_generic), | 
| + | 
| +        // The user account has been deleted. | 
| +        ACCOUNT_DELETED(5, R.string.sync_error_generic), | 
| + | 
| +        // The user account has been disabled. | 
| +        ACCOUNT_DISABLED(6, R.string.sync_error_generic), | 
| + | 
| +        // The service is not available; try again later. | 
| +        SERVICE_UNAVAILABLE(7, R.string.sync_error_service_unavailable), | 
| + | 
| +        // The password is valid but we need two factor to get a token. | 
| +        TWO_FACTOR(8, R.string.sync_error_generic), | 
| + | 
| +        // The requestor of the authentication step cancelled the request | 
| +        // prior to completion. | 
| +        REQUEST_CANCELED(9, R.string.sync_error_generic), | 
| + | 
| +        // The user has provided a HOSTED account, when this service requires | 
| +        // a GOOGLE account. | 
| +        HOSTED_NOT_ALLOWED(10, R.string.sync_error_domain); | 
| + | 
| +        private final int mCode; | 
| +        private final int mMessage; | 
| + | 
| +        State(int code, int message) { | 
| +            mCode = code; | 
| +            mMessage = message; | 
| +        } | 
| + | 
| +        public static State fromCode(int code) { | 
| +            for (State state : State.values()) { | 
| +                if (state.mCode == code) { | 
| +                    return state; | 
| +                } | 
| +            } | 
| +            throw new IllegalArgumentException("No state for code: " + code); | 
| +        } | 
| + | 
| +        public int getMessage() { | 
| +            return mMessage; | 
| +        } | 
| +    } | 
| + | 
| +    private final State mState; | 
| + | 
| +    GoogleServiceAuthError(int code) { | 
| +        mState = State.fromCode(code); | 
| +    } | 
| + | 
| +    State getState() { | 
| +        return mState; | 
| +    } | 
| +} | 
|  |