summaryrefslogtreecommitdiff
path: root/chromium/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection.cc')
-rw-r--r--chromium/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection.cc31
1 files changed, 31 insertions, 0 deletions
diff --git a/chromium/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection.cc b/chromium/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection.cc
index e352df0ad46..02fe5150743 100644
--- a/chromium/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection.cc
+++ b/chromium/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection.cc
@@ -1265,6 +1265,7 @@ void RTCPeerConnection::ReportSetSdpUsage(
ScriptPromise RTCPeerConnection::setLocalDescription(
ScriptState* script_state) {
+ DCHECK(script_state->ContextIsValid());
auto* resolver = MakeGarbageCollected<ScriptPromiseResolver>(script_state);
ScriptPromise promise = resolver->Promise();
auto* request = MakeGarbageCollected<RTCVoidRequestPromiseImpl>(
@@ -1278,6 +1279,13 @@ ScriptPromise RTCPeerConnection::setLocalDescription(
ScriptState* script_state,
const RTCSessionDescriptionInit* session_description_init,
ExceptionState& exception_state) {
+ if (closed_) {
+ exception_state.ThrowDOMException(DOMExceptionCode::kInvalidStateError,
+ kSignalingStateClosedMessage);
+ return ScriptPromise();
+ }
+
+ DCHECK(script_state->ContextIsValid());
if (session_description_init->type().IsNull() &&
session_description_init->sdp().IsNull()) {
return setLocalDescription(script_state);
@@ -1316,6 +1324,12 @@ ScriptPromise RTCPeerConnection::setLocalDescription(
const RTCSessionDescriptionInit* session_description_init,
V8VoidFunction* success_callback,
V8RTCPeerConnectionErrorCallback* error_callback) {
+ if (CallErrorCallbackIfSignalingStateClosed(signaling_state_,
+ error_callback)) {
+ return ScriptPromise::CastUndefined(script_state);
+ }
+
+ DCHECK(script_state->ContextIsValid());
if (session_description_init->type() != "rollback") {
MaybeWarnAboutUnsafeSdp(session_description_init);
ReportSetSdpUsage(SetSdpOperationType::kSetLocalDescription,
@@ -1390,6 +1404,13 @@ ScriptPromise RTCPeerConnection::setRemoteDescription(
ScriptState* script_state,
const RTCSessionDescriptionInit* session_description_init,
ExceptionState& exception_state) {
+ if (closed_) {
+ exception_state.ThrowDOMException(DOMExceptionCode::kInvalidStateError,
+ kSignalingStateClosedMessage);
+ return ScriptPromise();
+ }
+
+ DCHECK(script_state->ContextIsValid());
if (session_description_init->type() != "rollback") {
MaybeWarnAboutUnsafeSdp(session_description_init);
ReportSetSdpUsage(SetSdpOperationType::kSetRemoteDescription,
@@ -1422,12 +1443,19 @@ ScriptPromise RTCPeerConnection::setRemoteDescription(
const RTCSessionDescriptionInit* session_description_init,
V8VoidFunction* success_callback,
V8RTCPeerConnectionErrorCallback* error_callback) {
+ if (CallErrorCallbackIfSignalingStateClosed(signaling_state_,
+ error_callback)) {
+ return ScriptPromise::CastUndefined(script_state);
+ }
+
+ DCHECK(script_state->ContextIsValid());
if (session_description_init->type() != "rollback") {
MaybeWarnAboutUnsafeSdp(session_description_init);
ReportSetSdpUsage(SetSdpOperationType::kSetRemoteDescription,
session_description_init);
}
ExecutionContext* context = ExecutionContext::From(script_state);
+ CHECK(context);
if (success_callback && error_callback) {
UseCounter::Count(
context,
@@ -3095,6 +3123,9 @@ ExecutionContext* RTCPeerConnection::GetExecutionContext() const {
}
void RTCPeerConnection::ContextDestroyed(ExecutionContext*) {
+ if (!closed_) {
+ CloseInternal();
+ }
ReleasePeerConnectionHandler();
}