blob: 617a9afca156cf3362bdd23f2712f16c69ca5a0d [file] [log] [blame]
// Copyright 2019 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "third_party/blink/renderer/modules/peerconnection/rtc_error.h"
#include <utility>
#include "base/notreached.h"
namespace blink {
namespace {
V8RTCErrorDetailType::Enum RTCErrorDetailToEnum(
webrtc::RTCErrorDetailType detail) {
switch (detail) {
case webrtc::RTCErrorDetailType::NONE:
return V8RTCErrorDetailType::Enum::kNoInfo;
case webrtc::RTCErrorDetailType::DATA_CHANNEL_FAILURE:
return V8RTCErrorDetailType::Enum::kDataChannelFailure;
case webrtc::RTCErrorDetailType::DTLS_FAILURE:
return V8RTCErrorDetailType::Enum::kDtlsFailure;
case webrtc::RTCErrorDetailType::FINGERPRINT_FAILURE:
return V8RTCErrorDetailType::Enum::kFingerprintFailure;
case webrtc::RTCErrorDetailType::SCTP_FAILURE:
return V8RTCErrorDetailType::Enum::kSctpFailure;
case webrtc::RTCErrorDetailType::SDP_SYNTAX_ERROR:
return V8RTCErrorDetailType::Enum::kSdpSyntaxError;
case webrtc::RTCErrorDetailType::HARDWARE_ENCODER_NOT_AVAILABLE:
return V8RTCErrorDetailType::Enum::kHardwareEncoderNotAvailable;
case webrtc::RTCErrorDetailType::HARDWARE_ENCODER_ERROR:
return V8RTCErrorDetailType::Enum::kHardwareEncoderError;
default:
// Included to ease introduction of new errors at the webrtc layer.
NOTREACHED();
}
}
} // namespace
// static
RTCError* RTCError::Create(const RTCErrorInit* init, String message) {
return MakeGarbageCollected<RTCError>(init, std::move(message));
}
RTCError::RTCError(const RTCErrorInit* init, String message)
: DOMException(DOMExceptionCode::kOperationError, std::move(message)),
error_detail_(init->errorDetail().AsEnum()),
sdp_line_number_(init->hasSdpLineNumber()
? std::optional<int32_t>(init->sdpLineNumber())
: std::nullopt),
http_request_status_code_(
init->hasHttpRequestStatusCode()
? std::optional<int32_t>(init->httpRequestStatusCode())
: std::nullopt),
sctp_cause_code_(init->hasSctpCauseCode()
? std::optional<int32_t>(init->sctpCauseCode())
: std::nullopt),
received_alert_(init->hasReceivedAlert()
? std::optional<uint32_t>(init->receivedAlert())
: std::nullopt),
sent_alert_(init->hasSentAlert()
? std::optional<uint32_t>(init->sentAlert())
: std::nullopt) {}
RTCError::RTCError(webrtc::RTCError err)
: DOMException(DOMExceptionCode::kOperationError, err.message()),
error_detail_(RTCErrorDetailToEnum(err.error_detail())),
sctp_cause_code_(err.sctp_cause_code()
? std::optional<int32_t>(*err.sctp_cause_code())
: std::nullopt) {}
V8RTCErrorDetailType RTCError::errorDetail() const {
return V8RTCErrorDetailType(error_detail_);
}
} // namespace blink