17d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
27d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
37d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// found in the LICENSE file.
47d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
57d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "ppapi/host/error_conversion.h"
67d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
75d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/numerics/safe_conversions.h"
87d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "net/base/net_errors.h"
97d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "ppapi/c/pp_errors.h"
107d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
117d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)namespace ppapi {
127d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)namespace host {
137d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
147d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)int32_t NetErrorToPepperError(int net_error) {
157d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  if (net_error > 0)
165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    return base::checked_cast<int32_t>(net_error);
177d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
187d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  switch (net_error) {
197d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    case net::OK:
207d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)      return PP_OK;
217d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    case net::ERR_IO_PENDING:
227d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)      return PP_OK_COMPLETIONPENDING;
237d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    case net::ERR_ABORTED:
247d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)      return PP_ERROR_ABORTED;
257d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    case net::ERR_INVALID_ARGUMENT:
267d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)      return PP_ERROR_BADARGUMENT;
277d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    case net::ERR_INVALID_HANDLE:
287d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)      return PP_ERROR_BADARGUMENT;
297d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    case net::ERR_FILE_NOT_FOUND:
307d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)      return PP_ERROR_FILENOTFOUND;
317d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    case net::ERR_TIMED_OUT:
327d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)      return PP_ERROR_TIMEDOUT;
337d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    case net::ERR_FILE_TOO_BIG:
347d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)      return PP_ERROR_FILETOOBIG;
357d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    case net::ERR_ACCESS_DENIED:
367d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)      return PP_ERROR_NOACCESS;
377d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    case net::ERR_NOT_IMPLEMENTED:
387d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)      return PP_ERROR_NOTSUPPORTED;
397d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    case net::ERR_OUT_OF_MEMORY:
407d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)      return PP_ERROR_NOMEMORY;
417d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    case net::ERR_FILE_EXISTS:
427d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)      return PP_ERROR_FILEEXISTS;
437d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    case net::ERR_FILE_NO_SPACE:
447d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)      return PP_ERROR_NOSPACE;
457d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    case net::ERR_CONNECTION_CLOSED:
467d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)      return PP_ERROR_CONNECTION_CLOSED;
477d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    case net::ERR_CONNECTION_RESET:
487d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)      return PP_ERROR_CONNECTION_RESET;
497d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    case net::ERR_CONNECTION_REFUSED:
507d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)      return PP_ERROR_CONNECTION_REFUSED;
517d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    case net::ERR_CONNECTION_ABORTED:
527d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)      return PP_ERROR_CONNECTION_ABORTED;
537d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    case net::ERR_CONNECTION_FAILED:
547d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)      return PP_ERROR_CONNECTION_FAILED;
557d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    case net::ERR_NAME_NOT_RESOLVED:
567d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)      return PP_ERROR_NAME_NOT_RESOLVED;
577d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    case net::ERR_ADDRESS_INVALID:
587d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)      return PP_ERROR_ADDRESS_INVALID;
597d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    case net::ERR_ADDRESS_UNREACHABLE:
607d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)      return PP_ERROR_ADDRESS_UNREACHABLE;
617d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    case net::ERR_CONNECTION_TIMED_OUT:
627d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)      return PP_ERROR_CONNECTION_TIMEDOUT;
637d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    case net::ERR_NETWORK_ACCESS_DENIED:
647d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)      return PP_ERROR_NOACCESS;
657d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    case net::ERR_MSG_TOO_BIG:
667d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)      return PP_ERROR_MESSAGE_TOO_BIG;
677d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    case net::ERR_ADDRESS_IN_USE:
687d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)      return PP_ERROR_ADDRESS_IN_USE;
697d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    default:
707d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)      return PP_ERROR_FAILED;
717d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  }
727d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}
737d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
747d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}  // namespace host
757d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}  // namespace ppapi
76