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