// 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.

#include "ppapi/host/error_conversion.h"

#include "base/numerics/safe_conversions.h"
#include "net/base/net_errors.h"
#include "ppapi/c/pp_errors.h"

namespace ppapi {
namespace host {

int32_t NetErrorToPepperError(int net_error) {
  if (net_error > 0)
    return base::checked_cast<int32_t>(net_error);

  switch (net_error) {
    case net::OK:
      return PP_OK;
    case net::ERR_IO_PENDING:
      return PP_OK_COMPLETIONPENDING;
    case net::ERR_ABORTED:
      return PP_ERROR_ABORTED;
    case net::ERR_INVALID_ARGUMENT:
      return PP_ERROR_BADARGUMENT;
    case net::ERR_INVALID_HANDLE:
      return PP_ERROR_BADARGUMENT;
    case net::ERR_FILE_NOT_FOUND:
      return PP_ERROR_FILENOTFOUND;
    case net::ERR_TIMED_OUT:
      return PP_ERROR_TIMEDOUT;
    case net::ERR_FILE_TOO_BIG:
      return PP_ERROR_FILETOOBIG;
    case net::ERR_ACCESS_DENIED:
      return PP_ERROR_NOACCESS;
    case net::ERR_NOT_IMPLEMENTED:
      return PP_ERROR_NOTSUPPORTED;
    case net::ERR_OUT_OF_MEMORY:
      return PP_ERROR_NOMEMORY;
    case net::ERR_FILE_EXISTS:
      return PP_ERROR_FILEEXISTS;
    case net::ERR_FILE_NO_SPACE:
      return PP_ERROR_NOSPACE;
    case net::ERR_CONNECTION_CLOSED:
      return PP_ERROR_CONNECTION_CLOSED;
    case net::ERR_CONNECTION_RESET:
      return PP_ERROR_CONNECTION_RESET;
    case net::ERR_CONNECTION_REFUSED:
      return PP_ERROR_CONNECTION_REFUSED;
    case net::ERR_CONNECTION_ABORTED:
      return PP_ERROR_CONNECTION_ABORTED;
    case net::ERR_CONNECTION_FAILED:
      return PP_ERROR_CONNECTION_FAILED;
    case net::ERR_NAME_NOT_RESOLVED:
      return PP_ERROR_NAME_NOT_RESOLVED;
    case net::ERR_ADDRESS_INVALID:
      return PP_ERROR_ADDRESS_INVALID;
    case net::ERR_ADDRESS_UNREACHABLE:
      return PP_ERROR_ADDRESS_UNREACHABLE;
    case net::ERR_CONNECTION_TIMED_OUT:
      return PP_ERROR_CONNECTION_TIMEDOUT;
    case net::ERR_NETWORK_ACCESS_DENIED:
      return PP_ERROR_NOACCESS;
    case net::ERR_MSG_TOO_BIG:
      return PP_ERROR_MESSAGE_TOO_BIG;
    case net::ERR_ADDRESS_IN_USE:
      return PP_ERROR_ADDRESS_IN_USE;
    default:
      return PP_ERROR_FAILED;
  }
}

}  // namespace host
}  // namespace ppapi
