diff options
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.cc | 31 |
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(); } |