<!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>[208694] 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/208694">208694</a></dd>
<dt>Author</dt> <dd>commit-queue@webkit.org</dd>
<dt>Date</dt> <dd>2016-11-14 10:52:09 -0800 (Mon, 14 Nov 2016)</dd>
</dl>

<h3>Log Message</h3>
<pre>Refresh RTCDataChannel abstract infrastructure
https://bugs.webkit.org/show_bug.cgi?id=164680

Patch by Youenn Fablet &lt;youenn@apple.com&gt; on 2016-11-14
Reviewed by Darin Adler.

Source/WebCore:

No real changes, except that a mock data channel is now returned for layout test.
Covered by activated and rebased test.

Adding support for mock data channel.
Updating data channel creation by using dictionary binding infrastructure.
Storing of options directly in RTCDataChannel to reduce the use of the data channel handler.

* Modules/mediastream/MediaEndpointPeerConnection.cpp:
(WebCore::MediaEndpointPeerConnection::createDataChannelHandler):
* Modules/mediastream/MediaEndpointPeerConnection.h:
* Modules/mediastream/PeerConnectionBackend.h:
* Modules/mediastream/RTCDataChannel.cpp:
(WebCore::RTCDataChannel::create):
(WebCore::RTCDataChannel::RTCDataChannel):
(WebCore::RTCDataChannel::bufferedAmount):
(WebCore::RTCDataChannel::~RTCDataChannel): Deleted.
(WebCore::RTCDataChannel::label): Deleted.
(WebCore::RTCDataChannel::ordered): Deleted.
(WebCore::RTCDataChannel::maxRetransmitTime): Deleted.
(WebCore::RTCDataChannel::maxRetransmits): Deleted.
(WebCore::RTCDataChannel::protocol): Deleted.
(WebCore::RTCDataChannel::negotiated): Deleted.
(WebCore::RTCDataChannel::id): Deleted.
* Modules/mediastream/RTCDataChannel.h:
* Modules/mediastream/RTCDataChannelEvent.cpp:
(WebCore::RTCDataChannelEvent::create):
(WebCore::RTCDataChannelEvent::RTCDataChannelEvent):
(WebCore::RTCDataChannelEvent::~RTCDataChannelEvent): Deleted.
* Modules/mediastream/RTCDataChannelEvent.h:
* Modules/mediastream/RTCPeerConnection.cpp:
(WebCore::RTCPeerConnection::createDataChannel):
* Modules/mediastream/RTCPeerConnection.h:
* Modules/mediastream/RTCPeerConnection.idl:
* platform/mediastream/MediaEndpoint.cpp:
(WebCore::EmptyMediaEndpoint::EmptyMediaEndpoint): Deleted.
* platform/mediastream/MediaEndpoint.h:
* platform/mediastream/RTCDataChannelHandler.h:
* platform/mediastream/RTCDataChannelHandlerClient.h:
* platform/mediastream/RTCPeerConnectionHandler.h:
(WebCore::RTCDataChannelInit::RTCDataChannelInit): Deleted.
* platform/mediastream/openwebrtc/MediaEndpointOwr.cpp:
(WebCore::MediaEndpointOwr::createDataChannelHandler):
* platform/mediastream/openwebrtc/MediaEndpointOwr.h:
* platform/mock/MockMediaEndpoint.cpp:
(WebCore::MockMediaEndpoint::createDataChannelHandler):
* platform/mock/MockMediaEndpoint.h:
* platform/mock/RTCDataChannelHandlerMock.cpp:
(WebCore::RTCDataChannelHandlerMock::RTCDataChannelHandlerMock):
* platform/mock/RTCDataChannelHandlerMock.h:

LayoutTests:

* fast/mediastream/RTCPeerConnection-datachannel-expected.txt:
* fast/mediastream/RTCPeerConnection-datachannel.html:
* platform/mac/TestExpectations:</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsChangeLog">trunk/LayoutTests/ChangeLog</a></li>
<li><a href="#trunkLayoutTestsfastmediastreamRTCPeerConnectiondatachannelexpectedtxt">trunk/LayoutTests/fast/mediastream/RTCPeerConnection-datachannel-expected.txt</a></li>
<li><a href="#trunkLayoutTestsfastmediastreamRTCPeerConnectiondatachannelhtml">trunk/LayoutTests/fast/mediastream/RTCPeerConnection-datachannel.html</a></li>
<li><a href="#trunkLayoutTestsplatformmacTestExpectations">trunk/LayoutTests/platform/mac/TestExpectations</a></li>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCoreModulesmediastreamMediaEndpointPeerConnectioncpp">trunk/Source/WebCore/Modules/mediastream/MediaEndpointPeerConnection.cpp</a></li>
<li><a href="#trunkSourceWebCoreModulesmediastreamMediaEndpointPeerConnectionh">trunk/Source/WebCore/Modules/mediastream/MediaEndpointPeerConnection.h</a></li>
<li><a href="#trunkSourceWebCoreModulesmediastreamPeerConnectionBackendh">trunk/Source/WebCore/Modules/mediastream/PeerConnectionBackend.h</a></li>
<li><a href="#trunkSourceWebCoreModulesmediastreamRTCDataChannelcpp">trunk/Source/WebCore/Modules/mediastream/RTCDataChannel.cpp</a></li>
<li><a href="#trunkSourceWebCoreModulesmediastreamRTCDataChannelh">trunk/Source/WebCore/Modules/mediastream/RTCDataChannel.h</a></li>
<li><a href="#trunkSourceWebCoreModulesmediastreamRTCDataChannelEventcpp">trunk/Source/WebCore/Modules/mediastream/RTCDataChannelEvent.cpp</a></li>
<li><a href="#trunkSourceWebCoreModulesmediastreamRTCDataChannelEventh">trunk/Source/WebCore/Modules/mediastream/RTCDataChannelEvent.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="#trunkSourceWebCoreplatformmediastreamMediaEndpointcpp">trunk/Source/WebCore/platform/mediastream/MediaEndpoint.cpp</a></li>
<li><a href="#trunkSourceWebCoreplatformmediastreamMediaEndpointh">trunk/Source/WebCore/platform/mediastream/MediaEndpoint.h</a></li>
<li><a href="#trunkSourceWebCoreplatformmediastreamRTCDataChannelHandlerh">trunk/Source/WebCore/platform/mediastream/RTCDataChannelHandler.h</a></li>
<li><a href="#trunkSourceWebCoreplatformmediastreamRTCDataChannelHandlerClienth">trunk/Source/WebCore/platform/mediastream/RTCDataChannelHandlerClient.h</a></li>
<li><a href="#trunkSourceWebCoreplatformmediastreamRTCPeerConnectionHandlerh">trunk/Source/WebCore/platform/mediastream/RTCPeerConnectionHandler.h</a></li>
<li><a href="#trunkSourceWebCoreplatformmediastreamopenwebrtcMediaEndpointOwrcpp">trunk/Source/WebCore/platform/mediastream/openwebrtc/MediaEndpointOwr.cpp</a></li>
<li><a href="#trunkSourceWebCoreplatformmediastreamopenwebrtcMediaEndpointOwrh">trunk/Source/WebCore/platform/mediastream/openwebrtc/MediaEndpointOwr.h</a></li>
<li><a href="#trunkSourceWebCoreplatformmockMockMediaEndpointcpp">trunk/Source/WebCore/platform/mock/MockMediaEndpoint.cpp</a></li>
<li><a href="#trunkSourceWebCoreplatformmockMockMediaEndpointh">trunk/Source/WebCore/platform/mock/MockMediaEndpoint.h</a></li>
<li><a href="#trunkSourceWebCoreplatformmockRTCDataChannelHandlerMockcpp">trunk/Source/WebCore/platform/mock/RTCDataChannelHandlerMock.cpp</a></li>
<li><a href="#trunkSourceWebCoreplatformmockRTCDataChannelHandlerMockh">trunk/Source/WebCore/platform/mock/RTCDataChannelHandlerMock.h</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkLayoutTestsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/ChangeLog (208693 => 208694)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/ChangeLog        2016-11-14 18:40:26 UTC (rev 208693)
+++ trunk/LayoutTests/ChangeLog        2016-11-14 18:52:09 UTC (rev 208694)
</span><span class="lines">@@ -1,3 +1,14 @@
</span><ins>+2016-11-14  Youenn Fablet  &lt;youenn@apple.com&gt;
+
+        Refresh RTCDataChannel abstract infrastructure
+        https://bugs.webkit.org/show_bug.cgi?id=164680
+
+        Reviewed by Darin Adler.
+
+        * fast/mediastream/RTCPeerConnection-datachannel-expected.txt:
+        * fast/mediastream/RTCPeerConnection-datachannel.html:
+        * platform/mac/TestExpectations:
+
</ins><span class="cx"> 2016-11-14  David Kilzer  &lt;ddkilzer@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         REGRESSION (r83521): Fix malformed &lt;canvas&gt; tag in fast/canvas/DrawImageSinglePixelStretch.html
</span></span></pre></div>
<a id="trunkLayoutTestsfastmediastreamRTCPeerConnectiondatachannelexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/fast/mediastream/RTCPeerConnection-datachannel-expected.txt (208693 => 208694)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/mediastream/RTCPeerConnection-datachannel-expected.txt        2016-11-14 18:40:26 UTC (rev 208693)
+++ trunk/LayoutTests/fast/mediastream/RTCPeerConnection-datachannel-expected.txt        2016-11-14 18:52:09 UTC (rev 208694)
</span><span class="lines">@@ -3,7 +3,7 @@
</span><span class="cx"> On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
</span><span class="cx"> 
</span><span class="cx"> 
</span><del>-PASS dc = pc.createDataChannel(&quot;label&quot;, {maxRetransmitTime:0, maxRetransmits:0}); threw exception SyntaxError (DOM Exception 12): The string did not match the expected pattern..
</del><ins>+FAIL dc = pc.createDataChannel(&quot;label&quot;, {maxRetransmitTime:0, maxRetransmits:0}); should throw an exception. Was [object RTCDataChannel].
</ins><span class="cx"> PASS dc = pc.createDataChannel(&quot;label1&quot;); did not throw exception.
</span><span class="cx"> PASS dc = pc.createDataChannel(&quot;label2&quot;, {}); did not throw exception.
</span><span class="cx"> PASS dc = pc.createDataChannel(&quot;label3&quot;, {ordered:true}); did not throw exception.
</span><span class="lines">@@ -10,28 +10,7 @@
</span><span class="cx"> PASS dc = pc.createDataChannel(&quot;label3&quot;, {ordered:false}); did not throw exception.
</span><span class="cx"> PASS dc = pc.createDataChannel(&quot;label3&quot;, {maxRetransmits:0}); did not throw exception.
</span><span class="cx"> PASS dc = pc.createDataChannel(&quot;label3&quot;, {maxRetransmitTime:0}); did not throw exception.
</span><del>-PASS pc is connected
-PASS dc = pc.createDataChannel(&quot;label&quot;); did not throw exception.
-PASS dc.readyState is 'connecting'
-PASS pc_ondatachannel was called
-PASS dc_onopen was called
-PASS dc.readyState is 'open'
-PASS dc.label is 'label'
-PASS dc.send('xyzzy'); did not throw exception.
-PASS dc_onmessage_string was called
-PASS data is 'xyzzy'
-PASS dc.send(buffer); did not throw exception.
-PASS dc_onmessage_arraybuffer was called
-PASS data.byteLength is 2
-PASS array[0] is 17
-PASS array[1] is 19
-PASS dc.send(array); did not throw exception.
-PASS dc_onmessage_arraybufferview was called
-PASS data.byteLength is 2
-PASS array[0] is 11
-PASS array[1] is 13
-PASS dc_onclose was called
-PASS dc.readyState is 'closed'
</del><ins>+FAIL Test timed out
</ins><span class="cx"> PASS successfullyParsed is true
</span><span class="cx"> 
</span><span class="cx"> TEST COMPLETE
</span></span></pre></div>
<a id="trunkLayoutTestsfastmediastreamRTCPeerConnectiondatachannelhtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/fast/mediastream/RTCPeerConnection-datachannel.html (208693 => 208694)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/mediastream/RTCPeerConnection-datachannel.html        2016-11-14 18:40:26 UTC (rev 208693)
+++ trunk/LayoutTests/fast/mediastream/RTCPeerConnection-datachannel.html        2016-11-14 18:52:09 UTC (rev 208694)
</span><span class="lines">@@ -99,6 +99,11 @@
</span><span class="cx"> 
</span><span class="cx">             window.jsTestIsAsync = true;
</span><span class="cx">             window.successfullyParsed = true;
</span><ins>+
+            setTimeout(function() {
+                testFailed(&quot;Test timed out&quot;);
+                finishJSTest();
+            }, 2000);
</ins><span class="cx">         &lt;/script&gt;
</span><span class="cx">         &lt;script src=&quot;../../resources/js-test-post.js&quot;&gt;&lt;/script&gt;
</span><span class="cx">     &lt;/body&gt;
</span></span></pre></div>
<a id="trunkLayoutTestsplatformmacTestExpectations"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/platform/mac/TestExpectations (208693 => 208694)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/platform/mac/TestExpectations        2016-11-14 18:40:26 UTC (rev 208693)
+++ trunk/LayoutTests/platform/mac/TestExpectations        2016-11-14 18:52:09 UTC (rev 208694)
</span><span class="lines">@@ -165,7 +165,6 @@
</span><span class="cx"> 
</span><span class="cx"> # WebRTC is not supported yet.
</span><span class="cx"> fast/events/constructors/media-stream-event-constructor.html
</span><del>-fast/mediastream/RTCPeerConnection-datachannel.html [ Skip ]
</del><span class="cx"> fast/mediastream/RTCPeerConnection-dtmf.html [ Skip ]
</span><span class="cx"> fast/mediastream/RTCPeerConnection-events.html [ Skip ]
</span><span class="cx"> fast/mediastream/RTCPeerConnection-ice.html [ Skip ]
</span></span></pre></div>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (208693 => 208694)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2016-11-14 18:40:26 UTC (rev 208693)
+++ trunk/Source/WebCore/ChangeLog        2016-11-14 18:52:09 UTC (rev 208694)
</span><span class="lines">@@ -1,3 +1,60 @@
</span><ins>+2016-11-14  Youenn Fablet  &lt;youenn@apple.com&gt;
+
+        Refresh RTCDataChannel abstract infrastructure
+        https://bugs.webkit.org/show_bug.cgi?id=164680
+
+        Reviewed by Darin Adler.
+
+        No real changes, except that a mock data channel is now returned for layout test.
+        Covered by activated and rebased test.
+
+        Adding support for mock data channel.
+        Updating data channel creation by using dictionary binding infrastructure.
+        Storing of options directly in RTCDataChannel to reduce the use of the data channel handler.
+
+        * Modules/mediastream/MediaEndpointPeerConnection.cpp:
+        (WebCore::MediaEndpointPeerConnection::createDataChannelHandler):
+        * Modules/mediastream/MediaEndpointPeerConnection.h:
+        * Modules/mediastream/PeerConnectionBackend.h:
+        * Modules/mediastream/RTCDataChannel.cpp:
+        (WebCore::RTCDataChannel::create):
+        (WebCore::RTCDataChannel::RTCDataChannel):
+        (WebCore::RTCDataChannel::bufferedAmount):
+        (WebCore::RTCDataChannel::~RTCDataChannel): Deleted.
+        (WebCore::RTCDataChannel::label): Deleted.
+        (WebCore::RTCDataChannel::ordered): Deleted.
+        (WebCore::RTCDataChannel::maxRetransmitTime): Deleted.
+        (WebCore::RTCDataChannel::maxRetransmits): Deleted.
+        (WebCore::RTCDataChannel::protocol): Deleted.
+        (WebCore::RTCDataChannel::negotiated): Deleted.
+        (WebCore::RTCDataChannel::id): Deleted.
+        * Modules/mediastream/RTCDataChannel.h:
+        * Modules/mediastream/RTCDataChannelEvent.cpp:
+        (WebCore::RTCDataChannelEvent::create):
+        (WebCore::RTCDataChannelEvent::RTCDataChannelEvent):
+        (WebCore::RTCDataChannelEvent::~RTCDataChannelEvent): Deleted.
+        * Modules/mediastream/RTCDataChannelEvent.h:
+        * Modules/mediastream/RTCPeerConnection.cpp:
+        (WebCore::RTCPeerConnection::createDataChannel):
+        * Modules/mediastream/RTCPeerConnection.h:
+        * Modules/mediastream/RTCPeerConnection.idl:
+        * platform/mediastream/MediaEndpoint.cpp:
+        (WebCore::EmptyMediaEndpoint::EmptyMediaEndpoint): Deleted.
+        * platform/mediastream/MediaEndpoint.h:
+        * platform/mediastream/RTCDataChannelHandler.h:
+        * platform/mediastream/RTCDataChannelHandlerClient.h:
+        * platform/mediastream/RTCPeerConnectionHandler.h:
+        (WebCore::RTCDataChannelInit::RTCDataChannelInit): Deleted.
+        * platform/mediastream/openwebrtc/MediaEndpointOwr.cpp:
+        (WebCore::MediaEndpointOwr::createDataChannelHandler):
+        * platform/mediastream/openwebrtc/MediaEndpointOwr.h:
+        * platform/mock/MockMediaEndpoint.cpp:
+        (WebCore::MockMediaEndpoint::createDataChannelHandler):
+        * platform/mock/MockMediaEndpoint.h:
+        * platform/mock/RTCDataChannelHandlerMock.cpp:
+        (WebCore::RTCDataChannelHandlerMock::RTCDataChannelHandlerMock):
+        * platform/mock/RTCDataChannelHandlerMock.h:
+
</ins><span class="cx"> 2016-11-14  David Kilzer  &lt;ddkilzer@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Bug 164702: WebContent crash due to checked unsigned overflow in WebCore: WebCore::RenderLayerCompositor::requiresCompositingLayer const + 1104
</span></span></pre></div>
<a id="trunkSourceWebCoreModulesmediastreamMediaEndpointPeerConnectioncpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/mediastream/MediaEndpointPeerConnection.cpp (208693 => 208694)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/mediastream/MediaEndpointPeerConnection.cpp        2016-11-14 18:40:26 UTC (rev 208693)
+++ trunk/Source/WebCore/Modules/mediastream/MediaEndpointPeerConnection.cpp        2016-11-14 18:52:09 UTC (rev 208694)
</span><span class="lines">@@ -705,6 +705,11 @@
</span><span class="cx">     return RTCRtpReceiver::create(WTFMove(remoteTrack));
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+std::unique_ptr&lt;RTCDataChannelHandler&gt; MediaEndpointPeerConnection::createDataChannelHandler(const String&amp; label, const RTCDataChannelInit&amp; options)
+{
+    return m_mediaEndpoint-&gt;createDataChannelHandler(label, options);
+}
+
</ins><span class="cx"> void MediaEndpointPeerConnection::replaceTrack(RTCRtpSender&amp; sender, RefPtr&lt;MediaStreamTrack&gt;&amp;&amp; withTrack, PeerConnection::VoidPromise&amp;&amp; promise)
</span><span class="cx"> {
</span><span class="cx">     RTCRtpTransceiver* transceiver = matchTransceiver(m_peerConnection.getTransceivers(), [&amp;sender] (RTCRtpTransceiver&amp; current) {
</span></span></pre></div>
<a id="trunkSourceWebCoreModulesmediastreamMediaEndpointPeerConnectionh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/mediastream/MediaEndpointPeerConnection.h (208693 => 208694)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/mediastream/MediaEndpointPeerConnection.h        2016-11-14 18:40:26 UTC (rev 208693)
+++ trunk/Source/WebCore/Modules/mediastream/MediaEndpointPeerConnection.h        2016-11-14 18:52:09 UTC (rev 208694)
</span><span class="lines">@@ -111,6 +111,8 @@
</span><span class="cx">     void doneGatheringCandidates(const String&amp; mid) override;
</span><span class="cx">     void iceTransportStateChanged(const String&amp; mid, MediaEndpoint::IceTransportState) override;
</span><span class="cx"> 
</span><ins>+    std::unique_ptr&lt;RTCDataChannelHandler&gt; createDataChannelHandler(const String&amp;, const RTCDataChannelInit&amp;) final;
+
</ins><span class="cx">     std::unique_ptr&lt;MediaEndpoint&gt; m_mediaEndpoint;
</span><span class="cx"> 
</span><span class="cx">     Function&lt;void ()&gt; m_initialDeferredTask;
</span></span></pre></div>
<a id="trunkSourceWebCoreModulesmediastreamPeerConnectionBackendh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/mediastream/PeerConnectionBackend.h (208693 => 208694)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/mediastream/PeerConnectionBackend.h        2016-11-14 18:40:26 UTC (rev 208693)
+++ trunk/Source/WebCore/Modules/mediastream/PeerConnectionBackend.h        2016-11-14 18:52:09 UTC (rev 208694)
</span><span class="lines">@@ -34,6 +34,7 @@
</span><span class="cx"> 
</span><span class="cx"> #include &quot;JSDOMPromise.h&quot;
</span><span class="cx"> #include &quot;PeerConnectionStates.h&quot;
</span><ins>+#include &quot;RTCDataChannel.h&quot;
</ins><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><span class="lines">@@ -43,6 +44,7 @@
</span><span class="cx"> class MediaStreamTrack;
</span><span class="cx"> class PeerConnectionBackend;
</span><span class="cx"> class RTCConfiguration;
</span><ins>+class RTCDataChannelHandler;
</ins><span class="cx"> class RTCIceCandidate;
</span><span class="cx"> class RTCPeerConnection;
</span><span class="cx"> class RTCRtpReceiver;
</span><span class="lines">@@ -77,6 +79,8 @@
</span><span class="cx">     void setRemoteDescription(RTCSessionDescription&amp;, PeerConnection::VoidPromise&amp;&amp;);
</span><span class="cx">     void addIceCandidate(RTCIceCandidate&amp;, PeerConnection::VoidPromise&amp;&amp;);
</span><span class="cx"> 
</span><ins>+    virtual std::unique_ptr&lt;RTCDataChannelHandler&gt; createDataChannelHandler(const String&amp;, const RTCDataChannelInit&amp;) = 0;
+
</ins><span class="cx">     void stop();
</span><span class="cx"> 
</span><span class="cx">     virtual RefPtr&lt;RTCSessionDescription&gt; localDescription() const = 0;
</span></span></pre></div>
<a id="trunkSourceWebCoreModulesmediastreamRTCDataChannelcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/mediastream/RTCDataChannel.cpp (208693 => 208694)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/mediastream/RTCDataChannel.cpp        2016-11-14 18:40:26 UTC (rev 208693)
+++ trunk/Source/WebCore/Modules/mediastream/RTCDataChannel.cpp        2016-11-14 18:52:09 UTC (rev 208694)
</span><span class="lines">@@ -54,85 +54,22 @@
</span><span class="cx">     return arraybuffer;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-ExceptionOr&lt;Ref&lt;RTCDataChannel&gt;&gt; RTCDataChannel::create(ScriptExecutionContext* context, RTCPeerConnectionHandler* peerConnectionHandler, const String&amp; label, const Dictionary&amp; options)
</del><ins>+Ref&lt;RTCDataChannel&gt; RTCDataChannel::create(ScriptExecutionContext&amp; context, std::unique_ptr&lt;RTCDataChannelHandler&gt;&amp;&amp; handler, String&amp;&amp; label, RTCDataChannelInit&amp;&amp; options)
</ins><span class="cx"> {
</span><del>-    RTCDataChannelInit initData;
-    String maxRetransmitsStr;
-    String maxRetransmitTimeStr;
-    options.get(&quot;ordered&quot;, initData.ordered);
-    options.get(&quot;negotiated&quot;, initData.negotiated);
-    options.get(&quot;id&quot;, initData.id);
-    options.get(&quot;maxRetransmits&quot;, maxRetransmitsStr);
-    options.get(&quot;maxRetransmitTime&quot;, maxRetransmitTimeStr);
-    options.get(&quot;protocol&quot;, initData.protocol);
-
-    bool maxRetransmitsConversion;
-    bool maxRetransmitTimeConversion;
-    initData.maxRetransmits = maxRetransmitsStr.toUIntStrict(&amp;maxRetransmitsConversion);
-    initData.maxRetransmitTime = maxRetransmitTimeStr.toUIntStrict(&amp;maxRetransmitTimeConversion);
-    if (maxRetransmitsConversion &amp;&amp; maxRetransmitTimeConversion)
-        return Exception { SYNTAX_ERR };
-
-    auto handler = peerConnectionHandler-&gt;createDataChannel(label, initData);
-    if (!handler)
-        return Exception { NOT_SUPPORTED_ERR };
-
-    return adoptRef(*new RTCDataChannel(*context, WTFMove(handler)));
-}
-
-Ref&lt;RTCDataChannel&gt; RTCDataChannel::create(ScriptExecutionContext* context, std::unique_ptr&lt;RTCDataChannelHandler&gt;&amp;&amp; handler)
-{
</del><span class="cx">     ASSERT(handler);
</span><del>-    return adoptRef(*new RTCDataChannel(*context, WTFMove(handler)));
</del><ins>+    return adoptRef(*new RTCDataChannel(context, WTFMove(handler), WTFMove(label), WTFMove(options)));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-RTCDataChannel::RTCDataChannel(ScriptExecutionContext&amp; context, std::unique_ptr&lt;RTCDataChannelHandler&gt;&amp;&amp; handler)
</del><ins>+RTCDataChannel::RTCDataChannel(ScriptExecutionContext&amp; context, std::unique_ptr&lt;RTCDataChannelHandler&gt;&amp;&amp; handler, String&amp;&amp; label, RTCDataChannelInit&amp;&amp; options)
</ins><span class="cx">     : m_scriptExecutionContext(&amp;context)
</span><span class="cx">     , m_handler(WTFMove(handler))
</span><span class="cx">     , m_scheduledEventTimer(*this, &amp;RTCDataChannel::scheduledEventTimerFired)
</span><ins>+    , m_label(WTFMove(label))
+    , m_options(WTFMove(options))
</ins><span class="cx"> {
</span><span class="cx">     m_handler-&gt;setClient(this);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-RTCDataChannel::~RTCDataChannel()
-{
-}
-
-String RTCDataChannel::label() const
-{
-    return m_handler-&gt;label();
-}
-
-bool RTCDataChannel::ordered() const
-{
-    return m_handler-&gt;ordered();
-}
-
-unsigned short RTCDataChannel::maxRetransmitTime() const
-{
-    return m_handler-&gt;maxRetransmitTime();
-}
-
-unsigned short RTCDataChannel::maxRetransmits() const
-{
-    return m_handler-&gt;maxRetransmits();
-}
-
-String RTCDataChannel::protocol() const
-{
-    return m_handler-&gt;protocol();
-}
-
-bool RTCDataChannel::negotiated() const
-{
-    return m_handler-&gt;negotiated();
-}
-
-unsigned short RTCDataChannel::id() const
-{
-    return m_handler-&gt;id();
-}
-
</del><span class="cx"> const AtomicString&amp; RTCDataChannel::readyState() const
</span><span class="cx"> {
</span><span class="cx">     static NeverDestroyed&lt;AtomicString&gt; connectingState(&quot;connecting&quot;, AtomicString::ConstructFromLiteral);
</span><span class="lines">@@ -157,7 +94,7 @@
</span><span class="cx"> 
</span><span class="cx"> unsigned RTCDataChannel::bufferedAmount() const
</span><span class="cx"> {
</span><del>-    return m_handler-&gt;bufferedAmount();
</del><ins>+    return 0;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> const AtomicString&amp; RTCDataChannel::binaryType() const
</span></span></pre></div>
<a id="trunkSourceWebCoreModulesmediastreamRTCDataChannelh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/mediastream/RTCDataChannel.h (208693 => 208694)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/mediastream/RTCDataChannel.h        2016-11-14 18:40:26 UTC (rev 208693)
+++ trunk/Source/WebCore/Modules/mediastream/RTCDataChannel.h        2016-11-14 18:52:09 UTC (rev 208694)
</span><span class="lines">@@ -26,8 +26,10 @@
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(WEB_RTC)
</span><span class="cx"> 
</span><ins>+#include &quot;Event.h&quot;
</ins><span class="cx"> #include &quot;EventTarget.h&quot;
</span><span class="cx"> #include &quot;ExceptionOr.h&quot;
</span><ins>+#include &quot;RTCDataChannelHandler.h&quot;
</ins><span class="cx"> #include &quot;RTCDataChannelHandlerClient.h&quot;
</span><span class="cx"> #include &quot;ScriptWrappable.h&quot;
</span><span class="cx"> #include &quot;Timer.h&quot;
</span><span class="lines">@@ -41,22 +43,20 @@
</span><span class="cx"> 
</span><span class="cx"> class Blob;
</span><span class="cx"> class Dictionary;
</span><del>-class RTCDataChannelHandler;
</del><span class="cx"> class RTCPeerConnectionHandler;
</span><span class="cx"> 
</span><span class="cx"> class RTCDataChannel final : public RefCounted&lt;RTCDataChannel&gt;, public EventTargetWithInlineData, public RTCDataChannelHandlerClient {
</span><span class="cx"> public:
</span><del>-    static Ref&lt;RTCDataChannel&gt; create(ScriptExecutionContext*, std::unique_ptr&lt;RTCDataChannelHandler&gt;&amp;&amp;);
-    static ExceptionOr&lt;Ref&lt;RTCDataChannel&gt;&gt; create(ScriptExecutionContext*, RTCPeerConnectionHandler*, const String&amp; label, const Dictionary&amp; options);
-    ~RTCDataChannel();
</del><ins>+    static Ref&lt;RTCDataChannel&gt; create(ScriptExecutionContext&amp;, std::unique_ptr&lt;RTCDataChannelHandler&gt;&amp;&amp;, String&amp;&amp;, RTCDataChannelInit&amp;&amp;);
</ins><span class="cx"> 
</span><del>-    String label() const;
-    bool ordered() const;
-    unsigned short maxRetransmitTime() const;
-    unsigned short maxRetransmits() const;
-    String protocol() const;
-    bool negotiated() const;
-    unsigned short id() const;
</del><ins>+    bool ordered() const { return m_options.ordered; }
+    unsigned short maxRetransmitTime() const { return m_options.maxRetransmitTime; }
+    unsigned short maxRetransmits() const { return m_options.maxRetransmits; }
+    String protocol() const { return m_options.protocol; }
+    bool negotiated() const { return m_options.negotiated; };
+    unsigned short id() const { return m_options.id; };
+
+    String label() const { return m_label; }
</ins><span class="cx">     const AtomicString&amp; readyState() const;
</span><span class="cx">     unsigned bufferedAmount() const;
</span><span class="cx"> 
</span><span class="lines">@@ -76,7 +76,7 @@
</span><span class="cx">     using RefCounted::deref;
</span><span class="cx"> 
</span><span class="cx"> private:
</span><del>-    RTCDataChannel(ScriptExecutionContext&amp;, std::unique_ptr&lt;RTCDataChannelHandler&gt;&amp;&amp;);
</del><ins>+    RTCDataChannel(ScriptExecutionContext&amp;, std::unique_ptr&lt;RTCDataChannelHandler&gt;&amp;&amp;, String&amp;&amp;, RTCDataChannelInit&amp;&amp;);
</ins><span class="cx"> 
</span><span class="cx">     void scheduleDispatchEvent(Ref&lt;Event&gt;&amp;&amp;);
</span><span class="cx">     void scheduledEventTimerFired();
</span><span class="lines">@@ -93,6 +93,8 @@
</span><span class="cx">     void didReceiveStringData(const String&amp;) final;
</span><span class="cx">     void didReceiveRawData(const char*, size_t) final;
</span><span class="cx">     void didDetectError() final;
</span><ins>+    void protect() final { ref(); }
+    void unprotect() final { deref(); }
</ins><span class="cx"> 
</span><span class="cx">     std::unique_ptr&lt;RTCDataChannelHandler&gt; m_handler;
</span><span class="cx"> 
</span><span class="lines">@@ -105,6 +107,9 @@
</span><span class="cx"> 
</span><span class="cx">     Timer m_scheduledEventTimer;
</span><span class="cx">     Vector&lt;Ref&lt;Event&gt;&gt; m_scheduledEvents;
</span><ins>+
+    String m_label;
+    RTCDataChannelInit m_options;
</ins><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> } // namespace WebCore
</span></span></pre></div>
<a id="trunkSourceWebCoreModulesmediastreamRTCDataChannelEventcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/mediastream/RTCDataChannelEvent.cpp (208693 => 208694)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/mediastream/RTCDataChannelEvent.cpp        2016-11-14 18:40:26 UTC (rev 208693)
+++ trunk/Source/WebCore/Modules/mediastream/RTCDataChannelEvent.cpp        2016-11-14 18:52:09 UTC (rev 208694)
</span><span class="lines">@@ -32,21 +32,17 @@
</span><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><del>-Ref&lt;RTCDataChannelEvent&gt; RTCDataChannelEvent::create(const AtomicString&amp; type, bool canBubble, bool cancelable, RTCDataChannel&amp; channel)
</del><ins>+Ref&lt;RTCDataChannelEvent&gt; RTCDataChannelEvent::create(const AtomicString&amp; type, bool canBubble, bool cancelable, Ref&lt;RTCDataChannel&gt;&amp;&amp; channel)
</ins><span class="cx"> {
</span><del>-    return adoptRef(*new RTCDataChannelEvent(type, canBubble, cancelable, channel));
</del><ins>+    return adoptRef(*new RTCDataChannelEvent(type, canBubble, cancelable, WTFMove(channel)));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-RTCDataChannelEvent::RTCDataChannelEvent(const AtomicString&amp; type, bool canBubble, bool cancelable, RTCDataChannel&amp; channel)
</del><ins>+RTCDataChannelEvent::RTCDataChannelEvent(const AtomicString&amp; type, bool canBubble, bool cancelable, Ref&lt;RTCDataChannel&gt;&amp;&amp; channel)
</ins><span class="cx">     : Event(type, canBubble, cancelable)
</span><del>-    , m_channel(channel)
</del><ins>+    , m_channel(WTFMove(channel))
</ins><span class="cx"> {
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-RTCDataChannelEvent::~RTCDataChannelEvent()
-{
-}
-
</del><span class="cx"> RTCDataChannel* RTCDataChannelEvent::channel()
</span><span class="cx"> {
</span><span class="cx">     return m_channel.ptr();
</span></span></pre></div>
<a id="trunkSourceWebCoreModulesmediastreamRTCDataChannelEventh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/mediastream/RTCDataChannelEvent.h (208693 => 208694)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/mediastream/RTCDataChannelEvent.h        2016-11-14 18:40:26 UTC (rev 208693)
+++ trunk/Source/WebCore/Modules/mediastream/RTCDataChannelEvent.h        2016-11-14 18:52:09 UTC (rev 208694)
</span><span class="lines">@@ -34,16 +34,14 @@
</span><span class="cx"> 
</span><span class="cx"> class RTCDataChannelEvent : public Event {
</span><span class="cx"> public:
</span><del>-    virtual ~RTCDataChannelEvent();
</del><ins>+    static Ref&lt;RTCDataChannelEvent&gt; create(const AtomicString&amp; type, bool canBubble, bool cancelable, Ref&lt;RTCDataChannel&gt;&amp;&amp;);
</ins><span class="cx"> 
</span><del>-    static Ref&lt;RTCDataChannelEvent&gt; create(const AtomicString&amp; type, bool canBubble, bool cancelable, RTCDataChannel&amp;);
-
</del><span class="cx">     RTCDataChannel* channel();
</span><span class="cx"> 
</span><span class="cx">     virtual EventInterface eventInterface() const;
</span><span class="cx"> 
</span><span class="cx"> private:
</span><del>-    RTCDataChannelEvent(const AtomicString&amp; type, bool canBubble, bool cancelable, RTCDataChannel&amp;);
</del><ins>+    RTCDataChannelEvent(const AtomicString&amp; type, bool canBubble, bool cancelable, Ref&lt;RTCDataChannel&gt;&amp;&amp;);
</ins><span class="cx"> 
</span><span class="cx">     Ref&lt;RTCDataChannel&gt; m_channel;
</span><span class="cx"> };
</span></span></pre></div>
<a id="trunkSourceWebCoreModulesmediastreamRTCPeerConnectioncpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/mediastream/RTCPeerConnection.cpp (208693 => 208694)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/mediastream/RTCPeerConnection.cpp        2016-11-14 18:40:26 UTC (rev 208693)
+++ trunk/Source/WebCore/Modules/mediastream/RTCPeerConnection.cpp        2016-11-14 18:52:09 UTC (rev 208694)
</span><span class="lines">@@ -374,12 +374,17 @@
</span><span class="cx">     m_backend-&gt;getStats(selector, WTFMove(promise));
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-ExceptionOr&lt;RefPtr&lt;RTCDataChannel&gt;&gt; RTCPeerConnection::createDataChannel(const String&amp;, const Dictionary&amp;)
</del><ins>+ExceptionOr&lt;Ref&lt;RTCDataChannel&gt;&gt; RTCPeerConnection::createDataChannel(ScriptExecutionContext&amp; context, String&amp;&amp; label, RTCDataChannelInit&amp;&amp; options)
</ins><span class="cx"> {
</span><span class="cx">     if (m_signalingState == SignalingState::Closed)
</span><span class="cx">         return Exception { INVALID_STATE_ERR };
</span><span class="cx"> 
</span><del>-    return nullptr;
</del><ins>+    // FIXME: Check options
+    auto channelHandler = m_backend-&gt;createDataChannelHandler(label, options);
+    if (!channelHandler)
+        return Exception { NOT_SUPPORTED_ERR };
+
+    return RTCDataChannel::create(context, WTFMove(channelHandler), WTFMove(label), WTFMove(options));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void RTCPeerConnection::close()
</span></span></pre></div>
<a id="trunkSourceWebCoreModulesmediastreamRTCPeerConnectionh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/mediastream/RTCPeerConnection.h (208693 => 208694)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/mediastream/RTCPeerConnection.h        2016-11-14 18:40:26 UTC (rev 208693)
+++ trunk/Source/WebCore/Modules/mediastream/RTCPeerConnection.h        2016-11-14 18:52:09 UTC (rev 208694)
</span><span class="lines">@@ -38,6 +38,7 @@
</span><span class="cx"> #include &quot;Dictionary.h&quot;
</span><span class="cx"> #include &quot;EventTarget.h&quot;
</span><span class="cx"> #include &quot;MediaStream.h&quot;
</span><ins>+#include &quot;RTCDataChannel.h&quot;
</ins><span class="cx"> #include &quot;RTCOfferAnswerOptions.h&quot;
</span><span class="cx"> #include &quot;RTCRtpTransceiver.h&quot;
</span><span class="cx"> #include &quot;ScriptWrappable.h&quot;
</span><span class="lines">@@ -49,7 +50,6 @@
</span><span class="cx"> class MediaStreamTrack;
</span><span class="cx"> class PeerConnectionBackend;
</span><span class="cx"> class RTCConfiguration;
</span><del>-class RTCDataChannel;
</del><span class="cx"> class RTCIceCandidate;
</span><span class="cx"> class RTCPeerConnectionErrorCallback;
</span><span class="cx"> class RTCSessionDescription;
</span><span class="lines">@@ -60,9 +60,10 @@
</span><span class="cx">     static Ref&lt;RTCPeerConnection&gt; create(ScriptExecutionContext&amp;);
</span><span class="cx">     ~RTCPeerConnection();
</span><span class="cx"> 
</span><ins>+    using AnswerOptions = RTCAnswerOptions;
+    using DataChannelInit = RTCDataChannelInit;
</ins><span class="cx">     using OfferAnswerOptions = RTCOfferAnswerOptions;
</span><span class="cx">     using OfferOptions = RTCOfferOptions;
</span><del>-    using AnswerOptions = RTCAnswerOptions;
</del><span class="cx"> 
</span><span class="cx">     ExceptionOr&lt;void&gt; initializeWith(Document&amp;, const Dictionary&amp;);
</span><span class="cx"> 
</span><span class="lines">@@ -111,7 +112,7 @@
</span><span class="cx"> 
</span><span class="cx">     void privateGetStats(MediaStreamTrack*, PeerConnection::StatsPromise&amp;&amp;);
</span><span class="cx"> 
</span><del>-    ExceptionOr&lt;RefPtr&lt;RTCDataChannel&gt;&gt; createDataChannel(const String&amp; label, const Dictionary&amp; dataChannelDict);
</del><ins>+    ExceptionOr&lt;Ref&lt;RTCDataChannel&gt;&gt; createDataChannel(ScriptExecutionContext&amp;, String&amp;&amp;, RTCDataChannelInit&amp;&amp;);
</ins><span class="cx"> 
</span><span class="cx">     void close();
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoreModulesmediastreamRTCPeerConnectionidl"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/mediastream/RTCPeerConnection.idl (208693 => 208694)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/mediastream/RTCPeerConnection.idl        2016-11-14 18:40:26 UTC (rev 208693)
+++ trunk/Source/WebCore/Modules/mediastream/RTCPeerConnection.idl        2016-11-14 18:52:09 UTC (rev 208694)
</span><span class="lines">@@ -41,6 +41,15 @@
</span><span class="cx"> dictionary RTCAnswerOptions : RTCOfferAnswerOptions {
</span><span class="cx"> };
</span><span class="cx"> 
</span><ins>+dictionary RTCDataChannelInit {
+    boolean ordered = true;
+    unsigned short maxRetransmitTime;
+    unsigned short maxRetransmits;
+    USVString protocol = &quot;&quot;;
+    boolean negotiated = false;
+    unsigned short id;
+};
+
</ins><span class="cx"> [
</span><span class="cx">     ActiveDOMObject,
</span><span class="cx">     Conditional=WEB_RTC,
</span><span class="lines">@@ -125,7 +134,7 @@
</span><span class="cx">     [PrivateIdentifier] Promise&lt;void&gt; queuedAddIceCandidate(RTCIceCandidate candidate);
</span><span class="cx">     [PrivateIdentifier] Promise&lt;RTCStatsReport&gt; privateGetStats(MediaStreamTrack? selector);
</span><span class="cx"> 
</span><del>-    [MayThrowException] RTCDataChannel createDataChannel([TreatNullAs=EmptyString] DOMString label, optional Dictionary options);
</del><ins>+    [CallWith=ScriptExecutionContext, MayThrowException] RTCDataChannel createDataChannel([TreatNullAs=EmptyString] DOMString label, optional RTCDataChannelInit options);
</ins><span class="cx"> 
</span><span class="cx">     void close();
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformmediastreamMediaEndpointcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/mediastream/MediaEndpoint.cpp (208693 => 208694)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/mediastream/MediaEndpoint.cpp        2016-11-14 18:40:26 UTC (rev 208693)
+++ trunk/Source/WebCore/platform/mediastream/MediaEndpoint.cpp        2016-11-14 18:52:09 UTC (rev 208694)
</span><span class="lines">@@ -34,6 +34,7 @@
</span><span class="cx"> #include &quot;MediaEndpoint.h&quot;
</span><span class="cx"> 
</span><span class="cx"> #include &quot;MediaPayload.h&quot;
</span><ins>+#include &quot;RTCDataChannelHandler.h&quot;
</ins><span class="cx"> #include &quot;RealtimeMediaSource.h&quot;
</span><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="lines">@@ -42,43 +43,40 @@
</span><span class="cx"> public:
</span><span class="cx">     static Ref&lt;EmptyRealtimeMediaSource&gt; create() { return adoptRef(*new EmptyRealtimeMediaSource()); }
</span><span class="cx"> 
</span><ins>+private:
+    EmptyRealtimeMediaSource() : RealtimeMediaSource(emptyString(), RealtimeMediaSource::None, emptyString()) { }
+
</ins><span class="cx">     RefPtr&lt;RealtimeMediaSourceCapabilities&gt; capabilities() const final { return nullptr; }
</span><span class="cx">     const RealtimeMediaSourceSettings&amp; settings() const final { return m_sourceSettings; }
</span><span class="cx"> 
</span><del>-private:
-    EmptyRealtimeMediaSource()
-        : RealtimeMediaSource(emptyString(), RealtimeMediaSource::None, emptyString())
-        { }
-
</del><span class="cx">     RealtimeMediaSourceSettings m_sourceSettings;
</span><span class="cx"> };
</span><span class="cx"> 
</span><del>-class EmptyMediaEndpoint : public MediaEndpoint {
-public:
-    EmptyMediaEndpoint(MediaEndpointClient&amp;) { }
</del><ins>+class EmptyMediaEndpoint final : public MediaEndpoint {
+private:
+    void setConfiguration(MediaEndpointConfiguration&amp;&amp;) final { }
</ins><span class="cx"> 
</span><del>-    void setConfiguration(MediaEndpointConfiguration&amp;&amp;) override { }
</del><ins>+    void generateDtlsInfo() final { }
+    MediaPayloadVector getDefaultAudioPayloads() final { return MediaPayloadVector(); }
+    MediaPayloadVector getDefaultVideoPayloads() final { return MediaPayloadVector(); }
+    MediaPayloadVector filterPayloads(const MediaPayloadVector&amp;, const MediaPayloadVector&amp;) final { return MediaPayloadVector(); }
</ins><span class="cx"> 
</span><del>-    void generateDtlsInfo() override { }
-    MediaPayloadVector getDefaultAudioPayloads() override { return MediaPayloadVector(); }
-    MediaPayloadVector getDefaultVideoPayloads() override { return MediaPayloadVector(); }
-    MediaPayloadVector filterPayloads(const MediaPayloadVector&amp;, const MediaPayloadVector&amp;) override { return MediaPayloadVector(); }
</del><ins>+    UpdateResult updateReceiveConfiguration(MediaEndpointSessionConfiguration*, bool) final { return UpdateResult::Failed; }
+    UpdateResult updateSendConfiguration(MediaEndpointSessionConfiguration*, const RealtimeMediaSourceMap&amp;, bool) final { return UpdateResult::Failed; }
</ins><span class="cx"> 
</span><del>-    UpdateResult updateReceiveConfiguration(MediaEndpointSessionConfiguration*, bool) override { return UpdateResult::Failed; }
-    UpdateResult updateSendConfiguration(MediaEndpointSessionConfiguration*, const RealtimeMediaSourceMap&amp;, bool) override { return UpdateResult::Failed; }
</del><ins>+    void addRemoteCandidate(const IceCandidate&amp;, const String&amp;, const String&amp;, const String&amp;) final { }
</ins><span class="cx"> 
</span><del>-    void addRemoteCandidate(const IceCandidate&amp;, const String&amp;, const String&amp;, const String&amp;) override { }
</del><ins>+    Ref&lt;RealtimeMediaSource&gt; createMutedRemoteSource(const String&amp;, RealtimeMediaSource::Type) final { return EmptyRealtimeMediaSource::create(); }
+    void replaceSendSource(RealtimeMediaSource&amp;, const String&amp;) final { }
+    void replaceMutedRemoteSourceMid(const String&amp;, const String&amp;) final { };
</ins><span class="cx"> 
</span><del>-    Ref&lt;RealtimeMediaSource&gt; createMutedRemoteSource(const String&amp;, RealtimeMediaSource::Type) override { return EmptyRealtimeMediaSource::create(); }
-    void replaceSendSource(RealtimeMediaSource&amp;, const String&amp;) override { }
-    void replaceMutedRemoteSourceMid(const String&amp;, const String&amp;) override { };
-
-    void stop() override { }
</del><ins>+    std::unique_ptr&lt;RTCDataChannelHandler&gt; createDataChannelHandler(const String&amp;, const RTCDataChannelInit&amp;) final { return nullptr; }
+    void stop() final { }
</ins><span class="cx"> };
</span><span class="cx"> 
</span><del>-static std::unique_ptr&lt;MediaEndpoint&gt; createMediaEndpoint(MediaEndpointClient&amp; client)
</del><ins>+static std::unique_ptr&lt;MediaEndpoint&gt; createMediaEndpoint(MediaEndpointClient&amp;)
</ins><span class="cx"> {
</span><del>-    return std::make_unique&lt;EmptyMediaEndpoint&gt;(client);
</del><ins>+    return std::make_unique&lt;EmptyMediaEndpoint&gt;();
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> CreateMediaEndpoint MediaEndpoint::create = createMediaEndpoint;
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformmediastreamMediaEndpointh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/mediastream/MediaEndpoint.h (208693 => 208694)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/mediastream/MediaEndpoint.h        2016-11-14 18:40:26 UTC (rev 208693)
+++ trunk/Source/WebCore/platform/mediastream/MediaEndpoint.h        2016-11-14 18:52:09 UTC (rev 208694)
</span><span class="lines">@@ -39,13 +39,16 @@
</span><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><del>-struct IceCandidate;
</del><span class="cx"> class MediaEndpoint;
</span><span class="cx"> class MediaEndpointClient;
</span><span class="cx"> class MediaEndpointSessionConfiguration;
</span><del>-struct MediaPayload;
</del><ins>+class RTCDataChannelHandler;
</ins><span class="cx"> class RealtimeMediaSource;
</span><span class="cx"> 
</span><ins>+struct IceCandidate;
+struct MediaPayload;
+struct RTCDataChannelInit;
+
</ins><span class="cx"> typedef std::unique_ptr&lt;MediaEndpoint&gt; (*CreateMediaEndpoint)(MediaEndpointClient&amp;);
</span><span class="cx"> typedef Vector&lt;MediaPayload&gt; MediaPayloadVector;
</span><span class="cx"> typedef HashMap&lt;String, RealtimeMediaSource*&gt; RealtimeMediaSourceMap;
</span><span class="lines">@@ -79,6 +82,8 @@
</span><span class="cx">     virtual void replaceSendSource(RealtimeMediaSource&amp;, const String&amp; mid) = 0;
</span><span class="cx">     virtual void replaceMutedRemoteSourceMid(const String&amp; oldMid, const String&amp; newMid) = 0;
</span><span class="cx"> 
</span><ins>+    virtual std::unique_ptr&lt;RTCDataChannelHandler&gt; createDataChannelHandler(const String&amp;, const RTCDataChannelInit&amp;) = 0;
+
</ins><span class="cx">     virtual void stop() = 0;
</span><span class="cx"> 
</span><span class="cx">     virtual void emulatePlatformEvent(const String&amp;) { };
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformmediastreamRTCDataChannelHandlerh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/mediastream/RTCDataChannelHandler.h (208693 => 208694)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/mediastream/RTCDataChannelHandler.h        2016-11-14 18:40:26 UTC (rev 208693)
+++ trunk/Source/WebCore/platform/mediastream/RTCDataChannelHandler.h        2016-11-14 18:52:09 UTC (rev 208694)
</span><span class="lines">@@ -22,8 +22,7 @@
</span><span class="cx">  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
</span><span class="cx">  */
</span><span class="cx"> 
</span><del>-#ifndef RTCDataChannelHandler_h
-#define RTCDataChannelHandler_h
</del><ins>+#pragma once
</ins><span class="cx"> 
</span><span class="cx"> #if ENABLE(WEB_RTC)
</span><span class="cx"> 
</span><span class="lines">@@ -31,6 +30,15 @@
</span><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><ins>+struct RTCDataChannelInit {
+    bool ordered { true };
+    int maxRetransmitTime { -1 };
+    int maxRetransmits { -1 };
+    String protocol;
+    bool negotiated { false };
+    int id { -1 };
+};
+
</ins><span class="cx"> class RTCDataChannelHandlerClient;
</span><span class="cx"> 
</span><span class="cx"> class RTCDataChannelHandler {
</span><span class="lines">@@ -39,15 +47,6 @@
</span><span class="cx"> 
</span><span class="cx">     virtual void setClient(RTCDataChannelHandlerClient*) = 0;
</span><span class="cx"> 
</span><del>-    virtual String label() = 0;
-    virtual bool ordered() = 0;
-    virtual unsigned short maxRetransmitTime() = 0;
-    virtual unsigned short maxRetransmits() = 0;
-    virtual String protocol() = 0;
-    virtual bool negotiated() = 0;
-    virtual unsigned short id() = 0;
-    virtual unsigned long bufferedAmount() = 0;
-
</del><span class="cx">     virtual bool sendStringData(const String&amp;) = 0;
</span><span class="cx">     virtual bool sendRawData(const char*, size_t) = 0;
</span><span class="cx">     virtual void close() = 0;
</span><span class="lines">@@ -56,5 +55,3 @@
</span><span class="cx"> } // namespace WebCore
</span><span class="cx"> 
</span><span class="cx"> #endif // ENABLE(WEB_RTC)
</span><del>-
-#endif // RTCDataChannelHandler_h
</del></span></pre></div>
<a id="trunkSourceWebCoreplatformmediastreamRTCDataChannelHandlerClienth"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/mediastream/RTCDataChannelHandlerClient.h (208693 => 208694)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/mediastream/RTCDataChannelHandlerClient.h        2016-11-14 18:40:26 UTC (rev 208693)
+++ trunk/Source/WebCore/platform/mediastream/RTCDataChannelHandlerClient.h        2016-11-14 18:52:09 UTC (rev 208694)
</span><span class="lines">@@ -46,6 +46,9 @@
</span><span class="cx">     virtual void didReceiveStringData(const String&amp;) = 0;
</span><span class="cx">     virtual void didReceiveRawData(const char*, size_t) = 0;
</span><span class="cx">     virtual void didDetectError() = 0;
</span><ins>+
+    virtual void protect() = 0;
+    virtual void unprotect() = 0;
</ins><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> } // namespace WebCore
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformmediastreamRTCPeerConnectionHandlerh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/mediastream/RTCPeerConnectionHandler.h (208693 => 208694)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/mediastream/RTCPeerConnectionHandler.h        2016-11-14 18:40:26 UTC (rev 208693)
+++ trunk/Source/WebCore/platform/mediastream/RTCPeerConnectionHandler.h        2016-11-14 18:52:09 UTC (rev 208694)
</span><span class="lines">@@ -53,21 +53,7 @@
</span><span class="cx"> class RTCStatsRequest;
</span><span class="cx"> class RTCVoidRequest;
</span><span class="cx"> 
</span><del>-struct RTCDataChannelInit {
-public:
-    RTCDataChannelInit()
-        : ordered(true)
-        , maxRetransmitTime(-1)
-        , maxRetransmits(-1)
-        , negotiated(false)
-        , id(-1) { }
-    bool ordered;
-    int maxRetransmitTime;
-    int maxRetransmits;
-    String protocol;
-    bool negotiated;
-    int id;
-};
</del><ins>+struct RTCDataChannelInit;
</ins><span class="cx"> 
</span><span class="cx"> typedef std::unique_ptr&lt;RTCPeerConnectionHandler&gt; (*CreatePeerConnectionHandler)(RTCPeerConnectionHandlerClient*);
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformmediastreamopenwebrtcMediaEndpointOwrcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/mediastream/openwebrtc/MediaEndpointOwr.cpp (208693 => 208694)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/mediastream/openwebrtc/MediaEndpointOwr.cpp        2016-11-14 18:40:26 UTC (rev 208693)
+++ trunk/Source/WebCore/platform/mediastream/openwebrtc/MediaEndpointOwr.cpp        2016-11-14 18:52:09 UTC (rev 208694)
</span><span class="lines">@@ -37,6 +37,7 @@
</span><span class="cx"> #include &quot;MediaPayload.h&quot;
</span><span class="cx"> #include &quot;NotImplemented.h&quot;
</span><span class="cx"> #include &quot;OpenWebRTCUtilities.h&quot;
</span><ins>+#include &quot;RTCDataChannelHandler.h&quot;
</ins><span class="cx"> #include &quot;RealtimeMediaSourceOwr.h&quot;
</span><span class="cx"> #include &lt;owr/owr.h&gt;
</span><span class="cx"> #include &lt;owr/owr_audio_payload.h&gt;
</span><span class="lines">@@ -94,6 +95,13 @@
</span><span class="cx">     m_configuration = WTFMove(configuration);
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+std::unique_ptr&lt;RTCDataChannelHandler&gt; MediaEndpointOwr::createDataChannelHandler(const String&amp;, const RTCDataChannelInit&amp;)
+{
+    // FIXME: Implement data channel.
+    ASSERT_NOT_REACHED();
+    return nullptr;
+}
+
</ins><span class="cx"> static void cryptoDataCallback(gchar* privateKey, gchar* certificate, gchar* fingerprint, gchar* fingerprintFunction, gpointer data)
</span><span class="cx"> {
</span><span class="cx">     MediaEndpointOwr* mediaEndpoint = (MediaEndpointOwr*) data;
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformmediastreamopenwebrtcMediaEndpointOwrh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/mediastream/openwebrtc/MediaEndpointOwr.h (208693 => 208694)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/mediastream/openwebrtc/MediaEndpointOwr.h        2016-11-14 18:40:26 UTC (rev 208693)
+++ trunk/Source/WebCore/platform/mediastream/openwebrtc/MediaEndpointOwr.h        2016-11-14 18:52:09 UTC (rev 208694)
</span><span class="lines">@@ -120,6 +120,8 @@
</span><span class="cx">         String mid;
</span><span class="cx">     };
</span><span class="cx"> 
</span><ins>+    std::unique_ptr&lt;RTCDataChannelHandler&gt; createDataChannelHandler(const String&amp;, const RTCDataChannelInit&amp;) final;
+
</ins><span class="cx">     void prepareSession(OwrSession*, PeerMediaDescription*);
</span><span class="cx">     void prepareMediaSession(OwrMediaSession*, PeerMediaDescription*, bool isInitiator);
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformmockMockMediaEndpointcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/mock/MockMediaEndpoint.cpp (208693 => 208694)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/mock/MockMediaEndpoint.cpp        2016-11-14 18:40:26 UTC (rev 208693)
+++ trunk/Source/WebCore/platform/mock/MockMediaEndpoint.cpp        2016-11-14 18:52:09 UTC (rev 208694)
</span><span class="lines">@@ -37,6 +37,7 @@
</span><span class="cx"> #include &quot;MediaPayload.h&quot;
</span><span class="cx"> #include &quot;MockRealtimeAudioSource.h&quot;
</span><span class="cx"> #include &quot;MockRealtimeVideoSource.h&quot;
</span><ins>+#include &quot;RTCDataChannelHandlerMock.h&quot;
</ins><span class="cx"> #include &quot;RealtimeMediaSource.h&quot;
</span><span class="cx"> #include &lt;wtf/MainThread.h&gt;
</span><span class="cx"> 
</span><span class="lines">@@ -63,6 +64,11 @@
</span><span class="cx">     stop();
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+std::unique_ptr&lt;RTCDataChannelHandler&gt; MockMediaEndpoint::createDataChannelHandler(const String&amp; label, const RTCDataChannelInit&amp; options)
+{
+    return std::make_unique&lt;RTCDataChannelHandlerMock&gt;(label, options);
+}
+
</ins><span class="cx"> void MockMediaEndpoint::generateDtlsInfo()
</span><span class="cx"> {
</span><span class="cx">     callOnMainThread([this]() {
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformmockMockMediaEndpointh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/mock/MockMediaEndpoint.h (208693 => 208694)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/mock/MockMediaEndpoint.h        2016-11-14 18:40:26 UTC (rev 208693)
+++ trunk/Source/WebCore/platform/mock/MockMediaEndpoint.h        2016-11-14 18:52:09 UTC (rev 208694)
</span><span class="lines">@@ -68,6 +68,8 @@
</span><span class="cx"> private:
</span><span class="cx">     void updateConfigurationMids(const MediaEndpointSessionConfiguration&amp;);
</span><span class="cx"> 
</span><ins>+    std::unique_ptr&lt;RTCDataChannelHandler&gt; createDataChannelHandler(const String&amp;, const RTCDataChannelInit&amp;) final;
+
</ins><span class="cx">     void dispatchFakeIceCandidates();
</span><span class="cx">     void iceCandidateTimerFired();
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformmockRTCDataChannelHandlerMockcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/mock/RTCDataChannelHandlerMock.cpp (208693 => 208694)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/mock/RTCDataChannelHandlerMock.cpp        2016-11-14 18:40:26 UTC (rev 208693)
+++ trunk/Source/WebCore/platform/mock/RTCDataChannelHandlerMock.cpp        2016-11-14 18:52:09 UTC (rev 208694)
</span><span class="lines">@@ -37,11 +37,6 @@
</span><span class="cx"> RTCDataChannelHandlerMock::RTCDataChannelHandlerMock(const String&amp; label, const RTCDataChannelInit&amp; init)
</span><span class="cx">     : m_label(label)
</span><span class="cx">     , m_protocol(init.protocol)
</span><del>-    , m_maxRetransmitTime(init.maxRetransmitTime)
-    , m_maxRetransmits(init.maxRetransmits)
-    , m_id(init.id)
-    , m_ordered(init.ordered)
-    , m_negotiated(init.negotiated)
</del><span class="cx"> {
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformmockRTCDataChannelHandlerMockh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/mock/RTCDataChannelHandlerMock.h (208693 => 208694)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/mock/RTCDataChannelHandlerMock.h        2016-11-14 18:40:26 UTC (rev 208693)
+++ trunk/Source/WebCore/platform/mock/RTCDataChannelHandlerMock.h        2016-11-14 18:52:09 UTC (rev 208694)
</span><span class="lines">@@ -41,15 +41,6 @@
</span><span class="cx"> 
</span><span class="cx">     void setClient(RTCDataChannelHandlerClient*) override;
</span><span class="cx"> 
</span><del>-    String label() override { return m_label; }
-    bool ordered() override { return m_ordered; }
-    unsigned short maxRetransmitTime() override { return m_maxRetransmitTime; }
-    unsigned short maxRetransmits() override { return m_maxRetransmits; }
-    String protocol() override { return m_protocol; }
-    bool negotiated() override { return m_negotiated; }
-    unsigned short id() override { return m_id; }
-    unsigned long bufferedAmount() override { return 0; }
-
</del><span class="cx">     bool sendStringData(const String&amp;) override;
</span><span class="cx">     bool sendRawData(const char*, size_t) override;
</span><span class="cx">     void close() override;
</span><span class="lines">@@ -59,11 +50,6 @@
</span><span class="cx"> 
</span><span class="cx">     String m_label;
</span><span class="cx">     String m_protocol;
</span><del>-    unsigned short m_maxRetransmitTime;
-    unsigned short m_maxRetransmits;
-    unsigned short m_id;
-    bool m_ordered;
-    bool m_negotiated;
</del><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> } // namespace WebCore
</span></span></pre>
</div>
</div>

</body>
</html>