12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file.
42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)package org.chromium.chrome.browser.sync;
62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)import org.chromium.chrome.R;
82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)/**
102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * This class mirrors the native GoogleServiceAuthError class State enum from:
112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * google_apis/gaia/google_service_auth_error.h.
122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) */
132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)public class GoogleServiceAuthError {
142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    public enum State {
162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        // The user is authenticated.
172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        NONE(0, R.string.sync_error_generic),
182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        // The credentials supplied to GAIA were either invalid, or the locally
202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        // cached credentials have expired.
212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        INVALID_GAIA_CREDENTIALS(1, R.string.sync_error_ga),
222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        // The GAIA user is not authorized to use the service.
242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        USER_NOT_SIGNED_UP(2, R.string.sync_error_generic),
252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        // Could not connect to server to verify credentials. This could be in
272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        // response to either failure to connect to GAIA or failure to connect to
282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        // the service needing GAIA tokens during authentication.
292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        CONNECTION_FAILED(3, R.string.sync_error_connection),
302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        // The user needs to satisfy a CAPTCHA challenge to unlock their account.
322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        // If no other information is available, this can be resolved by visiting
332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        // https://www.google.com/accounts/DisplayUnlockCaptcha. Otherwise,
342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        // captcha() will provide details about the associated challenge.
352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        CAPTCHA_REQUIRED(4, R.string.sync_error_generic),
362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        // The user account has been deleted.
382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        ACCOUNT_DELETED(5, R.string.sync_error_generic),
392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        // The user account has been disabled.
412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        ACCOUNT_DISABLED(6, R.string.sync_error_generic),
422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        // The service is not available; try again later.
442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        SERVICE_UNAVAILABLE(7, R.string.sync_error_service_unavailable),
452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        // The password is valid but we need two factor to get a token.
472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        TWO_FACTOR(8, R.string.sync_error_generic),
482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        // The requestor of the authentication step cancelled the request
502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        // prior to completion.
512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        REQUEST_CANCELED(9, R.string.sync_error_generic),
522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        // The user has provided a HOSTED account, when this service requires
542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        // a GOOGLE account.
552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        HOSTED_NOT_ALLOWED(10, R.string.sync_error_domain);
562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        private final int mCode;
582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        private final int mMessage;
592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        State(int code, int message) {
612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            mCode = code;
622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            mMessage = message;
632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        }
642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        public static State fromCode(int code) {
662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            for (State state : State.values()) {
672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                if (state.mCode == code) {
682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                    return state;
692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                }
702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            }
712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            throw new IllegalArgumentException("No state for code: " + code);
722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        }
732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        public int getMessage() {
752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            return mMessage;
762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        }
772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    }
782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    private final State mState;
802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    GoogleServiceAuthError(int code) {
822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        mState = State.fromCode(code);
832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    }
842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    State getState() {
862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        return mState;
872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    }
882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
89