<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[282057] trunk</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/282057">282057</a></dd>
<dt>Author</dt> <dd>youenn@apple.com</dd>
<dt>Date</dt> <dd>2021-09-06 09:14:32 -0700 (Mon, 06 Sep 2021)</dd>
</dl>

<h3>Log Message</h3>
<pre>Add support for RTCSctpTransport
https://bugs.webkit.org/show_bug.cgi?id=229292
<rdar://problem/82394152>

Reviewed by Eric Carlson.

LayoutTests/imported/w3c:

* web-platform-tests/webrtc/RTCDataChannel-send-expected.txt:
* web-platform-tests/webrtc/RTCIceTransport-expected.txt:
* web-platform-tests/webrtc/RTCPeerConnection-connectionState.https-expected.txt:
* web-platform-tests/webrtc/RTCRtpSender-transport.https-expected.txt:
* web-platform-tests/webrtc/RTCSctpTransport-constructor-expected.txt:
* web-platform-tests/webrtc/RTCSctpTransport-events-expected.txt:
* web-platform-tests/webrtc/RTCSctpTransport-maxChannels-expected.txt:
* web-platform-tests/webrtc/RTCSctpTransport-maxMessageSize-expected.txt:
* web-platform-tests/webrtc/idlharness.https.window-expected.txt:

Source/ThirdParty/libwebrtc:

* Configurations/libwebrtc.iOS.exp:
* Configurations/libwebrtc.iOSsim.exp:
* Configurations/libwebrtc.mac.exp:

Source/WebCore:

Expose RTSctpTransport API and getter from the peer connection.
Implement event mechanism and getters.
Additional work will be needed to make ice transport objects consistent between SCTP and senders/receivers.
Covered by rebased tests.

* CMakeLists.txt:
* DerivedSources-input.xcfilelist:
* DerivedSources-output.xcfilelist:
* DerivedSources.make:
* Modules/mediastream/PeerConnectionBackend.cpp:
(WebCore::PeerConnectionBackend::setLocalDescriptionSucceeded):
(WebCore::PeerConnectionBackend::setRemoteDescriptionSucceeded):
* Modules/mediastream/PeerConnectionBackend.h:
* Modules/mediastream/RTCPeerConnection.cpp:
(WebCore::RTCPeerConnection::updateSctpBackend):
* Modules/mediastream/RTCPeerConnection.h:
* Modules/mediastream/RTCPeerConnection.idl:
* Modules/mediastream/RTCSctpTransport.cpp: Added.
(WebCore::RTCSctpTransport::RTCSctpTransport):
(WebCore::RTCSctpTransport::~RTCSctpTransport):
(WebCore::RTCSctpTransport::stop):
(WebCore::RTCSctpTransport::virtualHasPendingActivity const):
(WebCore::RTCSctpTransport::onStateChanged):
* Modules/mediastream/RTCSctpTransport.h: Added.
* Modules/mediastream/RTCSctpTransport.idl: Added.
* Modules/mediastream/RTCSctpTransportBackend.h: Added.
(WebCore::operator==):
* Modules/mediastream/RTCSctpTransportState.h: Added.
* Modules/mediastream/RTCSctpTransportState.idl: Added.
* Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp:
(WebCore::SctpTransportState::SctpTransportState):
(WebCore::SctpTransportState::createBackend):
(WebCore::LibWebRTCMediaEndpoint::setLocalSessionDescriptionSucceeded):
(WebCore::LibWebRTCMediaEndpoint::setLocalSessionDescriptionFailed):
(WebCore::LibWebRTCMediaEndpoint::setRemoteSessionDescriptionSucceeded):
* Modules/mediastream/libwebrtc/LibWebRTCSctpTransportBackend.cpp: Added.
(WebCore::toRTCSctpTransportState):
(WebCore::LibWebRTCSctpTransportBackendObserver::LibWebRTCSctpTransportBackendObserver):
(WebCore::LibWebRTCSctpTransportBackendObserver::updateState):
(WebCore::LibWebRTCSctpTransportBackendObserver::start):
(WebCore::LibWebRTCSctpTransportBackendObserver::stop):
(WebCore::LibWebRTCSctpTransportBackendObserver::OnStateChange):
(WebCore::LibWebRTCSctpTransportBackend::LibWebRTCSctpTransportBackend):
(WebCore::LibWebRTCSctpTransportBackend::~LibWebRTCSctpTransportBackend):
(WebCore::LibWebRTCSctpTransportBackend::dtlsTransportBackend):
(WebCore::LibWebRTCSctpTransportBackend::registerClient):
(WebCore::LibWebRTCSctpTransportBackend::unregisterClient):
* Modules/mediastream/libwebrtc/LibWebRTCSctpTransportBackend.h: Added.
* Sources.txt:
* WebCore.xcodeproj/project.pbxproj:
* bindings/js/WebCoreBuiltinNames.h:
* dom/EventTargetFactory.in:

LayoutTests:

* webrtc/datachannel/dtls10.html:
We should now check for the RTCSctpTransport's RTCDtlsTransport state
to identify whether connection is successful or not.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsChangeLog">trunk/LayoutTests/ChangeLog</a></li>
<li><a href="#trunkLayoutTestsimportedw3cChangeLog">trunk/LayoutTests/imported/w3c/ChangeLog</a></li>
<li><a href="#trunkLayoutTestsimportedw3cwebplatformtestswebrtcRTCDataChannelsendexpectedtxt">trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCDataChannel-send-expected.txt</a></li>
<li><a href="#trunkLayoutTestsimportedw3cwebplatformtestswebrtcRTCIceTransportexpectedtxt">trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCIceTransport-expected.txt</a></li>
<li><a href="#trunkLayoutTestsimportedw3cwebplatformtestswebrtcRTCPeerConnectionconnectionStatehttpsexpectedtxt">trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCPeerConnection-connectionState.https-expected.txt</a></li>
<li><a href="#trunkLayoutTestsimportedw3cwebplatformtestswebrtcRTCRtpSendertransporthttpsexpectedtxt">trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCRtpSender-transport.https-expected.txt</a></li>
<li><a href="#trunkLayoutTestsimportedw3cwebplatformtestswebrtcRTCSctpTransportconstructorexpectedtxt">trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCSctpTransport-constructor-expected.txt</a></li>
<li><a href="#trunkLayoutTestsimportedw3cwebplatformtestswebrtcRTCSctpTransporteventsexpectedtxt">trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCSctpTransport-events-expected.txt</a></li>
<li><a href="#trunkLayoutTestsimportedw3cwebplatformtestswebrtcRTCSctpTransportmaxChannelsexpectedtxt">trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCSctpTransport-maxChannels-expected.txt</a></li>
<li><a href="#trunkLayoutTestsimportedw3cwebplatformtestswebrtcRTCSctpTransportmaxMessageSizeexpectedtxt">trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCSctpTransport-maxMessageSize-expected.txt</a></li>
<li><a href="#trunkLayoutTestsimportedw3cwebplatformtestswebrtcidlharnesshttpswindowexpectedtxt">trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc/idlharness.https.window-expected.txt</a></li>
<li><a href="#trunkLayoutTestswebrtcdatachanneldtls10html">trunk/LayoutTests/webrtc/datachannel/dtls10.html</a></li>
<li><a href="#trunkSourceThirdPartylibwebrtcChangeLog">trunk/Source/ThirdParty/libwebrtc/ChangeLog</a></li>
<li><a href="#trunkSourceThirdPartylibwebrtcConfigurationslibwebrtciOSexp">trunk/Source/ThirdParty/libwebrtc/Configurations/libwebrtc.iOS.exp</a></li>
<li><a href="#trunkSourceThirdPartylibwebrtcConfigurationslibwebrtciOSsimexp">trunk/Source/ThirdParty/libwebrtc/Configurations/libwebrtc.iOSsim.exp</a></li>
<li><a href="#trunkSourceThirdPartylibwebrtcConfigurationslibwebrtcmacexp">trunk/Source/ThirdParty/libwebrtc/Configurations/libwebrtc.mac.exp</a></li>
<li><a href="#trunkSourceWebCoreCMakeListstxt">trunk/Source/WebCore/CMakeLists.txt</a></li>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCoreDerivedSourcesinputxcfilelist">trunk/Source/WebCore/DerivedSources-input.xcfilelist</a></li>
<li><a href="#trunkSourceWebCoreDerivedSourcesoutputxcfilelist">trunk/Source/WebCore/DerivedSources-output.xcfilelist</a></li>
<li><a href="#trunkSourceWebCoreDerivedSourcesmake">trunk/Source/WebCore/DerivedSources.make</a></li>
<li><a href="#trunkSourceWebCoreModulesmediastreamPeerConnectionBackendcpp">trunk/Source/WebCore/Modules/mediastream/PeerConnectionBackend.cpp</a></li>
<li><a href="#trunkSourceWebCoreModulesmediastreamPeerConnectionBackendh">trunk/Source/WebCore/Modules/mediastream/PeerConnectionBackend.h</a></li>
<li><a href="#trunkSourceWebCoreModulesmediastreamRTCPeerConnectioncpp">trunk/Source/WebCore/Modules/mediastream/RTCPeerConnection.cpp</a></li>
<li><a href="#trunkSourceWebCoreModulesmediastreamRTCPeerConnectionh">trunk/Source/WebCore/Modules/mediastream/RTCPeerConnection.h</a></li>
<li><a href="#trunkSourceWebCoreModulesmediastreamRTCPeerConnectionidl">trunk/Source/WebCore/Modules/mediastream/RTCPeerConnection.idl</a></li>
<li><a href="#trunkSourceWebCoreModulesmediastreamlibwebrtcLibWebRTCIceTransportBackendcpp">trunk/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCIceTransportBackend.cpp</a></li>
<li><a href="#trunkSourceWebCoreModulesmediastreamlibwebrtcLibWebRTCMediaEndpointcpp">trunk/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp</a></li>
<li><a href="#trunkSourceWebCoreSourcestxt">trunk/Source/WebCore/Sources.txt</a></li>
<li><a href="#trunkSourceWebCoreWebCorexcodeprojprojectpbxproj">trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj</a></li>
<li><a href="#trunkSourceWebCorebindingsjsWebCoreBuiltinNamesh">trunk/Source/WebCore/bindings/js/WebCoreBuiltinNames.h</a></li>
<li><a href="#trunkSourceWebCoredomEventTargetFactoryin">trunk/Source/WebCore/dom/EventTargetFactory.in</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#trunkSourceWebCoreModulesmediastreamRTCSctpTransportcpp">trunk/Source/WebCore/Modules/mediastream/RTCSctpTransport.cpp</a></li>
<li><a href="#trunkSourceWebCoreModulesmediastreamRTCSctpTransporth">trunk/Source/WebCore/Modules/mediastream/RTCSctpTransport.h</a></li>
<li><a href="#trunkSourceWebCoreModulesmediastreamRTCSctpTransportidl">trunk/Source/WebCore/Modules/mediastream/RTCSctpTransport.idl</a></li>
<li><a href="#trunkSourceWebCoreModulesmediastreamRTCSctpTransportBackendh">trunk/Source/WebCore/Modules/mediastream/RTCSctpTransportBackend.h</a></li>
<li><a href="#trunkSourceWebCoreModulesmediastreamRTCSctpTransportStateh">trunk/Source/WebCore/Modules/mediastream/RTCSctpTransportState.h</a></li>
<li><a href="#trunkSourceWebCoreModulesmediastreamRTCSctpTransportStateidl">trunk/Source/WebCore/Modules/mediastream/RTCSctpTransportState.idl</a></li>
<li><a href="#trunkSourceWebCoreModulesmediastreamlibwebrtcLibWebRTCSctpTransportBackendcpp">trunk/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCSctpTransportBackend.cpp</a></li>
<li><a href="#trunkSourceWebCoreModulesmediastreamlibwebrtcLibWebRTCSctpTransportBackendh">trunk/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCSctpTransportBackend.h</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkLayoutTestsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/ChangeLog (282056 => 282057)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/ChangeLog      2021-09-06 15:57:45 UTC (rev 282056)
+++ trunk/LayoutTests/ChangeLog 2021-09-06 16:14:32 UTC (rev 282057)
</span><span class="lines">@@ -1,3 +1,15 @@
</span><ins>+2021-09-06  Youenn Fablet  <youenn@apple.com>
+
+        Add support for RTCSctpTransport
+        https://bugs.webkit.org/show_bug.cgi?id=229292
+        <rdar://problem/82394152>
+
+        Reviewed by Eric Carlson.
+
+        * webrtc/datachannel/dtls10.html:
+        We should now check for the RTCSctpTransport's RTCDtlsTransport state
+        to identify whether connection is successful or not.
+
</ins><span class="cx"> 2021-09-06  Enrique Ocaña González  <eocanha@igalia.com>
</span><span class="cx"> 
</span><span class="cx">         [GTK] webaudio/silent-audio-interrupted-in-background.html is a flaky timeout
</span></span></pre></div>
<a id="trunkLayoutTestsimportedw3cChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/imported/w3c/ChangeLog (282056 => 282057)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/imported/w3c/ChangeLog 2021-09-06 15:57:45 UTC (rev 282056)
+++ trunk/LayoutTests/imported/w3c/ChangeLog    2021-09-06 16:14:32 UTC (rev 282057)
</span><span class="lines">@@ -1,3 +1,21 @@
</span><ins>+2021-09-06  Youenn Fablet  <youenn@apple.com>
+
+        Add support for RTCSctpTransport
+        https://bugs.webkit.org/show_bug.cgi?id=229292
+        <rdar://problem/82394152>
+
+        Reviewed by Eric Carlson.
+
+        * web-platform-tests/webrtc/RTCDataChannel-send-expected.txt:
+        * web-platform-tests/webrtc/RTCIceTransport-expected.txt:
+        * web-platform-tests/webrtc/RTCPeerConnection-connectionState.https-expected.txt:
+        * web-platform-tests/webrtc/RTCRtpSender-transport.https-expected.txt:
+        * web-platform-tests/webrtc/RTCSctpTransport-constructor-expected.txt:
+        * web-platform-tests/webrtc/RTCSctpTransport-events-expected.txt:
+        * web-platform-tests/webrtc/RTCSctpTransport-maxChannels-expected.txt:
+        * web-platform-tests/webrtc/RTCSctpTransport-maxMessageSize-expected.txt:
+        * web-platform-tests/webrtc/idlharness.https.window-expected.txt:
+
</ins><span class="cx"> 2021-09-03  Johnson Zhou  <qiaosong_zhou@apple.com>
</span><span class="cx"> 
</span><span class="cx">         Addition of CSSNumericFactory in CSS Typed OM
</span></span></pre></div>
<a id="trunkLayoutTestsimportedw3cwebplatformtestswebrtcRTCDataChannelsendexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCDataChannel-send-expected.txt (282056 => 282057)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCDataChannel-send-expected.txt        2021-09-06 15:57:45 UTC (rev 282056)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCDataChannel-send-expected.txt   2021-09-06 16:14:32 UTC (rev 282057)
</span><span class="lines">@@ -9,7 +9,7 @@
</span><span class="cx"> PASS Datachannel should be able to send ArrayBuffer message and receive as Blob
</span><span class="cx"> FAIL Datachannel binaryType should receive message as Blob by default assert_equals: Expect initial binaryType value to be blob expected "blob" but got "arraybuffer"
</span><span class="cx"> PASS Datachannel sending multiple messages with different types should succeed and be received
</span><del>-FAIL Datachannel send() up to max size should succeed, above max size should fail promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'pc1.sctp.maxMessageSize')"
</del><ins>+FAIL Datachannel send() up to max size should succeed, above max size should fail assert_throws_js: function "() => channel1.send(message)" did not throw
</ins><span class="cx"> PASS Negotiated datachannel should be able to send simple string and receive as string
</span><span class="cx"> PASS Negotiated datachannel should be able to send unicode string and receive as unicode string
</span><span class="cx"> PASS Negotiated datachannel should ignore binaryType and always receive string message as string
</span><span class="lines">@@ -19,5 +19,5 @@
</span><span class="cx"> PASS Negotiated datachannel should be able to send ArrayBuffer message and receive as Blob
</span><span class="cx"> FAIL Negotiated datachannel binaryType should receive message as Blob by default assert_equals: Expect initial binaryType value to be blob expected "blob" but got "arraybuffer"
</span><span class="cx"> PASS Negotiated datachannel sending multiple messages with different types should succeed and be received
</span><del>-FAIL Negotiated datachannel send() up to max size should succeed, above max size should fail promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'pc1.sctp.maxMessageSize')"
</del><ins>+FAIL Negotiated datachannel send() up to max size should succeed, above max size should fail assert_throws_js: function "() => channel1.send(message)" did not throw
</ins><span class="cx"> 
</span></span></pre></div>
<a id="trunkLayoutTestsimportedw3cwebplatformtestswebrtcRTCIceTransportexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCIceTransport-expected.txt (282056 => 282057)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCIceTransport-expected.txt    2021-09-06 15:57:45 UTC (rev 282056)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCIceTransport-expected.txt       2021-09-06 16:14:32 UTC (rev 282057)
</span><span class="lines">@@ -1,4 +1,4 @@
</span><span class="cx"> 
</span><del>-FAIL Two connected iceTransports should has matching local/remote candidates returned promise_test: Unhandled rejection with value: object "ReferenceError: Can't find variable: RTCSctpTransport"
-FAIL Unconnected iceTransport should have empty remote candidates and selected pair promise_test: Unhandled rejection with value: object "ReferenceError: Can't find variable: RTCSctpTransport"
</del><ins>+FAIL Two connected iceTransports should has matching local/remote candidates returned assert_true: Expect RTCIceRole to be either controlling or controlled, found undefined expected true got false
+FAIL Unconnected iceTransport should have empty remote candidates and selected pair promise_test: Unhandled rejection with value: object "TypeError: iceTransport.getRemoteCandidates is not a function. (In 'iceTransport.getRemoteCandidates()', 'iceTransport.getRemoteCandidates' is undefined)"
</ins><span class="cx"> 
</span></span></pre></div>
<a id="trunkLayoutTestsimportedw3cwebplatformtestswebrtcRTCPeerConnectionconnectionStatehttpsexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCPeerConnection-connectionState.https-expected.txt (282056 => 282057)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCPeerConnection-connectionState.https-expected.txt    2021-09-06 15:57:45 UTC (rev 282056)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCPeerConnection-connectionState.https-expected.txt       2021-09-06 16:14:32 UTC (rev 282057)
</span><span class="lines">@@ -2,7 +2,7 @@
</span><span class="cx"> PASS Initial connectionState should be new
</span><span class="cx"> PASS Closing the connection should set connectionState to closed
</span><span class="cx"> PASS connection with one data channel should eventually have connected connection state
</span><del>-FAIL connection with one data channel should eventually have transports in connected state undefined is not an object (evaluating 'sctpTransport.transport')
</del><ins>+FAIL connection with one data channel should eventually have transports in connected state assert_equals: Expect DTLS transport to be in connected state expected "connected" but got "connecting"
</ins><span class="cx"> FAIL connectionState remains new when not adding remote ice candidates assert_equals: expected "new" but got "checking"
</span><span class="cx"> PASS connectionState transitions to connected via connecting
</span><span class="cx"> PASS Closing a PeerConnection should not fire connectionstatechange event
</span></span></pre></div>
<a id="trunkLayoutTestsimportedw3cwebplatformtestswebrtcRTCRtpSendertransporthttpsexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCRtpSender-transport.https-expected.txt (282056 => 282057)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCRtpSender-transport.https-expected.txt       2021-09-06 15:57:45 UTC (rev 282056)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCRtpSender-transport.https-expected.txt  2021-09-06 16:14:32 UTC (rev 282057)
</span><span class="lines">@@ -2,9 +2,9 @@
</span><span class="cx"> PASS RTCRtpSender.transport is null when unconnected
</span><span class="cx"> PASS RTCRtpSender/receiver.transport has a value when connected
</span><span class="cx"> PASS RTCRtpSender/receiver.transport at the right time, with bundle policy balanced
</span><del>-FAIL RTCRtpSender/receiver/SCTP transport at the right time, with bundle policy balanced promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'caller.sctp.transport')"
</del><ins>+FAIL RTCRtpSender/receiver/SCTP transport at the right time, with bundle policy balanced assert_equals: Callee SCTP transport does not match: expected object "[object RTCDtlsTransport]" but got object "[object RTCDtlsTransport]"
</ins><span class="cx"> PASS RTCRtpSender/receiver.transport at the right time, with bundle policy max-bundle
</span><del>-FAIL RTCRtpSender/receiver/SCTP transport at the right time, with bundle policy max-bundle promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'caller.sctp.transport')"
</del><ins>+FAIL RTCRtpSender/receiver/SCTP transport at the right time, with bundle policy max-bundle assert_equals: Callee SCTP transport does not match: expected object "[object RTCDtlsTransport]" but got object "[object RTCDtlsTransport]"
</ins><span class="cx"> PASS RTCRtpSender/receiver.transport at the right time, with bundle policy max-compat
</span><del>-FAIL RTCRtpSender/receiver/SCTP transport at the right time, with bundle policy max-compat promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'caller.sctp.transport')"
</del><ins>+FAIL RTCRtpSender/receiver/SCTP transport at the right time, with bundle policy max-compat assert_equals: Callee SCTP transport does not match: expected object "[object RTCDtlsTransport]" but got object "[object RTCDtlsTransport]"
</ins><span class="cx"> 
</span></span></pre></div>
<a id="trunkLayoutTestsimportedw3cwebplatformtestswebrtcRTCSctpTransportconstructorexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCSctpTransport-constructor-expected.txt (282056 => 282057)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCSctpTransport-constructor-expected.txt       2021-09-06 15:57:45 UTC (rev 282056)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCSctpTransport-constructor-expected.txt  2021-09-06 16:14:32 UTC (rev 282057)
</span><span class="lines">@@ -1,6 +1,6 @@
</span><span class="cx"> 
</span><del>-FAIL setRemoteDescription() with answer not containing data media should not initialize pc.sctp assert_equals: RTCSctpTransport must be null expected (object) null but got (undefined) undefined
-FAIL setLocalDescription() with answer not containing data media should not initialize pc.sctp assert_equals: RTCSctpTransport must be null expected (object) null but got (undefined) undefined
-FAIL setRemoteDescription() with answer containing data media should initialize pc.sctp assert_equals: RTCSctpTransport must be null expected (object) null but got (undefined) undefined
-FAIL setLocalDescription() with answer containing data media should initialize pc.sctp assert_equals: RTCSctpTransport must be null expected (object) null but got (undefined) undefined
</del><ins>+PASS setRemoteDescription() with answer not containing data media should not initialize pc.sctp
+PASS setLocalDescription() with answer not containing data media should not initialize pc.sctp
+PASS setRemoteDescription() with answer containing data media should initialize pc.sctp
+PASS setLocalDescription() with answer containing data media should initialize pc.sctp
</ins><span class="cx"> 
</span></span></pre></div>
<a id="trunkLayoutTestsimportedw3cwebplatformtestswebrtcRTCSctpTransporteventsexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCSctpTransport-events-expected.txt (282056 => 282057)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCSctpTransport-events-expected.txt    2021-09-06 15:57:45 UTC (rev 282056)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCSctpTransport-events-expected.txt       2021-09-06 16:14:32 UTC (rev 282057)
</span><span class="lines">@@ -1,6 +1,4 @@
</span><span class="cx"> 
</span><del>-Harness Error (FAIL), message = Unhandled rejection: undefined is not an object (evaluating 'transport.state')
</del><ins>+PASS SctpTransport objects are created at appropriate times
+PASS SctpTransport reaches connected and closed state
</ins><span class="cx"> 
</span><del>-FAIL SctpTransport objects are created at appropriate times assert_equals: expected (undefined) undefined but got (object) null
-FAIL SctpTransport reaches connected and closed state promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'transport.state')"
-
</del></span></pre></div>
<a id="trunkLayoutTestsimportedw3cwebplatformtestswebrtcRTCSctpTransportmaxChannelsexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCSctpTransport-maxChannels-expected.txt (282056 => 282057)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCSctpTransport-maxChannels-expected.txt       2021-09-06 15:57:45 UTC (rev 282056)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCSctpTransport-maxChannels-expected.txt  2021-09-06 16:14:32 UTC (rev 282057)
</span><span class="lines">@@ -1,6 +1,4 @@
</span><span class="cx"> 
</span><del>-Harness Error (FAIL), message = Unhandled rejection: undefined is not an object (evaluating 'transport.state')
</del><ins>+PASS An unconnected peerconnection must not have maxChannels set
+PASS maxChannels gets instantiated after connecting
</ins><span class="cx"> 
</span><del>-FAIL An unconnected peerconnection must not have maxChannels set assert_equals: RTCSctpTransport must be null expected (object) null but got (undefined) undefined
-FAIL maxChannels gets instantiated after connecting promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'pc1.sctp.maxChannels')"
-
</del></span></pre></div>
<a id="trunkLayoutTestsimportedw3cwebplatformtestswebrtcRTCSctpTransportmaxMessageSizeexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCSctpTransport-maxMessageSize-expected.txt (282056 => 282057)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCSctpTransport-maxMessageSize-expected.txt    2021-09-06 15:57:45 UTC (rev 282056)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCSctpTransport-maxMessageSize-expected.txt       2021-09-06 16:14:32 UTC (rev 282057)
</span><span class="lines">@@ -1,7 +1,7 @@
</span><span class="cx"> 
</span><del>-FAIL Determine the local side send limitation (canSendSize) by offering a max-message-size of 0 assert_equals: RTCSctpTransport must be null expected (object) null but got (undefined) undefined
-FAIL Remote offer SDP missing max-message-size attribute assert_not_equals: canSendSize needs to be determined got disallowed value null
-FAIL max-message-size with a (non-zero) value provided by the remote peer assert_not_equals: canSendSize needs to be determined got disallowed value null
-FAIL Renegotiate max-message-size with various values provided by the remote peer assert_not_equals: canSendSize needs to be determined got disallowed value null
-FAIL max-message-size with a (non-zero) value larger than canSendSize provided by the remote peer assert_not_equals: canSendSize needs to be determined got disallowed value null
</del><ins>+PASS Determine the local side send limitation (canSendSize) by offering a max-message-size of 0
+FAIL Remote offer SDP missing max-message-size attribute assert_equals: Missing SDP attribute and a non-zero canSendSize should give an maxMessageSize of min(65536, canSendSize) expected 65536 but got 1.7976931348623157e+308
+FAIL max-message-size with a (non-zero) value provided by the remote peer assert_equals: maxMessageSize should be the value provided by the remote peer (as long as it is less than canSendSize) expected 1 but got 1.7976931348623157e+308
+FAIL Renegotiate max-message-size with various values provided by the remote peer assert_equals: maxMessageSize should be the value provided by the remote peer (as long as it is less than canSendSize) expected 1 but got 1.7976931348623157e+308
+FAIL max-message-size with a (non-zero) value larger than canSendSize provided by the remote peer promise_test: Unhandled rejection with value: object "SyntaxError: Invalid SCTP max message size."
</ins><span class="cx"> 
</span></span></pre></div>
<a id="trunkLayoutTestsimportedw3cwebplatformtestswebrtcidlharnesshttpswindowexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc/idlharness.https.window-expected.txt (282056 => 282057)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc/idlharness.https.window-expected.txt    2021-09-06 15:57:45 UTC (rev 282056)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc/idlharness.https.window-expected.txt       2021-09-06 16:14:32 UTC (rev 282057)
</span><span class="lines">@@ -2,7 +2,7 @@
</span><span class="cx"> PASS idl_test setup
</span><span class="cx"> PASS idl_test validation
</span><span class="cx"> PASS Test driver for asyncInitCertificate
</span><del>-FAIL Test driver for asyncInitTransports assert_unreached: Failed to run asyncInitTransports: ReferenceError: Can't find variable: RTCSctpTransport Reached unreachable code
</del><ins>+PASS Test driver for asyncInitTransports
</ins><span class="cx"> PASS Test driver for asyncInitMediaStreamTrack
</span><span class="cx"> PASS Partial dictionary RTCOfferOptions: original dictionary defined
</span><span class="cx"> PASS Partial dictionary RTCOfferOptions: member names are unique
</span><span class="lines">@@ -62,7 +62,7 @@
</span><span class="cx"> PASS RTCPeerConnection interface: operation removeTrack(RTCRtpSender)
</span><span class="cx"> PASS RTCPeerConnection interface: operation addTransceiver((MediaStreamTrack or DOMString), optional RTCRtpTransceiverInit)
</span><span class="cx"> PASS RTCPeerConnection interface: attribute ontrack
</span><del>-FAIL RTCPeerConnection interface: attribute sctp assert_true: The prototype object must have a property "sctp" expected true got false
</del><ins>+PASS RTCPeerConnection interface: attribute sctp
</ins><span class="cx"> PASS RTCPeerConnection interface: operation createDataChannel(USVString, optional RTCDataChannelInit)
</span><span class="cx"> PASS RTCPeerConnection interface: attribute ondatachannel
</span><span class="cx"> PASS RTCPeerConnection interface: operation getStats(optional MediaStreamTrack?)
</span><span class="lines">@@ -123,7 +123,7 @@
</span><span class="cx"> PASS RTCPeerConnection interface: new RTCPeerConnection() must inherit property "addTransceiver((MediaStreamTrack or DOMString), optional RTCRtpTransceiverInit)" with the proper type
</span><span class="cx"> PASS RTCPeerConnection interface: calling addTransceiver((MediaStreamTrack or DOMString), optional RTCRtpTransceiverInit) on new RTCPeerConnection() with too few arguments must throw TypeError
</span><span class="cx"> PASS RTCPeerConnection interface: new RTCPeerConnection() must inherit property "ontrack" with the proper type
</span><del>-FAIL RTCPeerConnection interface: new RTCPeerConnection() must inherit property "sctp" with the proper type assert_inherits: property "sctp" not found in prototype chain
</del><ins>+PASS RTCPeerConnection interface: new RTCPeerConnection() must inherit property "sctp" with the proper type
</ins><span class="cx"> PASS RTCPeerConnection interface: new RTCPeerConnection() must inherit property "createDataChannel(USVString, optional RTCDataChannelInit)" with the proper type
</span><span class="cx"> PASS RTCPeerConnection interface: calling createDataChannel(USVString, optional RTCDataChannelInit) on new RTCPeerConnection() with too few arguments must throw TypeError
</span><span class="cx"> PASS RTCPeerConnection interface: new RTCPeerConnection() must inherit property "ondatachannel" with the proper type
</span><span class="lines">@@ -312,13 +312,13 @@
</span><span class="cx"> PASS RTCDtlsTransport interface: operation getRemoteCertificates()
</span><span class="cx"> PASS RTCDtlsTransport interface: attribute onstatechange
</span><span class="cx"> PASS RTCDtlsTransport interface: attribute onerror
</span><del>-FAIL RTCDtlsTransport must be primary interface of idlTestObjects.dtlsTransport assert_equals: wrong typeof object expected "object" but got "undefined"
-FAIL Stringification of idlTestObjects.dtlsTransport assert_equals: wrong typeof object expected "object" but got "undefined"
-FAIL RTCDtlsTransport interface: idlTestObjects.dtlsTransport must inherit property "iceTransport" with the proper type assert_equals: wrong typeof object expected "object" but got "undefined"
-FAIL RTCDtlsTransport interface: idlTestObjects.dtlsTransport must inherit property "state" with the proper type assert_equals: wrong typeof object expected "object" but got "undefined"
-FAIL RTCDtlsTransport interface: idlTestObjects.dtlsTransport must inherit property "getRemoteCertificates()" with the proper type assert_equals: wrong typeof object expected "object" but got "undefined"
-FAIL RTCDtlsTransport interface: idlTestObjects.dtlsTransport must inherit property "onstatechange" with the proper type assert_equals: wrong typeof object expected "object" but got "undefined"
-FAIL RTCDtlsTransport interface: idlTestObjects.dtlsTransport must inherit property "onerror" with the proper type assert_equals: wrong typeof object expected "object" but got "undefined"
</del><ins>+PASS RTCDtlsTransport must be primary interface of idlTestObjects.dtlsTransport
+PASS Stringification of idlTestObjects.dtlsTransport
+PASS RTCDtlsTransport interface: idlTestObjects.dtlsTransport must inherit property "iceTransport" with the proper type
+PASS RTCDtlsTransport interface: idlTestObjects.dtlsTransport must inherit property "state" with the proper type
+PASS RTCDtlsTransport interface: idlTestObjects.dtlsTransport must inherit property "getRemoteCertificates()" with the proper type
+PASS RTCDtlsTransport interface: idlTestObjects.dtlsTransport must inherit property "onstatechange" with the proper type
+PASS RTCDtlsTransport interface: idlTestObjects.dtlsTransport must inherit property "onerror" with the proper type
</ins><span class="cx"> PASS RTCIceTransport interface: existence and properties of interface object
</span><span class="cx"> PASS RTCIceTransport interface object length
</span><span class="cx"> PASS RTCIceTransport interface object name
</span><span class="lines">@@ -337,20 +337,20 @@
</span><span class="cx"> PASS RTCIceTransport interface: attribute onstatechange
</span><span class="cx"> PASS RTCIceTransport interface: attribute ongatheringstatechange
</span><span class="cx"> FAIL RTCIceTransport interface: attribute onselectedcandidatepairchange assert_true: The prototype object must have a property "onselectedcandidatepairchange" expected true got false
</span><del>-FAIL RTCIceTransport must be primary interface of idlTestObjects.iceTransport assert_equals: wrong typeof object expected "object" but got "undefined"
-FAIL Stringification of idlTestObjects.iceTransport assert_equals: wrong typeof object expected "object" but got "undefined"
-FAIL RTCIceTransport interface: idlTestObjects.iceTransport must inherit property "role" with the proper type assert_equals: wrong typeof object expected "object" but got "undefined"
-FAIL RTCIceTransport interface: idlTestObjects.iceTransport must inherit property "component" with the proper type assert_equals: wrong typeof object expected "object" but got "undefined"
-FAIL RTCIceTransport interface: idlTestObjects.iceTransport must inherit property "state" with the proper type assert_equals: wrong typeof object expected "object" but got "undefined"
-FAIL RTCIceTransport interface: idlTestObjects.iceTransport must inherit property "gatheringState" with the proper type assert_equals: wrong typeof object expected "object" but got "undefined"
-FAIL RTCIceTransport interface: idlTestObjects.iceTransport must inherit property "getLocalCandidates()" with the proper type assert_equals: wrong typeof object expected "object" but got "undefined"
-FAIL RTCIceTransport interface: idlTestObjects.iceTransport must inherit property "getRemoteCandidates()" with the proper type assert_equals: wrong typeof object expected "object" but got "undefined"
-FAIL RTCIceTransport interface: idlTestObjects.iceTransport must inherit property "getSelectedCandidatePair()" with the proper type assert_equals: wrong typeof object expected "object" but got "undefined"
-FAIL RTCIceTransport interface: idlTestObjects.iceTransport must inherit property "getLocalParameters()" with the proper type assert_equals: wrong typeof object expected "object" but got "undefined"
-FAIL RTCIceTransport interface: idlTestObjects.iceTransport must inherit property "getRemoteParameters()" with the proper type assert_equals: wrong typeof object expected "object" but got "undefined"
-FAIL RTCIceTransport interface: idlTestObjects.iceTransport must inherit property "onstatechange" with the proper type assert_equals: wrong typeof object expected "object" but got "undefined"
-FAIL RTCIceTransport interface: idlTestObjects.iceTransport must inherit property "ongatheringstatechange" with the proper type assert_equals: wrong typeof object expected "object" but got "undefined"
-FAIL RTCIceTransport interface: idlTestObjects.iceTransport must inherit property "onselectedcandidatepairchange" with the proper type assert_equals: wrong typeof object expected "object" but got "undefined"
</del><ins>+PASS RTCIceTransport must be primary interface of idlTestObjects.iceTransport
+PASS Stringification of idlTestObjects.iceTransport
+FAIL RTCIceTransport interface: idlTestObjects.iceTransport must inherit property "role" with the proper type assert_inherits: property "role" not found in prototype chain
+FAIL RTCIceTransport interface: idlTestObjects.iceTransport must inherit property "component" with the proper type assert_inherits: property "component" not found in prototype chain
+PASS RTCIceTransport interface: idlTestObjects.iceTransport must inherit property "state" with the proper type
+PASS RTCIceTransport interface: idlTestObjects.iceTransport must inherit property "gatheringState" with the proper type
+FAIL RTCIceTransport interface: idlTestObjects.iceTransport must inherit property "getLocalCandidates()" with the proper type assert_inherits: property "getLocalCandidates" not found in prototype chain
+FAIL RTCIceTransport interface: idlTestObjects.iceTransport must inherit property "getRemoteCandidates()" with the proper type assert_inherits: property "getRemoteCandidates" not found in prototype chain
+FAIL RTCIceTransport interface: idlTestObjects.iceTransport must inherit property "getSelectedCandidatePair()" with the proper type assert_inherits: property "getSelectedCandidatePair" not found in prototype chain
+FAIL RTCIceTransport interface: idlTestObjects.iceTransport must inherit property "getLocalParameters()" with the proper type assert_inherits: property "getLocalParameters" not found in prototype chain
+FAIL RTCIceTransport interface: idlTestObjects.iceTransport must inherit property "getRemoteParameters()" with the proper type assert_inherits: property "getRemoteParameters" not found in prototype chain
+PASS RTCIceTransport interface: idlTestObjects.iceTransport must inherit property "onstatechange" with the proper type
+PASS RTCIceTransport interface: idlTestObjects.iceTransport must inherit property "ongatheringstatechange" with the proper type
+FAIL RTCIceTransport interface: idlTestObjects.iceTransport must inherit property "onselectedcandidatepairchange" with the proper type assert_inherits: property "onselectedcandidatepairchange" not found in prototype chain
</ins><span class="cx"> PASS RTCTrackEvent interface: existence and properties of interface object
</span><span class="cx"> PASS RTCTrackEvent interface object length
</span><span class="cx"> PASS RTCTrackEvent interface object name
</span><span class="lines">@@ -367,24 +367,24 @@
</span><span class="cx"> PASS RTCTrackEvent interface: initTrackEvent() must inherit property "track" with the proper type
</span><span class="cx"> PASS RTCTrackEvent interface: initTrackEvent() must inherit property "streams" with the proper type
</span><span class="cx"> PASS RTCTrackEvent interface: initTrackEvent() must inherit property "transceiver" with the proper type
</span><del>-FAIL RTCSctpTransport interface: existence and properties of interface object assert_own_property: self does not have own property "RTCSctpTransport" expected property "RTCSctpTransport" missing
-FAIL RTCSctpTransport interface object length assert_own_property: self does not have own property "RTCSctpTransport" expected property "RTCSctpTransport" missing
-FAIL RTCSctpTransport interface object name assert_own_property: self does not have own property "RTCSctpTransport" expected property "RTCSctpTransport" missing
-FAIL RTCSctpTransport interface: existence and properties of interface prototype object assert_own_property: self does not have own property "RTCSctpTransport" expected property "RTCSctpTransport" missing
-FAIL RTCSctpTransport interface: existence and properties of interface prototype object's "constructor" property assert_own_property: self does not have own property "RTCSctpTransport" expected property "RTCSctpTransport" missing
-FAIL RTCSctpTransport interface: existence and properties of interface prototype object's @@unscopables property assert_own_property: self does not have own property "RTCSctpTransport" expected property "RTCSctpTransport" missing
-FAIL RTCSctpTransport interface: attribute transport assert_own_property: self does not have own property "RTCSctpTransport" expected property "RTCSctpTransport" missing
-FAIL RTCSctpTransport interface: attribute state assert_own_property: self does not have own property "RTCSctpTransport" expected property "RTCSctpTransport" missing
-FAIL RTCSctpTransport interface: attribute maxMessageSize assert_own_property: self does not have own property "RTCSctpTransport" expected property "RTCSctpTransport" missing
-FAIL RTCSctpTransport interface: attribute maxChannels assert_own_property: self does not have own property "RTCSctpTransport" expected property "RTCSctpTransport" missing
-FAIL RTCSctpTransport interface: attribute onstatechange assert_own_property: self does not have own property "RTCSctpTransport" expected property "RTCSctpTransport" missing
-FAIL RTCSctpTransport must be primary interface of idlTestObjects.sctpTransport assert_equals: wrong typeof object expected "object" but got "undefined"
-FAIL Stringification of idlTestObjects.sctpTransport assert_equals: wrong typeof object expected "object" but got "undefined"
-FAIL RTCSctpTransport interface: idlTestObjects.sctpTransport must inherit property "transport" with the proper type assert_equals: wrong typeof object expected "object" but got "undefined"
-FAIL RTCSctpTransport interface: idlTestObjects.sctpTransport must inherit property "state" with the proper type assert_equals: wrong typeof object expected "object" but got "undefined"
-FAIL RTCSctpTransport interface: idlTestObjects.sctpTransport must inherit property "maxMessageSize" with the proper type assert_equals: wrong typeof object expected "object" but got "undefined"
-FAIL RTCSctpTransport interface: idlTestObjects.sctpTransport must inherit property "maxChannels" with the proper type assert_equals: wrong typeof object expected "object" but got "undefined"
-FAIL RTCSctpTransport interface: idlTestObjects.sctpTransport must inherit property "onstatechange" with the proper type assert_equals: wrong typeof object expected "object" but got "undefined"
</del><ins>+PASS RTCSctpTransport interface: existence and properties of interface object
+PASS RTCSctpTransport interface object length
+PASS RTCSctpTransport interface object name
+PASS RTCSctpTransport interface: existence and properties of interface prototype object
+PASS RTCSctpTransport interface: existence and properties of interface prototype object's "constructor" property
+PASS RTCSctpTransport interface: existence and properties of interface prototype object's @@unscopables property
+PASS RTCSctpTransport interface: attribute transport
+PASS RTCSctpTransport interface: attribute state
+PASS RTCSctpTransport interface: attribute maxMessageSize
+PASS RTCSctpTransport interface: attribute maxChannels
+PASS RTCSctpTransport interface: attribute onstatechange
+PASS RTCSctpTransport must be primary interface of idlTestObjects.sctpTransport
+PASS Stringification of idlTestObjects.sctpTransport
+PASS RTCSctpTransport interface: idlTestObjects.sctpTransport must inherit property "transport" with the proper type
+PASS RTCSctpTransport interface: idlTestObjects.sctpTransport must inherit property "state" with the proper type
+PASS RTCSctpTransport interface: idlTestObjects.sctpTransport must inherit property "maxMessageSize" with the proper type
+PASS RTCSctpTransport interface: idlTestObjects.sctpTransport must inherit property "maxChannels" with the proper type
+PASS RTCSctpTransport interface: idlTestObjects.sctpTransport must inherit property "onstatechange" with the proper type
</ins><span class="cx"> PASS RTCDataChannel interface: existence and properties of interface object
</span><span class="cx"> PASS RTCDataChannel interface object length
</span><span class="cx"> PASS RTCDataChannel interface object name
</span></span></pre></div>
<a id="trunkLayoutTestswebrtcdatachanneldtls10html"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/webrtc/datachannel/dtls10.html (282056 => 282057)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/webrtc/datachannel/dtls10.html 2021-09-06 15:57:45 UTC (rev 282056)
+++ trunk/LayoutTests/webrtc/datachannel/dtls10.html    2021-09-06 16:14:32 UTC (rev 282057)
</span><span class="lines">@@ -48,9 +48,11 @@
</span><span class="cx">     }, (remoteConnection) => {
</span><span class="cx">     });
</span><span class="cx"> 
</span><ins>+    assert_not_equals(localConnection.sctp, null);
+
</ins><span class="cx">     let counter = 0;
</span><span class="cx">     while (++counter < 20) {
</span><del>-        if (localConnection.connectionState === "connected")
</del><ins>+        if (localConnection.sctp.transport.state === "connected")
</ins><span class="cx">            return;
</span><span class="cx">         await new Promise(resolve => setTimeout(resolve, 10));
</span><span class="cx">     }
</span><span class="lines">@@ -69,7 +71,8 @@
</span><span class="cx">     });
</span><span class="cx"> 
</span><span class="cx">     await new Promise(resolve => setTimeout(resolve, 200));
</span><del>-    assert_not_equals(localConnection.connectionState, "connected");
</del><ins>+    assert_not_equals(localConnection.sctp, null);
+    assert_not_equals(localConnection.sctp.transport.state, "connected");
</ins><span class="cx"> }, "Verify regular clients cannot connect with DTLS1-only clients");
</span><span class="cx">     </script>
</span><span class="cx">   </body>
</span></span></pre></div>
<a id="trunkSourceThirdPartylibwebrtcChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/ThirdParty/libwebrtc/ChangeLog (282056 => 282057)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/ThirdParty/libwebrtc/ChangeLog      2021-09-06 15:57:45 UTC (rev 282056)
+++ trunk/Source/ThirdParty/libwebrtc/ChangeLog 2021-09-06 16:14:32 UTC (rev 282057)
</span><span class="lines">@@ -1,3 +1,15 @@
</span><ins>+2021-09-06  Youenn Fablet  <youenn@apple.com>
+
+        Add support for RTCSctpTransport
+        https://bugs.webkit.org/show_bug.cgi?id=229292
+        <rdar://problem/82394152>
+
+        Reviewed by Eric Carlson.
+
+        * Configurations/libwebrtc.iOS.exp:
+        * Configurations/libwebrtc.iOSsim.exp:
+        * Configurations/libwebrtc.mac.exp:
+
</ins><span class="cx"> 2021-09-01  David Kilzer  <ddkilzer@apple.com>
</span><span class="cx"> 
</span><span class="cx">         [WebRTC] Leak or over-release of CFPixelBufferRef returned from webrtc::createPixelBufferFromFrame()
</span></span></pre></div>
<a id="trunkSourceThirdPartylibwebrtcConfigurationslibwebrtciOSexp"></a>
<div class="modfile"><h4>Modified: trunk/Source/ThirdParty/libwebrtc/Configurations/libwebrtc.iOS.exp (282056 => 282057)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/ThirdParty/libwebrtc/Configurations/libwebrtc.iOS.exp       2021-09-06 15:57:45 UTC (rev 282056)
+++ trunk/Source/ThirdParty/libwebrtc/Configurations/libwebrtc.iOS.exp  2021-09-06 16:14:32 UTC (rev 282057)
</span><span class="lines">@@ -325,3 +325,4 @@
</span><span class="cx"> __ZNK3rtc13SocketAddresseqERKS0_
</span><span class="cx"> __ZNK3rtc9IPAddress5IsNilEv
</span><span class="cx"> __ZN3rtc12SSLCertChainD1Ev
</span><ins>+__ZN6webrtc24SctpTransportInformationD1Ev
</ins></span></pre></div>
<a id="trunkSourceThirdPartylibwebrtcConfigurationslibwebrtciOSsimexp"></a>
<div class="modfile"><h4>Modified: trunk/Source/ThirdParty/libwebrtc/Configurations/libwebrtc.iOSsim.exp (282056 => 282057)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/ThirdParty/libwebrtc/Configurations/libwebrtc.iOSsim.exp    2021-09-06 15:57:45 UTC (rev 282056)
+++ trunk/Source/ThirdParty/libwebrtc/Configurations/libwebrtc.iOSsim.exp       2021-09-06 16:14:32 UTC (rev 282057)
</span><span class="lines">@@ -325,3 +325,4 @@
</span><span class="cx"> __ZNK3rtc13SocketAddresseqERKS0_
</span><span class="cx"> __ZNK3rtc9IPAddress5IsNilEv
</span><span class="cx"> __ZN3rtc12SSLCertChainD1Ev
</span><ins>+__ZN6webrtc24SctpTransportInformationD1Ev
</ins></span></pre></div>
<a id="trunkSourceThirdPartylibwebrtcConfigurationslibwebrtcmacexp"></a>
<div class="modfile"><h4>Modified: trunk/Source/ThirdParty/libwebrtc/Configurations/libwebrtc.mac.exp (282056 => 282057)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/ThirdParty/libwebrtc/Configurations/libwebrtc.mac.exp       2021-09-06 15:57:45 UTC (rev 282056)
+++ trunk/Source/ThirdParty/libwebrtc/Configurations/libwebrtc.mac.exp  2021-09-06 16:14:32 UTC (rev 282057)
</span><span class="lines">@@ -325,3 +325,4 @@
</span><span class="cx"> __ZNK3rtc13SocketAddresseqERKS0_
</span><span class="cx"> __ZNK3rtc9IPAddress5IsNilEv
</span><span class="cx"> __ZN3rtc12SSLCertChainD1Ev
</span><ins>+__ZN6webrtc24SctpTransportInformationD1Ev
</ins></span></pre></div>
<a id="trunkSourceWebCoreCMakeListstxt"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/CMakeLists.txt (282056 => 282057)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/CMakeLists.txt      2021-09-06 15:57:45 UTC (rev 282056)
+++ trunk/Source/WebCore/CMakeLists.txt 2021-09-06 16:14:32 UTC (rev 282057)
</span><span class="lines">@@ -426,6 +426,8 @@
</span><span class="cx">     Modules/mediastream/RTCRtpSynchronizationSource.idl
</span><span class="cx">     Modules/mediastream/RTCRtpTransceiver.idl
</span><span class="cx">     Modules/mediastream/RTCRtpTransceiverDirection.idl
</span><ins>+    Modules/mediastream/RTCSctpTransport.idl
+    Modules/mediastream/RTCSctpTransportState.idl
</ins><span class="cx">     Modules/mediastream/RTCSdpType.idl
</span><span class="cx">     Modules/mediastream/RTCSessionDescription.idl
</span><span class="cx">     Modules/mediastream/RTCSessionDescriptionInit.idl
</span></span></pre></div>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (282056 => 282057)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog   2021-09-06 15:57:45 UTC (rev 282056)
+++ trunk/Source/WebCore/ChangeLog      2021-09-06 16:14:32 UTC (rev 282057)
</span><span class="lines">@@ -1,3 +1,64 @@
</span><ins>+2021-09-06  Youenn Fablet  <youenn@apple.com>
+
+        Add support for RTCSctpTransport
+        https://bugs.webkit.org/show_bug.cgi?id=229292
+        <rdar://problem/82394152>
+
+        Reviewed by Eric Carlson.
+
+        Expose RTSctpTransport API and getter from the peer connection.
+        Implement event mechanism and getters.
+        Additional work will be needed to make ice transport objects consistent between SCTP and senders/receivers.
+        Covered by rebased tests.
+
+        * CMakeLists.txt:
+        * DerivedSources-input.xcfilelist:
+        * DerivedSources-output.xcfilelist:
+        * DerivedSources.make:
+        * Modules/mediastream/PeerConnectionBackend.cpp:
+        (WebCore::PeerConnectionBackend::setLocalDescriptionSucceeded):
+        (WebCore::PeerConnectionBackend::setRemoteDescriptionSucceeded):
+        * Modules/mediastream/PeerConnectionBackend.h:
+        * Modules/mediastream/RTCPeerConnection.cpp:
+        (WebCore::RTCPeerConnection::updateSctpBackend):
+        * Modules/mediastream/RTCPeerConnection.h:
+        * Modules/mediastream/RTCPeerConnection.idl:
+        * Modules/mediastream/RTCSctpTransport.cpp: Added.
+        (WebCore::RTCSctpTransport::RTCSctpTransport):
+        (WebCore::RTCSctpTransport::~RTCSctpTransport):
+        (WebCore::RTCSctpTransport::stop):
+        (WebCore::RTCSctpTransport::virtualHasPendingActivity const):
+        (WebCore::RTCSctpTransport::onStateChanged):
+        * Modules/mediastream/RTCSctpTransport.h: Added.
+        * Modules/mediastream/RTCSctpTransport.idl: Added.
+        * Modules/mediastream/RTCSctpTransportBackend.h: Added.
+        (WebCore::operator==):
+        * Modules/mediastream/RTCSctpTransportState.h: Added.
+        * Modules/mediastream/RTCSctpTransportState.idl: Added.
+        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp:
+        (WebCore::SctpTransportState::SctpTransportState):
+        (WebCore::SctpTransportState::createBackend):
+        (WebCore::LibWebRTCMediaEndpoint::setLocalSessionDescriptionSucceeded):
+        (WebCore::LibWebRTCMediaEndpoint::setLocalSessionDescriptionFailed):
+        (WebCore::LibWebRTCMediaEndpoint::setRemoteSessionDescriptionSucceeded):
+        * Modules/mediastream/libwebrtc/LibWebRTCSctpTransportBackend.cpp: Added.
+        (WebCore::toRTCSctpTransportState):
+        (WebCore::LibWebRTCSctpTransportBackendObserver::LibWebRTCSctpTransportBackendObserver):
+        (WebCore::LibWebRTCSctpTransportBackendObserver::updateState):
+        (WebCore::LibWebRTCSctpTransportBackendObserver::start):
+        (WebCore::LibWebRTCSctpTransportBackendObserver::stop):
+        (WebCore::LibWebRTCSctpTransportBackendObserver::OnStateChange):
+        (WebCore::LibWebRTCSctpTransportBackend::LibWebRTCSctpTransportBackend):
+        (WebCore::LibWebRTCSctpTransportBackend::~LibWebRTCSctpTransportBackend):
+        (WebCore::LibWebRTCSctpTransportBackend::dtlsTransportBackend):
+        (WebCore::LibWebRTCSctpTransportBackend::registerClient):
+        (WebCore::LibWebRTCSctpTransportBackend::unregisterClient):
+        * Modules/mediastream/libwebrtc/LibWebRTCSctpTransportBackend.h: Added.
+        * Sources.txt:
+        * WebCore.xcodeproj/project.pbxproj:
+        * bindings/js/WebCoreBuiltinNames.h:
+        * dom/EventTargetFactory.in:
+
</ins><span class="cx"> 2021-09-06  Enrique Ocaña González  <eocanha@igalia.com>
</span><span class="cx"> 
</span><span class="cx">         [GStreamer][MSE] Check ContentType parameters when checking supported types
</span></span></pre></div>
<a id="trunkSourceWebCoreDerivedSourcesinputxcfilelist"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/DerivedSources-input.xcfilelist (282056 => 282057)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/DerivedSources-input.xcfilelist     2021-09-06 15:57:45 UTC (rev 282056)
+++ trunk/Source/WebCore/DerivedSources-input.xcfilelist        2021-09-06 16:14:32 UTC (rev 282057)
</span><span class="lines">@@ -269,6 +269,8 @@
</span><span class="cx"> $(PROJECT_DIR)/Modules/mediastream/RTCRtpTransceiver.idl
</span><span class="cx"> $(PROJECT_DIR)/Modules/mediastream/RTCRtpTransceiverDirection.idl
</span><span class="cx"> $(PROJECT_DIR)/Modules/mediastream/RTCRtpTransform.idl
</span><ins>+$(PROJECT_DIR)/Modules/mediastream/RTCSctpTransport.idl
+$(PROJECT_DIR)/Modules/mediastream/RTCSctpTransportState.idl
</ins><span class="cx"> $(PROJECT_DIR)/Modules/mediastream/RTCSdpType.idl
</span><span class="cx"> $(PROJECT_DIR)/Modules/mediastream/RTCSessionDescription.idl
</span><span class="cx"> $(PROJECT_DIR)/Modules/mediastream/RTCSessionDescriptionInit.idl
</span></span></pre></div>
<a id="trunkSourceWebCoreDerivedSourcesoutputxcfilelist"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/DerivedSources-output.xcfilelist (282056 => 282057)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/DerivedSources-output.xcfilelist    2021-09-06 15:57:45 UTC (rev 282056)
+++ trunk/Source/WebCore/DerivedSources-output.xcfilelist       2021-09-06 16:14:32 UTC (rev 282057)
</span><span class="lines">@@ -1753,6 +1753,10 @@
</span><span class="cx"> $(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/JSRTCRtpTransceiverDirection.h
</span><span class="cx"> $(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/JSRTCRtpTransform.cpp
</span><span class="cx"> $(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/JSRTCRtpTransform.h
</span><ins>+$(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/JSRTCSctpTransport.cpp
+$(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/JSRTCSctpTransport.h
+$(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/JSRTCSctpTransportState.cpp
+$(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/JSRTCSctpTransportState.h
</ins><span class="cx"> $(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/JSRTCSdpType.cpp
</span><span class="cx"> $(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/JSRTCSdpType.h
</span><span class="cx"> $(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/JSRTCSessionDescription.cpp
</span></span></pre></div>
<a id="trunkSourceWebCoreDerivedSourcesmake"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/DerivedSources.make (282056 => 282057)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/DerivedSources.make 2021-09-06 15:57:45 UTC (rev 282056)
+++ trunk/Source/WebCore/DerivedSources.make    2021-09-06 16:14:32 UTC (rev 282057)
</span><span class="lines">@@ -292,6 +292,8 @@
</span><span class="cx">     $(WebCore)/Modules/mediastream/RTCRtpSynchronizationSource.idl \
</span><span class="cx">     $(WebCore)/Modules/mediastream/RTCRtpTransceiver.idl \
</span><span class="cx">     $(WebCore)/Modules/mediastream/RTCRtpTransceiverDirection.idl \
</span><ins>+    $(WebCore)/Modules/mediastream/RTCSctpTransport.idl \
+    $(WebCore)/Modules/mediastream/RTCSctpTransportState.idl \
</ins><span class="cx">     $(WebCore)/Modules/mediastream/RTCSdpType.idl \
</span><span class="cx">     $(WebCore)/Modules/mediastream/RTCSessionDescription.idl \
</span><span class="cx">     $(WebCore)/Modules/mediastream/RTCSessionDescriptionInit.idl \
</span></span></pre></div>
<a id="trunkSourceWebCoreModulesmediastreamPeerConnectionBackendcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/mediastream/PeerConnectionBackend.cpp (282056 => 282057)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/mediastream/PeerConnectionBackend.cpp       2021-09-06 15:57:45 UTC (rev 282056)
+++ trunk/Source/WebCore/Modules/mediastream/PeerConnectionBackend.cpp  2021-09-06 16:14:32 UTC (rev 282057)
</span><span class="lines">@@ -45,6 +45,7 @@
</span><span class="cx"> #include "RTCPeerConnection.h"
</span><span class="cx"> #include "RTCPeerConnectionIceEvent.h"
</span><span class="cx"> #include "RTCRtpCapabilities.h"
</span><ins>+#include "RTCSctpTransportBackend.h"
</ins><span class="cx"> #include "RTCSessionDescriptionInit.h"
</span><span class="cx"> #include "RTCTrackEvent.h"
</span><span class="cx"> #include "RuntimeEnabledFeatures.h"
</span><span class="lines">@@ -174,16 +175,18 @@
</span><span class="cx">     doSetLocalDescription(sessionDescription);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void PeerConnectionBackend::setLocalDescriptionSucceeded()
</del><ins>+void PeerConnectionBackend::setLocalDescriptionSucceeded(std::unique_ptr<RTCSctpTransportBackend>&& sctpBackend)
</ins><span class="cx"> {
</span><span class="cx">     ASSERT(isMainThread());
</span><span class="cx">     ALWAYS_LOG(LOGIDENTIFIER);
</span><span class="cx"> 
</span><span class="cx">     ASSERT(m_setDescriptionPromise);
</span><del>-    m_peerConnection.doTask([this, promise = WTFMove(m_setDescriptionPromise)]() mutable {
</del><ins>+    m_peerConnection.doTask([this, promise = WTFMove(m_setDescriptionPromise), sctpBackend = WTFMove(sctpBackend)]() mutable {
</ins><span class="cx">         if (m_peerConnection.isClosed())
</span><span class="cx">             return;
</span><ins>+
</ins><span class="cx">         m_peerConnection.updateTransceiversAfterSuccessfulLocalDescription();
</span><ins>+        m_peerConnection.updateSctpBackend(WTFMove(sctpBackend));
</ins><span class="cx">         promise->resolve();
</span><span class="cx">     });
</span><span class="cx"> }
</span><span class="lines">@@ -210,7 +213,7 @@
</span><span class="cx">     doSetRemoteDescription(sessionDescription);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void PeerConnectionBackend::setRemoteDescriptionSucceeded()
</del><ins>+void PeerConnectionBackend::setRemoteDescriptionSucceeded(std::unique_ptr<RTCSctpTransportBackend>&& sctpBackend)
</ins><span class="cx"> {
</span><span class="cx">     ASSERT(isMainThread());
</span><span class="cx">     ALWAYS_LOG(LOGIDENTIFIER, "Set remote description succeeded");
</span><span class="lines">@@ -231,11 +234,12 @@
</span><span class="cx">         track.source().setMuted(false);
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    m_peerConnection.doTask([this, promise = WTFMove(promise)]() mutable {
</del><ins>+    m_peerConnection.doTask([this, promise = WTFMove(promise), sctpBackend = WTFMove(sctpBackend)]() mutable {
</ins><span class="cx">         if (m_peerConnection.isClosed())
</span><span class="cx">             return;
</span><span class="cx"> 
</span><span class="cx">         m_peerConnection.updateTransceiversAfterSuccessfulRemoteDescription();
</span><ins>+        m_peerConnection.updateSctpBackend(WTFMove(sctpBackend));
</ins><span class="cx">         promise->resolve();
</span><span class="cx">     });
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebCoreModulesmediastreamPeerConnectionBackendh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/mediastream/PeerConnectionBackend.h (282056 => 282057)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/mediastream/PeerConnectionBackend.h 2021-09-06 15:57:45 UTC (rev 282056)
+++ trunk/Source/WebCore/Modules/mediastream/PeerConnectionBackend.h    2021-09-06 16:14:32 UTC (rev 282057)
</span><span class="lines">@@ -57,6 +57,7 @@
</span><span class="cx"> class RTCRtpReceiver;
</span><span class="cx"> class RTCRtpSender;
</span><span class="cx"> class RTCRtpTransceiver;
</span><ins>+class RTCSctpTransportBackend;
</ins><span class="cx"> class RTCSessionDescription;
</span><span class="cx"> class RTCStatsReport;
</span><span class="cx"> class ScriptExecutionContext;
</span><span class="lines">@@ -198,10 +199,10 @@
</span><span class="cx">     void createAnswerSucceeded(String&&);
</span><span class="cx">     void createAnswerFailed(Exception&&);
</span><span class="cx"> 
</span><del>-    void setLocalDescriptionSucceeded();
</del><ins>+    void setLocalDescriptionSucceeded(std::unique_ptr<RTCSctpTransportBackend>&&);
</ins><span class="cx">     void setLocalDescriptionFailed(Exception&&);
</span><span class="cx"> 
</span><del>-    void setRemoteDescriptionSucceeded();
</del><ins>+    void setRemoteDescriptionSucceeded(std::unique_ptr<RTCSctpTransportBackend>&&);
</ins><span class="cx">     void setRemoteDescriptionFailed(Exception&&);
</span><span class="cx"> 
</span><span class="cx">     void addIceCandidateSucceeded();
</span></span></pre></div>
<a id="trunkSourceWebCoreModulesmediastreamRTCPeerConnectioncpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/mediastream/RTCPeerConnection.cpp (282056 => 282057)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/mediastream/RTCPeerConnection.cpp   2021-09-06 15:57:45 UTC (rev 282056)
+++ trunk/Source/WebCore/Modules/mediastream/RTCPeerConnection.cpp      2021-09-06 16:14:32 UTC (rev 282057)
</span><span class="lines">@@ -60,6 +60,7 @@
</span><span class="cx"> #include "RTCOfferOptions.h"
</span><span class="cx"> #include "RTCPeerConnectionIceErrorEvent.h"
</span><span class="cx"> #include "RTCPeerConnectionIceEvent.h"
</span><ins>+#include "RTCSctpTransport.h"
</ins><span class="cx"> #include "RTCSessionDescription.h"
</span><span class="cx"> #include "RTCSessionDescriptionInit.h"
</span><span class="cx"> #include "Settings.h"
</span><span class="lines">@@ -646,7 +647,7 @@
</span><span class="cx"> {
</span><span class="cx">     ALWAYS_LOG(LOGIDENTIFIER, newState);
</span><span class="cx"> 
</span><del>-    scriptExecutionContext()->postTask([protectedThis = makeRef(*this), newState](ScriptExecutionContext&) {
</del><ins>+    scriptExecutionContext()->postTask([protectedThis = makeRef(*this), newState](auto&) mutable {
</ins><span class="cx">         if (protectedThis->isClosed() || protectedThis->m_iceConnectionState == newState)
</span><span class="cx">             return;
</span><span class="cx"> 
</span><span class="lines">@@ -699,11 +700,13 @@
</span><span class="cx">         return RTCIceConnectionState::Closed;
</span><span class="cx"> 
</span><span class="cx">     auto iceTransports = m_iceTransports;
</span><ins>+
</ins><span class="cx">     iceTransports.removeAllMatching([&](auto& iceTransport) {
</span><del>-        bool test = allOf(m_transceiverSet.list(), [&iceTransport](auto& transceiver) {
</del><ins>+        if (m_sctpTransport && &m_sctpTransport->transport().iceTransport() == iceTransport.ptr())
+            return false;
+        return allOf(m_transceiverSet.list(), [&iceTransport](auto& transceiver) {
</ins><span class="cx">             return !isIceTransportUsedByTransceiver(iceTransport.get(), *transceiver);
</span><span class="cx">         });
</span><del>-        return test;
</del><span class="cx">     });
</span><span class="cx"> 
</span><span class="cx">     if (anyOf(iceTransports, [](auto& transport) { return transport->state() == RTCIceTransportState::Failed; }))
</span><span class="lines">@@ -958,6 +961,26 @@
</span><span class="cx">     updateTransceiverTransports();
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+void RTCPeerConnection::updateSctpBackend(std::unique_ptr<RTCSctpTransportBackend>&& sctpBackend)
+{
+    if (!sctpBackend) {
+        m_sctpTransport = nullptr;
+        return;
+    }
+    if (m_sctpTransport) {
+        m_sctpTransport->update(*sctpBackend);
+        return;
+    }
+    auto* context = scriptExecutionContext();
+    if (!context)
+        return;
+
+    auto dtlsTransport = getOrCreateDtlsTransport(sctpBackend->dtlsTransportBackend().moveToUniquePtr());
+    if (!dtlsTransport)
+        return;
+    m_sctpTransport = RTCSctpTransport::create(*context, makeUniqueRefFromNonNullUniquePtr(WTFMove(sctpBackend)), dtlsTransport.releaseNonNull());
+}
+
</ins><span class="cx"> #if !RELEASE_LOG_DISABLED
</span><span class="cx"> WTFLogChannel& RTCPeerConnection::logChannel() const
</span><span class="cx"> {
</span></span></pre></div>
<a id="trunkSourceWebCoreModulesmediastreamRTCPeerConnectionh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/mediastream/RTCPeerConnection.h (282056 => 282057)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/mediastream/RTCPeerConnection.h     2021-09-06 15:57:45 UTC (rev 282056)
+++ trunk/Source/WebCore/Modules/mediastream/RTCPeerConnection.h        2021-09-06 16:14:32 UTC (rev 282057)
</span><span class="lines">@@ -63,6 +63,7 @@
</span><span class="cx"> class RTCIceCandidate;
</span><span class="cx"> class RTCIceTransportBackend;
</span><span class="cx"> class RTCPeerConnectionErrorCallback;
</span><ins>+class RTCSctpTransport;
</ins><span class="cx"> class RTCSessionDescription;
</span><span class="cx"> class RTCStatsCallback;
</span><span class="cx"> 
</span><span class="lines">@@ -188,9 +189,12 @@
</span><span class="cx"> 
</span><span class="cx">     void updateTransceiversAfterSuccessfulLocalDescription();
</span><span class="cx">     void updateTransceiversAfterSuccessfulRemoteDescription();
</span><ins>+    void updateSctpBackend(std::unique_ptr<RTCSctpTransportBackend>&&);
</ins><span class="cx"> 
</span><span class="cx">     void processIceTransportStateChange(RTCIceTransport&);
</span><span class="cx"> 
</span><ins>+    RTCSctpTransport* sctp() { return m_sctpTransport.get(); }
+
</ins><span class="cx"> #if !RELEASE_LOG_DISABLED
</span><span class="cx">     const Logger& logger() const final { return m_logger.get(); }
</span><span class="cx">     const void* logIdentifier() const final { return m_logIdentifier; }
</span><span class="lines">@@ -266,6 +270,7 @@
</span><span class="cx">     std::optional<uint32_t> m_negotiationNeededEventId;
</span><span class="cx">     Vector<Ref<RTCDtlsTransport>> m_dtlsTransports;
</span><span class="cx">     Vector<Ref<RTCIceTransport>> m_iceTransports;
</span><ins>+    RefPtr<RTCSctpTransport> m_sctpTransport;
</ins><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> } // namespace WebCore
</span></span></pre></div>
<a id="trunkSourceWebCoreModulesmediastreamRTCPeerConnectionidl"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/mediastream/RTCPeerConnection.idl (282056 => 282057)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/mediastream/RTCPeerConnection.idl   2021-09-06 15:57:45 UTC (rev 282056)
+++ trunk/Source/WebCore/Modules/mediastream/RTCPeerConnection.idl      2021-09-06 16:14:32 UTC (rev 282057)
</span><span class="lines">@@ -131,7 +131,7 @@
</span><span class="cx">     attribute EventHandler ontrack;
</span><span class="cx"> 
</span><span class="cx">     // 6.1 Peer-to-peer data API
</span><del>-    // FIXME 169644: missing sctp
</del><ins>+    readonly attribute RTCSctpTransport? sctp;
</ins><span class="cx"> 
</span><span class="cx">     RTCDataChannel createDataChannel([LegacyNullToEmptyString] USVString label, optional RTCDataChannelInit options);
</span><span class="cx">     attribute EventHandler ondatachannel;
</span></span></pre></div>
<a id="trunkSourceWebCoreModulesmediastreamRTCSctpTransportcpp"></a>
<div class="addfile"><h4>Added: trunk/Source/WebCore/Modules/mediastream/RTCSctpTransport.cpp (0 => 282057)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/mediastream/RTCSctpTransport.cpp                            (rev 0)
+++ trunk/Source/WebCore/Modules/mediastream/RTCSctpTransport.cpp       2021-09-06 16:14:32 UTC (rev 282057)
</span><span class="lines">@@ -0,0 +1,85 @@
</span><ins>+/*
+ * Copyright (C) 2021 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1.  Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ * 2.  Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in the
+ *     documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+#include "RTCSctpTransport.h"
+
+#if ENABLE(WEB_RTC)
+
+#include "EventNames.h"
+#include "Logging.h"
+#include "RTCDtlsTransport.h"
+#include "RTCSctpTransportBackend.h"
+#include "ScriptExecutionContext.h"
+#include <wtf/IsoMallocInlines.h>
+
+namespace WebCore {
+
+WTF_MAKE_ISO_ALLOCATED_IMPL(RTCSctpTransport);
+
+RTCSctpTransport::RTCSctpTransport(ScriptExecutionContext& context, UniqueRef<RTCSctpTransportBackend>&& backend, Ref<RTCDtlsTransport >&& transport)
+    : ActiveDOMObject(&context)
+    , m_backend(WTFMove(backend))
+    , m_transport(WTFMove(transport))
+{
+    suspendIfNeeded();
+    m_backend->registerClient(*this);
+}
+
+RTCSctpTransport::~RTCSctpTransport()
+{
+    m_backend->unregisterClient();
+}
+
+void RTCSctpTransport::stop()
+{
+    m_state = RTCSctpTransportState::Closed;
+}
+
+bool RTCSctpTransport::virtualHasPendingActivity() const
+{
+    return m_state != RTCSctpTransportState::Closed && hasEventListeners();
+}
+
+void RTCSctpTransport::onStateChanged(RTCSctpTransportState state, std::optional<double> maxMessageSize, std::optional<unsigned short> maxChannels)
+{
+    queueTaskKeepingObjectAlive(*this, TaskSource::Networking, [this, state, maxMessageSize, maxChannels]() mutable {
+        if (m_state == RTCSctpTransportState::Closed)
+            return;
+
+        if (maxMessageSize)
+            m_maxMessageSize = *maxMessageSize;
+        if (maxChannels)
+            m_maxChannels = *maxChannels;
+
+        if (m_state != state) {
+            m_state = state;
+            dispatchEvent(Event::create(eventNames().statechangeEvent, Event::CanBubble::Yes, Event::IsCancelable::No));
+        }
+    });
+}
+
+} // namespace WebCore
+
+#endif // ENABLE(WEB_RTC)
</ins></span></pre></div>
<a id="trunkSourceWebCoreModulesmediastreamRTCSctpTransporth"></a>
<div class="addfile"><h4>Added: trunk/Source/WebCore/Modules/mediastream/RTCSctpTransport.h (0 => 282057)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/mediastream/RTCSctpTransport.h                              (rev 0)
+++ trunk/Source/WebCore/Modules/mediastream/RTCSctpTransport.h 2021-09-06 16:14:32 UTC (rev 282057)
</span><span class="lines">@@ -0,0 +1,82 @@
</span><ins>+/*
+ * Copyright (C) 2021 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1.  Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ * 2.  Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in the
+ *     documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#pragma once
+
+#if ENABLE(WEB_RTC)
+
+#include "ActiveDOMObject.h"
+#include "Event.h"
+#include "EventTarget.h"
+#include "RTCSctpTransportBackend.h"
+
+namespace WebCore {
+
+class RTCDtlsTransport;
+
+class RTCSctpTransport final : public RefCounted<RTCSctpTransport>, public ActiveDOMObject, public EventTargetWithInlineData, public RTCSctpTransportBackend::Client {
+    WTF_MAKE_ISO_ALLOCATED(RTCSctpTransport);
+public:
+    static Ref<RTCSctpTransport> create(ScriptExecutionContext& context, UniqueRef<RTCSctpTransportBackend>&& backend, Ref<RTCDtlsTransport>&& transport) { return adoptRef(*new RTCSctpTransport(context, WTFMove(backend), WTFMove(transport))); }
+    ~RTCSctpTransport();
+
+    using RefCounted<RTCSctpTransport>::ref;
+    using RefCounted<RTCSctpTransport>::deref;
+
+    RTCDtlsTransport& transport() { return m_transport.get(); }
+    RTCSctpTransportState state() const { return m_state; }
+    double maxMessageSize() const { return m_maxMessageSize; }
+    std::optional<unsigned short>  maxChannels() const { return m_maxChannels; }
+
+    void update(RTCSctpTransportBackend&) { }
+
+    const RTCSctpTransportBackend& backend() const { return m_backend.get(); }
+
+private:
+    RTCSctpTransport(ScriptExecutionContext&, UniqueRef<RTCSctpTransportBackend>&&, Ref<RTCDtlsTransport>&&);
+
+    // EventTargetWithInlineData
+    EventTargetInterface eventTargetInterface() const final { return RTCSctpTransportEventTargetInterfaceType; }
+    ScriptExecutionContext* scriptExecutionContext() const final { return m_scriptExecutionContext; }
+    void refEventTarget() final { ref(); }
+    void derefEventTarget() final { deref(); }
+
+    // ActiveDOMObject
+    void stop() final;
+    const char* activeDOMObjectName() const final { return "RTCSctpTransport"; }
+    bool virtualHasPendingActivity() const final;
+
+    // RTCSctpTransport::Client
+    void onStateChanged(RTCSctpTransportState, std::optional<double>, std::optional<unsigned short>) final;
+
+    UniqueRef<RTCSctpTransportBackend> m_backend;
+    Ref<RTCDtlsTransport> m_transport;
+    RTCSctpTransportState m_state { RTCSctpTransportState::Connecting };
+    double m_maxMessageSize { std::numeric_limits<double>::max() };
+    std::optional<unsigned short> m_maxChannels;
+};
+
+} // namespace WebCore
+
+#endif // ENABLE(WEB_RTC)
</ins></span></pre></div>
<a id="trunkSourceWebCoreModulesmediastreamRTCSctpTransportidl"></a>
<div class="addfile"><h4>Added: trunk/Source/WebCore/Modules/mediastream/RTCSctpTransport.idl (0 => 282057)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/mediastream/RTCSctpTransport.idl                            (rev 0)
+++ trunk/Source/WebCore/Modules/mediastream/RTCSctpTransport.idl       2021-09-06 16:14:32 UTC (rev 282057)
</span><span class="lines">@@ -0,0 +1,36 @@
</span><ins>+/*
+ * Copyright (C) 2021 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1.  Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ * 2.  Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in the
+ *     documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+[
+    ActiveDOMObject,
+    Conditional=WEB_RTC,
+    EnabledBySetting=PeerConnection,
+    Exposed=(Window),
+] interface RTCSctpTransport : EventTarget {
+  readonly attribute RTCDtlsTransport transport;
+  readonly attribute RTCSctpTransportState state;
+  readonly attribute unrestricted double maxMessageSize;
+  readonly attribute unsigned short? maxChannels;
+  attribute EventHandler onstatechange;
+};
</ins></span></pre></div>
<a id="trunkSourceWebCoreModulesmediastreamRTCSctpTransportBackendh"></a>
<div class="addfile"><h4>Added: trunk/Source/WebCore/Modules/mediastream/RTCSctpTransportBackend.h (0 => 282057)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/mediastream/RTCSctpTransportBackend.h                               (rev 0)
+++ trunk/Source/WebCore/Modules/mediastream/RTCSctpTransportBackend.h  2021-09-06 16:14:32 UTC (rev 282057)
</span><span class="lines">@@ -0,0 +1,59 @@
</span><ins>+/*
+ * Copyright (C) 2021 Apple Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1.  Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ * 2.  Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in the
+ *     documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#pragma once
+
+#if ENABLE(WEB_RTC)
+
+#include "RTCSctpTransportState.h"
+#include <wtf/WeakPtr.h>
+
+namespace WebCore {
+
+class RTCDtlsTransportBackend;
+
+class RTCSctpTransportBackend {
+public:
+    virtual ~RTCSctpTransportBackend() = default;
+
+    virtual const void* backend() const = 0;
+    virtual UniqueRef<RTCDtlsTransportBackend> dtlsTransportBackend() = 0;
+
+    class Client : public CanMakeWeakPtr<Client> {
+    public:
+        virtual ~Client() = default;
+        virtual void onStateChanged(RTCSctpTransportState, std::optional<double>, std::optional<unsigned short>) = 0;
+    };
+    virtual void registerClient(Client&) = 0;
+    virtual void unregisterClient() = 0;
+};
+
+inline bool operator==(const RTCSctpTransportBackend& a, const RTCSctpTransportBackend& b)
+{
+    return a.backend() == b.backend();
+}
+
+} // namespace WebCore
+
+#endif // ENABLE(WEB_RTC)
</ins></span></pre></div>
<a id="trunkSourceWebCoreModulesmediastreamRTCSctpTransportStateh"></a>
<div class="addfile"><h4>Added: trunk/Source/WebCore/Modules/mediastream/RTCSctpTransportState.h (0 => 282057)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/mediastream/RTCSctpTransportState.h                         (rev 0)
+++ trunk/Source/WebCore/Modules/mediastream/RTCSctpTransportState.h    2021-09-06 16:14:32 UTC (rev 282057)
</span><span class="lines">@@ -0,0 +1,35 @@
</span><ins>+/*
+ * Copyright (C) 2021 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1.  Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ * 2.  Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in the
+ *     documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#pragma once
+
+#if ENABLE(WEB_RTC)
+
+enum class RTCSctpTransportState {
+    Connecting,
+    Connected,
+    Closed
+};
+
+#endif
</ins></span></pre></div>
<a id="trunkSourceWebCoreModulesmediastreamRTCSctpTransportStateidl"></a>
<div class="addfile"><h4>Added: trunk/Source/WebCore/Modules/mediastream/RTCSctpTransportState.idl (0 => 282057)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/mediastream/RTCSctpTransportState.idl                               (rev 0)
+++ trunk/Source/WebCore/Modules/mediastream/RTCSctpTransportState.idl  2021-09-06 16:14:32 UTC (rev 282057)
</span><span class="lines">@@ -0,0 +1,32 @@
</span><ins>+/*
+ * Copyright (C) 2021 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1.  Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ * 2.  Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in the
+ *     documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+[
+    Conditional=WEB_RTC,
+    EnabledBySetting=PeerConnection
+] enum RTCSctpTransportState {
+  "connecting",
+  "connected",
+  "closed"
+};
</ins></span></pre></div>
<a id="trunkSourceWebCoreModulesmediastreamlibwebrtcLibWebRTCIceTransportBackendcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCIceTransportBackend.cpp (282056 => 282057)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCIceTransportBackend.cpp      2021-09-06 15:57:45 UTC (rev 282056)
+++ trunk/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCIceTransportBackend.cpp 2021-09-06 16:14:32 UTC (rev 282057)
</span><span class="lines">@@ -36,6 +36,8 @@
</span><span class="cx"> 
</span><span class="cx"> ALLOW_UNUSED_PARAMETERS_END
</span><span class="cx"> 
</span><ins>+#include <wtf/ThreadSafeRefCounted.h>
+
</ins><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><span class="cx"> static inline RTCIceTransportState toRTCIceTransportState(webrtc::IceTransportState state)
</span></span></pre></div>
<a id="trunkSourceWebCoreModulesmediastreamlibwebrtcLibWebRTCMediaEndpointcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp (282056 => 282057)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp    2021-09-06 15:57:45 UTC (rev 282056)
+++ trunk/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp       2021-09-06 16:14:32 UTC (rev 282057)
</span><span class="lines">@@ -36,6 +36,7 @@
</span><span class="cx"> #include "LibWebRTCRtpReceiverBackend.h"
</span><span class="cx"> #include "LibWebRTCRtpSenderBackend.h"
</span><span class="cx"> #include "LibWebRTCRtpTransceiverBackend.h"
</span><ins>+#include "LibWebRTCSctpTransportBackend.h"
</ins><span class="cx"> #include "LibWebRTCStatsCollector.h"
</span><span class="cx"> #include "LibWebRTCUtils.h"
</span><span class="cx"> #include "Logging.h"
</span><span class="lines">@@ -672,18 +673,42 @@
</span><span class="cx">     });
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+class SctpTransportState {
+public:
+    explicit SctpTransportState(rtc::scoped_refptr<webrtc::SctpTransportInterface>&&);
+    std::unique_ptr<LibWebRTCSctpTransportBackend> createBackend();
+
+private:
+    rtc::scoped_refptr<webrtc::SctpTransportInterface> m_transport;
+    webrtc::SctpTransportInformation m_information;
+};
+
+SctpTransportState::SctpTransportState(rtc::scoped_refptr<webrtc::SctpTransportInterface>&& transport)
+    : m_transport(WTFMove(transport))
+{
+    if (m_transport)
+        m_information = m_transport->Information();
+}
+
+std::unique_ptr<LibWebRTCSctpTransportBackend> SctpTransportState::createBackend()
+{
+    if (!m_transport)
+        return nullptr;
+    return makeUnique<LibWebRTCSctpTransportBackend>(WTFMove(m_transport), m_information.dtls_transport());
+}
+
</ins><span class="cx"> void LibWebRTCMediaEndpoint::setLocalSessionDescriptionSucceeded()
</span><span class="cx"> {
</span><del>-    callOnMainThread([protectedThis = makeRef(*this)] {
</del><ins>+    callOnMainThread([protectedThis = makeRef(*this), sctpState = SctpTransportState(m_backend->GetSctpTransport())]() mutable {
</ins><span class="cx">         if (protectedThis->isStopped())
</span><span class="cx">             return;
</span><del>-        protectedThis->m_peerConnectionBackend.setLocalDescriptionSucceeded();
</del><ins>+        protectedThis->m_peerConnectionBackend.setLocalDescriptionSucceeded(sctpState.createBackend());
</ins><span class="cx">     });
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void LibWebRTCMediaEndpoint::setLocalSessionDescriptionFailed(ExceptionCode errorCode, const char* errorMessage)
</span><span class="cx"> {
</span><del>-    callOnMainThread([protectedThis = makeRef(*this), errorCode, errorMessage = String(errorMessage)] () mutable {
</del><ins>+    callOnMainThread([protectedThis = makeRef(*this), errorCode, errorMessage = String(errorMessage)]() mutable {
</ins><span class="cx">         if (protectedThis->isStopped())
</span><span class="cx">             return;
</span><span class="cx">         protectedThis->m_peerConnectionBackend.setLocalDescriptionFailed(Exception { errorCode, WTFMove(errorMessage) });
</span><span class="lines">@@ -692,10 +717,10 @@
</span><span class="cx"> 
</span><span class="cx"> void LibWebRTCMediaEndpoint::setRemoteSessionDescriptionSucceeded()
</span><span class="cx"> {
</span><del>-    callOnMainThread([protectedThis = makeRef(*this)] {
</del><ins>+    callOnMainThread([protectedThis = makeRef(*this), sctpState = SctpTransportState(m_backend->GetSctpTransport())]() mutable {
</ins><span class="cx">         if (protectedThis->isStopped())
</span><span class="cx">             return;
</span><del>-        protectedThis->m_peerConnectionBackend.setRemoteDescriptionSucceeded();
</del><ins>+        protectedThis->m_peerConnectionBackend.setRemoteDescriptionSucceeded(sctpState.createBackend());
</ins><span class="cx">     });
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoreModulesmediastreamlibwebrtcLibWebRTCSctpTransportBackendcpp"></a>
<div class="addfile"><h4>Added: trunk/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCSctpTransportBackend.cpp (0 => 282057)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCSctpTransportBackend.cpp                             (rev 0)
+++ trunk/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCSctpTransportBackend.cpp        2021-09-06 16:14:32 UTC (rev 282057)
</span><span class="lines">@@ -0,0 +1,153 @@
</span><ins>+/*
+ * Copyright (C) 2021 Apple Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1.  Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ * 2.  Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in the
+ *     documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+#include "LibWebRTCSctpTransportBackend.h"
+
+#if ENABLE(WEB_RTC) && USE(LIBWEBRTC)
+
+#include "LibWebRTCDtlsTransportBackend.h"
+#include "LibWebRTCProvider.h"
+
+ALLOW_UNUSED_PARAMETERS_BEGIN
+
+#include <webrtc/api/sctp_transport_interface.h>
+
+ALLOW_UNUSED_PARAMETERS_END
+
+namespace WebCore {
+
+static inline RTCSctpTransportState toRTCSctpTransportState(webrtc::SctpTransportState state)
+{
+    switch (state) {
+    case webrtc::SctpTransportState::kNew:
+    case webrtc::SctpTransportState::kConnecting:
+        return RTCSctpTransportState::Connecting;
+    case webrtc::SctpTransportState::kConnected:
+        return RTCSctpTransportState::Connected;
+    case webrtc::SctpTransportState::kClosed:
+        return RTCSctpTransportState::Closed;
+    case webrtc::SctpTransportState::kNumValues:
+        ASSERT_NOT_REACHED();
+        return RTCSctpTransportState::Connecting;
+    }
+
+    RELEASE_ASSERT_NOT_REACHED();
+}
+
+class LibWebRTCSctpTransportBackendObserver final : public ThreadSafeRefCounted<LibWebRTCSctpTransportBackendObserver>, public webrtc::SctpTransportObserverInterface {
+public:
+    static Ref<LibWebRTCSctpTransportBackendObserver> create(RTCSctpTransportBackend::Client& client, rtc::scoped_refptr<webrtc::SctpTransportInterface>& backend) { return adoptRef(*new LibWebRTCSctpTransportBackendObserver(client, backend)); }
+
+    void start();
+    void stop();
+
+private:
+    LibWebRTCSctpTransportBackendObserver(RTCSctpTransportBackend::Client&, rtc::scoped_refptr<webrtc::SctpTransportInterface>&);
+
+    void OnStateChange(webrtc::SctpTransportInformation) final;
+
+    void updateState(webrtc::SctpTransportInformation&&);
+
+    rtc::scoped_refptr<webrtc::SctpTransportInterface> m_backend;
+    WeakPtr<RTCSctpTransportBackend::Client> m_client;
+};
+
+LibWebRTCSctpTransportBackendObserver::LibWebRTCSctpTransportBackendObserver(RTCSctpTransportBackend::Client& client, rtc::scoped_refptr<webrtc::SctpTransportInterface>& backend)
+    : m_backend(backend)
+    , m_client(makeWeakPtr(client))
+{
+    ASSERT(m_backend);
+}
+
+void LibWebRTCSctpTransportBackendObserver::updateState(webrtc::SctpTransportInformation&& info)
+{
+    if (!m_client)
+        return;
+
+    std::optional<unsigned short> maxChannels;
+    if (auto value = info.MaxChannels())
+        maxChannels = *value;
+    m_client->onStateChanged(toRTCSctpTransportState(info.state()), info.MaxMessageSize(), maxChannels);
+}
+
+void LibWebRTCSctpTransportBackendObserver::start()
+{
+    LibWebRTCProvider::callOnWebRTCNetworkThread([this, protectedThis = makeRef(*this)]() mutable {
+        m_backend->RegisterObserver(this);
+        callOnMainThread([protectedThis = WTFMove(protectedThis), info = m_backend->Information()]() mutable {
+            protectedThis->updateState(WTFMove(info));
+        });
+    });
+}
+
+void LibWebRTCSctpTransportBackendObserver::stop()
+{
+    m_client = nullptr;
+    LibWebRTCProvider::callOnWebRTCNetworkThread([protectedThis = makeRef(*this)] {
+        protectedThis->m_backend->UnregisterObserver();
+    });
+}
+
+void LibWebRTCSctpTransportBackendObserver::OnStateChange(webrtc::SctpTransportInformation info)
+{
+    callOnMainThread([protectedThis = makeRef(*this), info = WTFMove(info)]() mutable {
+        protectedThis->updateState(WTFMove(info));
+    });
+}
+
+LibWebRTCSctpTransportBackend::LibWebRTCSctpTransportBackend(rtc::scoped_refptr<webrtc::SctpTransportInterface>&& backend, rtc::scoped_refptr<webrtc::DtlsTransportInterface>&& dtlsBackend)
+    : m_backend(WTFMove(backend))
+    , m_dtlsBackend(WTFMove(dtlsBackend))
+{
+    ASSERT(m_backend);
+}
+
+LibWebRTCSctpTransportBackend::~LibWebRTCSctpTransportBackend()
+{
+    if (m_observer)
+        m_observer->stop();
+}
+
+UniqueRef<RTCDtlsTransportBackend> LibWebRTCSctpTransportBackend::dtlsTransportBackend()
+{
+    return makeUniqueRef<LibWebRTCDtlsTransportBackend>(m_dtlsBackend.get());
+}
+
+void LibWebRTCSctpTransportBackend::registerClient(Client& client)
+{
+    ASSERT(!m_observer);
+    m_observer = LibWebRTCSctpTransportBackendObserver::create(client, m_backend);
+    m_observer->start();
+}
+
+void LibWebRTCSctpTransportBackend::unregisterClient()
+{
+    ASSERT(m_observer);
+    m_observer->stop();
+}
+
+} // namespace WebCore
+
+#endif // ENABLE(WEB_RTC) && USE(LIBWEBRTC)
</ins></span></pre></div>
<a id="trunkSourceWebCoreModulesmediastreamlibwebrtcLibWebRTCSctpTransportBackendh"></a>
<div class="addfile"><h4>Added: trunk/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCSctpTransportBackend.h (0 => 282057)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCSctpTransportBackend.h                               (rev 0)
+++ trunk/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCSctpTransportBackend.h  2021-09-06 16:14:32 UTC (rev 282057)
</span><span class="lines">@@ -0,0 +1,66 @@
</span><ins>+/*
+ * Copyright (C) 2021 Apple Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1.  Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ * 2.  Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in the
+ *     documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#pragma once
+
+#if ENABLE(WEB_RTC)
+
+#include "LibWebRTCMacros.h"
+#include "RTCSctpTransportBackend.h"
+#include <wtf/WeakPtr.h>
+
+ALLOW_UNUSED_PARAMETERS_BEGIN
+
+#include <webrtc/api/scoped_refptr.h>
+
+ALLOW_UNUSED_PARAMETERS_END
+
+namespace webrtc {
+class DtlsTransportInterface;
+class SctpTransportInterface;
+}
+
+namespace WebCore {
+class LibWebRTCSctpTransportBackendObserver;
+class LibWebRTCSctpTransportBackend final : public RTCSctpTransportBackend, public CanMakeWeakPtr<LibWebRTCSctpTransportBackend> {
+    WTF_MAKE_FAST_ALLOCATED;
+public:
+    explicit LibWebRTCSctpTransportBackend(rtc::scoped_refptr<webrtc::SctpTransportInterface>&&, rtc::scoped_refptr<webrtc::DtlsTransportInterface>&&);
+    ~LibWebRTCSctpTransportBackend();
+
+private:
+    // RTCSctpTransportBackend
+    const void* backend() const final { return m_backend.get(); }
+    UniqueRef<RTCDtlsTransportBackend> dtlsTransportBackend() final;
+    void registerClient(Client&) final;
+    void unregisterClient() final;
+
+    rtc::scoped_refptr<webrtc::SctpTransportInterface> m_backend;
+    rtc::scoped_refptr<webrtc::DtlsTransportInterface> m_dtlsBackend;
+    RefPtr<LibWebRTCSctpTransportBackendObserver> m_observer;
+};
+
+} // namespace WebCore
+
+#endif // ENABLE(WEB_RTC)
</ins></span></pre></div>
<a id="trunkSourceWebCoreSourcestxt"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Sources.txt (282056 => 282057)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Sources.txt 2021-09-06 15:57:45 UTC (rev 282056)
+++ trunk/Source/WebCore/Sources.txt    2021-09-06 16:14:32 UTC (rev 282057)
</span><span class="lines">@@ -179,6 +179,7 @@
</span><span class="cx"> Modules/mediastream/RTCRtpSender.cpp
</span><span class="cx"> Modules/mediastream/RTCRtpTransform.cpp
</span><span class="cx"> Modules/mediastream/RTCRtpTransceiver.cpp
</span><ins>+Modules/mediastream/RTCSctpTransport.cpp
</ins><span class="cx"> Modules/mediastream/RTCSessionDescription.cpp
</span><span class="cx"> Modules/mediastream/RTCTrackEvent.cpp
</span><span class="cx"> Modules/mediastream/RTCTransformEvent.cpp
</span><span class="lines">@@ -193,6 +194,7 @@
</span><span class="cx"> Modules/mediastream/libwebrtc/LibWebRTCRtpSenderTransformBackend.cpp
</span><span class="cx"> Modules/mediastream/libwebrtc/LibWebRTCRtpTransformBackend.cpp
</span><span class="cx"> Modules/mediastream/libwebrtc/LibWebRTCRtpTransformableFrame.cpp
</span><ins>+Modules/mediastream/libwebrtc/LibWebRTCSctpTransportBackend.cpp
</ins><span class="cx"> Modules/model-element/HTMLModelElement.cpp
</span><span class="cx"> Modules/notifications/Notification.cpp
</span><span class="cx"> Modules/notifications/NotificationController.cpp
</span><span class="lines">@@ -3354,6 +3356,8 @@
</span><span class="cx"> JSRTCRtpSynchronizationSource.cpp
</span><span class="cx"> JSRTCRtpTransceiver.cpp
</span><span class="cx"> JSRTCRtpTransceiverDirection.cpp
</span><ins>+JSRTCSctpTransport.cpp
+JSRTCSctpTransportState.cpp
</ins><span class="cx"> JSRTCSdpType.cpp
</span><span class="cx"> JSRTCSessionDescription.cpp
</span><span class="cx"> JSRTCSessionDescriptionInit.cpp
</span></span></pre></div>
<a id="trunkSourceWebCoreWebCorexcodeprojprojectpbxproj"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj (282056 => 282057)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj   2021-09-06 15:57:45 UTC (rev 282056)
+++ trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj      2021-09-06 16:14:32 UTC (rev 282057)
</span><span class="lines">@@ -1082,6 +1082,7 @@
</span><span class="cx">          413CCD4A20DE034F0065A21A /* MockMediaDevice.h in Headers */ = {isa = PBXBuildFile; fileRef = 413CCD4820DE013C0065A21A /* MockMediaDevice.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><span class="cx">          413E00791DB0E4F2002341D2 /* MemoryRelease.h in Headers */ = {isa = PBXBuildFile; fileRef = 413E00781DB0E4DE002341D2 /* MemoryRelease.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><span class="cx">          414460A22412994500814BE7 /* MediaSessionIdentifier.h in Headers */ = {isa = PBXBuildFile; fileRef = 414460A02412994100814BE7 /* MediaSessionIdentifier.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><ins>+               414516EC26CE526600AAABE0 /* RTCSctpTransportBackend.h in Headers */ = {isa = PBXBuildFile; fileRef = 414516EB26CE526600AAABE0 /* RTCSctpTransportBackend.h */; };
</ins><span class="cx">           414598C223C8D177002B9CC8 /* LocalSampleBufferDisplayLayer.mm in Sources */ = {isa = PBXBuildFile; fileRef = 414598C123C8AD79002B9CC8 /* LocalSampleBufferDisplayLayer.mm */; };
</span><span class="cx">          414B7FAD24D81CC10033D442 /* MediaRecorderPrivateOptions.h in Headers */ = {isa = PBXBuildFile; fileRef = 414B7FAB24D81C8F0033D442 /* MediaRecorderPrivateOptions.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><span class="cx">          414B82051D6DF0E50077EBE3 /* StructuredClone.h in Headers */ = {isa = PBXBuildFile; fileRef = 414B82031D6DF0D90077EBE3 /* StructuredClone.h */; };
</span><span class="lines">@@ -7831,6 +7832,14 @@
</span><span class="cx">          414516DD26CC040D00AAABE0 /* LibWebRTCIceTransportBackend.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = LibWebRTCIceTransportBackend.h; path = libwebrtc/LibWebRTCIceTransportBackend.h; sourceTree = "<group>"; };
</span><span class="cx">          414516DF26CC040D00AAABE0 /* LibWebRTCIceTransportBackend.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = LibWebRTCIceTransportBackend.cpp; path = libwebrtc/LibWebRTCIceTransportBackend.cpp; sourceTree = "<group>"; };
</span><span class="cx">          414516E026CC042100AAABE0 /* RTCIceTransportBackend.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RTCIceTransportBackend.h; sourceTree = "<group>"; };
</span><ins>+               414516E526CE523E00AAABE0 /* LibWebRTCSctpTransportBackend.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = LibWebRTCSctpTransportBackend.h; path = libwebrtc/LibWebRTCSctpTransportBackend.h; sourceTree = "<group>"; };
+               414516E726CE523E00AAABE0 /* LibWebRTCSctpTransportBackend.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = LibWebRTCSctpTransportBackend.cpp; path = libwebrtc/LibWebRTCSctpTransportBackend.cpp; sourceTree = "<group>"; };
+               414516E826CE525300AAABE0 /* RTCSctpTransport.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = RTCSctpTransport.cpp; sourceTree = "<group>"; };
+               414516E926CE525400AAABE0 /* RTCSctpTransport.idl */ = {isa = PBXFileReference; lastKnownFileType = text; path = RTCSctpTransport.idl; sourceTree = "<group>"; };
+               414516EA26CE525400AAABE0 /* RTCSctpTransport.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RTCSctpTransport.h; sourceTree = "<group>"; };
+               414516EB26CE526600AAABE0 /* RTCSctpTransportBackend.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RTCSctpTransportBackend.h; sourceTree = "<group>"; };
+               414516ED26CE556B00AAABE0 /* RTCSctpTransportState.idl */ = {isa = PBXFileReference; lastKnownFileType = text; path = RTCSctpTransportState.idl; sourceTree = "<group>"; };
+               414516EE26CE556C00AAABE0 /* RTCSctpTransportState.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RTCSctpTransportState.h; sourceTree = "<group>"; };
</ins><span class="cx">           414598BE23C8AAB8002B9CC8 /* SampleBufferDisplayLayer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SampleBufferDisplayLayer.h; sourceTree = "<group>"; };
</span><span class="cx">          414598C023C8AD78002B9CC8 /* LocalSampleBufferDisplayLayer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LocalSampleBufferDisplayLayer.h; sourceTree = "<group>"; };
</span><span class="cx">          414598C123C8AD79002B9CC8 /* LocalSampleBufferDisplayLayer.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = LocalSampleBufferDisplayLayer.mm; sourceTree = "<group>"; };
</span><span class="lines">@@ -17343,6 +17352,12 @@
</span><span class="cx">                          413C8B2F2552F27B00E65055 /* RTCRtpTransform.h */,
</span><span class="cx">                          4181C5CA255582E300AEB0FF /* RTCRtpTransformableFrame.h */,
</span><span class="cx">                          4181C5C8255573DF00AEB0FF /* RTCRtpTransformBackend.h */,
</span><ins>+                               414516E826CE525300AAABE0 /* RTCSctpTransport.cpp */,
+                               414516EA26CE525400AAABE0 /* RTCSctpTransport.h */,
+                               414516E926CE525400AAABE0 /* RTCSctpTransport.idl */,
+                               414516EB26CE526600AAABE0 /* RTCSctpTransportBackend.h */,
+                               414516EE26CE556C00AAABE0 /* RTCSctpTransportState.h */,
+                               414516ED26CE556B00AAABE0 /* RTCSctpTransportState.idl */,
</ins><span class="cx">                           410F565824FCF85400A2E50C /* RTCSdpType.idl */,
</span><span class="cx">                          07221B7A17CEC32700848E51 /* RTCSessionDescription.cpp */,
</span><span class="cx">                          07221B7B17CEC32700848E51 /* RTCSessionDescription.h */,
</span><span class="lines">@@ -19402,6 +19417,8 @@
</span><span class="cx">                          4181C5CC2555836800AEB0FF /* LibWebRTCRtpTransformableFrame.h */,
</span><span class="cx">                          4181C5CE2555895500AEB0FF /* LibWebRTCRtpTransformBackend.cpp */,
</span><span class="cx">                          4181C5CF2555895600AEB0FF /* LibWebRTCRtpTransformBackend.h */,
</span><ins>+                               414516E726CE523E00AAABE0 /* LibWebRTCSctpTransportBackend.cpp */,
+                               414516E526CE523E00AAABE0 /* LibWebRTCSctpTransportBackend.h */,
</ins><span class="cx">                           41D28D0B2139E01D00F4206F /* LibWebRTCStatsCollector.cpp */,
</span><span class="cx">                          41D28D0C2139E01E00F4206F /* LibWebRTCStatsCollector.h */,
</span><span class="cx">                          41D1A049213EDDFD0063FB6B /* LibWebRTCUtils.cpp */,
</span><span class="lines">@@ -34500,6 +34517,7 @@
</span><span class="cx">                          413C8B342552F27D00E65055 /* RTCRtpTransform.h in Headers */,
</span><span class="cx">                          4181C5CB255582E400AEB0FF /* RTCRtpTransformableFrame.h in Headers */,
</span><span class="cx">                          4181C5C9255573DF00AEB0FF /* RTCRtpTransformBackend.h in Headers */,
</span><ins>+                               414516EC26CE526600AAABE0 /* RTCSctpTransportBackend.h in Headers */,
</ins><span class="cx">                           3135910A1E7DDC7300F30630 /* RTCSdpType.h in Headers */,
</span><span class="cx">                          078E092617D14D1C00420AA1 /* RTCSessionDescription.h in Headers */,
</span><span class="cx">                          078E094317D16E1C00420AA1 /* RTCSessionDescriptionDescriptor.h in Headers */,
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsjsWebCoreBuiltinNamesh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/js/WebCoreBuiltinNames.h (282056 => 282057)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/js/WebCoreBuiltinNames.h   2021-09-06 15:57:45 UTC (rev 282056)
+++ trunk/Source/WebCore/bindings/js/WebCoreBuiltinNames.h      2021-09-06 16:14:32 UTC (rev 282057)
</span><span class="lines">@@ -212,6 +212,7 @@
</span><span class="cx">     macro(RTCRtpSender) \
</span><span class="cx">     macro(RTCRtpTransceiver) \
</span><span class="cx">     macro(RTCRtpTransform) \
</span><ins>+    macro(RTCSctpTransport) \
</ins><span class="cx">     macro(RTCSessionDescription) \
</span><span class="cx">     macro(RTCStatsReport) \
</span><span class="cx">     macro(RTCTrackEvent) \
</span></span></pre></div>
<a id="trunkSourceWebCoredomEventTargetFactoryin"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/dom/EventTargetFactory.in (282056 => 282057)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/dom/EventTargetFactory.in   2021-09-06 15:57:45 UTC (rev 282056)
+++ trunk/Source/WebCore/dom/EventTargetFactory.in      2021-09-06 16:14:32 UTC (rev 282057)
</span><span class="lines">@@ -45,6 +45,7 @@
</span><span class="cx"> RTCPeerConnection conditional=WEB_RTC
</span><span class="cx"> RTCRtpSFrameTransform conditional=WEB_RTC
</span><span class="cx"> RTCRtpScriptTransform conditional=WEB_RTC
</span><ins>+RTCSctpTransport conditional=WEB_RTC
</ins><span class="cx"> ServiceWorker conditional=SERVICE_WORKER
</span><span class="cx"> ServiceWorkerContainer conditional=SERVICE_WORKER
</span><span class="cx"> ServiceWorkerGlobalScope conditional=SERVICE_WORKER
</span></span></pre>
</div>
</div>

</body>
</html>