// Copyright (c) 2012 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.

#ifndef CHROME_BROWSER_CHROMEOS_LOGIN_SCREENS_NETWORK_ERROR_H_
#define CHROME_BROWSER_CHROMEOS_LOGIN_SCREENS_NETWORK_ERROR_H_

namespace chromeos {

// TODO(jdufault): Remove Network prefix from NetworkError associated classes.
// See crbug.com/672142
class NetworkError {
 public:
  enum UIState {
    UI_STATE_UNKNOWN = 0,
    UI_STATE_UPDATE,
    UI_STATE_SIGNIN,
    UI_STATE_SUPERVISED,
    UI_STATE_KIOSK_MODE,
    UI_STATE_LOCAL_STATE_ERROR,
    UI_STATE_AUTO_ENROLLMENT_ERROR,
    UI_STATE_ROLLBACK_ERROR,
  };

  enum ErrorState {
    ERROR_STATE_UNKNOWN = 0,
    ERROR_STATE_PORTAL,
    ERROR_STATE_OFFLINE,
    ERROR_STATE_PROXY,
    ERROR_STATE_AUTH_EXT_TIMEOUT,
    ERROR_STATE_NONE,
    // States above are being logged to histograms.
    // Please keep ERROR_STATE_NONE as the last one of the histogram values.
    // ERROR_STATE_KIOSK_ONLINE is a special case (not an actual error) and is
    // not reported in histogram.
    ERROR_STATE_KIOSK_ONLINE,
  };

  // Possible network error reasons.
  enum ErrorReason {
    ERROR_REASON_PROXY_AUTH_CANCELLED = 0,
    ERROR_REASON_PROXY_AUTH_SUPPLIED = 1,
    ERROR_REASON_PROXY_CONNECTION_FAILED = 2,
    ERROR_REASON_PROXY_CONFIG_CHANGED = 3,
    ERROR_REASON_LOADING_TIMEOUT = 4,
    ERROR_REASON_PORTAL_DETECTED = 5,

    // Reason for a case when default network has changed.
    ERROR_REASON_NETWORK_STATE_CHANGED = 6,

    // Reason for a case when JS side requires error screen update.
    ERROR_REASON_UPDATE = 7,
    ERROR_REASON_FRAME_ERROR = 8,

    // Used as an "uninitialized" state for cases when limiting number of
    // GAIA reloads due to a single network error reason.
    ERROR_REASON_NONE = 9
  };

  static const char* ErrorReasonString(ErrorReason reason);
};

}  // namespace chromeos

#endif  // CHROME_BROWSER_CHROMEOS_LOGIN_SCREENS_NETWORK_ERROR_H_
