<!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>[209695] 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/209695">209695</a></dd>
<dt>Author</dt> <dd>darin@apple.com</dd>
<dt>Date</dt> <dd>2016-12-11 18:50:06 -0800 (Sun, 11 Dec 2016)</dd>
</dl>

<h3>Log Message</h3>
<pre>Remove uses of Dictionary in WebRTC IDL files
https://bugs.webkit.org/show_bug.cgi?id=165736

Reviewed by Sam Weinig.

Source/WebCore:

Also removed quite a bit of unused code. There were some mocks that were out of date and
no longer matched the types used in the real code, that also were no longer hooked up,
and other types of dead code. We will have to implement anew when we want to restore tests
like the ones these were intended to enable.

* CMakeLists.txt: Updated for all the removed files.

* Modules/mediastream/MediaEndpointPeerConnection.cpp: Moved some types in here
that don't need to be in the header.
(WebCore::MediaEndpointPeerConnection::MediaEndpointPeerConnection): Use make_unique.
(WebCore::MediaEndpointPeerConnection::setConfiguration): Changed argument type,
obviating the need for most of the code that was here.
* Modules/mediastream/MediaEndpointPeerConnection.h: Updated for the above. Made more
things private and final. Marked the constructor explicit. Removed unneeded includes.

* Modules/mediastream/PeerConnectionBackend.h: Removed unneeded includes and forward
declarations. Changed the argument type for setConfiguration (see above).

* Modules/mediastream/RTCConfiguration.cpp: Removed.
None of the code here was needed except for the ICE server validation, and that was
moved into RTCPeerConnection::setConfiguration.
* Modules/mediastream/RTCConfiguration.h: Changed this from a class to a struct since
this is now a dictionary rather than an interface.
* Modules/mediastream/RTCConfiguration.idl: Changed this from an interface to a dictionary.

* Modules/mediastream/RTCDTMFSender.cpp: Removed some of the code from this file. This
class currently isn't implemented, but was depending on RTCPeerConnectionHandler. I removed
some of the dead code. Someone will have to straighten this out so we can turn it back on.
* Modules/mediastream/RTCDTMFSender.h: Ditto.

* Modules/mediastream/RTCDataChannel.cpp: Updated includes.

* Modules/mediastream/RTCIceCandidate.cpp:
(WebCore::RTCIceCandidate::create): Removed most of the code, since this now takes
a structure rather than a WebCore::Dictionary, and so the bindings take care of the work.
* Modules/mediastream/RTCIceCandidate.h: Updated for the above.
* Modules/mediastream/RTCIceCandidate.idl: Changed the constructor to take a
RTCIceCandidateInit instead of a Dictionary.

* Modules/mediastream/RTCIceServer.h: Changed this from a class to a struct since
this is now a dictionary rather than an interface.
* Modules/mediastream/RTCIceServer.idl: Changed this from an interface to a dictionary.

* Modules/mediastream/RTCPeerConnection.cpp:
(WebCore::RTCPeerConnection::initializeWith): Take an RTCConfiguration rather than
a Dictionary.
(WebCore::RTCPeerConnection::getConfiguration): Moved to header, now an inline.
(WebCore::RTCPeerConnection::setConfiguration): Use the configuration dictionary now instead
of the configuration class. Also moved validation of server URLs here, formerly in the
RTCConfiguration RTCConfiguration::initialize function. Also moved code to convert from
RTCConfiguration to MediaEndpointConfiguration here, formerly in
MediaEndpointPeerConnection::setConfiguration.
* Modules/mediastream/RTCPeerConnection.h: Updated for the above.
* Modules/mediastream/RTCPeerConnection.idl: Changed argument to initializeWith and
setConfiguration from Dictionary to RTCConfiguration.

* Modules/mediastream/RTCSessionDescription.cpp:
(WebCore::parseTypeString): Deleted.
(WebCore::RTCSessionDescription::create): Changed to take struct instead of Dictionary.
* Modules/mediastream/RTCSessionDescription.h: Added Init struct and changed create to
take it.
* Modules/mediastream/RTCSessionDescription.idl: Changed constructor argument to take
RTCSessionDescriptionInit dictionary instead of Dictionary.

* Modules/webaudio/MediaStreamAudioDestinationNode.cpp: Updated includes.

* WebCore.xcodeproj/project.pbxproj: Updated for all the removed files.

* bindings/scripts/CodeGeneratorJS.pm:
(GenerateDictionaryImplementationContent): Fixed convertDictionaryToJS to work with other
nullable types besides RefPtr.
* bindings/scripts/test/JS/JSTestObj.cpp: Regenerated.

* platform/mediastream/RTCConfigurationPrivate.h: Removed.
* platform/mediastream/RTCIceServerPrivate.h: Removed.
* platform/mediastream/RTCPeerConnectionHandler.cpp: Removed.
* platform/mediastream/RTCPeerConnectionHandler.h: Removed.
* platform/mock/RTCDTMFSenderHandlerMock.cpp: Removed.
* platform/mock/RTCDTMFSenderHandlerMock.h: Removed.

* platform/mock/RTCDataChannelHandlerMock.h: Updated includes, made more things private and final.

* platform/mock/RTCPeerConnectionHandlerMock.cpp: Removed.
* platform/mock/RTCPeerConnectionHandlerMock.h: Removed.

* testing/Internals.cpp:
(WebCore::Internals::Internals): Removed call to enableMockRTCPeerConnectionHandler.
(WebCore::Internals::enableMockRTCPeerConnectionHandler): Deleted.

LayoutTests:

* fast/mediastream/RTCIceCandidate-expected.txt: Regenerated; no new failures.
* fast/mediastream/RTCIceCandidate.html: Updated test to expect the WebIDL rules for parsing
unsigned short for sdpMLineIndex. The old code expected additional range checking which is
not expected behavior.

* fast/mediastream/RTCPeerConnection-expected.txt: Regenerated; no new failures.
* fast/mediastream/RTCPeerConnection.html: Updated test to not expect an exception when
iceServers is entirely omitted or when it is an empty array. This is a progression and is
closer to the specification.

* fast/mediastream/RTCPeerConnection-getConfiguration-expected.txt: Regenerated; no new failures.
* fast/mediastream/RTCPeerConnection-getConfiguration.html: Updated test to expect the username
and credential fields to round trip as missing rather than turning from missing into empty strings.
Also updated the tests to pass in sequences of strings for &quot;urls&quot; since they expect sequences on
the way back out. We could also test round tripping of single strings, which should go in and come
back out as individual strings, but for now I did not bother adding that to this test.

* fast/mediastream/RTCSessionDescription-expected.txt: Regenerated; some exception messages are
now more specific than they were before.

* imported/w3c/web-platform-tests/webrtc/rtcpeerconnection/rtcpeerconnection-constructor-expected.txt:
Updated expected results. The new code correctly allows callers of the RTCPeerConnection constructor
to omit iceServers, pass undefined, or pass an empty array, as specified. Thuis change leads to
a couple tests that now correctly pass instead of failing. And it also leads to some other tests
failing that were passing before. These were passing because they expected an exception for some
other reason, however the exception was actually occurring because of incorrect handling of iceServers.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsChangeLog">trunk/LayoutTests/ChangeLog</a></li>
<li><a href="#trunkLayoutTestsfastmediastreamRTCIceCandidateexpectedtxt">trunk/LayoutTests/fast/mediastream/RTCIceCandidate-expected.txt</a></li>
<li><a href="#trunkLayoutTestsfastmediastreamRTCIceCandidatehtml">trunk/LayoutTests/fast/mediastream/RTCIceCandidate.html</a></li>
<li><a href="#trunkLayoutTestsfastmediastreamRTCPeerConnectionexpectedtxt">trunk/LayoutTests/fast/mediastream/RTCPeerConnection-expected.txt</a></li>
<li><a href="#trunkLayoutTestsfastmediastreamRTCPeerConnectiongetConfigurationexpectedtxt">trunk/LayoutTests/fast/mediastream/RTCPeerConnection-getConfiguration-expected.txt</a></li>
<li><a href="#trunkLayoutTestsfastmediastreamRTCPeerConnectiongetConfigurationhtml">trunk/LayoutTests/fast/mediastream/RTCPeerConnection-getConfiguration.html</a></li>
<li><a href="#trunkLayoutTestsfastmediastreamRTCPeerConnectionhtml">trunk/LayoutTests/fast/mediastream/RTCPeerConnection.html</a></li>
<li><a href="#trunkLayoutTestsfastmediastreamRTCSessionDescriptionexpectedtxt">trunk/LayoutTests/fast/mediastream/RTCSessionDescription-expected.txt</a></li>
<li><a href="#trunkLayoutTestsimportedw3cwebplatformtestswebrtcrtcpeerconnectionrtcpeerconnectionconstructorexpectedtxt">trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc/rtcpeerconnection/rtcpeerconnection-constructor-expected.txt</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="#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="#trunkSourceWebCoreModulesmediastreamRTCConfigurationh">trunk/Source/WebCore/Modules/mediastream/RTCConfiguration.h</a></li>
<li><a href="#trunkSourceWebCoreModulesmediastreamRTCConfigurationidl">trunk/Source/WebCore/Modules/mediastream/RTCConfiguration.idl</a></li>
<li><a href="#trunkSourceWebCoreModulesmediastreamRTCDTMFSendercpp">trunk/Source/WebCore/Modules/mediastream/RTCDTMFSender.cpp</a></li>
<li><a href="#trunkSourceWebCoreModulesmediastreamRTCDTMFSenderh">trunk/Source/WebCore/Modules/mediastream/RTCDTMFSender.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="#trunkSourceWebCoreModulesmediastreamRTCIceCandidatecpp">trunk/Source/WebCore/Modules/mediastream/RTCIceCandidate.cpp</a></li>
<li><a href="#trunkSourceWebCoreModulesmediastreamRTCIceCandidateh">trunk/Source/WebCore/Modules/mediastream/RTCIceCandidate.h</a></li>
<li><a href="#trunkSourceWebCoreModulesmediastreamRTCIceCandidateidl">trunk/Source/WebCore/Modules/mediastream/RTCIceCandidate.idl</a></li>
<li><a href="#trunkSourceWebCoreModulesmediastreamRTCIceServerh">trunk/Source/WebCore/Modules/mediastream/RTCIceServer.h</a></li>
<li><a href="#trunkSourceWebCoreModulesmediastreamRTCIceServeridl">trunk/Source/WebCore/Modules/mediastream/RTCIceServer.idl</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="#trunkSourceWebCoreModulesmediastreamRTCSessionDescriptioncpp">trunk/Source/WebCore/Modules/mediastream/RTCSessionDescription.cpp</a></li>
<li><a href="#trunkSourceWebCoreModulesmediastreamRTCSessionDescriptionh">trunk/Source/WebCore/Modules/mediastream/RTCSessionDescription.h</a></li>
<li><a href="#trunkSourceWebCoreModulesmediastreamRTCSessionDescriptionidl">trunk/Source/WebCore/Modules/mediastream/RTCSessionDescription.idl</a></li>
<li><a href="#trunkSourceWebCoreModuleswebaudioMediaStreamAudioDestinationNodecpp">trunk/Source/WebCore/Modules/webaudio/MediaStreamAudioDestinationNode.cpp</a></li>
<li><a href="#trunkSourceWebCoreWebCorexcodeprojprojectpbxproj">trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptsCodeGeneratorJSpm">trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestObjcpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestObj.cpp</a></li>
<li><a href="#trunkSourceWebCoreplatformmockRTCDataChannelHandlerMockh">trunk/Source/WebCore/platform/mock/RTCDataChannelHandlerMock.h</a></li>
<li><a href="#trunkSourceWebCoretestingInternalscpp">trunk/Source/WebCore/testing/Internals.cpp</a></li>
</ul>

<h3>Removed Paths</h3>
<ul>
<li><a href="#trunkSourceWebCoreModulesmediastreamRTCConfigurationcpp">trunk/Source/WebCore/Modules/mediastream/RTCConfiguration.cpp</a></li>
<li><a href="#trunkSourceWebCoreplatformmediastreamRTCConfigurationPrivateh">trunk/Source/WebCore/platform/mediastream/RTCConfigurationPrivate.h</a></li>
<li><a href="#trunkSourceWebCoreplatformmediastreamRTCIceServerPrivateh">trunk/Source/WebCore/platform/mediastream/RTCIceServerPrivate.h</a></li>
<li><a href="#trunkSourceWebCoreplatformmediastreamRTCPeerConnectionHandlercpp">trunk/Source/WebCore/platform/mediastream/RTCPeerConnectionHandler.cpp</a></li>
<li><a href="#trunkSourceWebCoreplatformmediastreamRTCPeerConnectionHandlerh">trunk/Source/WebCore/platform/mediastream/RTCPeerConnectionHandler.h</a></li>
<li><a href="#trunkSourceWebCoreplatformmockRTCDTMFSenderHandlerMockcpp">trunk/Source/WebCore/platform/mock/RTCDTMFSenderHandlerMock.cpp</a></li>
<li><a href="#trunkSourceWebCoreplatformmockRTCDTMFSenderHandlerMockh">trunk/Source/WebCore/platform/mock/RTCDTMFSenderHandlerMock.h</a></li>
<li><a href="#trunkSourceWebCoreplatformmockRTCPeerConnectionHandlerMockcpp">trunk/Source/WebCore/platform/mock/RTCPeerConnectionHandlerMock.cpp</a></li>
<li><a href="#trunkSourceWebCoreplatformmockRTCPeerConnectionHandlerMockh">trunk/Source/WebCore/platform/mock/RTCPeerConnectionHandlerMock.h</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkLayoutTestsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/ChangeLog (209694 => 209695)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/ChangeLog        2016-12-12 01:41:16 UTC (rev 209694)
+++ trunk/LayoutTests/ChangeLog        2016-12-12 02:50:06 UTC (rev 209695)
</span><span class="lines">@@ -1,3 +1,37 @@
</span><ins>+2016-12-11  Darin Adler  &lt;darin@apple.com&gt;
+
+        Remove uses of Dictionary in WebRTC IDL files
+        https://bugs.webkit.org/show_bug.cgi?id=165736
+
+        Reviewed by Sam Weinig.
+
+        * fast/mediastream/RTCIceCandidate-expected.txt: Regenerated; no new failures.
+        * fast/mediastream/RTCIceCandidate.html: Updated test to expect the WebIDL rules for parsing
+        unsigned short for sdpMLineIndex. The old code expected additional range checking which is
+        not expected behavior.
+
+        * fast/mediastream/RTCPeerConnection-expected.txt: Regenerated; no new failures.
+        * fast/mediastream/RTCPeerConnection.html: Updated test to not expect an exception when
+        iceServers is entirely omitted or when it is an empty array. This is a progression and is
+        closer to the specification.
+
+        * fast/mediastream/RTCPeerConnection-getConfiguration-expected.txt: Regenerated; no new failures.
+        * fast/mediastream/RTCPeerConnection-getConfiguration.html: Updated test to expect the username
+        and credential fields to round trip as missing rather than turning from missing into empty strings.
+        Also updated the tests to pass in sequences of strings for &quot;urls&quot; since they expect sequences on
+        the way back out. We could also test round tripping of single strings, which should go in and come
+        back out as individual strings, but for now I did not bother adding that to this test.
+
+        * fast/mediastream/RTCSessionDescription-expected.txt: Regenerated; some exception messages are
+        now more specific than they were before.
+
+        * imported/w3c/web-platform-tests/webrtc/rtcpeerconnection/rtcpeerconnection-constructor-expected.txt:
+        Updated expected results. The new code correctly allows callers of the RTCPeerConnection constructor
+        to omit iceServers, pass undefined, or pass an empty array, as specified. Thuis change leads to
+        a couple tests that now correctly pass instead of failing. And it also leads to some other tests
+        failing that were passing before. These were passing because they expected an exception for some
+        other reason, however the exception was actually occurring because of incorrect handling of iceServers.
+
</ins><span class="cx"> 2016-12-11  Jiewen Tan  &lt;jiewen_tan@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         [WebCrypto] Add tests for wrap/unwrap SPKI/PKCS8 keys
</span></span></pre></div>
<a id="trunkLayoutTestsfastmediastreamRTCIceCandidateexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/fast/mediastream/RTCIceCandidate-expected.txt (209694 => 209695)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/mediastream/RTCIceCandidate-expected.txt        2016-12-12 01:41:16 UTC (rev 209694)
+++ trunk/LayoutTests/fast/mediastream/RTCIceCandidate-expected.txt        2016-12-12 02:50:06 UTC (rev 209695)
</span><span class="lines">@@ -34,10 +34,10 @@
</span><span class="cx"> Dictionary argument is mandatory.
</span><span class="cx"> PASS new RTCIceCandidate(); threw exception TypeError: Not enough arguments.
</span><span class="cx"> Dictionary member 'candidate' is required.
</span><del>-PASS new RTCIceCandidate({}); threw exception TypeError: Type error.
-PASS new RTCIceCandidate({sdpMid:&quot;bar&quot;, sdpMLineIndex:6}); threw exception TypeError: Type error.
-PASS new RTCIceCandidate({sdpMid:&quot;bar&quot;}); threw exception TypeError: Type error.
-PASS new RTCIceCandidate({sdpMLineIndex:6}); threw exception TypeError: Type error.
</del><ins>+PASS new RTCIceCandidate({}); threw exception TypeError: Member RTCIceCandidateInit.candidate is required and must be an instance of DOMString.
+PASS new RTCIceCandidate({sdpMid:&quot;bar&quot;, sdpMLineIndex:6}); threw exception TypeError: Member RTCIceCandidateInit.candidate is required and must be an instance of DOMString.
+PASS new RTCIceCandidate({sdpMid:&quot;bar&quot;}); threw exception TypeError: Member RTCIceCandidateInit.candidate is required and must be an instance of DOMString.
+PASS new RTCIceCandidate({sdpMLineIndex:6}); threw exception TypeError: Member RTCIceCandidateInit.candidate is required and must be an instance of DOMString.
</ins><span class="cx"> 
</span><span class="cx"> One of the 'sdpMid' or 'sdpMLineIndex' members must be present (and not null or undefined).
</span><span class="cx"> PASS new RTCIceCandidate({candidate:&quot;foo&quot;}); threw exception TypeError: Type error.
</span><span class="lines">@@ -70,10 +70,13 @@
</span><span class="cx"> PASS candidate.sdpMid is null
</span><span class="cx"> PASS candidate.sdpMLineIndex is 6
</span><span class="cx"> 
</span><ins>+Conversion of sdpMLineIndex to unsigned short, following WebIDL rules without [Clamp] or [EnforceRange]
+PASS (new RTCIceCandidate({candidate:&quot;foo&quot;, sdpMLineIndex:&quot;a&quot;})).sdpMLineIndex is 0
+PASS (new RTCIceCandidate({candidate:&quot;foo&quot;, sdpMLineIndex:-1})).sdpMLineIndex is 65535
+PASS (new RTCIceCandidate({candidate:&quot;foo&quot;, sdpMLineIndex:65536})).sdpMLineIndex is 0
+PASS (new RTCIceCandidate({candidate:&quot;foo&quot;, sdpMLineIndex:65537})).sdpMLineIndex is 1
+
</ins><span class="cx"> Some bad input
</span><del>-PASS new RTCIceCandidate({candidate:&quot;foo&quot;, sdpMLineIndex:&quot;a&quot;}); threw exception TypeError: Type error.
-PASS new RTCIceCandidate({candidate:&quot;foo&quot;, sdpMLineIndex:-1}); threw exception TypeError: Type error.
-PASS new RTCIceCandidate({candidate:&quot;foo&quot;, sdpMLineIndex:65536}); threw exception TypeError: Type error.
</del><span class="cx"> PASS new RTCIceCandidate(5); threw exception TypeError: Type error.
</span><span class="cx"> PASS new RTCIceCandidate(&quot;foobar&quot;); threw exception TypeError: Type error.
</span><span class="cx"> PASS new RTCIceCandidate(candidate:&quot;&quot;); threw exception SyntaxError: Unexpected token ':'. Expected ')' to end an argument list..
</span></span></pre></div>
<a id="trunkLayoutTestsfastmediastreamRTCIceCandidatehtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/fast/mediastream/RTCIceCandidate.html (209694 => 209695)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/mediastream/RTCIceCandidate.html        2016-12-12 01:41:16 UTC (rev 209694)
+++ trunk/LayoutTests/fast/mediastream/RTCIceCandidate.html        2016-12-12 02:50:06 UTC (rev 209695)
</span><span class="lines">@@ -98,10 +98,14 @@
</span><span class="cx">             shouldBe('candidate.sdpMLineIndex', '6');
</span><span class="cx">             debug(&quot;&quot;);
</span><span class="cx"> 
</span><ins>+            debug(&quot;Conversion of sdpMLineIndex to unsigned short, following WebIDL rules without [Clamp] or [EnforceRange]&quot;);
+            shouldBe('(new RTCIceCandidate({candidate:&quot;foo&quot;, sdpMLineIndex:&quot;a&quot;})).sdpMLineIndex', '0');
+            shouldBe('(new RTCIceCandidate({candidate:&quot;foo&quot;, sdpMLineIndex:-1})).sdpMLineIndex', '65535');
+            shouldBe('(new RTCIceCandidate({candidate:&quot;foo&quot;, sdpMLineIndex:65536})).sdpMLineIndex', '0');
+            shouldBe('(new RTCIceCandidate({candidate:&quot;foo&quot;, sdpMLineIndex:65537})).sdpMLineIndex', '1');
+            debug(&quot;&quot;);
+
</ins><span class="cx">             debug(&quot;Some bad input&quot;);
</span><del>-            shouldThrow('new RTCIceCandidate({candidate:&quot;foo&quot;, sdpMLineIndex:&quot;a&quot;});');
-            shouldThrow('new RTCIceCandidate({candidate:&quot;foo&quot;, sdpMLineIndex:-1});');
-            shouldThrow('new RTCIceCandidate({candidate:&quot;foo&quot;, sdpMLineIndex:65536});');
</del><span class="cx">             shouldThrow('new RTCIceCandidate(5);');
</span><span class="cx">             shouldThrow('new RTCIceCandidate(&quot;foobar&quot;);');
</span><span class="cx">             shouldThrow('new RTCIceCandidate(candidate:&quot;&quot;);');
</span></span></pre></div>
<a id="trunkLayoutTestsfastmediastreamRTCPeerConnectionexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/fast/mediastream/RTCPeerConnection-expected.txt (209694 => 209695)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/mediastream/RTCPeerConnection-expected.txt        2016-12-12 01:41:16 UTC (rev 209694)
+++ trunk/LayoutTests/fast/mediastream/RTCPeerConnection-expected.txt        2016-12-12 02:50:06 UTC (rev 209695)
</span><span class="lines">@@ -7,8 +7,8 @@
</span><span class="cx"> PASS new RTCPeerConnection(undefined); threw exception TypeError: RTCPeerConnection argument must be a valid Dictionary.
</span><span class="cx"> PASS new RTCPeerConnection(); threw exception TypeError: Not enough arguments.
</span><span class="cx"> PASS new RTCPeerConnection(''); threw exception TypeError: RTCPeerConnection argument must be a valid Dictionary.
</span><del>-PASS new RTCPeerConnection({}); threw exception TypeError: Invalid RTCPeerConnection constructor arguments.
-PASS new RTCPeerConnection({iceServers:[]}); threw exception TypeError: Error creating RTCPeerConnection.
</del><ins>+PASS new RTCPeerConnection({}); did not throw exception.
+PASS new RTCPeerConnection({iceServers:[]}); did not throw exception.
</ins><span class="cx"> PASS new RTCPeerConnection({iceServers:[{url:'stun:foo.com'}]}); threw exception TypeError: Error creating RTCPeerConnection.
</span><span class="cx"> PASS new RTCPeerConnection({iceServers:[{urls:'http:foo.com'}]}); threw exception TypeError: Error creating RTCPeerConnection.
</span><span class="cx"> PASS new RTCPeerConnection({iceServers:[{urls:'stun:foo.com'}]}); did not throw exception.
</span><span class="lines">@@ -43,9 +43,9 @@
</span><span class="cx"> PASS new RTCPeerConnection({iceServers:[{urls:'stun:foo.com', username:'user'}], iceTransports:'all', requestIdentity:'ifconfigured'}); did not throw exception.
</span><span class="cx"> PASS new RTCPeerConnection({iceServers:[{urls:'turn:foo.com', username:'user', credential:'x'}], iceTransports:'all', requestIdentity:'ifconfigured'}); did not throw exception.
</span><span class="cx"> PASS new RTCPeerConnection({iceServers:[{urls:'turn:foo.com', username:'user', credential:'x'},{urls:'stun:bar.com', username:'user2', credential:'x'}], iceTransports:'all', requestIdentity:'ifconfigured'}); did not throw exception.
</span><del>-PASS new RTCPeerConnection({fooServers:[]}); threw exception TypeError: Invalid RTCPeerConnection constructor arguments.
-PASS new RTCPeerConnection({iceServers:true}); threw exception TypeError: Invalid RTCPeerConnection constructor arguments.
-PASS new RTCPeerConnection({iceServers:[1, 2, 3]}); threw exception TypeError: Invalid RTCPeerConnection constructor arguments.
</del><ins>+PASS new RTCPeerConnection({fooServers:[]}); did not throw exception.
+PASS new RTCPeerConnection({iceServers:true}); threw exception TypeError: Error creating RTCPeerConnection.
+PASS new RTCPeerConnection({iceServers:[1, 2, 3]}); threw exception TypeError: Error creating RTCPeerConnection.
</ins><span class="cx"> PASS new RTCPeerConnection({iceServers:[{}]}); threw exception TypeError: Error creating RTCPeerConnection.
</span><span class="cx"> PASS new RTCPeerConnection({iceServers:[{urls:'foo'}]}); threw exception TypeError: Error creating RTCPeerConnection.
</span><span class="cx"> PASS successfullyParsed is true
</span></span></pre></div>
<a id="trunkLayoutTestsfastmediastreamRTCPeerConnectiongetConfigurationexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/fast/mediastream/RTCPeerConnection-getConfiguration-expected.txt (209694 => 209695)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/mediastream/RTCPeerConnection-getConfiguration-expected.txt        2016-12-12 01:41:16 UTC (rev 209694)
+++ trunk/LayoutTests/fast/mediastream/RTCPeerConnection-getConfiguration-expected.txt        2016-12-12 02:50:06 UTC (rev 209695)
</span><span class="lines">@@ -6,8 +6,8 @@
</span><span class="cx"> PASS iceServers.length is 1
</span><span class="cx"> PASS configuration.iceTransportPolicy is &quot;all&quot;
</span><span class="cx"> PASS configuration.bundlePolicy is &quot;balanced&quot;
</span><del>-PASS iceServers[i].username is &quot;&quot;
-PASS iceServers[i].credential is &quot;&quot;
</del><ins>+PASS &quot;username&quot; in iceServers[i] is false
+PASS &quot;credential&quot; in iceServers[i] is false
</ins><span class="cx"> PASS urls[j] is &quot;stun:foo.com&quot;
</span><span class="cx"> PASS iceServers.length is 2
</span><span class="cx"> PASS configuration.iceTransportPolicy is &quot;all&quot;
</span><span class="lines">@@ -32,14 +32,14 @@
</span><span class="cx"> PASS iceServers.length is 1
</span><span class="cx"> PASS configuration.iceTransportPolicy is &quot;relay&quot;
</span><span class="cx"> PASS configuration.bundlePolicy is &quot;balanced&quot;
</span><del>-PASS iceServers[i].username is &quot;&quot;
-PASS iceServers[i].credential is &quot;&quot;
</del><ins>+PASS &quot;username&quot; in iceServers[i] is false
+PASS &quot;credential&quot; in iceServers[i] is false
</ins><span class="cx"> PASS urls[j] is &quot;stun:foo.com&quot;
</span><span class="cx"> PASS iceServers.length is 1
</span><span class="cx"> PASS configuration.iceTransportPolicy is &quot;relay&quot;
</span><span class="cx"> PASS configuration.bundlePolicy is &quot;max-compat&quot;
</span><del>-PASS iceServers[i].username is &quot;&quot;
-PASS iceServers[i].credential is &quot;&quot;
</del><ins>+PASS &quot;username&quot; in iceServers[i] is false
+PASS &quot;credential&quot; in iceServers[i] is false
</ins><span class="cx"> PASS urls[j] is &quot;stun:foo.com&quot;
</span><span class="cx"> PASS iceServers.length is 2
</span><span class="cx"> PASS configuration.iceTransportPolicy is &quot;relay&quot;
</span><span class="lines">@@ -55,8 +55,8 @@
</span><span class="cx"> PASS iceServers.length is 1
</span><span class="cx"> PASS configuration.iceTransportPolicy is &quot;all&quot;
</span><span class="cx"> PASS configuration.bundlePolicy is &quot;balanced&quot;
</span><del>-PASS iceServers[i].username is &quot;&quot;
-PASS iceServers[i].credential is &quot;&quot;
</del><ins>+PASS &quot;username&quot; in iceServers[i] is false
+PASS &quot;credential&quot; in iceServers[i] is false
</ins><span class="cx"> PASS urls[j] is &quot;stun:foo.com&quot;
</span><span class="cx"> PASS iceServers.length is 2
</span><span class="cx"> PASS configuration.iceTransportPolicy is &quot;all&quot;
</span><span class="lines">@@ -81,14 +81,14 @@
</span><span class="cx"> PASS iceServers.length is 1
</span><span class="cx"> PASS configuration.iceTransportPolicy is &quot;relay&quot;
</span><span class="cx"> PASS configuration.bundlePolicy is &quot;balanced&quot;
</span><del>-PASS iceServers[i].username is &quot;&quot;
-PASS iceServers[i].credential is &quot;&quot;
</del><ins>+PASS &quot;username&quot; in iceServers[i] is false
+PASS &quot;credential&quot; in iceServers[i] is false
</ins><span class="cx"> PASS urls[j] is &quot;stun:foo.com&quot;
</span><span class="cx"> PASS iceServers.length is 1
</span><span class="cx"> PASS configuration.iceTransportPolicy is &quot;relay&quot;
</span><span class="cx"> PASS configuration.bundlePolicy is &quot;max-compat&quot;
</span><del>-PASS iceServers[i].username is &quot;&quot;
-PASS iceServers[i].credential is &quot;&quot;
</del><ins>+PASS &quot;username&quot; in iceServers[i] is false
+PASS &quot;credential&quot; in iceServers[i] is false
</ins><span class="cx"> PASS urls[j] is &quot;stun:foo.com&quot;
</span><span class="cx"> PASS iceServers.length is 2
</span><span class="cx"> PASS configuration.iceTransportPolicy is &quot;relay&quot;
</span></span></pre></div>
<a id="trunkLayoutTestsfastmediastreamRTCPeerConnectiongetConfigurationhtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/fast/mediastream/RTCPeerConnection-getConfiguration.html (209694 => 209695)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/mediastream/RTCPeerConnection-getConfiguration.html        2016-12-12 01:41:16 UTC (rev 209694)
+++ trunk/LayoutTests/fast/mediastream/RTCPeerConnection-getConfiguration.html        2016-12-12 02:50:06 UTC (rev 209695)
</span><span class="lines">@@ -19,8 +19,14 @@
</span><span class="cx">                 shouldBeEqualToString('configuration.iceTransportPolicy', iceTransportPolicy);
</span><span class="cx">                 shouldBeEqualToString('configuration.bundlePolicy', bundlePolicy);
</span><span class="cx">                 for (i = 0; i &lt; iceServers.length; ++i) {
</span><del>-                    shouldBeEqualToString('iceServers[i].username', serversList[i].username);
-                    shouldBeEqualToString('iceServers[i].credential', serversList[i].credential);
</del><ins>+                    if (&quot;username&quot; in serversList[i])
+                        shouldBeEqualToString('iceServers[i].username', serversList[i].username);
+                    else
+                        shouldBeFalse('&quot;username&quot; in iceServers[i]');
+                    if (&quot;credential&quot; in serversList[i])
+                        shouldBeEqualToString('iceServers[i].credential', serversList[i].credential);
+                    else
+                        shouldBeFalse('&quot;credential&quot; in iceServers[i]');
</ins><span class="cx"> 
</span><span class="cx">                     urls = iceServers[i].urls;
</span><span class="cx">                     for (j = 0; j &lt; urls.length; ++j)
</span><span class="lines">@@ -28,62 +34,62 @@
</span><span class="cx">                 }
</span><span class="cx">             }
</span><span class="cx"> 
</span><del>-            pc = new RTCPeerConnection({iceServers:[{urls:'stun:foo.com'}]});
-            var servers = [{urls:['stun:foo.com'], username:'', credential:''}];
</del><ins>+            pc = new RTCPeerConnection({iceServers:[{urls:['stun:foo.com']}]});
+            var servers = [{urls:['stun:foo.com']}];
</ins><span class="cx">             configuration = pc.getConfiguration();
</span><span class="cx">             checkConfiguration(servers, 'all', 'balanced');
</span><span class="cx"> 
</span><del>-            pc = new RTCPeerConnection({iceServers:[{urls:'turn:foo.com', username:'user', credential:'x'},{urls:'stun:bar.com', username:'user2', credential:'x'}]});
</del><ins>+            pc = new RTCPeerConnection({iceServers:[{urls:['turn:foo.com'], username:'user', credential:'x'},{urls:['stun:bar.com'], username:'user2', credential:'x'}]});
</ins><span class="cx">             servers = [{urls:['turn:foo.com'], username:'user', credential:'x'}, {urls:['stun:bar.com'], username:'user2', credential:'x'}];
</span><span class="cx">             configuration = pc.getConfiguration();
</span><span class="cx">             checkConfiguration(servers, 'all', 'balanced');
</span><span class="cx"> 
</span><del>-            pc = new RTCPeerConnection({iceServers:[{urls:'turn:foo.com', username:'user', credential:'x'},{urls:['stun:bar.com', 'turn:foo.com', 'turn:foo2.com'], username:'user2', credential:'x'}]});
</del><ins>+            pc = new RTCPeerConnection({iceServers:[{urls:['turn:foo.com'], username:'user', credential:'x'},{urls:['stun:bar.com', 'turn:foo.com', 'turn:foo2.com'], username:'user2', credential:'x'}]});
</ins><span class="cx">             servers = [{urls:['turn:foo.com'], username:'user', credential:'x'},{urls:['stun:bar.com', 'turn:foo.com', 'turn:foo2.com'], username:'user2', credential:'x'}];
</span><span class="cx">             configuration = pc.getConfiguration();
</span><span class="cx">             checkConfiguration(servers, 'all', 'balanced');
</span><span class="cx"> 
</span><del>-            pc = new RTCPeerConnection({iceServers:[{urls:'stun:foo.com'}], iceTransportPolicy:'relay', bundlePolicy:'balanced'});
-            var servers = [{urls:['stun:foo.com'], username:'', credential:''}];
</del><ins>+            pc = new RTCPeerConnection({iceServers:[{urls:['stun:foo.com']}], iceTransportPolicy:'relay', bundlePolicy:'balanced'});
+            var servers = [{urls:['stun:foo.com']}];
</ins><span class="cx">             configuration = pc.getConfiguration();
</span><span class="cx">             checkConfiguration(servers, 'relay', 'balanced');
</span><span class="cx"> 
</span><del>-            pc = new RTCPeerConnection({iceServers:[{urls:'stun:foo.com'}], iceTransportPolicy:'relay', bundlePolicy:'max-compat'});
-            var servers = [{urls:['stun:foo.com'], username:'', credential:''}];
</del><ins>+            pc = new RTCPeerConnection({iceServers:[{urls:['stun:foo.com']}], iceTransportPolicy:'relay', bundlePolicy:'max-compat'});
+            var servers = [{urls:['stun:foo.com']}];
</ins><span class="cx">             configuration = pc.getConfiguration();
</span><span class="cx">             checkConfiguration(servers, 'relay', 'max-compat');
</span><span class="cx"> 
</span><del>-            pc = new RTCPeerConnection({iceServers:[{urls:'turn:foo.com', username:'user', credential:'x'},{urls:['stun:bar.com', 'turn:foo.com', 'turn:foo2.com'], username:'user2', credential:'x'}], iceTransportPolicy:'relay', bundlePolicy:'max-bundle'});
</del><ins>+            pc = new RTCPeerConnection({iceServers:[{urls:['turn:foo.com'], username:'user', credential:'x'},{urls:['stun:bar.com', 'turn:foo.com', 'turn:foo2.com'], username:'user2', credential:'x'}], iceTransportPolicy:'relay', bundlePolicy:'max-bundle'});
</ins><span class="cx">             servers = [{urls:['turn:foo.com'], username:'user', credential:'x'},{urls:['stun:bar.com', 'turn:foo.com', 'turn:foo2.com'], username:'user2', credential:'x'}];
</span><span class="cx">             configuration = pc.getConfiguration();
</span><span class="cx">             checkConfiguration(servers, 'relay', 'max-bundle');
</span><span class="cx"> 
</span><del>-            pc.setConfiguration({iceServers:[{urls:'stun:foo.com'}]});
-            var servers = [{urls:['stun:foo.com'], username:'', credential:''}];
</del><ins>+            pc.setConfiguration({iceServers:[{urls:['stun:foo.com']}]});
+            var servers = [{urls:['stun:foo.com']}];
</ins><span class="cx">             configuration = pc.getConfiguration();
</span><span class="cx">             checkConfiguration(servers, 'all', 'balanced');
</span><span class="cx"> 
</span><del>-            pc.setConfiguration({iceServers:[{urls:'turn:foo.com', username:'user', credential:'x'},{urls:'stun:bar.com', username:'user2', credential:'x'}]});
</del><ins>+            pc.setConfiguration({iceServers:[{urls:['turn:foo.com'], username:'user', credential:'x'},{urls:['stun:bar.com'], username:'user2', credential:'x'}]});
</ins><span class="cx">             servers = [{urls:['turn:foo.com'], username:'user', credential:'x'}, {urls:['stun:bar.com'], username:'user2', credential:'x'}];
</span><span class="cx">             configuration = pc.getConfiguration();
</span><span class="cx">             checkConfiguration(servers, 'all', 'balanced');
</span><span class="cx"> 
</span><del>-            pc.setConfiguration({iceServers:[{urls:'turn:foo.com', username:'user', credential:'x'},{urls:['stun:bar.com', 'turn:foo.com', 'turn:foo2.com'], username:'user2', credential:'x'}]});
</del><ins>+            pc.setConfiguration({iceServers:[{urls:['turn:foo.com'], username:'user', credential:'x'},{urls:['stun:bar.com', 'turn:foo.com', 'turn:foo2.com'], username:'user2', credential:'x'}]});
</ins><span class="cx">             servers = [{urls:['turn:foo.com'], username:'user', credential:'x'},{urls:['stun:bar.com', 'turn:foo.com', 'turn:foo2.com'], username:'user2', credential:'x'}];
</span><span class="cx">             configuration = pc.getConfiguration();
</span><span class="cx">             checkConfiguration(servers, 'all', 'balanced');
</span><span class="cx"> 
</span><del>-            pc.setConfiguration({iceServers:[{urls:'stun:foo.com'}], iceTransportPolicy:'relay', bundlePolicy:'balanced'});
-            var servers = [{urls:['stun:foo.com'], username:'', credential:''}];
</del><ins>+            pc.setConfiguration({iceServers:[{urls:['stun:foo.com']}], iceTransportPolicy:'relay', bundlePolicy:'balanced'});
+            var servers = [{urls:['stun:foo.com']}];
</ins><span class="cx">             configuration = pc.getConfiguration();
</span><span class="cx">             checkConfiguration(servers, 'relay', 'balanced');
</span><span class="cx"> 
</span><del>-            pc.setConfiguration({iceServers:[{urls:'stun:foo.com'}], iceTransportPolicy:'relay', bundlePolicy:'max-compat'});
-            var servers = [{urls:['stun:foo.com'], username:'', credential:''}];
</del><ins>+            pc.setConfiguration({iceServers:[{urls:['stun:foo.com']}], iceTransportPolicy:'relay', bundlePolicy:'max-compat'});
+            var servers = [{urls:['stun:foo.com']}];
</ins><span class="cx">             configuration = pc.getConfiguration();
</span><span class="cx">             checkConfiguration(servers, 'relay', 'max-compat');
</span><span class="cx"> 
</span><del>-            pc.setConfiguration({iceServers:[{urls:'turn:foo.com', username:'user', credential:'x'},{urls:['stun:bar.com', 'turn:foo.com', 'turn:foo2.com'], username:'user2', credential:'x'}], iceTransportPolicy:'relay', bundlePolicy:'max-bundle'});
</del><ins>+            pc.setConfiguration({iceServers:[{urls:['turn:foo.com'], username:'user', credential:'x'},{urls:['stun:bar.com', 'turn:foo.com', 'turn:foo2.com'], username:'user2', credential:'x'}], iceTransportPolicy:'relay', bundlePolicy:'max-bundle'});
</ins><span class="cx">             servers = [{urls:['turn:foo.com'], username:'user', credential:'x'},{urls:['stun:bar.com', 'turn:foo.com', 'turn:foo2.com'], username:'user2', credential:'x'}];
</span><span class="cx">             configuration = pc.getConfiguration();
</span><span class="cx">             checkConfiguration(servers, 'relay', 'max-bundle');
</span></span></pre></div>
<a id="trunkLayoutTestsfastmediastreamRTCPeerConnectionhtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/fast/mediastream/RTCPeerConnection.html (209694 => 209695)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/mediastream/RTCPeerConnection.html        2016-12-12 01:41:16 UTC (rev 209694)
+++ trunk/LayoutTests/fast/mediastream/RTCPeerConnection.html        2016-12-12 02:50:06 UTC (rev 209695)
</span><span class="lines">@@ -11,8 +11,8 @@
</span><span class="cx">             shouldThrow(&quot;new RTCPeerConnection(undefined);&quot;);
</span><span class="cx">             shouldThrow(&quot;new RTCPeerConnection();&quot;);
</span><span class="cx">             shouldThrow(&quot;new RTCPeerConnection('');&quot;);
</span><del>-            shouldThrow(&quot;new RTCPeerConnection({});&quot;);
-            shouldThrow(&quot;new RTCPeerConnection({iceServers:[]});&quot;);
</del><ins>+            shouldNotThrow(&quot;new RTCPeerConnection({});&quot;);
+            shouldNotThrow(&quot;new RTCPeerConnection({iceServers:[]});&quot;);
</ins><span class="cx">             shouldThrow(&quot;new RTCPeerConnection({iceServers:[{url:'stun:foo.com'}]});&quot;);
</span><span class="cx">             shouldThrow(&quot;new RTCPeerConnection({iceServers:[{urls:'http:foo.com'}]});&quot;);
</span><span class="cx"> 
</span><span class="lines">@@ -52,7 +52,7 @@
</span><span class="cx">             shouldNotThrow(&quot;new RTCPeerConnection({iceServers:[{urls:'turn:foo.com', username:'user', credential:'x'}], iceTransports:'all', requestIdentity:'ifconfigured'});&quot;);
</span><span class="cx">             shouldNotThrow(&quot;new RTCPeerConnection({iceServers:[{urls:'turn:foo.com', username:'user', credential:'x'},{urls:'stun:bar.com', username:'user2', credential:'x'}], iceTransports:'all', requestIdentity:'ifconfigured'});&quot;);
</span><span class="cx"> 
</span><del>-            shouldThrow(&quot;new RTCPeerConnection({fooServers:[]});&quot;);
</del><ins>+            shouldNotThrow(&quot;new RTCPeerConnection({fooServers:[]});&quot;);
</ins><span class="cx">             shouldThrow(&quot;new RTCPeerConnection({iceServers:true});&quot;);
</span><span class="cx">             shouldThrow(&quot;new RTCPeerConnection({iceServers:[1, 2, 3]});&quot;);
</span><span class="cx">             shouldThrow(&quot;new RTCPeerConnection({iceServers:[{}]});&quot;);
</span></span></pre></div>
<a id="trunkLayoutTestsfastmediastreamRTCSessionDescriptionexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/fast/mediastream/RTCSessionDescription-expected.txt (209694 => 209695)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/mediastream/RTCSessionDescription-expected.txt        2016-12-12 01:41:16 UTC (rev 209694)
+++ trunk/LayoutTests/fast/mediastream/RTCSessionDescription-expected.txt        2016-12-12 02:50:06 UTC (rev 209695)
</span><span class="lines">@@ -15,11 +15,11 @@
</span><span class="cx"> *** Argument is mandatory
</span><span class="cx"> PASS new RTCSessionDescription(); threw exception TypeError: Not enough arguments.
</span><span class="cx"> *** Dictionary member type is required
</span><del>-PASS new RTCSessionDescription({}); threw exception TypeError: Type error.
-PASS new RTCSessionDescription({sdp:'x'}); threw exception TypeError: Type error.
-PASS new RTCSessionDescription({foo:'bar'}); threw exception TypeError: Type error.
</del><ins>+PASS new RTCSessionDescription({}); threw exception TypeError: Member RTCSessionDescriptionInit.type is required and must be an instance of RTCSdpType.
+PASS new RTCSessionDescription({sdp:'x'}); threw exception TypeError: Member RTCSessionDescriptionInit.type is required and must be an instance of RTCSdpType.
+PASS new RTCSessionDescription({foo:'bar'}); threw exception TypeError: Member RTCSessionDescriptionInit.type is required and must be an instance of RTCSdpType.
</ins><span class="cx"> PASS new RTCSessionDescription({type:'offer'}); did not throw exception.
</span><del>-PASS new RTCSessionDescription(null); threw exception TypeError: Type error.
</del><ins>+PASS new RTCSessionDescription(null); threw exception TypeError: Member RTCSessionDescriptionInit.type is required and must be an instance of RTCSdpType.
</ins><span class="cx"> PASS new RTCSessionDescription(5); threw exception TypeError: Type error.
</span><span class="cx"> PASS new RTCSessionDescription('foobar'); threw exception TypeError: Type error.
</span><span class="cx"> PASS new RTCSessionDescription({type:'foobar', sdp:'x'}); threw exception TypeError: Type error.
</span></span></pre></div>
<a id="trunkLayoutTestsimportedw3cwebplatformtestswebrtcrtcpeerconnectionrtcpeerconnectionconstructorexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc/rtcpeerconnection/rtcpeerconnection-constructor-expected.txt (209694 => 209695)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc/rtcpeerconnection/rtcpeerconnection-constructor-expected.txt        2016-12-12 01:41:16 UTC (rev 209694)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc/rtcpeerconnection/rtcpeerconnection-constructor-expected.txt        2016-12-12 02:50:06 UTC (rev 209695)
</span><span class="lines">@@ -3,15 +3,15 @@
</span><span class="cx"> FAIL new RTCPeerConnection() Not enough arguments
</span><span class="cx"> FAIL new RTCPeerConnection(null) RTCPeerConnection argument must be a valid Dictionary
</span><span class="cx"> FAIL new RTCPeerConnection(undefined) RTCPeerConnection argument must be a valid Dictionary
</span><del>-FAIL new RTCPeerConnection({}) Invalid RTCPeerConnection constructor arguments
</del><ins>+PASS new RTCPeerConnection({}) 
</ins><span class="cx"> PASS new RTCPeerConnection({ iceServers: null }) 
</span><del>-FAIL new RTCPeerConnection({ iceServers: undefined }) Invalid RTCPeerConnection constructor arguments
-FAIL new RTCPeerConnection({ iceServers: [] }) Error creating RTCPeerConnection
</del><ins>+PASS new RTCPeerConnection({ iceServers: undefined }) 
+PASS new RTCPeerConnection({ iceServers: [] }) 
</ins><span class="cx"> PASS new RTCPeerConnection({ iceServers: [{}] }) 
</span><span class="cx"> PASS new RTCPeerConnection({ iceServers: [null] }) 
</span><span class="cx"> PASS new RTCPeerConnection({ iceServers: [undefined] }) 
</span><span class="cx"> PASS new RTCPeerConnection({ iceServers: [{ urls: &quot;stun:stun1.example.net&quot; }] }) 
</span><del>-FAIL new RTCPeerConnection({ iceServers: [{ urls: [] }] }) Error creating RTCPeerConnection
</del><ins>+PASS new RTCPeerConnection({ iceServers: [{ urls: [] }] }) 
</ins><span class="cx"> PASS new RTCPeerConnection({ iceServers: [{ urls: [&quot;stun:stun1.example.net&quot;] }] }) 
</span><span class="cx"> PASS new RTCPeerConnection({ iceServers: [{ urls: [&quot;stun:stun1.example.net&quot;, &quot;stun:stun2.example.net&quot;] }] }) 
</span><span class="cx"> PASS new RTCPeerConnection({ iceServers: [{ urls: &quot;turns:turn.example.org&quot;, username: &quot;user&quot;, credential: &quot;cred&quot; }] }) 
</span><span class="lines">@@ -43,38 +43,52 @@
</span><span class="cx"> FAIL new RTCPeerConnection({ iceServers: [{ urls: &quot;http://example.com&quot; }] }) assert_throws: function &quot;function () {
</span><span class="cx">         eval(expr);
</span><span class="cx">       }&quot; threw object &quot;TypeError: Error creating RTCPeerConnection&quot; that is not a DOMException SyntaxError: property &quot;code&quot; is equal to undefined, expected 12
</span><del>-FAIL new RTCPeerConnection({ iceServers: [{ urls: [], credentialType: &quot;password&quot; }] }) Error creating RTCPeerConnection
-FAIL new RTCPeerConnection({ iceServers: [{ urls: [], credentialType: &quot;token&quot; }] }) Error creating RTCPeerConnection
-PASS new RTCPeerConnection({ iceServers: [{ urls: [], credentialType: &quot;invalid&quot; }] }) 
</del><ins>+PASS new RTCPeerConnection({ iceServers: [{ urls: [], credentialType: &quot;password&quot; }] }) 
+PASS new RTCPeerConnection({ iceServers: [{ urls: [], credentialType: &quot;token&quot; }] }) 
+FAIL new RTCPeerConnection({ iceServers: [{ urls: [], credentialType: &quot;invalid&quot; }] }) assert_throws: function &quot;function () {
+        eval(expr);
+      }&quot; did not throw
</ins><span class="cx"> PASS new RTCPeerConnection({ iceServers: [{ url: &quot;stun:stun1.example.net&quot; }] }) 
</span><span class="cx"> PASS new RTCPeerConnection({ iceTransportPolicy: null }) 
</span><del>-FAIL new RTCPeerConnection({ iceTransportPolicy: undefined }) Invalid RTCPeerConnection constructor arguments
-FAIL new RTCPeerConnection({ iceTransportPolicy: &quot;relay&quot; }) Invalid RTCPeerConnection constructor arguments
-FAIL new RTCPeerConnection({ iceTransportPolicy: &quot;all&quot; }) Invalid RTCPeerConnection constructor arguments
</del><ins>+PASS new RTCPeerConnection({ iceTransportPolicy: undefined }) 
+PASS new RTCPeerConnection({ iceTransportPolicy: &quot;relay&quot; }) 
+PASS new RTCPeerConnection({ iceTransportPolicy: &quot;all&quot; }) 
</ins><span class="cx"> PASS new RTCPeerConnection({ iceTransportPolicy: &quot;invalid&quot; }) 
</span><span class="cx"> PASS new RTCPeerConnection({ iceTransportPolicy: &quot;none&quot; }) 
</span><del>-FAIL new RTCPeerConnection({ iceTransports: &quot;invalid&quot; }) Invalid RTCPeerConnection constructor arguments
-FAIL new RTCPeerConnection({ iceTransports: &quot;none&quot; }) Invalid RTCPeerConnection constructor arguments
</del><ins>+PASS new RTCPeerConnection({ iceTransports: &quot;invalid&quot; }) 
+PASS new RTCPeerConnection({ iceTransports: &quot;none&quot; }) 
</ins><span class="cx"> PASS new RTCPeerConnection({ bundlePolicy: null }) 
</span><del>-FAIL new RTCPeerConnection({ bundlePolicy: undefined }) Invalid RTCPeerConnection constructor arguments
-FAIL new RTCPeerConnection({ bundlePolicy: &quot;balanced&quot; }) Invalid RTCPeerConnection constructor arguments
-FAIL new RTCPeerConnection({ bundlePolicy: &quot;max-compat&quot; }) Invalid RTCPeerConnection constructor arguments
-FAIL new RTCPeerConnection({ bundlePolicy: &quot;max-bundle&quot; }) Invalid RTCPeerConnection constructor arguments
</del><ins>+PASS new RTCPeerConnection({ bundlePolicy: undefined }) 
+PASS new RTCPeerConnection({ bundlePolicy: &quot;balanced&quot; }) 
+PASS new RTCPeerConnection({ bundlePolicy: &quot;max-compat&quot; }) 
+PASS new RTCPeerConnection({ bundlePolicy: &quot;max-bundle&quot; }) 
</ins><span class="cx"> PASS new RTCPeerConnection({ bundlePolicy: &quot;invalid&quot; }) 
</span><del>-PASS new RTCPeerConnection({ rtcpMuxPolicy: null }) 
-FAIL new RTCPeerConnection({ rtcpMuxPolicy: undefined }) Invalid RTCPeerConnection constructor arguments
-FAIL new RTCPeerConnection({ rtcpMuxPolicy: &quot;negotiate&quot; }) Invalid RTCPeerConnection constructor arguments
-FAIL new RTCPeerConnection({ rtcpMuxPolicy: &quot;require&quot; }) Invalid RTCPeerConnection constructor arguments
-PASS new RTCPeerConnection({ rtcpMuxPolicy: &quot;invalid&quot; }) 
</del><ins>+FAIL new RTCPeerConnection({ rtcpMuxPolicy: null }) assert_throws: function &quot;function () {
+        eval(expr);
+      }&quot; did not throw
+PASS new RTCPeerConnection({ rtcpMuxPolicy: undefined }) 
+PASS new RTCPeerConnection({ rtcpMuxPolicy: &quot;negotiate&quot; }) 
+PASS new RTCPeerConnection({ rtcpMuxPolicy: &quot;require&quot; }) 
+FAIL new RTCPeerConnection({ rtcpMuxPolicy: &quot;invalid&quot; }) assert_throws: function &quot;function () {
+        eval(expr);
+      }&quot; did not throw
</ins><span class="cx"> FAIL new RTCPeerConnection({ peerIdentity: toStringThrows }) assert_throws: function &quot;function () {
</span><span class="cx">         eval(expr);
</span><del>-      }&quot; threw object &quot;TypeError: Invalid RTCPeerConnection constructor arguments&quot; (&quot;TypeError&quot;) expected object &quot;Error&quot; (&quot;Error&quot;)
-PASS new RTCPeerConnection({ certificates: null }) 
-FAIL new RTCPeerConnection({ certificates: undefined }) Invalid RTCPeerConnection constructor arguments
-FAIL new RTCPeerConnection({ certificates: [] }) Invalid RTCPeerConnection constructor arguments
-PASS new RTCPeerConnection({ certificates: [null] }) 
-PASS new RTCPeerConnection({ certificates: [undefined] }) 
-PASS new RTCPeerConnection({ iceCandidatePoolSize: toNumberThrows }) 
</del><ins>+      }&quot; did not throw
+FAIL new RTCPeerConnection({ certificates: null }) assert_throws: function &quot;function () {
+        eval(expr);
+      }&quot; did not throw
+PASS new RTCPeerConnection({ certificates: undefined }) 
+PASS new RTCPeerConnection({ certificates: [] }) 
+FAIL new RTCPeerConnection({ certificates: [null] }) assert_throws: function &quot;function () {
+        eval(expr);
+      }&quot; did not throw
+FAIL new RTCPeerConnection({ certificates: [undefined] }) assert_throws: function &quot;function () {
+        eval(expr);
+      }&quot; did not throw
+FAIL new RTCPeerConnection({ iceCandidatePoolSize: toNumberThrows }) assert_throws: function &quot;function () {
+        eval(expr);
+      }&quot; did not throw
</ins><span class="cx"> FAIL new RTCPeerConnection({ certificates: [certificate] }) RTCPeerConnection.generateCertificate is not a function. (In 'RTCPeerConnection.generateCertificate({ name: &quot;ECDSA&quot;, namedCurve: &quot;P-256&quot; })', 'RTCPeerConnection.generateCertificate' is undefined)
</span><span class="cx"> FAIL new RTCPeerConnection({ certificates: [expiredCertificate] }) RTCPeerConnection.generateCertificate is not a function. (In 'RTCPeerConnection.generateCertificate({ name: &quot;ECDSA&quot;, namedCurve: &quot;P-256&quot;, expires: 0 })', 'RTCPeerConnection.generateCertificate' is undefined)
</span><span class="cx"> FAIL localDescription initial value Not enough arguments
</span></span></pre></div>
<a id="trunkSourceWebCoreCMakeListstxt"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/CMakeLists.txt (209694 => 209695)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/CMakeLists.txt        2016-12-12 01:41:16 UTC (rev 209694)
+++ trunk/Source/WebCore/CMakeLists.txt        2016-12-12 02:50:06 UTC (rev 209695)
</span><span class="lines">@@ -910,7 +910,6 @@
</span><span class="cx">     Modules/mediastream/MediaStreamTrackEvent.cpp
</span><span class="cx">     Modules/mediastream/NavigatorMediaDevices.cpp
</span><span class="cx">     Modules/mediastream/PeerConnectionBackend.cpp
</span><del>-    Modules/mediastream/RTCConfiguration.cpp
</del><span class="cx">     Modules/mediastream/RTCDTMFSender.cpp
</span><span class="cx">     Modules/mediastream/RTCDTMFToneChangeEvent.cpp
</span><span class="cx">     Modules/mediastream/RTCDataChannel.cpp
</span><span class="lines">@@ -2335,7 +2334,6 @@
</span><span class="cx">     platform/mediastream/MediaStreamTrackPrivate.cpp
</span><span class="cx">     platform/mediastream/RealtimeMediaSourceSupportedConstraints.cpp
</span><span class="cx">     platform/mediastream/RTCIceCandidateDescriptor.cpp
</span><del>-    platform/mediastream/RTCPeerConnectionHandler.cpp
</del><span class="cx">     platform/mediastream/RTCSessionDescriptionDescriptor.cpp
</span><span class="cx">     platform/mediastream/RealtimeMediaSource.cpp
</span><span class="cx">     platform/mediastream/RealtimeMediaSourceCenter.cpp
</span><span class="lines">@@ -2350,10 +2348,8 @@
</span><span class="cx">     platform/mock/MockRealtimeMediaSource.cpp
</span><span class="cx">     platform/mock/MockRealtimeMediaSourceCenter.cpp
</span><span class="cx">     platform/mock/MockRealtimeVideoSource.cpp
</span><del>-    platform/mock/RTCDTMFSenderHandlerMock.cpp
</del><span class="cx">     platform/mock/RTCDataChannelHandlerMock.cpp
</span><span class="cx">     platform/mock/RTCNotifiersMock.cpp
</span><del>-    platform/mock/RTCPeerConnectionHandlerMock.cpp
</del><span class="cx">     platform/mock/ScrollAnimatorMock.cpp
</span><span class="cx">     platform/mock/ScrollbarThemeMock.cpp
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (209694 => 209695)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2016-12-12 01:41:16 UTC (rev 209694)
+++ trunk/Source/WebCore/ChangeLog        2016-12-12 02:50:06 UTC (rev 209695)
</span><span class="lines">@@ -1,5 +1,101 @@
</span><span class="cx"> 2016-12-11  Darin Adler  &lt;darin@apple.com&gt;
</span><span class="cx"> 
</span><ins>+        Remove uses of Dictionary in WebRTC IDL files
+        https://bugs.webkit.org/show_bug.cgi?id=165736
+
+        Reviewed by Sam Weinig.
+
+        Also removed quite a bit of unused code. There were some mocks that were out of date and
+        no longer matched the types used in the real code, that also were no longer hooked up,
+        and other types of dead code. We will have to implement anew when we want to restore tests
+        like the ones these were intended to enable.
+
+        * CMakeLists.txt: Updated for all the removed files.
+
+        * Modules/mediastream/MediaEndpointPeerConnection.cpp: Moved some types in here
+        that don't need to be in the header.
+        (WebCore::MediaEndpointPeerConnection::MediaEndpointPeerConnection): Use make_unique.
+        (WebCore::MediaEndpointPeerConnection::setConfiguration): Changed argument type,
+        obviating the need for most of the code that was here.
+        * Modules/mediastream/MediaEndpointPeerConnection.h: Updated for the above. Made more
+        things private and final. Marked the constructor explicit. Removed unneeded includes.
+
+        * Modules/mediastream/PeerConnectionBackend.h: Removed unneeded includes and forward
+        declarations. Changed the argument type for setConfiguration (see above).
+
+        * Modules/mediastream/RTCConfiguration.cpp: Removed.
+        None of the code here was needed except for the ICE server validation, and that was
+        moved into RTCPeerConnection::setConfiguration.
+        * Modules/mediastream/RTCConfiguration.h: Changed this from a class to a struct since
+        this is now a dictionary rather than an interface.
+        * Modules/mediastream/RTCConfiguration.idl: Changed this from an interface to a dictionary.
+
+        * Modules/mediastream/RTCDTMFSender.cpp: Removed some of the code from this file. This
+        class currently isn't implemented, but was depending on RTCPeerConnectionHandler. I removed
+        some of the dead code. Someone will have to straighten this out so we can turn it back on.
+        * Modules/mediastream/RTCDTMFSender.h: Ditto.
+
+        * Modules/mediastream/RTCDataChannel.cpp: Updated includes.
+
+        * Modules/mediastream/RTCIceCandidate.cpp:
+        (WebCore::RTCIceCandidate::create): Removed most of the code, since this now takes
+        a structure rather than a WebCore::Dictionary, and so the bindings take care of the work.
+        * Modules/mediastream/RTCIceCandidate.h: Updated for the above.
+        * Modules/mediastream/RTCIceCandidate.idl: Changed the constructor to take a
+        RTCIceCandidateInit instead of a Dictionary.
+
+        * Modules/mediastream/RTCIceServer.h: Changed this from a class to a struct since
+        this is now a dictionary rather than an interface.
+        * Modules/mediastream/RTCIceServer.idl: Changed this from an interface to a dictionary.
+
+        * Modules/mediastream/RTCPeerConnection.cpp:
+        (WebCore::RTCPeerConnection::initializeWith): Take an RTCConfiguration rather than
+        a Dictionary.
+        (WebCore::RTCPeerConnection::getConfiguration): Moved to header, now an inline.
+        (WebCore::RTCPeerConnection::setConfiguration): Use the configuration dictionary now instead
+        of the configuration class. Also moved validation of server URLs here, formerly in the
+        RTCConfiguration RTCConfiguration::initialize function. Also moved code to convert from
+        RTCConfiguration to MediaEndpointConfiguration here, formerly in
+        MediaEndpointPeerConnection::setConfiguration.
+        * Modules/mediastream/RTCPeerConnection.h: Updated for the above.
+        * Modules/mediastream/RTCPeerConnection.idl: Changed argument to initializeWith and
+        setConfiguration from Dictionary to RTCConfiguration.
+
+        * Modules/mediastream/RTCSessionDescription.cpp:
+        (WebCore::parseTypeString): Deleted.
+        (WebCore::RTCSessionDescription::create): Changed to take struct instead of Dictionary.
+        * Modules/mediastream/RTCSessionDescription.h: Added Init struct and changed create to
+        take it.
+        * Modules/mediastream/RTCSessionDescription.idl: Changed constructor argument to take
+        RTCSessionDescriptionInit dictionary instead of Dictionary.
+
+        * Modules/webaudio/MediaStreamAudioDestinationNode.cpp: Updated includes.
+
+        * WebCore.xcodeproj/project.pbxproj: Updated for all the removed files.
+
+        * bindings/scripts/CodeGeneratorJS.pm:
+        (GenerateDictionaryImplementationContent): Fixed convertDictionaryToJS to work with other
+        nullable types besides RefPtr.
+        * bindings/scripts/test/JS/JSTestObj.cpp: Regenerated.
+
+        * platform/mediastream/RTCConfigurationPrivate.h: Removed.
+        * platform/mediastream/RTCIceServerPrivate.h: Removed.
+        * platform/mediastream/RTCPeerConnectionHandler.cpp: Removed.
+        * platform/mediastream/RTCPeerConnectionHandler.h: Removed.
+        * platform/mock/RTCDTMFSenderHandlerMock.cpp: Removed.
+        * platform/mock/RTCDTMFSenderHandlerMock.h: Removed.
+
+        * platform/mock/RTCDataChannelHandlerMock.h: Updated includes, made more things private and final.
+
+        * platform/mock/RTCPeerConnectionHandlerMock.cpp: Removed.
+        * platform/mock/RTCPeerConnectionHandlerMock.h: Removed.
+
+        * testing/Internals.cpp:
+        (WebCore::Internals::Internals): Removed call to enableMockRTCPeerConnectionHandler.
+        (WebCore::Internals::enableMockRTCPeerConnectionHandler): Deleted.
+
+2016-12-11  Darin Adler  &lt;darin@apple.com&gt;
+
</ins><span class="cx">         Use std::vsnprintf instead of vasprintf
</span><span class="cx">         https://bugs.webkit.org/show_bug.cgi?id=165740
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoreModulesmediastreamMediaEndpointPeerConnectioncpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/mediastream/MediaEndpointPeerConnection.cpp (209694 => 209695)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/mediastream/MediaEndpointPeerConnection.cpp        2016-12-12 01:41:16 UTC (rev 209694)
+++ trunk/Source/WebCore/Modules/mediastream/MediaEndpointPeerConnection.cpp        2016-12-12 02:50:06 UTC (rev 209695)
</span><span class="lines">@@ -36,6 +36,7 @@
</span><span class="cx"> #include &quot;EventNames.h&quot;
</span><span class="cx"> #include &quot;JSRTCSessionDescription.h&quot;
</span><span class="cx"> #include &quot;MediaEndpointSessionConfiguration.h&quot;
</span><ins>+#include &quot;MediaEndpointSessionDescription.h&quot;
</ins><span class="cx"> #include &quot;MediaStream.h&quot;
</span><span class="cx"> #include &quot;MediaStreamEvent.h&quot;
</span><span class="cx"> #include &quot;MediaStreamTrack.h&quot;
</span><span class="lines">@@ -57,6 +58,9 @@
</span><span class="cx"> using namespace PeerConnection;
</span><span class="cx"> using namespace PeerConnectionStates;
</span><span class="cx"> 
</span><ins>+using MediaDescriptionVector = Vector&lt;PeerMediaDescription&gt;;
+using RtpTransceiverVector = Vector&lt;RefPtr&lt;RTCRtpTransceiver&gt;&gt;;
+
</ins><span class="cx"> // We use base64 to generate the random strings so we need a size that avoids padding to get ice-chars.
</span><span class="cx"> static const size_t cnameSize = 18;
</span><span class="cx"> // Size range from 4 to 256 ice-chars defined in RFC 5245.
</span><span class="lines">@@ -81,7 +85,7 @@
</span><span class="cx"> MediaEndpointPeerConnection::MediaEndpointPeerConnection(RTCPeerConnection&amp; peerConnection)
</span><span class="cx">     : PeerConnectionBackend(peerConnection)
</span><span class="cx">     , m_mediaEndpoint(MediaEndpoint::create(*this))
</span><del>-    , m_sdpProcessor(std::unique_ptr&lt;SDPProcessor&gt;(new SDPProcessor(m_peerConnection.scriptExecutionContext())))
</del><ins>+    , m_sdpProcessor(std::make_unique&lt;SDPProcessor&gt;(m_peerConnection.scriptExecutionContext()))
</ins><span class="cx">     , m_cname(randomString(cnameSize))
</span><span class="cx">     , m_iceUfrag(randomString(iceUfragSize))
</span><span class="cx">     , m_icePassword(randomString(icePasswordSize))
</span><span class="lines">@@ -594,21 +598,9 @@
</span><span class="cx">     return createRTCSessionDescription(m_pendingRemoteDescription.get());
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void MediaEndpointPeerConnection::setConfiguration(RTCConfiguration&amp; configuration)
</del><ins>+void MediaEndpointPeerConnection::setConfiguration(MediaEndpointConfiguration&amp;&amp; configuration)
</ins><span class="cx"> {
</span><del>-    Vector&lt;MediaEndpointConfiguration::IceServerInfo&gt; iceServers;
-    if (configuration.iceServers().size()) {
-        iceServers.reserveInitialCapacity(configuration.iceServers().size());
-        for (auto&amp; server : configuration.iceServers()) {
-            Vector&lt;URL&gt; urls;
-            urls.reserveInitialCapacity(server-&gt;urls().size());
-            for (auto&amp; url : server-&gt;urls())
-                urls.uncheckedAppend(URL(URL(), url));
-            iceServers.uncheckedAppend(MediaEndpointConfiguration::IceServerInfo { WTFMove(urls), server-&gt;credential(), server-&gt;username() });
-        }
-    }
-
-    m_mediaEndpoint-&gt;setConfiguration({ WTFMove(iceServers), configuration.iceTransportPolicy(), configuration.bundlePolicy() });
</del><ins>+    m_mediaEndpoint-&gt;setConfiguration(WTFMove(configuration));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void MediaEndpointPeerConnection::doAddIceCandidate(RTCIceCandidate&amp; rtcCandidate)
</span></span></pre></div>
<a id="trunkSourceWebCoreModulesmediastreamMediaEndpointPeerConnectionh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/mediastream/MediaEndpointPeerConnection.h (209694 => 209695)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/mediastream/MediaEndpointPeerConnection.h        2016-12-12 01:41:16 UTC (rev 209694)
+++ trunk/Source/WebCore/Modules/mediastream/MediaEndpointPeerConnection.h        2016-12-12 02:50:06 UTC (rev 209695)
</span><span class="lines">@@ -33,51 +33,43 @@
</span><span class="cx"> #if ENABLE(WEB_RTC)
</span><span class="cx"> 
</span><span class="cx"> #include &quot;MediaEndpoint.h&quot;
</span><del>-#include &quot;MediaEndpointSessionDescription.h&quot;
</del><span class="cx"> #include &quot;PeerConnectionBackend.h&quot;
</span><ins>+#include &quot;RTCSessionDescription.h&quot;
</ins><span class="cx"> #include &lt;wtf/Function.h&gt;
</span><del>-#include &lt;wtf/RefPtr.h&gt;
</del><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><del>-class MediaStream;
-class MediaStreamTrack;
</del><ins>+class MediaEndpointSessionDescription;
</ins><span class="cx"> class SDPProcessor;
</span><span class="cx"> 
</span><del>-struct PeerMediaDescription;
-
-using MediaDescriptionVector = Vector&lt;PeerMediaDescription&gt;;
-using RtpSenderVector = Vector&lt;RefPtr&lt;RTCRtpSender&gt;&gt;;
-using RtpTransceiverVector = Vector&lt;RefPtr&lt;RTCRtpTransceiver&gt;&gt;;
-
</del><span class="cx"> class MediaEndpointPeerConnection final : public PeerConnectionBackend, public MediaEndpointClient {
</span><span class="cx"> public:
</span><del>-    MediaEndpointPeerConnection(RTCPeerConnection&amp;);
</del><ins>+    explicit MediaEndpointPeerConnection(RTCPeerConnection&amp;);
</ins><span class="cx"> 
</span><del>-    RefPtr&lt;RTCSessionDescription&gt; localDescription() const override;
-    RefPtr&lt;RTCSessionDescription&gt; currentLocalDescription() const override;
-    RefPtr&lt;RTCSessionDescription&gt; pendingLocalDescription() const override;
</del><ins>+private:
+    RefPtr&lt;RTCSessionDescription&gt; localDescription() const final;
+    RefPtr&lt;RTCSessionDescription&gt; currentLocalDescription() const final;
+    RefPtr&lt;RTCSessionDescription&gt; pendingLocalDescription() const final;
</ins><span class="cx"> 
</span><del>-    RefPtr&lt;RTCSessionDescription&gt; remoteDescription() const override;
-    RefPtr&lt;RTCSessionDescription&gt; currentRemoteDescription() const override;
-    RefPtr&lt;RTCSessionDescription&gt; pendingRemoteDescription() const override;
</del><ins>+    RefPtr&lt;RTCSessionDescription&gt; remoteDescription() const final;
+    RefPtr&lt;RTCSessionDescription&gt; currentRemoteDescription() const final;
+    RefPtr&lt;RTCSessionDescription&gt; pendingRemoteDescription() const final;
</ins><span class="cx"> 
</span><del>-    void setConfiguration(RTCConfiguration&amp;) override;
</del><ins>+    void setConfiguration(MediaEndpointConfiguration&amp;&amp;) final;
</ins><span class="cx"> 
</span><del>-    void getStats(MediaStreamTrack*, PeerConnection::StatsPromise&amp;&amp;) override;
</del><ins>+    void getStats(MediaStreamTrack*, PeerConnection::StatsPromise&amp;&amp;) final;
</ins><span class="cx"> 
</span><del>-    Vector&lt;RefPtr&lt;MediaStream&gt;&gt; getRemoteStreams() const override;
</del><ins>+    Vector&lt;RefPtr&lt;MediaStream&gt;&gt; getRemoteStreams() const final;
</ins><span class="cx"> 
</span><del>-    Ref&lt;RTCRtpReceiver&gt; createReceiver(const String&amp; transceiverMid, const String&amp; trackKind, const String&amp; trackId) override;
-    void replaceTrack(RTCRtpSender&amp;, RefPtr&lt;MediaStreamTrack&gt;&amp;&amp;, DOMPromise&lt;void&gt;&amp;&amp;) override;
</del><ins>+    Ref&lt;RTCRtpReceiver&gt; createReceiver(const String&amp; transceiverMid, const String&amp; trackKind, const String&amp; trackId) final;
+    void replaceTrack(RTCRtpSender&amp;, RefPtr&lt;MediaStreamTrack&gt;&amp;&amp;, DOMPromise&lt;void&gt;&amp;&amp;) final;
</ins><span class="cx"> 
</span><del>-    bool isNegotiationNeeded() const override { return m_negotiationNeeded; };
-    void markAsNeedingNegotiation() override;
-    void clearNegotiationNeededState() override { m_negotiationNeeded = false; };
</del><ins>+    bool isNegotiationNeeded() const final { return m_negotiationNeeded; };
+    void markAsNeedingNegotiation() final;
+    void clearNegotiationNeededState() final { m_negotiationNeeded = false; };
</ins><span class="cx"> 
</span><del>-    void emulatePlatformEvent(const String&amp; action) override;
</del><ins>+    void emulatePlatformEvent(const String&amp; action) final;
</ins><span class="cx"> 
</span><del>-private:
</del><span class="cx">     void runTask(Function&lt;void ()&gt;&amp;&amp;);
</span><span class="cx">     void startRunningTasks();
</span><span class="cx"> 
</span><span class="lines">@@ -106,10 +98,10 @@
</span><span class="cx">     RefPtr&lt;RTCSessionDescription&gt; createRTCSessionDescription(MediaEndpointSessionDescription*) const;
</span><span class="cx"> 
</span><span class="cx">     // MediaEndpointClient
</span><del>-    void gotDtlsFingerprint(const String&amp; fingerprint, const String&amp; fingerprintFunction) override;
-    void gotIceCandidate(const String&amp; mid, IceCandidate&amp;&amp;) override;
-    void doneGatheringCandidates(const String&amp; mid) override;
-    void iceTransportStateChanged(const String&amp; mid, MediaEndpoint::IceTransportState) override;
</del><ins>+    void gotDtlsFingerprint(const String&amp; fingerprint, const String&amp; fingerprintFunction) final;
+    void gotIceCandidate(const String&amp; mid, IceCandidate&amp;&amp;) final;
+    void doneGatheringCandidates(const String&amp; mid) final;
+    void iceTransportStateChanged(const String&amp; mid, MediaEndpoint::IceTransportState) final;
</ins><span class="cx"> 
</span><span class="cx">     std::unique_ptr&lt;RTCDataChannelHandler&gt; createDataChannelHandler(const String&amp;, const RTCDataChannelInit&amp;) final;
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoreModulesmediastreamPeerConnectionBackendh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/mediastream/PeerConnectionBackend.h (209694 => 209695)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/mediastream/PeerConnectionBackend.h        2016-12-12 01:41:16 UTC (rev 209694)
+++ trunk/Source/WebCore/Modules/mediastream/PeerConnectionBackend.h        2016-12-12 02:50:06 UTC (rev 209695)
</span><span class="lines">@@ -34,28 +34,23 @@
</span><span class="cx"> 
</span><span class="cx"> #include &quot;JSDOMPromise.h&quot;
</span><span class="cx"> #include &quot;PeerConnectionStates.h&quot;
</span><del>-#include &quot;RTCDataChannel.h&quot;
</del><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><del>-class DOMError;
-class Event;
</del><span class="cx"> class MediaStream;
</span><span class="cx"> class MediaStreamTrack;
</span><span class="cx"> class PeerConnectionBackend;
</span><del>-class RTCConfiguration;
</del><span class="cx"> class RTCDataChannelHandler;
</span><span class="cx"> class RTCIceCandidate;
</span><span class="cx"> class RTCPeerConnection;
</span><span class="cx"> class RTCRtpReceiver;
</span><span class="cx"> class RTCRtpSender;
</span><del>-class RTCRtpSenderClient;
-class RTCRtpTransceiver;
</del><span class="cx"> class RTCSessionDescription;
</span><span class="cx"> class RTCStatsResponse;
</span><del>-class ScriptExecutionContext;
</del><span class="cx"> 
</span><ins>+struct MediaEndpointConfiguration;
</ins><span class="cx"> struct RTCAnswerOptions;
</span><ins>+struct RTCDataChannelInit;
</ins><span class="cx"> struct RTCOfferOptions;
</span><span class="cx"> 
</span><span class="cx"> namespace PeerConnection {
</span><span class="lines">@@ -63,8 +58,9 @@
</span><span class="cx"> using StatsPromise = DOMPromise&lt;IDLInterface&lt;RTCStatsResponse&gt;&gt;;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-typedef std::unique_ptr&lt;PeerConnectionBackend&gt; (*CreatePeerConnectionBackend)(RTCPeerConnection&amp;);
</del><ins>+using CreatePeerConnectionBackend = std::unique_ptr&lt;PeerConnectionBackend&gt; (*)(RTCPeerConnection&amp;);
</ins><span class="cx"> 
</span><ins>+// FIXME: What is the value of this abstract class? There is only one concrete class derived from it.
</ins><span class="cx"> class PeerConnectionBackend {
</span><span class="cx"> public:
</span><span class="cx">     WEBCORE_EXPORT static CreatePeerConnectionBackend create;
</span><span class="lines">@@ -90,7 +86,7 @@
</span><span class="cx">     virtual RefPtr&lt;RTCSessionDescription&gt; currentRemoteDescription() const = 0;
</span><span class="cx">     virtual RefPtr&lt;RTCSessionDescription&gt; pendingRemoteDescription() const = 0;
</span><span class="cx"> 
</span><del>-    virtual void setConfiguration(RTCConfiguration&amp;) = 0;
</del><ins>+    virtual void setConfiguration(MediaEndpointConfiguration&amp;&amp;) = 0;
</ins><span class="cx"> 
</span><span class="cx">     virtual void getStats(MediaStreamTrack*, PeerConnection::StatsPromise&amp;&amp;) = 0;
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoreModulesmediastreamRTCConfigurationcpp"></a>
<div class="delfile"><h4>Deleted: trunk/Source/WebCore/Modules/mediastream/RTCConfiguration.cpp (209694 => 209695)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/mediastream/RTCConfiguration.cpp        2016-12-12 01:41:16 UTC (rev 209694)
+++ trunk/Source/WebCore/Modules/mediastream/RTCConfiguration.cpp        2016-12-12 02:50:06 UTC (rev 209695)
</span><span class="lines">@@ -1,158 +0,0 @@
</span><del>-/*
- * Copyright (C) 2012 Google Inc. All rights reserved.
- * Copyright (C) 2013 Nokia Corporation and/or its subsidiary(-ies).
- * Copyright (C) 2015 Ericsson AB. 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.
- * 3. Neither the name of Ericsson nor the names of its contributors
- *    may be used to endorse or promote products derived from this
- *    software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * &quot;AS IS&quot; 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 THE COPYRIGHT
- * OWNER OR 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 &quot;config.h&quot;
-#include &quot;RTCConfiguration.h&quot;
-
-#if ENABLE(WEB_RTC)
-
-#include &quot;ArrayValue.h&quot;
-#include &quot;Dictionary.h&quot;
-#include &quot;ExceptionCode.h&quot;
-#include &quot;URL.h&quot;
-
-namespace WebCore {
-
-static bool validateIceServerURL(const String&amp; iceURL)
-{
-    URL url(URL(), iceURL);
-    if (url.isEmpty() || !url.isValid() || !(url.protocolIs(&quot;turn&quot;) || url.protocolIs(&quot;turns&quot;) || url.protocolIs(&quot;stun&quot;)))
-        return false;
-
-    return true;
-}
-
-static ExceptionOr&lt;Ref&lt;RTCIceServer&gt;&gt; parseIceServer(const Dictionary&amp; iceServer)
-{
-    String credential, username;
-    iceServer.get(&quot;credential&quot;, credential);
-    iceServer.get(&quot;username&quot;, username);
-
-    // Spec says that &quot;urls&quot; can be either a string or a sequence, so we must check for both.
-    Vector&lt;String&gt; urlsList;
-    String urlString;
-    iceServer.get(&quot;urls&quot;, urlString);
-    // This is the only way to check if &quot;urls&quot; is a sequence or a string. If we try to convert
-    // to a sequence and it fails (in case it is a string), an exception will be set and the
-    // RTCPeerConnection will fail.
-    // So we convert to a string always, which converts a sequence to a string in the format: &quot;foo, bar, ..&quot;,
-    // then checking for a comma in the string assures that a string was a sequence and then we convert
-    // it to a sequence safely.
-    if (urlString.isEmpty())
-        return Exception { INVALID_ACCESS_ERR };
-
-    if (urlString.find(',') != notFound &amp;&amp; iceServer.get(&quot;urls&quot;, urlsList) &amp;&amp; urlsList.size()) {
-        for (auto iter = urlsList.begin(); iter != urlsList.end(); ++iter) {
-            if (!validateIceServerURL(*iter))
-                return Exception { INVALID_ACCESS_ERR };
-        }
-    } else {
-        if (!validateIceServerURL(urlString))
-            return Exception { INVALID_ACCESS_ERR };
-        urlsList.append(urlString);
-    }
-
-    return RTCIceServer::create(urlsList, credential, username);
-}
-
-ExceptionOr&lt;RefPtr&lt;RTCConfiguration&gt;&gt; RTCConfiguration::create(const Dictionary&amp; configuration)
-{
-    if (configuration.isUndefinedOrNull())
-        return nullptr;
-
-    auto result = adoptRef(*new RTCConfiguration);
-    auto initializeResult = result-&gt;initialize(configuration);
-    if (initializeResult.hasException())
-        return initializeResult.releaseException();
-
-    return RefPtr&lt;RTCConfiguration&gt; { WTFMove(result) };
-}
-
-RTCConfiguration::RTCConfiguration()
-{
-}
-
-ExceptionOr&lt;void&gt; RTCConfiguration::initialize(const Dictionary&amp; configuration)
-{
-    ArrayValue iceServers;
-    bool ok = configuration.get(&quot;iceServers&quot;, iceServers);
-    if (!ok || iceServers.isUndefinedOrNull())
-        return Exception { TYPE_MISMATCH_ERR };
-
-    size_t numberOfServers;
-    ok = iceServers.length(numberOfServers);
-    if (!ok)
-        return Exception { TYPE_MISMATCH_ERR };
-    if (!numberOfServers)
-        return Exception { INVALID_ACCESS_ERR };
-
-    for (size_t i = 0; i &lt; numberOfServers; ++i) {
-        Dictionary iceServerDict;
-        ok = iceServers.get(i, iceServerDict);
-        if (!ok)
-            return Exception { TYPE_MISMATCH_ERR };
-
-        auto server = parseIceServer(iceServerDict);
-        if (server.hasException())
-            return server.releaseException();
-
-        m_iceServers.append(server.releaseReturnValue());
-    }
-
-    String iceTransportPolicy;
-    if (configuration.get(&quot;iceTransportPolicy&quot;, iceTransportPolicy)) {
-        if (iceTransportPolicy == &quot;relay&quot;)
-            m_iceTransportPolicy = IceTransportPolicy::Relay;
-        else if (iceTransportPolicy == &quot;all&quot;)
-            m_iceTransportPolicy = IceTransportPolicy::All;
-        else
-            return Exception { TypeError };
-    }
-
-    String bundlePolicy;
-    if (configuration.get(&quot;bundlePolicy&quot;, bundlePolicy)) {
-        if (bundlePolicy == &quot;balanced&quot;)
-            m_bundlePolicy = BundlePolicy::Balanced;
-        else if (bundlePolicy == &quot;max-compat&quot;)
-            m_bundlePolicy = BundlePolicy::MaxCompat;
-        else if (bundlePolicy == &quot;max-bundle&quot;)
-            m_bundlePolicy = BundlePolicy::MaxBundle;
-        else
-            return Exception { TypeError };
-    }
-
-    return { };
-}
-
-} // namespace WebCore
-
-#endif // ENABLE(WEB_RTC)
</del></span></pre></div>
<a id="trunkSourceWebCoreModulesmediastreamRTCConfigurationh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/mediastream/RTCConfiguration.h (209694 => 209695)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/mediastream/RTCConfiguration.h        2016-12-12 01:41:16 UTC (rev 209694)
+++ trunk/Source/WebCore/Modules/mediastream/RTCConfiguration.h        2016-12-12 02:50:06 UTC (rev 209695)
</span><span class="lines">@@ -32,36 +32,21 @@
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(WEB_RTC)
</span><span class="cx"> 
</span><del>-#include &quot;ExceptionOr.h&quot;
</del><span class="cx"> #include &quot;PeerConnectionStates.h&quot;
</span><span class="cx"> #include &quot;RTCIceServer.h&quot;
</span><del>-#include &lt;wtf/Vector.h&gt;
</del><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><del>-class Dictionary;
</del><ins>+using RTCIceTransportPolicy = PeerConnectionStates::IceTransportPolicy;
+using RTCBundlePolicy = PeerConnectionStates::BundlePolicy;
</ins><span class="cx"> 
</span><del>-// FIXME: Why reference count this?
-class RTCConfiguration : public RefCounted&lt;RTCConfiguration&gt; {
-public:
-    static ExceptionOr&lt;RefPtr&lt;RTCConfiguration&gt;&gt; create(const Dictionary&amp; configuration);
</del><ins>+struct RTCConfiguration {
+    using IceTransportPolicy = RTCIceTransportPolicy;
+    using BundlePolicy = RTCBundlePolicy;
</ins><span class="cx"> 
</span><del>-    using IceTransportPolicy = PeerConnectionStates::IceTransportPolicy;
-    IceTransportPolicy iceTransportPolicy() const { return m_iceTransportPolicy; }
-
-    using BundlePolicy = PeerConnectionStates::BundlePolicy;
-    BundlePolicy bundlePolicy() const { return m_bundlePolicy; }
-
-    Vector&lt;RefPtr&lt;RTCIceServer&gt;&gt; iceServers() const { return m_iceServers; }
-
-private:
-    RTCConfiguration();
-
-    ExceptionOr&lt;void&gt; initialize(const Dictionary&amp; configuration);
-
-    Vector&lt;RefPtr&lt;RTCIceServer&gt;&gt; m_iceServers;
-    IceTransportPolicy m_iceTransportPolicy { IceTransportPolicy::All };
-    BundlePolicy m_bundlePolicy { BundlePolicy::Balanced };
</del><ins>+    std::optional&lt;Vector&lt;RTCIceServer&gt;&gt; iceServers;
+    IceTransportPolicy iceTransportPolicy;
+    BundlePolicy bundlePolicy;
</ins><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> } // namespace WebCore
</span></span></pre></div>
<a id="trunkSourceWebCoreModulesmediastreamRTCConfigurationidl"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/mediastream/RTCConfiguration.idl (209694 => 209695)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/mediastream/RTCConfiguration.idl        2016-12-12 01:41:16 UTC (rev 209694)
+++ trunk/Source/WebCore/Modules/mediastream/RTCConfiguration.idl        2016-12-12 02:50:06 UTC (rev 209695)
</span><span class="lines">@@ -28,10 +28,9 @@
</span><span class="cx"> 
</span><span class="cx"> [
</span><span class="cx">     Conditional=WEB_RTC,
</span><del>-    ImplementationLacksVTable,
-    NoInterfaceObject,
-] interface RTCConfiguration {
-    readonly attribute sequence&lt;RTCIceServer&gt; iceServers;
-    readonly attribute RTCIceTransportPolicy iceTransportPolicy;
-    readonly attribute RTCBundlePolicy bundlePolicy;
</del><ins>+    JSGenerateToJSObject,
+] dictionary RTCConfiguration {
+    sequence&lt;RTCIceServer&gt; iceServers;
+    RTCIceTransportPolicy iceTransportPolicy = &quot;all&quot;;
+    RTCBundlePolicy bundlePolicy = &quot;balanced&quot;;
</ins><span class="cx"> };
</span></span></pre></div>
<a id="trunkSourceWebCoreModulesmediastreamRTCDTMFSendercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/mediastream/RTCDTMFSender.cpp (209694 => 209695)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/mediastream/RTCDTMFSender.cpp        2016-12-12 01:41:16 UTC (rev 209694)
+++ trunk/Source/WebCore/Modules/mediastream/RTCDTMFSender.cpp        2016-12-12 02:50:06 UTC (rev 209695)
</span><span class="lines">@@ -24,15 +24,13 @@
</span><span class="cx">  */
</span><span class="cx"> 
</span><span class="cx"> #include &quot;config.h&quot;
</span><ins>+#include &quot;RTCDTMFSender.h&quot;
</ins><span class="cx"> 
</span><span class="cx"> #if ENABLE(WEB_RTC)
</span><span class="cx"> 
</span><del>-#include &quot;RTCDTMFSender.h&quot;
-
</del><span class="cx"> #include &quot;MediaStreamTrack.h&quot;
</span><span class="cx"> #include &quot;RTCDTMFSenderHandler.h&quot;
</span><span class="cx"> #include &quot;RTCDTMFToneChangeEvent.h&quot;
</span><del>-#include &quot;RTCPeerConnectionHandler.h&quot;
</del><span class="cx"> #include &quot;ScriptExecutionContext.h&quot;
</span><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="lines">@@ -43,27 +41,14 @@
</span><span class="cx"> static const long minInterToneGapMs = 30;
</span><span class="cx"> static const long defaultInterToneGapMs = 70;
</span><span class="cx"> 
</span><del>-ExceptionOr&lt;Ref&lt;RTCDTMFSender&gt;&gt; RTCDTMFSender::create(ScriptExecutionContext* context, RTCPeerConnectionHandler* peerConnectionHandler, RefPtr&lt;MediaStreamTrack&gt;&amp;&amp; track)
-{
-    auto handler = peerConnectionHandler-&gt;createDTMFSender(&amp;track-&gt;source());
-    if (!handler)
-        return Exception { NOT_SUPPORTED_ERR };
-
-    auto sender = adoptRef(*new RTCDTMFSender(*context, WTFMove(track), WTFMove(handler)));
-    sender-&gt;suspendIfNeeded();
-    return WTFMove(sender);
-}
-
-RTCDTMFSender::RTCDTMFSender(ScriptExecutionContext&amp; context, RefPtr&lt;MediaStreamTrack&gt;&amp;&amp; track, std::unique_ptr&lt;RTCDTMFSenderHandler&gt; handler)
</del><ins>+RTCDTMFSender::RTCDTMFSender(ScriptExecutionContext&amp; context, RefPtr&lt;MediaStreamTrack&gt;&amp;&amp; track)
</ins><span class="cx">     : ActiveDOMObject(&amp;context)
</span><span class="cx">     , m_track(WTFMove(track))
</span><span class="cx">     , m_duration(defaultToneDurationMs)
</span><span class="cx">     , m_interToneGap(defaultInterToneGapMs)
</span><del>-    , m_handler(WTFMove(handler))
</del><span class="cx">     , m_stopped(false)
</span><span class="cx">     , m_scheduledEventTimer(*this, &amp;RTCDTMFSender::scheduledEventTimerFired)
</span><span class="cx"> {
</span><del>-    m_handler-&gt;setClient(this);
</del><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> RTCDTMFSender::~RTCDTMFSender()
</span><span class="lines">@@ -72,7 +57,7 @@
</span><span class="cx"> 
</span><span class="cx"> bool RTCDTMFSender::canInsertDTMF() const
</span><span class="cx"> {
</span><del>-    return m_handler-&gt;canInsertDTMF();
</del><ins>+    return false;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> MediaStreamTrack* RTCDTMFSender::track() const
</span><span class="lines">@@ -82,10 +67,10 @@
</span><span class="cx"> 
</span><span class="cx"> String RTCDTMFSender::toneBuffer() const
</span><span class="cx"> {
</span><del>-    return m_handler-&gt;currentToneBuffer();
</del><ins>+    return { };
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-ExceptionOr&lt;void&gt; RTCDTMFSender::insertDTMF(const String&amp; tones, std::optional&lt;int&gt; duration, std::optional&lt;int&gt; interToneGap)
</del><ins>+ExceptionOr&lt;void&gt; RTCDTMFSender::insertDTMF(const String&amp;, std::optional&lt;int&gt; duration, std::optional&lt;int&gt; interToneGap)
</ins><span class="cx"> {
</span><span class="cx">     if (!canInsertDTMF())
</span><span class="cx">         return Exception { NOT_SUPPORTED_ERR };
</span><span class="lines">@@ -99,10 +84,7 @@
</span><span class="cx">     m_duration = duration.value_or(defaultToneDurationMs);
</span><span class="cx">     m_interToneGap = interToneGap.value_or(defaultInterToneGapMs);
</span><span class="cx"> 
</span><del>-    if (!m_handler-&gt;insertDTMF(tones, m_duration, m_interToneGap))
-        return Exception { SYNTAX_ERR };
-
-    return { };
</del><ins>+    return Exception { SYNTAX_ERR };
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void RTCDTMFSender::didPlayTone(const String&amp; tone)
</span><span class="lines">@@ -113,7 +95,6 @@
</span><span class="cx"> void RTCDTMFSender::stop()
</span><span class="cx"> {
</span><span class="cx">     m_stopped = true;
</span><del>-    m_handler-&gt;setClient(nullptr);
</del><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> const char* RTCDTMFSender::activeDOMObjectName() const
</span></span></pre></div>
<a id="trunkSourceWebCoreModulesmediastreamRTCDTMFSenderh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/mediastream/RTCDTMFSender.h (209694 => 209695)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/mediastream/RTCDTMFSender.h        2016-12-12 01:41:16 UTC (rev 209694)
+++ trunk/Source/WebCore/Modules/mediastream/RTCDTMFSender.h        2016-12-12 02:50:06 UTC (rev 209695)
</span><span class="lines">@@ -30,7 +30,6 @@
</span><span class="cx"> #include &quot;ActiveDOMObject.h&quot;
</span><span class="cx"> #include &quot;EventTarget.h&quot;
</span><span class="cx"> #include &quot;ExceptionOr.h&quot;
</span><del>-#include &quot;RTCDTMFSenderHandlerClient.h&quot;
</del><span class="cx"> #include &quot;ScriptWrappable.h&quot;
</span><span class="cx"> #include &quot;Timer.h&quot;
</span><span class="cx"> 
</span><span class="lines">@@ -37,19 +36,16 @@
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><span class="cx"> class MediaStreamTrack;
</span><del>-class RTCPeerConnectionHandler;
-class RTCDTMFSenderHandler;
</del><span class="cx"> 
</span><del>-class RTCDTMFSender final : public RefCounted&lt;RTCDTMFSender&gt;, public EventTargetWithInlineData, private RTCDTMFSenderHandlerClient, public ActiveDOMObject {
</del><ins>+class RTCDTMFSender final : public RefCounted&lt;RTCDTMFSender&gt;, public EventTargetWithInlineData, public ActiveDOMObject {
</ins><span class="cx"> public:
</span><del>-    static ExceptionOr&lt;Ref&lt;RTCDTMFSender&gt;&gt; create(ScriptExecutionContext*, RTCPeerConnectionHandler*, RefPtr&lt;MediaStreamTrack&gt;&amp;&amp;);
</del><span class="cx">     virtual ~RTCDTMFSender();
</span><span class="cx"> 
</span><span class="cx">     bool canInsertDTMF() const;
</span><span class="cx">     MediaStreamTrack* track() const;
</span><span class="cx">     String toneBuffer() const;
</span><del>-    long duration() const { return m_duration; }
-    long interToneGap() const { return m_interToneGap; }
</del><ins>+    int duration() const { return m_duration; }
+    int interToneGap() const { return m_interToneGap; }
</ins><span class="cx"> 
</span><span class="cx">     ExceptionOr&lt;void&gt; insertDTMF(const String&amp; tones, std::optional&lt;int&gt; duration, std::optional&lt;int&gt; interToneGap);
</span><span class="cx"> 
</span><span class="lines">@@ -57,7 +53,7 @@
</span><span class="cx">     using RefCounted::deref;
</span><span class="cx"> 
</span><span class="cx"> private:
</span><del>-    RTCDTMFSender(ScriptExecutionContext&amp;, RefPtr&lt;MediaStreamTrack&gt;&amp;&amp;, std::unique_ptr&lt;RTCDTMFSenderHandler&gt;);
</del><ins>+    RTCDTMFSender(ScriptExecutionContext&amp;, RefPtr&lt;MediaStreamTrack&gt;&amp;&amp;);
</ins><span class="cx"> 
</span><span class="cx">     void stop() final;
</span><span class="cx">     const char* activeDOMObjectName() const final;
</span><span class="lines">@@ -69,17 +65,15 @@
</span><span class="cx">     void refEventTarget() final { ref(); }
</span><span class="cx">     void derefEventTarget() final { deref(); }
</span><span class="cx"> 
</span><del>-    void didPlayTone(const String&amp;) final;
</del><ins>+    void didPlayTone(const String&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="cx"> 
</span><span class="cx">     RefPtr&lt;MediaStreamTrack&gt; m_track;
</span><del>-    long m_duration;
-    long m_interToneGap;
</del><ins>+    int m_duration;
+    int m_interToneGap;
</ins><span class="cx"> 
</span><del>-    std::unique_ptr&lt;RTCDTMFSenderHandler&gt; m_handler;
-
</del><span class="cx">     bool m_stopped;
</span><span class="cx"> 
</span><span class="cx">     Timer m_scheduledEventTimer;
</span></span></pre></div>
<a id="trunkSourceWebCoreModulesmediastreamRTCDataChannelcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/mediastream/RTCDataChannel.cpp (209694 => 209695)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/mediastream/RTCDataChannel.cpp        2016-12-12 01:41:16 UTC (rev 209694)
+++ trunk/Source/WebCore/Modules/mediastream/RTCDataChannel.cpp        2016-12-12 02:50:06 UTC (rev 209695)
</span><span class="lines">@@ -23,17 +23,16 @@
</span><span class="cx">  */
</span><span class="cx"> 
</span><span class="cx"> #include &quot;config.h&quot;
</span><ins>+#include &quot;RTCDataChannel.h&quot;
</ins><span class="cx"> 
</span><span class="cx"> #if ENABLE(WEB_RTC)
</span><span class="cx"> 
</span><del>-#include &quot;RTCDataChannel.h&quot;
-
</del><span class="cx"> #include &quot;Blob.h&quot;
</span><span class="cx"> #include &quot;Event.h&quot;
</span><span class="cx"> #include &quot;EventNames.h&quot;
</span><ins>+#include &quot;ExceptionCode.h&quot;
</ins><span class="cx"> #include &quot;MessageEvent.h&quot;
</span><span class="cx"> #include &quot;RTCDataChannelHandler.h&quot;
</span><del>-#include &quot;RTCPeerConnectionHandler.h&quot;
</del><span class="cx"> #include &quot;ScriptExecutionContext.h&quot;
</span><span class="cx"> #include &lt;runtime/ArrayBuffer.h&gt;
</span><span class="cx"> #include &lt;runtime/ArrayBufferView.h&gt;
</span></span></pre></div>
<a id="trunkSourceWebCoreModulesmediastreamRTCDataChannelh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/mediastream/RTCDataChannel.h (209694 => 209695)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/mediastream/RTCDataChannel.h        2016-12-12 01:41:16 UTC (rev 209694)
+++ trunk/Source/WebCore/Modules/mediastream/RTCDataChannel.h        2016-12-12 02:50:06 UTC (rev 209695)
</span><span class="lines">@@ -42,7 +42,6 @@
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><span class="cx"> class Blob;
</span><del>-class Dictionary;
</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></pre></div>
<a id="trunkSourceWebCoreModulesmediastreamRTCIceCandidatecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/mediastream/RTCIceCandidate.cpp (209694 => 209695)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/mediastream/RTCIceCandidate.cpp        2016-12-12 01:41:16 UTC (rev 209694)
+++ trunk/Source/WebCore/Modules/mediastream/RTCIceCandidate.cpp        2016-12-12 02:50:06 UTC (rev 209695)
</span><span class="lines">@@ -35,35 +35,23 @@
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(WEB_RTC)
</span><span class="cx"> 
</span><del>-#include &quot;Dictionary.h&quot;
</del><span class="cx"> #include &quot;ExceptionCode.h&quot;
</span><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><del>-ExceptionOr&lt;Ref&lt;RTCIceCandidate&gt;&gt; RTCIceCandidate::create(const Dictionary&amp; dictionary)
</del><ins>+inline RTCIceCandidate::RTCIceCandidate(const String&amp; candidate, const String&amp; sdpMid, std::optional&lt;unsigned short&gt; sdpMLineIndex)
+    : m_candidate(candidate)
+    , m_sdpMid(sdpMid)
+    , m_sdpMLineIndex(sdpMLineIndex)
</ins><span class="cx"> {
</span><del>-    String candidate;
-    if (!dictionary.get(&quot;candidate&quot;, candidate))
-        return Exception { TypeError };
</del><ins>+    ASSERT(!sdpMid.isNull() || sdpMLineIndex);
+}
</ins><span class="cx"> 
</span><del>-    String sdpMid;
-    dictionary.getWithUndefinedOrNullCheck(&quot;sdpMid&quot;, sdpMid);
-
-    std::optional&lt;unsigned short&gt; sdpMLineIndex;
-    String sdpMLineIndexString;
-
-    if (dictionary.getWithUndefinedOrNullCheck(&quot;sdpMLineIndex&quot;, sdpMLineIndexString)) {
-        bool intConversionOk;
-        unsigned result = sdpMLineIndexString.toUIntStrict(&amp;intConversionOk);
-        if (!intConversionOk || result &gt; USHRT_MAX)
-            return Exception { TypeError };
-        sdpMLineIndex = result;
-    }
-
-    if (sdpMid.isNull() &amp;&amp; !sdpMLineIndex)
</del><ins>+ExceptionOr&lt;Ref&lt;RTCIceCandidate&gt;&gt; RTCIceCandidate::create(const Init&amp; dictionary)
+{
+    if (dictionary.sdpMid.isNull() &amp;&amp; !dictionary.sdpMLineIndex)
</ins><span class="cx">         return Exception { TypeError };
</span><del>-
-    return adoptRef(*new RTCIceCandidate(candidate, sdpMid, sdpMLineIndex));
</del><ins>+    return create(dictionary.candidate, dictionary.sdpMid, dictionary.sdpMLineIndex);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> Ref&lt;RTCIceCandidate&gt; RTCIceCandidate::create(const String&amp; candidate, const String&amp; sdpMid, std::optional&lt;unsigned short&gt; sdpMLineIndex)
</span><span class="lines">@@ -71,13 +59,6 @@
</span><span class="cx">     return adoptRef(*new RTCIceCandidate(candidate, sdpMid, sdpMLineIndex));
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-RTCIceCandidate::RTCIceCandidate(const String&amp; candidate, const String&amp; sdpMid, std::optional&lt;unsigned short&gt; sdpMLineIndex)
-    : m_candidate(candidate)
-    , m_sdpMid(sdpMid)
-    , m_sdpMLineIndex(sdpMLineIndex)
-{
-}
-
</del><span class="cx"> } // namespace WebCore
</span><span class="cx"> 
</span><span class="cx"> #endif // ENABLE(WEB_RTC)
</span></span></pre></div>
<a id="trunkSourceWebCoreModulesmediastreamRTCIceCandidateh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/mediastream/RTCIceCandidate.h (209694 => 209695)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/mediastream/RTCIceCandidate.h        2016-12-12 01:41:16 UTC (rev 209694)
+++ trunk/Source/WebCore/Modules/mediastream/RTCIceCandidate.h        2016-12-12 02:50:06 UTC (rev 209695)
</span><span class="lines">@@ -34,16 +34,18 @@
</span><span class="cx"> 
</span><span class="cx"> #include &quot;ExceptionOr.h&quot;
</span><span class="cx"> #include &quot;ScriptWrappable.h&quot;
</span><del>-#include &lt;wtf/Optional.h&gt;
</del><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><del>-class Dictionary;
-class RTCIceCandidateDescriptor;
-
</del><span class="cx"> class RTCIceCandidate : public RefCounted&lt;RTCIceCandidate&gt;, public ScriptWrappable {
</span><span class="cx"> public:
</span><del>-    static ExceptionOr&lt;Ref&lt;RTCIceCandidate&gt;&gt; create(const Dictionary&amp;);
</del><ins>+    struct Init {
+        String candidate;
+        String sdpMid;
+        std::optional&lt;unsigned short&gt; sdpMLineIndex;
+    };
+
+    static ExceptionOr&lt;Ref&lt;RTCIceCandidate&gt;&gt; create(const Init&amp;);
</ins><span class="cx">     static Ref&lt;RTCIceCandidate&gt; create(const String&amp; candidate, const String&amp; sdpMid, std::optional&lt;unsigned short&gt; sdpMLineIndex);
</span><span class="cx"> 
</span><span class="cx">     const String&amp; candidate() const { return m_candidate; }
</span><span class="lines">@@ -51,7 +53,7 @@
</span><span class="cx">     std::optional&lt;unsigned short&gt; sdpMLineIndex() const { return m_sdpMLineIndex; }
</span><span class="cx"> 
</span><span class="cx"> private:
</span><del>-    explicit RTCIceCandidate(const String&amp; candidate, const String&amp; sdpMid, std::optional&lt;unsigned short&gt; sdpMLineIndex);
</del><ins>+    RTCIceCandidate(const String&amp; candidate, const String&amp; sdpMid, std::optional&lt;unsigned short&gt; sdpMLineIndex);
</ins><span class="cx"> 
</span><span class="cx">     String m_candidate;
</span><span class="cx">     String m_sdpMid;
</span></span></pre></div>
<a id="trunkSourceWebCoreModulesmediastreamRTCIceCandidateidl"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/mediastream/RTCIceCandidate.idl (209694 => 209695)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/mediastream/RTCIceCandidate.idl        2016-12-12 01:41:16 UTC (rev 209694)
+++ trunk/Source/WebCore/Modules/mediastream/RTCIceCandidate.idl        2016-12-12 02:50:06 UTC (rev 209695)
</span><span class="lines">@@ -31,7 +31,7 @@
</span><span class="cx"> 
</span><span class="cx"> [
</span><span class="cx">     Conditional=WEB_RTC,
</span><del>-    Constructor(Dictionary dictionary),
</del><ins>+    Constructor(RTCIceCandidateInit candidateInitDict),
</ins><span class="cx">     ConstructorMayThrowException,
</span><span class="cx">     EnabledAtRuntime=peerConnection,
</span><span class="cx">     ImplementationLacksVTable,
</span><span class="lines">@@ -44,3 +44,9 @@
</span><span class="cx"> 
</span><span class="cx">     serializer = {candidate, sdpMid, sdpMLineIndex};
</span><span class="cx"> };
</span><ins>+
+dictionary RTCIceCandidateInit {
+    required DOMString candidate;
+    DOMString? sdpMid = null;
+    unsigned short? sdpMLineIndex = null;
+};
</ins></span></pre></div>
<a id="trunkSourceWebCoreModulesmediastreamRTCIceServerh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/mediastream/RTCIceServer.h (209694 => 209695)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/mediastream/RTCIceServer.h        2016-12-12 01:41:16 UTC (rev 209694)
+++ trunk/Source/WebCore/Modules/mediastream/RTCIceServer.h        2016-12-12 02:50:06 UTC (rev 209695)
</span><span class="lines">@@ -27,34 +27,16 @@
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(WEB_RTC)
</span><span class="cx"> 
</span><del>-#include &lt;wtf/RefCounted.h&gt;
</del><ins>+#include &lt;wtf/Variant.h&gt;
</ins><span class="cx"> #include &lt;wtf/Vector.h&gt;
</span><span class="cx"> #include &lt;wtf/text/WTFString.h&gt;
</span><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><del>-class RTCIceServer : public RefCounted&lt;RTCIceServer&gt; {
-public:
-    static Ref&lt;RTCIceServer&gt; create(const Vector&lt;String&gt;&amp; urls, const String&amp; credential, const String&amp; username)
-    {
-        return adoptRef(*new RTCIceServer(urls, credential, username));
-    }
-    virtual ~RTCIceServer() { }
-
-    const Vector&lt;String&gt;&amp; urls() const { return m_urls; }
-    const String&amp; credential() const { return m_credential; }
-    const String&amp; username() const { return m_username; }
-
-private:
-    RTCIceServer(const Vector&lt;String&gt;&amp; urls, const String&amp; credential, const String&amp; username)
-        : m_urls(urls)
-        , m_credential(credential)
-        , m_username(username)
-    { }
-
-    Vector&lt;String&gt; m_urls;
-    String m_credential;
-    String m_username;
</del><ins>+struct RTCIceServer {
+    Variant&lt;String, Vector&lt;String&gt;&gt; urls;
+    String credential;
+    String username;
</ins><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> } // namespace WebCore
</span></span></pre></div>
<a id="trunkSourceWebCoreModulesmediastreamRTCIceServeridl"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/mediastream/RTCIceServer.idl (209694 => 209695)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/mediastream/RTCIceServer.idl        2016-12-12 01:41:16 UTC (rev 209694)
+++ trunk/Source/WebCore/Modules/mediastream/RTCIceServer.idl        2016-12-12 02:50:06 UTC (rev 209695)
</span><span class="lines">@@ -25,10 +25,9 @@
</span><span class="cx"> 
</span><span class="cx"> [
</span><span class="cx">     Conditional=WEB_RTC,
</span><del>-    NoInterfaceObject,
-] interface RTCIceServer {
-    readonly attribute sequence&lt;DOMString&gt; urls;
-    readonly attribute DOMString username;
-    readonly attribute DOMString credential;
</del><ins>+    JSGenerateToJSObject,
+] dictionary RTCIceServer {
+    required (DOMString or sequence&lt;DOMString&gt;) urls;
+    DOMString username;
+    DOMString credential;
</ins><span class="cx"> };
</span><del>-
</del></span></pre></div>
<a id="trunkSourceWebCoreModulesmediastreamRTCPeerConnectioncpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/mediastream/RTCPeerConnection.cpp (209694 => 209695)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/mediastream/RTCPeerConnection.cpp        2016-12-12 01:41:16 UTC (rev 209694)
+++ trunk/Source/WebCore/Modules/mediastream/RTCPeerConnection.cpp        2016-12-12 02:50:06 UTC (rev 209695)
</span><span class="lines">@@ -35,11 +35,11 @@
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(WEB_RTC)
</span><span class="cx"> 
</span><del>-#include &quot;Dictionary.h&quot;
</del><span class="cx"> #include &quot;Document.h&quot;
</span><span class="cx"> #include &quot;Event.h&quot;
</span><span class="cx"> #include &quot;EventNames.h&quot;
</span><span class="cx"> #include &quot;Frame.h&quot;
</span><ins>+#include &quot;MediaEndpointConfiguration.h&quot;
</ins><span class="cx"> #include &quot;MediaStream.h&quot;
</span><span class="cx"> #include &quot;MediaStreamTrack.h&quot;
</span><span class="cx"> #include &quot;RTCConfiguration.h&quot;
</span><span class="lines">@@ -77,7 +77,7 @@
</span><span class="cx">     stop();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-ExceptionOr&lt;void&gt; RTCPeerConnection::initializeWith(Document&amp; document, const Dictionary&amp; rtcConfiguration)
</del><ins>+ExceptionOr&lt;void&gt; RTCPeerConnection::initializeWith(Document&amp; document, RTCConfiguration&amp;&amp; configuration)
</ins><span class="cx"> {
</span><span class="cx">     if (!document.frame())
</span><span class="cx">         return Exception { NOT_SUPPORTED_ERR };
</span><span class="lines">@@ -85,7 +85,7 @@
</span><span class="cx">     if (!m_backend)
</span><span class="cx">         return Exception { NOT_SUPPORTED_ERR };
</span><span class="cx"> 
</span><del>-    return setConfiguration(rtcConfiguration);
</del><ins>+    return setConfiguration(WTFMove(configuration));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> ExceptionOr&lt;Ref&lt;RTCRtpSender&gt;&gt; RTCPeerConnection::addTrack(Ref&lt;MediaStreamTrack&gt;&amp;&amp; track, const Vector&lt;std::reference_wrapper&lt;MediaStream&gt;&gt;&amp; streams)
</span><span class="lines">@@ -348,25 +348,37 @@
</span><span class="cx">     return String();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-RTCConfiguration* RTCPeerConnection::getConfiguration() const
</del><ins>+ExceptionOr&lt;void&gt; RTCPeerConnection::setConfiguration(RTCConfiguration&amp;&amp; configuration)
</ins><span class="cx"> {
</span><del>-    return m_configuration.get();
-}
-
-ExceptionOr&lt;void&gt; RTCPeerConnection::setConfiguration(const Dictionary&amp; configuration)
-{
-    if (configuration.isUndefinedOrNull())
-        return Exception { TypeError };
-
</del><span class="cx">     if (m_signalingState == SignalingState::Closed)
</span><span class="cx">         return Exception { INVALID_STATE_ERR };
</span><span class="cx"> 
</span><del>-    auto newConfiguration = RTCConfiguration::create(configuration);
-    if (newConfiguration.hasException())
-        return newConfiguration.releaseException();
</del><ins>+    Vector&lt;MediaEndpointConfiguration::IceServerInfo&gt; servers;
+    if (configuration.iceServers) {
+        servers.reserveInitialCapacity(configuration.iceServers-&gt;size());
+        for (auto&amp; server : configuration.iceServers.value()) {
+            Vector&lt;URL&gt; serverURLs;
+            WTF::switchOn(server.urls,
+                [&amp;serverURLs] (const String&amp; string) {
+                    serverURLs.reserveInitialCapacity(1);
+                    serverURLs.uncheckedAppend(URL { URL { }, string });
+                },
+                [&amp;serverURLs] (const Vector&lt;String&gt;&amp; vector) {
+                    serverURLs.reserveInitialCapacity(vector.size());
+                    for (auto&amp; string : vector)
+                        serverURLs.uncheckedAppend(URL { URL { }, string });
+                }
+            );
+            for (auto&amp; serverURL : serverURLs) {
+                if (!(serverURL.protocolIs(&quot;turn&quot;) || serverURL.protocolIs(&quot;turns&quot;) || serverURL.protocolIs(&quot;stun&quot;)))
+                    return Exception { INVALID_ACCESS_ERR };
+            }
+            servers.uncheckedAppend({ WTFMove(serverURLs), server.credential, server.username });
+        }
+    }
</ins><span class="cx"> 
</span><del>-    m_configuration = newConfiguration.releaseReturnValue();
-    m_backend-&gt;setConfiguration(*m_configuration);
</del><ins>+    m_backend-&gt;setConfiguration({ WTFMove(servers), configuration.iceTransportPolicy, configuration.bundlePolicy });
+    m_configuration = WTFMove(configuration);
</ins><span class="cx">     return { };
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoreModulesmediastreamRTCPeerConnectionh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/mediastream/RTCPeerConnection.h (209694 => 209695)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/mediastream/RTCPeerConnection.h        2016-12-12 01:41:16 UTC (rev 209694)
+++ trunk/Source/WebCore/Modules/mediastream/RTCPeerConnection.h        2016-12-12 02:50:06 UTC (rev 209695)
</span><span class="lines">@@ -37,19 +37,15 @@
</span><span class="cx"> #include &quot;ActiveDOMObject.h&quot;
</span><span class="cx"> #include &quot;EventTarget.h&quot;
</span><span class="cx"> #include &quot;MediaStream.h&quot;
</span><ins>+#include &quot;RTCConfiguration.h&quot;
</ins><span class="cx"> #include &quot;RTCDataChannel.h&quot;
</span><span class="cx"> #include &quot;RTCOfferAnswerOptions.h&quot;
</span><span class="cx"> #include &quot;RTCRtpTransceiver.h&quot;
</span><del>-#include &quot;ScriptWrappable.h&quot;
-#include &lt;wtf/HashMap.h&gt;
-#include &lt;wtf/RefCounted.h&gt;
</del><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><del>-class Dictionary;
</del><span class="cx"> class MediaStreamTrack;
</span><span class="cx"> class PeerConnectionBackend;
</span><del>-class RTCConfiguration;
</del><span class="cx"> class RTCIceCandidate;
</span><span class="cx"> class RTCPeerConnectionErrorCallback;
</span><span class="cx"> class RTCSessionDescription;
</span><span class="lines">@@ -58,7 +54,7 @@
</span><span class="cx"> class RTCPeerConnection final : public RefCounted&lt;RTCPeerConnection&gt;, public RTCRtpSenderClient, public EventTargetWithInlineData, public ActiveDOMObject {
</span><span class="cx"> public:
</span><span class="cx">     static Ref&lt;RTCPeerConnection&gt; create(ScriptExecutionContext&amp;);
</span><del>-    ~RTCPeerConnection();
</del><ins>+    virtual ~RTCPeerConnection();
</ins><span class="cx"> 
</span><span class="cx">     using AnswerOptions = RTCAnswerOptions;
</span><span class="cx">     using DataChannelInit = RTCDataChannelInit;
</span><span class="lines">@@ -65,7 +61,7 @@
</span><span class="cx">     using OfferAnswerOptions = RTCOfferAnswerOptions;
</span><span class="cx">     using OfferOptions = RTCOfferOptions;
</span><span class="cx"> 
</span><del>-    ExceptionOr&lt;void&gt; initializeWith(Document&amp;, const Dictionary&amp;);
</del><ins>+    ExceptionOr&lt;void&gt; initializeWith(Document&amp;, RTCConfiguration&amp;&amp;);
</ins><span class="cx"> 
</span><span class="cx">     const Vector&lt;std::reference_wrapper&lt;RTCRtpSender&gt;&gt;&amp; getSenders() const { return m_transceiverSet-&gt;senders(); }
</span><span class="cx">     const Vector&lt;std::reference_wrapper&lt;RTCRtpReceiver&gt;&gt;&amp; getReceivers() const { return m_transceiverSet-&gt;receivers(); }
</span><span class="lines">@@ -107,8 +103,8 @@
</span><span class="cx">     String iceGatheringState() const;
</span><span class="cx">     String iceConnectionState() const;
</span><span class="cx"> 
</span><del>-    RTCConfiguration* getConfiguration() const;
-    ExceptionOr&lt;void&gt; setConfiguration(const Dictionary&amp;);
</del><ins>+    const RTCConfiguration&amp; getConfiguration() const { return m_configuration; }
+    ExceptionOr&lt;void&gt; setConfiguration(RTCConfiguration&amp;&amp;);
</ins><span class="cx"> 
</span><span class="cx">     void privateGetStats(MediaStreamTrack*, PeerConnection::StatsPromise&amp;&amp;);
</span><span class="cx"> 
</span><span class="lines">@@ -120,8 +116,8 @@
</span><span class="cx">     EventTargetInterface eventTargetInterface() const final { return RTCPeerConnectionEventTargetInterfaceType; }
</span><span class="cx">     ScriptExecutionContext* scriptExecutionContext() const final { return ActiveDOMObject::scriptExecutionContext(); }
</span><span class="cx"> 
</span><del>-    using RefCounted&lt;RTCPeerConnection&gt;::ref;
-    using RefCounted&lt;RTCPeerConnection&gt;::deref;
</del><ins>+    using RefCounted::ref;
+    using RefCounted::deref;
</ins><span class="cx"> 
</span><span class="cx">     // Used for testing with a mock
</span><span class="cx">     WEBCORE_EXPORT void emulatePlatformEvent(const String&amp; action);
</span><span class="lines">@@ -167,7 +163,7 @@
</span><span class="cx"> 
</span><span class="cx">     std::unique_ptr&lt;PeerConnectionBackend&gt; m_backend;
</span><span class="cx"> 
</span><del>-    RefPtr&lt;RTCConfiguration&gt; m_configuration;
</del><ins>+    RTCConfiguration m_configuration;
</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 (209694 => 209695)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/mediastream/RTCPeerConnection.idl        2016-12-12 01:41:16 UTC (rev 209694)
+++ trunk/Source/WebCore/Modules/mediastream/RTCPeerConnection.idl        2016-12-12 02:50:06 UTC (rev 209695)
</span><span class="lines">@@ -59,7 +59,7 @@
</span><span class="cx">     JSBuiltinConstructor,
</span><span class="cx"> ] interface RTCPeerConnection : EventTarget {
</span><span class="cx">     // Private initializer
</span><del>-    [PrivateIdentifier, CallWith=Document, MayThrowException] void initializeWith(Dictionary parameters);
</del><ins>+    [PrivateIdentifier, CallWith=Document, MayThrowException] void initializeWith(RTCConfiguration configuration);
</ins><span class="cx"> 
</span><span class="cx">     // RTP Media API extensions
</span><span class="cx">     [PrivateIdentifier, PublicIdentifier] sequence&lt;RTCRtpSender&gt; getSenders();
</span><span class="lines">@@ -119,7 +119,7 @@
</span><span class="cx">     readonly attribute DOMString iceConnectionState;
</span><span class="cx"> 
</span><span class="cx">     RTCConfiguration getConfiguration();
</span><del>-    [MayThrowException] void setConfiguration(Dictionary configuration);
</del><ins>+    [MayThrowException] void setConfiguration(RTCConfiguration configuration);
</ins><span class="cx"> 
</span><span class="cx">     [JSBuiltin] Promise&lt;RTCStatsReport&gt; getStats(optional MediaStreamTrack? selector = null);
</span><span class="cx">     // Legacy signature: Promise&lt;void&gt; getStats(MediaStreamTrack? selector
</span></span></pre></div>
<a id="trunkSourceWebCoreModulesmediastreamRTCSessionDescriptioncpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/mediastream/RTCSessionDescription.cpp (209694 => 209695)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/mediastream/RTCSessionDescription.cpp        2016-12-12 01:41:16 UTC (rev 209694)
+++ trunk/Source/WebCore/Modules/mediastream/RTCSessionDescription.cpp        2016-12-12 02:50:06 UTC (rev 209695)
</span><span class="lines">@@ -34,42 +34,17 @@
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(WEB_RTC)
</span><span class="cx"> 
</span><del>-#include &quot;Dictionary.h&quot;
-#include &quot;ExceptionCode.h&quot;
-
</del><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><del>-static bool parseTypeString(const String&amp; string, RTCSessionDescription::SdpType&amp; outType)
</del><ins>+inline RTCSessionDescription::RTCSessionDescription(SdpType type, const String&amp; sdp)
+    : m_type(type)
+    , m_sdp(sdp)
</ins><span class="cx"> {
</span><del>-    if (string == &quot;offer&quot;)
-        outType = RTCSessionDescription::SdpType::Offer;
-    else if (string == &quot;pranswer&quot;)
-        outType = RTCSessionDescription::SdpType::Pranswer;
-    else if (string == &quot;answer&quot;)
-        outType = RTCSessionDescription::SdpType::Answer;
-    else if (string == &quot;rollback&quot;)
-        outType = RTCSessionDescription::SdpType::Rollback;
-    else
-        return false;
-
-    return true;
</del><span class="cx"> }
</span><span class="cx"> 
</span><del>-ExceptionOr&lt;Ref&lt;RTCSessionDescription&gt;&gt; RTCSessionDescription::create(const Dictionary&amp; dictionary)
</del><ins>+Ref&lt;RTCSessionDescription&gt; RTCSessionDescription::create(const Init&amp; dictionary)
</ins><span class="cx"> {
</span><del>-    String typeString;
-    // Dictionary member type is required.
-    if (!dictionary.get(&quot;type&quot;, typeString))
-        return Exception { TypeError };
-
-    SdpType type;
-    if (!parseTypeString(typeString, type))
-        return Exception { TypeError };
-
-    String sdp;
-    dictionary.get(&quot;sdp&quot;, sdp);
-
-    return adoptRef(*new RTCSessionDescription(type, sdp));
</del><ins>+    return create(dictionary.type, dictionary.sdp);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> Ref&lt;RTCSessionDescription&gt; RTCSessionDescription::create(SdpType type, const String&amp; sdp)
</span><span class="lines">@@ -77,12 +52,6 @@
</span><span class="cx">     return adoptRef(*new RTCSessionDescription(type, sdp));
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-RTCSessionDescription::RTCSessionDescription(SdpType type, const String&amp; sdp)
-    : m_type(type)
-    , m_sdp(sdp)
-{
-}
-
</del><span class="cx"> } // namespace WebCore
</span><span class="cx"> 
</span><span class="cx"> #endif // ENABLE(WEB_RTC)
</span></span></pre></div>
<a id="trunkSourceWebCoreModulesmediastreamRTCSessionDescriptionh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/mediastream/RTCSessionDescription.h (209694 => 209695)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/mediastream/RTCSessionDescription.h        2016-12-12 01:41:16 UTC (rev 209694)
+++ trunk/Source/WebCore/Modules/mediastream/RTCSessionDescription.h        2016-12-12 02:50:06 UTC (rev 209695)
</span><span class="lines">@@ -37,18 +37,15 @@
</span><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><del>-class Dictionary;
-
</del><span class="cx"> class RTCSessionDescription : public RefCounted&lt;RTCSessionDescription&gt;, public ScriptWrappable {
</span><span class="cx"> public:
</span><del>-    enum class SdpType {
-        Offer,
-        Pranswer,
-        Answer,
-        Rollback
</del><ins>+    enum class SdpType { Offer, Pranswer, Answer, Rollback };
+
+    struct Init {
+        SdpType type;
+        String sdp;
</ins><span class="cx">     };
</span><del>-
-    static ExceptionOr&lt;Ref&lt;RTCSessionDescription&gt;&gt; create(const Dictionary&amp;);
</del><ins>+    static Ref&lt;RTCSessionDescription&gt; create(const Init&amp;);
</ins><span class="cx">     static Ref&lt;RTCSessionDescription&gt; create(SdpType, const String&amp; sdp);
</span><span class="cx"> 
</span><span class="cx">     SdpType type() const { return m_type; }
</span></span></pre></div>
<a id="trunkSourceWebCoreModulesmediastreamRTCSessionDescriptionidl"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/mediastream/RTCSessionDescription.idl (209694 => 209695)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/mediastream/RTCSessionDescription.idl        2016-12-12 01:41:16 UTC (rev 209694)
+++ trunk/Source/WebCore/Modules/mediastream/RTCSessionDescription.idl        2016-12-12 02:50:06 UTC (rev 209695)
</span><span class="lines">@@ -31,8 +31,7 @@
</span><span class="cx"> 
</span><span class="cx"> [
</span><span class="cx">     Conditional=WEB_RTC,
</span><del>-    Constructor(Dictionary dictionary),
-    ConstructorMayThrowException,
</del><ins>+    Constructor(RTCSessionDescriptionInit descriptionInitDict),
</ins><span class="cx">     EnabledAtRuntime=peerConnection,
</span><span class="cx">     ImplementationLacksVTable,
</span><span class="cx">     PrivateIdentifier,
</span><span class="lines">@@ -44,9 +43,9 @@
</span><span class="cx">     serializer = {type, sdp};
</span><span class="cx"> };
</span><span class="cx"> 
</span><del>-enum RTCSdpType {
-    &quot;offer&quot;,
-    &quot;pranswer&quot;,
-    &quot;answer&quot;,
-    &quot;rollback&quot;
</del><ins>+enum RTCSdpType { &quot;offer&quot;, &quot;pranswer&quot;, &quot;answer&quot;, &quot;rollback&quot; };
+
+dictionary RTCSessionDescriptionInit {
+    required RTCSdpType type;
+    DOMString sdp = &quot;&quot;;
</ins><span class="cx"> };
</span></span></pre></div>
<a id="trunkSourceWebCoreModuleswebaudioMediaStreamAudioDestinationNodecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/webaudio/MediaStreamAudioDestinationNode.cpp (209694 => 209695)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/webaudio/MediaStreamAudioDestinationNode.cpp        2016-12-12 01:41:16 UTC (rev 209694)
+++ trunk/Source/WebCore/Modules/webaudio/MediaStreamAudioDestinationNode.cpp        2016-12-12 02:50:06 UTC (rev 209695)
</span><span class="lines">@@ -23,16 +23,14 @@
</span><span class="cx">  */
</span><span class="cx"> 
</span><span class="cx"> #include &quot;config.h&quot;
</span><ins>+#include &quot;MediaStreamAudioDestinationNode.h&quot;
</ins><span class="cx"> 
</span><span class="cx"> #if ENABLE(WEB_AUDIO) &amp;&amp; ENABLE(MEDIA_STREAM)
</span><span class="cx"> 
</span><del>-#include &quot;MediaStreamAudioDestinationNode.h&quot;
-
</del><span class="cx"> #include &quot;AudioContext.h&quot;
</span><span class="cx"> #include &quot;AudioNodeInput.h&quot;
</span><span class="cx"> #include &quot;MediaStream.h&quot;
</span><span class="cx"> #include &quot;MediaStreamAudioSource.h&quot;
</span><del>-#include &quot;RTCPeerConnectionHandler.h&quot;
</del><span class="cx"> #include &lt;wtf/Locker.h&gt;
</span><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span></span></pre></div>
<a id="trunkSourceWebCoreWebCorexcodeprojprojectpbxproj"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj (209694 => 209695)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj        2016-12-12 01:41:16 UTC (rev 209694)
+++ trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj        2016-12-12 02:50:06 UTC (rev 209695)
</span><span class="lines">@@ -138,12 +138,8 @@
</span><span class="cx">                 073794E619EE2FF200E5A045 /* JSRTCConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = 073794E419EE2FF200E5A045 /* JSRTCConfiguration.h */; };
</span><span class="cx">                 073794EB19EE341E00E5A045 /* JSRTCIceServer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 073794E919EE341E00E5A045 /* JSRTCIceServer.cpp */; };
</span><span class="cx">                 073794EC19EE341E00E5A045 /* JSRTCIceServer.h in Headers */ = {isa = PBXBuildFile; fileRef = 073794EA19EE341E00E5A045 /* JSRTCIceServer.h */; };
</span><del>-                073794F119EE37BB00E5A045 /* RTCPeerConnectionHandlerMock.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 073794EF19EE37BB00E5A045 /* RTCPeerConnectionHandlerMock.cpp */; };
-                073794F219EE37BB00E5A045 /* RTCPeerConnectionHandlerMock.h in Headers */ = {isa = PBXBuildFile; fileRef = 073794F019EE37BB00E5A045 /* RTCPeerConnectionHandlerMock.h */; };
</del><span class="cx">                 073794F919F5864E00E5A045 /* RTCDataChannelHandlerMock.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 073794F319F5864E00E5A045 /* RTCDataChannelHandlerMock.cpp */; };
</span><span class="cx">                 073794FA19F5864E00E5A045 /* RTCDataChannelHandlerMock.h in Headers */ = {isa = PBXBuildFile; fileRef = 073794F419F5864E00E5A045 /* RTCDataChannelHandlerMock.h */; };
</span><del>-                073794FB19F5864E00E5A045 /* RTCDTMFSenderHandlerMock.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 073794F519F5864E00E5A045 /* RTCDTMFSenderHandlerMock.cpp */; };
-                073794FC19F5864E00E5A045 /* RTCDTMFSenderHandlerMock.h in Headers */ = {isa = PBXBuildFile; fileRef = 073794F619F5864E00E5A045 /* RTCDTMFSenderHandlerMock.h */; };
</del><span class="cx">                 073794FD19F5864E00E5A045 /* RTCNotifiersMock.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 073794F719F5864E00E5A045 /* RTCNotifiersMock.cpp */; };
</span><span class="cx">                 073794FE19F5864E00E5A045 /* RTCNotifiersMock.h in Headers */ = {isa = PBXBuildFile; fileRef = 073794F819F5864E00E5A045 /* RTCNotifiersMock.h */; };
</span><span class="cx">                 07394EC81BAB2CCD00BE99CD /* MediaDevicesRequest.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 07394EC71BAB2CCD00BE99CD /* MediaDevicesRequest.cpp */; };
</span><span class="lines">@@ -152,7 +148,6 @@
</span><span class="cx">                 073BE34117D17E01002BD431 /* JSNavigatorUserMedia.h in Headers */ = {isa = PBXBuildFile; fileRef = 073BE33F17D17E01002BD431 /* JSNavigatorUserMedia.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><span class="cx">                 073BE34E17D180B2002BD431 /* RTCSessionDescriptionDescriptor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 07221BAB17CF0AD400848E51 /* RTCSessionDescriptionDescriptor.cpp */; };
</span><span class="cx">                 073BE34F17D18183002BD431 /* RTCIceCandidateDescriptor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 07221BA617CF0AD400848E51 /* RTCIceCandidateDescriptor.cpp */; };
</span><del>-                073BE35017D181A6002BD431 /* RTCPeerConnectionHandler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 07221BA817CF0AD400848E51 /* RTCPeerConnectionHandler.cpp */; };
</del><span class="cx">                 074E82BA18A69F0E007EF54C /* PlatformTimeRanges.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 074E82B818A69F0E007EF54C /* PlatformTimeRanges.cpp */; };
</span><span class="cx">                 074E82BB18A69F0E007EF54C /* PlatformTimeRanges.h in Headers */ = {isa = PBXBuildFile; fileRef = 074E82B918A69F0E007EF54C /* PlatformTimeRanges.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><span class="cx">                 0753860214489E9800B78452 /* CachedTextTrack.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0753860014489E9800B78452 /* CachedTextTrack.cpp */; };
</span><span class="lines">@@ -224,7 +219,6 @@
</span><span class="cx">                 078E093E17D16E1C00420AA1 /* RTCDTMFSenderHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = 07221BA417CF0AD400848E51 /* RTCDTMFSenderHandler.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><span class="cx">                 078E093F17D16E1C00420AA1 /* RTCDTMFSenderHandlerClient.h in Headers */ = {isa = PBXBuildFile; fileRef = 07221BA517CF0AD400848E51 /* RTCDTMFSenderHandlerClient.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><span class="cx">                 078E094017D16E1C00420AA1 /* RTCIceCandidateDescriptor.h in Headers */ = {isa = PBXBuildFile; fileRef = 07221BA717CF0AD400848E51 /* RTCIceCandidateDescriptor.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><del>-                078E094117D16E1C00420AA1 /* RTCPeerConnectionHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = 07221BA917CF0AD400848E51 /* RTCPeerConnectionHandler.h */; };
</del><span class="cx">                 078E094217D16E1C00420AA1 /* RTCPeerConnectionHandlerClient.h in Headers */ = {isa = PBXBuildFile; fileRef = 07221BAA17CF0AD400848E51 /* RTCPeerConnectionHandlerClient.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><span class="cx">                 078E094317D16E1C00420AA1 /* RTCSessionDescriptionDescriptor.h in Headers */ = {isa = PBXBuildFile; fileRef = 07221BAC17CF0AD400848E51 /* RTCSessionDescriptionDescriptor.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><span class="cx">                 078E094417D16E1C00420AA1 /* RTCSessionDescriptionRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 07221BAD17CF0AD400848E51 /* RTCSessionDescriptionRequest.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><span class="lines">@@ -270,8 +264,6 @@
</span><span class="cx">                 07AA6B6C166D2C1300D45671 /* InbandTextTrackPrivateAVFObjC.h in Headers */ = {isa = PBXBuildFile; fileRef = 07AA6B69166D019500D45671 /* InbandTextTrackPrivateAVFObjC.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><span class="cx">                 07AB996918DA3C010018771E /* RTCConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = 07AB996518DA3C010018771E /* RTCConfiguration.h */; };
</span><span class="cx">                 07AB996B18DA3C010018771E /* RTCIceServer.h in Headers */ = {isa = PBXBuildFile; fileRef = 07AB996718DA3C010018771E /* RTCIceServer.h */; };
</span><del>-                07AB996F18DA3C740018771E /* RTCConfigurationPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 07AB996D18DA3C740018771E /* RTCConfigurationPrivate.h */; };
-                07AB997018DA3C740018771E /* RTCIceServerPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 07AB996E18DA3C740018771E /* RTCIceServerPrivate.h */; };
</del><span class="cx">                 07ABEF6C1D8A1C5800F21972 /* MediaDevicesEnumerationRequest.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 07ABEF6B1D8A1C5800F21972 /* MediaDevicesEnumerationRequest.cpp */; };
</span><span class="cx">                 07ABEF6E1D8A1C7600F21972 /* MediaDevicesEnumerationRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 07ABEF6D1D8A1C7600F21972 /* MediaDevicesEnumerationRequest.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><span class="cx">                 07AC47011952102100EE9723 /* ISOVTTCue.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 07AC46FF1952102100EE9723 /* ISOVTTCue.cpp */; };
</span><span class="lines">@@ -2494,7 +2486,6 @@
</span><span class="cx">                 5E16A2E41BFA650B0029A21E /* MediaEndpointPeerConnection.h in Headers */ = {isa = PBXBuildFile; fileRef = 5E16A2E31BFA64FB0029A21E /* MediaEndpointPeerConnection.h */; };
</span><span class="cx">                 5E16A2E51BFA650F0029A21E /* MediaEndpointPeerConnection.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5E16A2E21BFA64FB0029A21E /* MediaEndpointPeerConnection.cpp */; };
</span><span class="cx">                 5E2C43511BCEE2F60001E2BC /* PeerConnectionBackend.h in Headers */ = {isa = PBXBuildFile; fileRef = 5E2C434D1BCEE2E50001E2BC /* PeerConnectionBackend.h */; };
</span><del>-                5E2C43531BCEE2F60001E2BC /* RTCConfiguration.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5E2C434F1BCEE2E50001E2BC /* RTCConfiguration.cpp */; };
</del><span class="cx">                 5E2C435F1BCEE31E0001E2BC /* RTCRtpSenderReceiverBase.h in Headers */ = {isa = PBXBuildFile; fileRef = 5E2C435D1BCEE30D0001E2BC /* RTCRtpSenderReceiverBase.h */; };
</span><span class="cx">                 5E2C43601BCEE3230001E2BC /* RTCRtpSender.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5E2C43591BCEE30D0001E2BC /* RTCRtpSender.cpp */; };
</span><span class="cx">                 5E2C43611BCEE3230001E2BC /* RTCRtpSender.h in Headers */ = {isa = PBXBuildFile; fileRef = 5E2C435A1BCEE30D0001E2BC /* RTCRtpSender.h */; };
</span><span class="lines">@@ -7116,8 +7107,6 @@
</span><span class="cx">                 07221BA517CF0AD400848E51 /* RTCDTMFSenderHandlerClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RTCDTMFSenderHandlerClient.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 07221BA617CF0AD400848E51 /* RTCIceCandidateDescriptor.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RTCIceCandidateDescriptor.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 07221BA717CF0AD400848E51 /* RTCIceCandidateDescriptor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RTCIceCandidateDescriptor.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><del>-                07221BA817CF0AD400848E51 /* RTCPeerConnectionHandler.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RTCPeerConnectionHandler.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
-                07221BA917CF0AD400848E51 /* RTCPeerConnectionHandler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RTCPeerConnectionHandler.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</del><span class="cx">                 07221BAA17CF0AD400848E51 /* RTCPeerConnectionHandlerClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RTCPeerConnectionHandlerClient.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 07221BAB17CF0AD400848E51 /* RTCSessionDescriptionDescriptor.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RTCSessionDescriptionDescriptor.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 07221BAC17CF0AD400848E51 /* RTCSessionDescriptionDescriptor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RTCSessionDescriptionDescriptor.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="lines">@@ -7155,12 +7144,8 @@
</span><span class="cx">                 073794EA19EE341E00E5A045 /* JSRTCIceServer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSRTCIceServer.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 073794ED19EE364200E5A045 /* DOMURLMediaStream.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DOMURLMediaStream.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 073794EE19EE364200E5A045 /* DOMURLMediaStream.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = DOMURLMediaStream.idl; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><del>-                073794EF19EE37BB00E5A045 /* RTCPeerConnectionHandlerMock.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RTCPeerConnectionHandlerMock.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
-                073794F019EE37BB00E5A045 /* RTCPeerConnectionHandlerMock.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RTCPeerConnectionHandlerMock.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</del><span class="cx">                 073794F319F5864E00E5A045 /* RTCDataChannelHandlerMock.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RTCDataChannelHandlerMock.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 073794F419F5864E00E5A045 /* RTCDataChannelHandlerMock.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RTCDataChannelHandlerMock.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><del>-                073794F519F5864E00E5A045 /* RTCDTMFSenderHandlerMock.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RTCDTMFSenderHandlerMock.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
-                073794F619F5864E00E5A045 /* RTCDTMFSenderHandlerMock.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RTCDTMFSenderHandlerMock.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</del><span class="cx">                 073794F719F5864E00E5A045 /* RTCNotifiersMock.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RTCNotifiersMock.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 073794F819F5864E00E5A045 /* RTCNotifiersMock.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RTCNotifiersMock.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 07394EC71BAB2CCD00BE99CD /* MediaDevicesRequest.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MediaDevicesRequest.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="lines">@@ -7239,8 +7224,6 @@
</span><span class="cx">                 07AB996618DA3C010018771E /* RTCConfiguration.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = RTCConfiguration.idl; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 07AB996718DA3C010018771E /* RTCIceServer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RTCIceServer.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 07AB996818DA3C010018771E /* RTCIceServer.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = RTCIceServer.idl; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><del>-                07AB996D18DA3C740018771E /* RTCConfigurationPrivate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RTCConfigurationPrivate.h; sourceTree = &quot;&lt;group&gt;&quot;; };
-                07AB996E18DA3C740018771E /* RTCIceServerPrivate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RTCIceServerPrivate.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</del><span class="cx">                 07ABEF6B1D8A1C5800F21972 /* MediaDevicesEnumerationRequest.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MediaDevicesEnumerationRequest.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 07ABEF6D1D8A1C7600F21972 /* MediaDevicesEnumerationRequest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MediaDevicesEnumerationRequest.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 07AC46FF1952102100EE9723 /* ISOVTTCue.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ISOVTTCue.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="lines">@@ -9762,7 +9745,6 @@
</span><span class="cx">                 5E16A2E21BFA64FB0029A21E /* MediaEndpointPeerConnection.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; lineEnding = 0; path = MediaEndpointPeerConnection.cpp; sourceTree = &quot;&lt;group&gt;&quot;; xcLanguageSpecificationIdentifier = xcode.lang.cpp; };
</span><span class="cx">                 5E16A2E31BFA64FB0029A21E /* MediaEndpointPeerConnection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = MediaEndpointPeerConnection.h; sourceTree = &quot;&lt;group&gt;&quot;; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; };
</span><span class="cx">                 5E2C434D1BCEE2E50001E2BC /* PeerConnectionBackend.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PeerConnectionBackend.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><del>-                5E2C434F1BCEE2E50001E2BC /* RTCConfiguration.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RTCConfiguration.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</del><span class="cx">                 5E2C43541BCEE30D0001E2BC /* RTCPeerConnection.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = RTCPeerConnection.js; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 5E2C43551BCEE30D0001E2BC /* RTCPeerConnectionInternals.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = RTCPeerConnectionInternals.js; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 5E2C43561BCEE30D0001E2BC /* RTCRtpReceiver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RTCRtpReceiver.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="lines">@@ -15084,7 +15066,6 @@
</span><span class="cx">                                 072A703F1D6E8F6200DF0AFC /* OverconstrainedErrorEvent.idl */,
</span><span class="cx">                                 41E408381DCB747900EFCE19 /* PeerConnectionBackend.cpp */,
</span><span class="cx">                                 5E2C434D1BCEE2E50001E2BC /* PeerConnectionBackend.h */,
</span><del>-                                5E2C434F1BCEE2E50001E2BC /* RTCConfiguration.cpp */,
</del><span class="cx">                                 07AB996518DA3C010018771E /* RTCConfiguration.h */,
</span><span class="cx">                                 07AB996618DA3C010018771E /* RTCConfiguration.idl */,
</span><span class="cx">                                 07221B6317CEC32700848E51 /* RTCDataChannel.cpp */,
</span><span class="lines">@@ -15181,7 +15162,6 @@
</span><span class="cx">                                 4A4F656F1AA997F100E38CDD /* RealtimeMediaSourceSettings.h */,
</span><span class="cx">                                 2EC41DE21C0410A300D294FE /* RealtimeMediaSourceSupportedConstraints.cpp */,
</span><span class="cx">                                 07C1C0E41BFB60ED00BD2256 /* RealtimeMediaSourceSupportedConstraints.h */,
</span><del>-                                07AB996D18DA3C740018771E /* RTCConfigurationPrivate.h */,
</del><span class="cx">                                 07221BA217CF0AD400848E51 /* RTCDataChannelHandler.h */,
</span><span class="cx">                                 07221BA317CF0AD400848E51 /* RTCDataChannelHandlerClient.h */,
</span><span class="cx">                                 07221BA417CF0AD400848E51 /* RTCDTMFSenderHandler.h */,
</span><span class="lines">@@ -15188,9 +15168,6 @@
</span><span class="cx">                                 07221BA517CF0AD400848E51 /* RTCDTMFSenderHandlerClient.h */,
</span><span class="cx">                                 07221BA617CF0AD400848E51 /* RTCIceCandidateDescriptor.cpp */,
</span><span class="cx">                                 07221BA717CF0AD400848E51 /* RTCIceCandidateDescriptor.h */,
</span><del>-                                07AB996E18DA3C740018771E /* RTCIceServerPrivate.h */,
-                                07221BA817CF0AD400848E51 /* RTCPeerConnectionHandler.cpp */,
-                                07221BA917CF0AD400848E51 /* RTCPeerConnectionHandler.h */,
</del><span class="cx">                                 07221BAA17CF0AD400848E51 /* RTCPeerConnectionHandlerClient.h */,
</span><span class="cx">                                 07221BAB17CF0AD400848E51 /* RTCSessionDescriptionDescriptor.cpp */,
</span><span class="cx">                                 07221BAC17CF0AD400848E51 /* RTCSessionDescriptionDescriptor.h */,
</span><span class="lines">@@ -17332,12 +17309,8 @@
</span><span class="cx">                                 AAE27B7516CBFC0D00623043 /* PlatformSpeechSynthesizerMock.h */,
</span><span class="cx">                                 073794F319F5864E00E5A045 /* RTCDataChannelHandlerMock.cpp */,
</span><span class="cx">                                 073794F419F5864E00E5A045 /* RTCDataChannelHandlerMock.h */,
</span><del>-                                073794F519F5864E00E5A045 /* RTCDTMFSenderHandlerMock.cpp */,
-                                073794F619F5864E00E5A045 /* RTCDTMFSenderHandlerMock.h */,
</del><span class="cx">                                 073794F719F5864E00E5A045 /* RTCNotifiersMock.cpp */,
</span><span class="cx">                                 073794F819F5864E00E5A045 /* RTCNotifiersMock.h */,
</span><del>-                                073794EF19EE37BB00E5A045 /* RTCPeerConnectionHandlerMock.cpp */,
-                                073794F019EE37BB00E5A045 /* RTCPeerConnectionHandlerMock.h */,
</del><span class="cx">                                 5CB37FFC1C62D27800F20188 /* ScrollAnimatorMock.cpp */,
</span><span class="cx">                                 5CB37FFD1C62D27800F20188 /* ScrollAnimatorMock.h */,
</span><span class="cx">                                 0FE71403142170B800DB33BA /* ScrollbarThemeMock.cpp */,
</span><span class="lines">@@ -27371,7 +27344,6 @@
</span><span class="cx">                                 A73F95FF12C97BFE0031AAF9 /* RoundedRect.h in Headers */,
</span><span class="cx">                                 57E233631DC7DA2400F28D01 /* RsaOtherPrimesInfo.h in Headers */,
</span><span class="cx">                                 07AB996918DA3C010018771E /* RTCConfiguration.h in Headers */,
</span><del>-                                07AB996F18DA3C740018771E /* RTCConfigurationPrivate.h in Headers */,
</del><span class="cx">                                 5351D4B11DF916B4008010CD /* FileHandle.h in Headers */,
</span><span class="cx">                                 078E091E17D14D1C00420AA1 /* RTCDataChannel.h in Headers */,
</span><span class="cx">                                 078E091F17D14D1C00420AA1 /* RTCDataChannelEvent.h in Headers */,
</span><span class="lines">@@ -27381,20 +27353,16 @@
</span><span class="cx">                                 078E092017D14D1C00420AA1 /* RTCDTMFSender.h in Headers */,
</span><span class="cx">                                 078E093E17D16E1C00420AA1 /* RTCDTMFSenderHandler.h in Headers */,
</span><span class="cx">                                 078E093F17D16E1C00420AA1 /* RTCDTMFSenderHandlerClient.h in Headers */,
</span><del>-                                073794FC19F5864E00E5A045 /* RTCDTMFSenderHandlerMock.h in Headers */,
</del><span class="cx">                                 078E092117D14D1C00420AA1 /* RTCDTMFToneChangeEvent.h in Headers */,
</span><span class="cx">                                 078E092317D14D1C00420AA1 /* RTCIceCandidate.h in Headers */,
</span><span class="cx">                                 078E094017D16E1C00420AA1 /* RTCIceCandidateDescriptor.h in Headers */,
</span><span class="cx">                                 078E092417D14D1C00420AA1 /* RTCIceCandidateEvent.h in Headers */,
</span><span class="cx">                                 07AB996B18DA3C010018771E /* RTCIceServer.h in Headers */,
</span><del>-                                07AB997018DA3C740018771E /* RTCIceServerPrivate.h in Headers */,
</del><span class="cx">                                 073794FE19F5864E00E5A045 /* RTCNotifiersMock.h in Headers */,
</span><span class="cx">                                 073794DE19EE2C5200E5A045 /* RTCOfferAnswerOptions.h in Headers */,
</span><span class="cx">                                 078E092517D14D1C00420AA1 /* RTCPeerConnection.h in Headers */,
</span><span class="cx">                                 5E2C437B1BCF9A570001E2BC /* RTCPeerConnectionBuiltins.h in Headers */,
</span><del>-                                078E094117D16E1C00420AA1 /* RTCPeerConnectionHandler.h in Headers */,
</del><span class="cx">                                 078E094217D16E1C00420AA1 /* RTCPeerConnectionHandlerClient.h in Headers */,
</span><del>-                                073794F219EE37BB00E5A045 /* RTCPeerConnectionHandlerMock.h in Headers */,
</del><span class="cx">                                 5E2C437C1BCF9A840001E2BC /* RTCPeerConnectionInternalsBuiltins.h in Headers */,
</span><span class="cx">                                 5E2C43631BCEE32B0001E2BC /* RTCRtpReceiver.h in Headers */,
</span><span class="cx">                                 5E2C43611BCEE3230001E2BC /* RTCRtpSender.h in Headers */,
</span><span class="lines">@@ -31043,12 +31011,10 @@
</span><span class="cx">                                 A8CFF5E70A155A05000A4234 /* RootInlineBox.cpp in Sources */,
</span><span class="cx">                                 49E911C80EF86D47009D0CAF /* RotateTransformOperation.cpp in Sources */,
</span><span class="cx">                                 A73F95FE12C97BFE0031AAF9 /* RoundedRect.cpp in Sources */,
</span><del>-                                5E2C43531BCEE2F60001E2BC /* RTCConfiguration.cpp in Sources */,
</del><span class="cx">                                 078E090517D14CEE00420AA1 /* RTCDataChannel.cpp in Sources */,
</span><span class="cx">                                 078E090617D14CEE00420AA1 /* RTCDataChannelEvent.cpp in Sources */,
</span><span class="cx">                                 073794F919F5864E00E5A045 /* RTCDataChannelHandlerMock.cpp in Sources */,
</span><span class="cx">                                 078E090717D14CEE00420AA1 /* RTCDTMFSender.cpp in Sources */,
</span><del>-                                073794FB19F5864E00E5A045 /* RTCDTMFSenderHandlerMock.cpp in Sources */,
</del><span class="cx">                                 078E090817D14CEE00420AA1 /* RTCDTMFToneChangeEvent.cpp in Sources */,
</span><span class="cx">                                 078E090917D14CEE00420AA1 /* RTCIceCandidate.cpp in Sources */,
</span><span class="cx">                                 073BE34F17D18183002BD431 /* RTCIceCandidateDescriptor.cpp in Sources */,
</span><span class="lines">@@ -31055,8 +31021,6 @@
</span><span class="cx">                                 078E090A17D14CEE00420AA1 /* RTCIceCandidateEvent.cpp in Sources */,
</span><span class="cx">                                 073794FD19F5864E00E5A045 /* RTCNotifiersMock.cpp in Sources */,
</span><span class="cx">                                 078E090B17D14CEE00420AA1 /* RTCPeerConnection.cpp in Sources */,
</span><del>-                                073BE35017D181A6002BD431 /* RTCPeerConnectionHandler.cpp in Sources */,
-                                073794F119EE37BB00E5A045 /* RTCPeerConnectionHandlerMock.cpp in Sources */,
</del><span class="cx">                                 5E2C43621BCEE32B0001E2BC /* RTCRtpReceiver.cpp in Sources */,
</span><span class="cx">                                 5E2C43601BCEE3230001E2BC /* RTCRtpSender.cpp in Sources */,
</span><span class="cx">                                 5E5E2B131CFC3E70000C0D85 /* RTCRtpTransceiver.cpp in Sources */,
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptsCodeGeneratorJSpm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm (209694 => 209695)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm        2016-12-12 01:41:16 UTC (rev 209694)
+++ trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm        2016-12-12 02:50:06 UTC (rev 209695)
</span><span class="lines">@@ -1353,8 +1353,8 @@
</span><span class="cx">                     # 2. Let value be the result of converting idlValue to an ECMAScript value.
</span><span class="cx">                     # 3. Perform ! CreateDataProperty(O, key, value).
</span><span class="cx">                 if (!$member-&gt;isRequired &amp;&amp; not defined $member-&gt;default) {
</span><del>-                    $result .= &quot;    if (dictionary.${key}) {\n&quot;;
-                    $result .= &quot;        auto ${key}Value = toJS&lt;$IDLType&gt;(state, globalObject, dictionary.${key});\n&quot;;
</del><ins>+                    $result .= &quot;    if (!${IDLType}::isNullValue(dictionary.${key})) {\n&quot;;
+                    $result .= &quot;        auto ${key}Value = toJS&lt;$IDLType&gt;(state, globalObject, ${IDLType}::extractValueFromNullable(dictionary.${key}));\n&quot;;
</ins><span class="cx">                     $result .= &quot;        result-&gt;putDirect(vm, JSC::Identifier::fromString(&amp;vm, \&quot;${key}\&quot;), ${key}Value);\n&quot;;
</span><span class="cx">                     $result .= &quot;    }\n&quot;;
</span><span class="cx">                 } else {
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestObjcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestObj.cpp (209694 => 209695)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestObj.cpp        2016-12-12 01:41:16 UTC (rev 209694)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestObj.cpp        2016-12-12 02:50:06 UTC (rev 209695)
</span><span class="lines">@@ -696,16 +696,16 @@
</span><span class="cx">     result-&gt;putDirect(vm, JSC::Identifier::fromString(&amp;vm, &quot;anyValueWithNullDefault&quot;), anyValueWithNullDefaultValue);
</span><span class="cx">     auto booleanWithDefaultValue = toJS&lt;IDLBoolean&gt;(state, globalObject, dictionary.booleanWithDefault);
</span><span class="cx">     result-&gt;putDirect(vm, JSC::Identifier::fromString(&amp;vm, &quot;booleanWithDefault&quot;), booleanWithDefaultValue);
</span><del>-    if (dictionary.booleanWithoutDefault) {
-        auto booleanWithoutDefaultValue = toJS&lt;IDLBoolean&gt;(state, globalObject, dictionary.booleanWithoutDefault);
</del><ins>+    if (!IDLBoolean::isNullValue(dictionary.booleanWithoutDefault)) {
+        auto booleanWithoutDefaultValue = toJS&lt;IDLBoolean&gt;(state, globalObject, IDLBoolean::extractValueFromNullable(dictionary.booleanWithoutDefault));
</ins><span class="cx">         result-&gt;putDirect(vm, JSC::Identifier::fromString(&amp;vm, &quot;booleanWithoutDefault&quot;), booleanWithoutDefaultValue);
</span><span class="cx">     }
</span><del>-    if (dictionary.bufferSourceValue) {
-        auto bufferSourceValueValue = toJS&lt;IDLBufferSource&gt;(state, globalObject, dictionary.bufferSourceValue);
</del><ins>+    if (!IDLBufferSource::isNullValue(dictionary.bufferSourceValue)) {
+        auto bufferSourceValueValue = toJS&lt;IDLBufferSource&gt;(state, globalObject, IDLBufferSource::extractValueFromNullable(dictionary.bufferSourceValue));
</ins><span class="cx">         result-&gt;putDirect(vm, JSC::Identifier::fromString(&amp;vm, &quot;bufferSourceValue&quot;), bufferSourceValueValue);
</span><span class="cx">     }
</span><del>-    if (dictionary.dictionaryMember) {
-        auto dictionaryMemberValue = toJS&lt;IDLDictionary&lt;TestObj::DictionaryThatShouldTolerateNull&gt;&gt;(state, globalObject, dictionary.dictionaryMember);
</del><ins>+    if (!IDLDictionary&lt;TestObj::DictionaryThatShouldTolerateNull&gt;::isNullValue(dictionary.dictionaryMember)) {
+        auto dictionaryMemberValue = toJS&lt;IDLDictionary&lt;TestObj::DictionaryThatShouldTolerateNull&gt;&gt;(state, globalObject, IDLDictionary&lt;TestObj::DictionaryThatShouldTolerateNull&gt;::extractValueFromNullable(dictionary.dictionaryMember));
</ins><span class="cx">         result-&gt;putDirect(vm, JSC::Identifier::fromString(&amp;vm, &quot;dictionaryMember&quot;), dictionaryMemberValue);
</span><span class="cx">     }
</span><span class="cx">     auto enumerationValueWithDefaultValue = toJS&lt;IDLEnumeration&lt;TestObj::EnumType&gt;&gt;(state, globalObject, dictionary.enumerationValueWithDefault);
</span><span class="lines">@@ -712,18 +712,18 @@
</span><span class="cx">     result-&gt;putDirect(vm, JSC::Identifier::fromString(&amp;vm, &quot;enumerationValueWithDefault&quot;), enumerationValueWithDefaultValue);
</span><span class="cx">     auto enumerationValueWithEmptyStringDefaultValue = toJS&lt;IDLEnumeration&lt;TestObj::EnumType&gt;&gt;(state, globalObject, dictionary.enumerationValueWithEmptyStringDefault);
</span><span class="cx">     result-&gt;putDirect(vm, JSC::Identifier::fromString(&amp;vm, &quot;enumerationValueWithEmptyStringDefault&quot;), enumerationValueWithEmptyStringDefaultValue);
</span><del>-    if (dictionary.enumerationValueWithoutDefault) {
-        auto enumerationValueWithoutDefaultValue = toJS&lt;IDLEnumeration&lt;TestObj::EnumType&gt;&gt;(state, globalObject, dictionary.enumerationValueWithoutDefault);
</del><ins>+    if (!IDLEnumeration&lt;TestObj::EnumType&gt;::isNullValue(dictionary.enumerationValueWithoutDefault)) {
+        auto enumerationValueWithoutDefaultValue = toJS&lt;IDLEnumeration&lt;TestObj::EnumType&gt;&gt;(state, globalObject, IDLEnumeration&lt;TestObj::EnumType&gt;::extractValueFromNullable(dictionary.enumerationValueWithoutDefault));
</ins><span class="cx">         result-&gt;putDirect(vm, JSC::Identifier::fromString(&amp;vm, &quot;enumerationValueWithoutDefault&quot;), enumerationValueWithoutDefaultValue);
</span><span class="cx">     }
</span><del>-    if (dictionary.integer) {
-        auto integerValue = toJS&lt;IDLLong&gt;(state, globalObject, dictionary.integer);
</del><ins>+    if (!IDLLong::isNullValue(dictionary.integer)) {
+        auto integerValue = toJS&lt;IDLLong&gt;(state, globalObject, IDLLong::extractValueFromNullable(dictionary.integer));
</ins><span class="cx">         result-&gt;putDirect(vm, JSC::Identifier::fromString(&amp;vm, &quot;integer&quot;), integerValue);
</span><span class="cx">     }
</span><span class="cx">     auto integerWithDefaultValue = toJS&lt;IDLLong&gt;(state, globalObject, dictionary.integerWithDefault);
</span><span class="cx">     result-&gt;putDirect(vm, JSC::Identifier::fromString(&amp;vm, &quot;integerWithDefault&quot;), integerWithDefaultValue);
</span><del>-    if (dictionary.largeInteger) {
-        auto largeIntegerValue = toJS&lt;IDLLongLong&gt;(state, globalObject, dictionary.largeInteger);
</del><ins>+    if (!IDLLongLong::isNullValue(dictionary.largeInteger)) {
+        auto largeIntegerValue = toJS&lt;IDLLongLong&gt;(state, globalObject, IDLLongLong::extractValueFromNullable(dictionary.largeInteger));
</ins><span class="cx">         result-&gt;putDirect(vm, JSC::Identifier::fromString(&amp;vm, &quot;largeInteger&quot;), largeIntegerValue);
</span><span class="cx">     }
</span><span class="cx">     auto largeIntegerWithDefaultValue = toJS&lt;IDLLongLong&gt;(state, globalObject, dictionary.largeIntegerWithDefault);
</span><span class="lines">@@ -736,32 +736,32 @@
</span><span class="cx">     result-&gt;putDirect(vm, JSC::Identifier::fromString(&amp;vm, &quot;nullableStringWithDefault&quot;), nullableStringWithDefaultValue);
</span><span class="cx">     auto nullableUnionMemberValue = toJS&lt;IDLNullable&lt;IDLUnion&lt;IDLLong, IDLInterface&lt;Node&gt;&gt;&gt;&gt;(state, globalObject, dictionary.nullableUnionMember);
</span><span class="cx">     result-&gt;putDirect(vm, JSC::Identifier::fromString(&amp;vm, &quot;nullableUnionMember&quot;), nullableUnionMemberValue);
</span><del>-    if (dictionary.restrictedDouble) {
-        auto restrictedDoubleValue = toJS&lt;IDLDouble&gt;(state, globalObject, dictionary.restrictedDouble);
</del><ins>+    if (!IDLDouble::isNullValue(dictionary.restrictedDouble)) {
+        auto restrictedDoubleValue = toJS&lt;IDLDouble&gt;(state, globalObject, IDLDouble::extractValueFromNullable(dictionary.restrictedDouble));
</ins><span class="cx">         result-&gt;putDirect(vm, JSC::Identifier::fromString(&amp;vm, &quot;restrictedDouble&quot;), restrictedDoubleValue);
</span><span class="cx">     }
</span><span class="cx">     auto restrictedDoubleWithDefaultValue = toJS&lt;IDLDouble&gt;(state, globalObject, dictionary.restrictedDoubleWithDefault);
</span><span class="cx">     result-&gt;putDirect(vm, JSC::Identifier::fromString(&amp;vm, &quot;restrictedDoubleWithDefault&quot;), restrictedDoubleWithDefaultValue);
</span><del>-    if (dictionary.restrictedFloat) {
-        auto restrictedFloatValue = toJS&lt;IDLFloat&gt;(state, globalObject, dictionary.restrictedFloat);
</del><ins>+    if (!IDLFloat::isNullValue(dictionary.restrictedFloat)) {
+        auto restrictedFloatValue = toJS&lt;IDLFloat&gt;(state, globalObject, IDLFloat::extractValueFromNullable(dictionary.restrictedFloat));
</ins><span class="cx">         result-&gt;putDirect(vm, JSC::Identifier::fromString(&amp;vm, &quot;restrictedFloat&quot;), restrictedFloatValue);
</span><span class="cx">     }
</span><span class="cx">     auto restrictedFloatWithDefaultValue = toJS&lt;IDLFloat&gt;(state, globalObject, dictionary.restrictedFloatWithDefault);
</span><span class="cx">     result-&gt;putDirect(vm, JSC::Identifier::fromString(&amp;vm, &quot;restrictedFloatWithDefault&quot;), restrictedFloatWithDefaultValue);
</span><del>-    if (dictionary.sequenceOfStrings) {
-        auto sequenceOfStringsValue = toJS&lt;IDLSequence&lt;IDLDOMString&gt;&gt;(state, globalObject, dictionary.sequenceOfStrings);
</del><ins>+    if (!IDLSequence&lt;IDLDOMString&gt;::isNullValue(dictionary.sequenceOfStrings)) {
+        auto sequenceOfStringsValue = toJS&lt;IDLSequence&lt;IDLDOMString&gt;&gt;(state, globalObject, IDLSequence&lt;IDLDOMString&gt;::extractValueFromNullable(dictionary.sequenceOfStrings));
</ins><span class="cx">         result-&gt;putDirect(vm, JSC::Identifier::fromString(&amp;vm, &quot;sequenceOfStrings&quot;), sequenceOfStringsValue);
</span><span class="cx">     }
</span><del>-    if (dictionary.smallIntegerClamped) {
-        auto smallIntegerClampedValue = toJS&lt;IDLByte&gt;(state, globalObject, dictionary.smallIntegerClamped);
</del><ins>+    if (!IDLByte::isNullValue(dictionary.smallIntegerClamped)) {
+        auto smallIntegerClampedValue = toJS&lt;IDLByte&gt;(state, globalObject, IDLByte::extractValueFromNullable(dictionary.smallIntegerClamped));
</ins><span class="cx">         result-&gt;putDirect(vm, JSC::Identifier::fromString(&amp;vm, &quot;smallIntegerClamped&quot;), smallIntegerClampedValue);
</span><span class="cx">     }
</span><del>-    if (dictionary.smallIntegerWithDefault) {
-        auto smallIntegerWithDefaultValue = toJS&lt;IDLByte&gt;(state, globalObject, dictionary.smallIntegerWithDefault);
</del><ins>+    if (!IDLByte::isNullValue(dictionary.smallIntegerWithDefault)) {
+        auto smallIntegerWithDefaultValue = toJS&lt;IDLByte&gt;(state, globalObject, IDLByte::extractValueFromNullable(dictionary.smallIntegerWithDefault));
</ins><span class="cx">         result-&gt;putDirect(vm, JSC::Identifier::fromString(&amp;vm, &quot;smallIntegerWithDefault&quot;), smallIntegerWithDefaultValue);
</span><span class="cx">     }
</span><del>-    if (dictionary.smallUnsignedIntegerEnforcedRange) {
-        auto smallUnsignedIntegerEnforcedRangeValue = toJS&lt;IDLOctet&gt;(state, globalObject, dictionary.smallUnsignedIntegerEnforcedRange);
</del><ins>+    if (!IDLOctet::isNullValue(dictionary.smallUnsignedIntegerEnforcedRange)) {
+        auto smallUnsignedIntegerEnforcedRangeValue = toJS&lt;IDLOctet&gt;(state, globalObject, IDLOctet::extractValueFromNullable(dictionary.smallUnsignedIntegerEnforcedRange));
</ins><span class="cx">         result-&gt;putDirect(vm, JSC::Identifier::fromString(&amp;vm, &quot;smallUnsignedIntegerEnforcedRange&quot;), smallUnsignedIntegerEnforcedRangeValue);
</span><span class="cx">     }
</span><span class="cx">     auto smallUnsignedIntegerWithDefaultValue = toJS&lt;IDLOctet&gt;(state, globalObject, dictionary.smallUnsignedIntegerWithDefault);
</span><span class="lines">@@ -768,34 +768,34 @@
</span><span class="cx">     result-&gt;putDirect(vm, JSC::Identifier::fromString(&amp;vm, &quot;smallUnsignedIntegerWithDefault&quot;), smallUnsignedIntegerWithDefaultValue);
</span><span class="cx">     auto stringWithDefaultValue = toJS&lt;IDLDOMString&gt;(state, globalObject, dictionary.stringWithDefault);
</span><span class="cx">     result-&gt;putDirect(vm, JSC::Identifier::fromString(&amp;vm, &quot;stringWithDefault&quot;), stringWithDefaultValue);
</span><del>-    if (dictionary.stringWithoutDefault) {
-        auto stringWithoutDefaultValue = toJS&lt;IDLDOMString&gt;(state, globalObject, dictionary.stringWithoutDefault);
</del><ins>+    if (!IDLDOMString::isNullValue(dictionary.stringWithoutDefault)) {
+        auto stringWithoutDefaultValue = toJS&lt;IDLDOMString&gt;(state, globalObject, IDLDOMString::extractValueFromNullable(dictionary.stringWithoutDefault));
</ins><span class="cx">         result-&gt;putDirect(vm, JSC::Identifier::fromString(&amp;vm, &quot;stringWithoutDefault&quot;), stringWithoutDefaultValue);
</span><span class="cx">     }
</span><del>-    if (dictionary.unionMember) {
-        auto unionMemberValue = toJS&lt;IDLUnion&lt;IDLLong, IDLInterface&lt;Node&gt;&gt;&gt;(state, globalObject, dictionary.unionMember);
</del><ins>+    if (!IDLUnion&lt;IDLLong, IDLInterface&lt;Node&gt;&gt;::isNullValue(dictionary.unionMember)) {
+        auto unionMemberValue = toJS&lt;IDLUnion&lt;IDLLong, IDLInterface&lt;Node&gt;&gt;&gt;(state, globalObject, IDLUnion&lt;IDLLong, IDLInterface&lt;Node&gt;&gt;::extractValueFromNullable(dictionary.unionMember));
</ins><span class="cx">         result-&gt;putDirect(vm, JSC::Identifier::fromString(&amp;vm, &quot;unionMember&quot;), unionMemberValue);
</span><span class="cx">     }
</span><del>-    if (dictionary.unrestrictedDouble) {
-        auto unrestrictedDoubleValue = toJS&lt;IDLUnrestrictedDouble&gt;(state, globalObject, dictionary.unrestrictedDouble);
</del><ins>+    if (!IDLUnrestrictedDouble::isNullValue(dictionary.unrestrictedDouble)) {
+        auto unrestrictedDoubleValue = toJS&lt;IDLUnrestrictedDouble&gt;(state, globalObject, IDLUnrestrictedDouble::extractValueFromNullable(dictionary.unrestrictedDouble));
</ins><span class="cx">         result-&gt;putDirect(vm, JSC::Identifier::fromString(&amp;vm, &quot;unrestrictedDouble&quot;), unrestrictedDoubleValue);
</span><span class="cx">     }
</span><span class="cx">     auto unrestrictedDoubleWithDefaultValue = toJS&lt;IDLUnrestrictedDouble&gt;(state, globalObject, dictionary.unrestrictedDoubleWithDefault);
</span><span class="cx">     result-&gt;putDirect(vm, JSC::Identifier::fromString(&amp;vm, &quot;unrestrictedDoubleWithDefault&quot;), unrestrictedDoubleWithDefaultValue);
</span><del>-    if (dictionary.unrestrictedFloat) {
-        auto unrestrictedFloatValue = toJS&lt;IDLUnrestrictedFloat&gt;(state, globalObject, dictionary.unrestrictedFloat);
</del><ins>+    if (!IDLUnrestrictedFloat::isNullValue(dictionary.unrestrictedFloat)) {
+        auto unrestrictedFloatValue = toJS&lt;IDLUnrestrictedFloat&gt;(state, globalObject, IDLUnrestrictedFloat::extractValueFromNullable(dictionary.unrestrictedFloat));
</ins><span class="cx">         result-&gt;putDirect(vm, JSC::Identifier::fromString(&amp;vm, &quot;unrestrictedFloat&quot;), unrestrictedFloatValue);
</span><span class="cx">     }
</span><span class="cx">     auto unrestrictedFloatWithDefaultValue = toJS&lt;IDLUnrestrictedFloat&gt;(state, globalObject, dictionary.unrestrictedFloatWithDefault);
</span><span class="cx">     result-&gt;putDirect(vm, JSC::Identifier::fromString(&amp;vm, &quot;unrestrictedFloatWithDefault&quot;), unrestrictedFloatWithDefaultValue);
</span><del>-    if (dictionary.unsignedInteger) {
-        auto unsignedIntegerValue = toJS&lt;IDLUnsignedLong&gt;(state, globalObject, dictionary.unsignedInteger);
</del><ins>+    if (!IDLUnsignedLong::isNullValue(dictionary.unsignedInteger)) {
+        auto unsignedIntegerValue = toJS&lt;IDLUnsignedLong&gt;(state, globalObject, IDLUnsignedLong::extractValueFromNullable(dictionary.unsignedInteger));
</ins><span class="cx">         result-&gt;putDirect(vm, JSC::Identifier::fromString(&amp;vm, &quot;unsignedInteger&quot;), unsignedIntegerValue);
</span><span class="cx">     }
</span><span class="cx">     auto unsignedIntegerWithDefaultValue = toJS&lt;IDLUnsignedLong&gt;(state, globalObject, dictionary.unsignedIntegerWithDefault);
</span><span class="cx">     result-&gt;putDirect(vm, JSC::Identifier::fromString(&amp;vm, &quot;unsignedIntegerWithDefault&quot;), unsignedIntegerWithDefaultValue);
</span><del>-    if (dictionary.unsignedLargeInteger) {
-        auto unsignedLargeIntegerValue = toJS&lt;IDLUnsignedLongLong&gt;(state, globalObject, dictionary.unsignedLargeInteger);
</del><ins>+    if (!IDLUnsignedLongLong::isNullValue(dictionary.unsignedLargeInteger)) {
+        auto unsignedLargeIntegerValue = toJS&lt;IDLUnsignedLongLong&gt;(state, globalObject, IDLUnsignedLongLong::extractValueFromNullable(dictionary.unsignedLargeInteger));
</ins><span class="cx">         result-&gt;putDirect(vm, JSC::Identifier::fromString(&amp;vm, &quot;unsignedLargeInteger&quot;), unsignedLargeIntegerValue);
</span><span class="cx">     }
</span><span class="cx">     auto unsignedLargeIntegerWithDefaultValue = toJS&lt;IDLUnsignedLongLong&gt;(state, globalObject, dictionary.unsignedLargeIntegerWithDefault);
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformmediastreamRTCConfigurationPrivateh"></a>
<div class="delfile"><h4>Deleted: trunk/Source/WebCore/platform/mediastream/RTCConfigurationPrivate.h (209694 => 209695)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/mediastream/RTCConfigurationPrivate.h        2016-12-12 01:41:16 UTC (rev 209694)
+++ trunk/Source/WebCore/platform/mediastream/RTCConfigurationPrivate.h        2016-12-12 02:50:06 UTC (rev 209695)
</span><span class="lines">@@ -1,80 +0,0 @@
</span><del>-/*
- * Copyright (C) 2014 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. ``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
- * 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.
- */
-
-#ifndef RTCConfigurationPrivate_h
-#define RTCConfigurationPrivate_h
-
-#if ENABLE(WEB_RTC)
-
-#include &quot;RTCIceServerPrivate.h&quot;
-#include &lt;wtf/PassRefPtr.h&gt;
-#include &lt;wtf/RefCounted.h&gt;
-#include &lt;wtf/Vector.h&gt;
-#include &lt;wtf/text/WTFString.h&gt;
-
-namespace WebCore {
-
-class RTCConfigurationPrivate : public RefCounted&lt;RTCConfigurationPrivate&gt; {
-public:
-    static PassRefPtr&lt;RTCConfigurationPrivate&gt; create() { return adoptRef(new RTCConfigurationPrivate()); }
-    virtual ~RTCConfigurationPrivate() { }
-
-    void appendServer(PassRefPtr&lt;RTCIceServerPrivate&gt; server) { m_privateServers.append(server); }
-    size_t numberOfServers() { return m_privateServers.size(); }
-    RTCIceServerPrivate* server(size_t index) { return m_privateServers[index].get(); }
-
-    const String&amp; iceTransports() const { return m_iceTransports; }
-    void setIceTransports(const String&amp; iceTransports)
-    {
-        if (iceTransports == &quot;none&quot; || iceTransports == &quot;relay&quot; || iceTransports == &quot;all&quot;)
-            m_iceTransports = iceTransports;
-    }
-
-    const String&amp; requestIdentity() const { return m_requestIdentity; }
-    void setRequestIdentity(const String&amp; requestIdentity)
-    {
-        if (requestIdentity == &quot;yes&quot; || requestIdentity == &quot;no&quot; || requestIdentity == &quot;ifconfigured&quot;)
-            m_requestIdentity = requestIdentity;
-    }
-
-    Vector&lt;RefPtr&lt;RTCIceServerPrivate&gt;&gt; iceServers() const { return m_privateServers; }
-
-private:
-    RTCConfigurationPrivate()
-        : m_iceTransports(&quot;all&quot;)
-        , m_requestIdentity(&quot;ifconfigured&quot;)
-    {
-    }
-
-    Vector&lt;RefPtr&lt;RTCIceServerPrivate&gt;&gt; m_privateServers;
-    String m_iceTransports;
-    String m_requestIdentity;
-};
-
-} // namespace WebCore
-
-#endif // ENABLE(WEB_RTC)
-
-#endif // RTCConfigurationPrivate_h
</del></span></pre></div>
<a id="trunkSourceWebCoreplatformmediastreamRTCIceServerPrivateh"></a>
<div class="delfile"><h4>Deleted: trunk/Source/WebCore/platform/mediastream/RTCIceServerPrivate.h (209694 => 209695)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/mediastream/RTCIceServerPrivate.h        2016-12-12 01:41:16 UTC (rev 209694)
+++ trunk/Source/WebCore/platform/mediastream/RTCIceServerPrivate.h        2016-12-12 02:50:06 UTC (rev 209695)
</span><span class="lines">@@ -1,67 +0,0 @@
</span><del>-/*
- * Copyright (C) 2014 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. ``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
- * 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. 
- */
-
-#ifndef RTCIceServerPrivate_h
-#define RTCIceServerPrivate_h
-
-#if ENABLE(WEB_RTC)
-
-#include &lt;wtf/PassRefPtr.h&gt;
-#include &lt;wtf/RefCounted.h&gt;
-#include &lt;wtf/Vector.h&gt;
-#include &lt;wtf/text/WTFString.h&gt;
-
-namespace WebCore {
-
-class RTCIceServerPrivate : public RefCounted&lt;RTCIceServerPrivate&gt; {
-public:
-    static PassRefPtr&lt;RTCIceServerPrivate&gt; create(const Vector&lt;String&gt;&amp; urls, const String&amp; credential, const String&amp; username)
-    {
-        return adoptRef(new RTCIceServerPrivate(urls, credential, username));
-    }
-    virtual ~RTCIceServerPrivate() { }
-
-    const Vector&lt;String&gt;&amp; urls() { return m_urls; }
-    const String&amp; credential() { return m_credential; }
-    const String&amp; username() { return m_username; }
-
-private:
-    RTCIceServerPrivate(const Vector&lt;String&gt;&amp; urls, const String&amp; credential, const String&amp; username)
-        : m_urls(urls)
-        , m_credential(credential)
-        , m_username(username)
-    {
-    }
-
-    Vector&lt;String&gt; m_urls;
-    String m_credential;
-    String m_username;
-};
-
-} // namespace WebCore
-
-#endif // ENABLE(WEB_RTC)
-
-#endif // RTCIceServerPrivate_h
</del></span></pre></div>
<a id="trunkSourceWebCoreplatformmediastreamRTCPeerConnectionHandlercpp"></a>
<div class="delfile"><h4>Deleted: trunk/Source/WebCore/platform/mediastream/RTCPeerConnectionHandler.cpp (209694 => 209695)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/mediastream/RTCPeerConnectionHandler.cpp        2016-12-12 01:41:16 UTC (rev 209694)
+++ trunk/Source/WebCore/platform/mediastream/RTCPeerConnectionHandler.cpp        2016-12-12 02:50:06 UTC (rev 209695)
</span><span class="lines">@@ -1,76 +0,0 @@
</span><del>-/*
- * Copyright (C) 2012 Google Inc. All rights reserved.
- * Copyright (C) 2013 Nokia Corporation and/or its subsidiary(-ies).
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- *     * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *     * 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.
- *     * Neither the name of Google Inc. nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * &quot;AS IS&quot; 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 THE COPYRIGHT
- * OWNER OR 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 &quot;config.h&quot;
-
-#if ENABLE(WEB_RTC)
-
-#include &quot;RTCPeerConnectionHandler.h&quot;
-
-#include &lt;wtf/NeverDestroyed.h&gt;
-
-namespace WebCore {
-class RTCPeerConnectionHandlerClient;
-
-static std::unique_ptr&lt;RTCPeerConnectionHandler&gt; createHandler(RTCPeerConnectionHandlerClient*)
-{
-    return nullptr;
-}
-
-CreatePeerConnectionHandler RTCPeerConnectionHandler::create = createHandler;
-
-const AtomicString&amp; RTCPeerConnectionHandler::incompatibleConstraintsErrorName()
-{
-    static NeverDestroyed&lt;AtomicString&gt; incompatibleConstraints(&quot;IncompatibleConstraintsError&quot;, AtomicString::ConstructFromLiteral);
-    return incompatibleConstraints;
-}
-
-const AtomicString&amp; RTCPeerConnectionHandler::invalidSessionDescriptionErrorName()
-{
-    static NeverDestroyed&lt;AtomicString&gt; invalidSessionDescription(&quot;InvalidSessionDescriptionError&quot;, AtomicString::ConstructFromLiteral);
-    return invalidSessionDescription;
-}
-
-const AtomicString&amp; RTCPeerConnectionHandler::incompatibleSessionDescriptionErrorName()
-{
-    static NeverDestroyed&lt;AtomicString&gt; incompatibleSessionDescription(&quot;IncompatibleSessionDescriptionError&quot;, AtomicString::ConstructFromLiteral);
-    return incompatibleSessionDescription;
-}
-
-const AtomicString&amp; RTCPeerConnectionHandler::internalErrorName()
-{
-    static NeverDestroyed&lt;AtomicString&gt; internal(&quot;InternalError&quot;, AtomicString::ConstructFromLiteral);
-    return internal;
-}
-
-} // namespace WebCore
-
-#endif // ENABLE(WEB_RTC)
</del></span></pre></div>
<a id="trunkSourceWebCoreplatformmediastreamRTCPeerConnectionHandlerh"></a>
<div class="delfile"><h4>Deleted: trunk/Source/WebCore/platform/mediastream/RTCPeerConnectionHandler.h (209694 => 209695)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/mediastream/RTCPeerConnectionHandler.h        2016-12-12 01:41:16 UTC (rev 209694)
+++ trunk/Source/WebCore/platform/mediastream/RTCPeerConnectionHandler.h        2016-12-12 02:50:06 UTC (rev 209695)
</span><span class="lines">@@ -1,92 +0,0 @@
</span><del>-/*
- * Copyright (C) 2012 Google Inc. All rights reserved.
- * Copyright (C) 2013 Nokia Corporation and/or its subsidiary(-ies).
- *
- * 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.
- * 3. Neither the name of Google Inc. nor the names of its contributors
- *    may be used to endorse or promote products derived from this
- *    software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * &quot;AS IS&quot; 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 THE COPYRIGHT
- * OWNER OR 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.
- */
-
-#ifndef RTCPeerConnectionHandler_h
-#define RTCPeerConnectionHandler_h
-
-#if ENABLE(WEB_RTC)
-
-#include &quot;MediaStreamPrivate.h&quot;
-#include &lt;wtf/PassRefPtr.h&gt;
-
-namespace WebCore {
-
-class RealtimeMediaSource;
-class RTCConfigurationPrivate;
-class RTCDTMFSenderHandler;
-class RTCDataChannelHandler;
-class RTCIceCandidateDescriptor;
-class RTCOfferOptionsPrivate;
-class RTCOfferAnswerOptionsPrivate;
-class RTCPeerConnectionHandler;
-class RTCPeerConnectionHandlerClient;
-class RTCSessionDescriptionDescriptor;
-class RTCSessionDescriptionRequest;
-class RTCStatsRequest;
-class RTCVoidRequest;
-
-struct RTCDataChannelInit;
-
-typedef std::unique_ptr&lt;RTCPeerConnectionHandler&gt; (*CreatePeerConnectionHandler)(RTCPeerConnectionHandlerClient*);
-
-class RTCPeerConnectionHandler {
-public:
-    WEBCORE_EXPORT static CreatePeerConnectionHandler create;
-    virtual ~RTCPeerConnectionHandler() { }
-
-    static const AtomicString&amp; incompatibleConstraintsErrorName();
-    static const AtomicString&amp; invalidSessionDescriptionErrorName();
-    static const AtomicString&amp; incompatibleSessionDescriptionErrorName();
-    static const AtomicString&amp; internalErrorName();
-
-    virtual bool initialize(PassRefPtr&lt;RTCConfigurationPrivate&gt;) = 0;
-
-    virtual void createOffer(PassRefPtr&lt;RTCSessionDescriptionRequest&gt;, PassRefPtr&lt;RTCOfferOptionsPrivate&gt;) = 0;
-    virtual void createAnswer(PassRefPtr&lt;RTCSessionDescriptionRequest&gt;, PassRefPtr&lt;RTCOfferAnswerOptionsPrivate&gt;) = 0;
-    virtual void setLocalDescription(PassRefPtr&lt;RTCVoidRequest&gt;, PassRefPtr&lt;RTCSessionDescriptionDescriptor&gt;) = 0;
-    virtual void setRemoteDescription(PassRefPtr&lt;RTCVoidRequest&gt;, PassRefPtr&lt;RTCSessionDescriptionDescriptor&gt;) = 0;
-    virtual PassRefPtr&lt;RTCSessionDescriptionDescriptor&gt; localDescription() = 0;
-    virtual PassRefPtr&lt;RTCSessionDescriptionDescriptor&gt; remoteDescription() = 0;
-    virtual bool updateIce(PassRefPtr&lt;RTCConfigurationPrivate&gt;) = 0;
-    virtual bool addIceCandidate(PassRefPtr&lt;RTCVoidRequest&gt;, PassRefPtr&lt;RTCIceCandidateDescriptor&gt;) = 0;
-    virtual bool addStream(PassRefPtr&lt;MediaStreamPrivate&gt;) = 0;
-    virtual void removeStream(PassRefPtr&lt;MediaStreamPrivate&gt;) = 0;
-    virtual void getStats(PassRefPtr&lt;RTCStatsRequest&gt;) = 0;
-    virtual std::unique_ptr&lt;RTCDataChannelHandler&gt; createDataChannel(const String&amp; label, const RTCDataChannelInit&amp;) = 0;
-    virtual std::unique_ptr&lt;RTCDTMFSenderHandler&gt; createDTMFSender(PassRefPtr&lt;RealtimeMediaSource&gt;) = 0;
-    virtual void stop() = 0;
-};
-
-} // namespace WebCore
-
-#endif // ENABLE(WEB_RTC)
-
-#endif // RTCPeerConnectionHandler_h
</del></span></pre></div>
<a id="trunkSourceWebCoreplatformmockRTCDTMFSenderHandlerMockcpp"></a>
<div class="delfile"><h4>Deleted: trunk/Source/WebCore/platform/mock/RTCDTMFSenderHandlerMock.cpp (209694 => 209695)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/mock/RTCDTMFSenderHandlerMock.cpp        2016-12-12 01:41:16 UTC (rev 209694)
+++ trunk/Source/WebCore/platform/mock/RTCDTMFSenderHandlerMock.cpp        2016-12-12 02:50:06 UTC (rev 209695)
</span><span class="lines">@@ -1,62 +0,0 @@
</span><del>-/*
- *  Copyright (C) 2014 Samsung Electornics and/or its subsidiary(-ies).
- *
- * 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 THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * &quot;AS IS&quot; 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 THE COPYRIGHT
- * OWNER OR 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 &quot;config.h&quot;
-
-#if ENABLE(WEB_RTC)
-#include &quot;RTCDTMFSenderHandlerMock.h&quot;
-
-#include &quot;RTCDTMFSenderHandlerClient.h&quot;
-
-namespace WebCore {
-
-RTCDTMFSenderHandlerMock::RTCDTMFSenderHandlerMock()
-    : m_duration(0)
-    , m_interToneGap(0)
-{
-}
-
-void RTCDTMFSenderHandlerMock::setClient(RTCDTMFSenderHandlerClient* client)
-{
-    m_client = client;
-}
-
-bool RTCDTMFSenderHandlerMock::insertDTMF(const String&amp; tones, long duration, long interToneGap)
-{
-    m_duration = duration;
-    m_interToneGap = interToneGap;
-    m_toneBuffer.append(tones);
-    if (m_client) {
-        for (size_t i = 0; i &lt; m_toneBuffer.length(); ++i)
-            m_client-&gt;didPlayTone(m_toneBuffer.substring(i, 1));
-        m_toneBuffer = emptyString();
-        m_client-&gt;didPlayTone(emptyString());
-    }
-    return true;
-}
-
-} // namespace WebCore
-
-#endif // ENABLE(WEB_RTC)
</del></span></pre></div>
<a id="trunkSourceWebCoreplatformmockRTCDTMFSenderHandlerMockh"></a>
<div class="delfile"><h4>Deleted: trunk/Source/WebCore/platform/mock/RTCDTMFSenderHandlerMock.h (209694 => 209695)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/mock/RTCDTMFSenderHandlerMock.h        2016-12-12 01:41:16 UTC (rev 209694)
+++ trunk/Source/WebCore/platform/mock/RTCDTMFSenderHandlerMock.h        2016-12-12 02:50:06 UTC (rev 209695)
</span><span class="lines">@@ -1,58 +0,0 @@
</span><del>-/*
- *  Copyright (C) 2014 Samsung Electornics and/or its subsidiary(-ies).
- *
- * 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 THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * &quot;AS IS&quot; 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 THE COPYRIGHT
- * OWNER OR 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.
- */
-
-#ifndef RTCDTMFSenderHandlerMock_h
-#define RTCDTMFSenderHandlerMock_h
-
-#if ENABLE(WEB_RTC)
-
-#include &quot;RTCDTMFSenderHandler.h&quot;
-#include &quot;RTCPeerConnectionHandler.h&quot;
-
-namespace WebCore {
-
-class RTCDTMFSenderHandlerMock final : public RTCDTMFSenderHandler {
-public:
-    RTCDTMFSenderHandlerMock();
-    virtual ~RTCDTMFSenderHandlerMock() { }
-
-    void setClient(RTCDTMFSenderHandlerClient*) override;
-    String currentToneBuffer() override { return m_toneBuffer; }
-    bool canInsertDTMF() override { return true; }
-    bool insertDTMF(const String&amp; tones, long duration, long interToneGap) override;
-
-private:
-    RTCDTMFSenderHandlerClient* m_client;
-
-    String m_toneBuffer;
-    long m_duration;
-    long m_interToneGap;
-};
-
-} // namespace WebCore
-
-#endif // ENABLE(WEB_RTC)
-
-#endif // RTCDataChannelHandlerMock_h
</del></span></pre></div>
<a id="trunkSourceWebCoreplatformmockRTCDataChannelHandlerMockh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/mock/RTCDataChannelHandlerMock.h (209694 => 209695)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/mock/RTCDataChannelHandlerMock.h        2016-12-12 01:41:16 UTC (rev 209694)
+++ trunk/Source/WebCore/platform/mock/RTCDataChannelHandlerMock.h        2016-12-12 02:50:06 UTC (rev 209695)
</span><span class="lines">@@ -23,13 +23,11 @@
</span><span class="cx">  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
</span><span class="cx">  */
</span><span class="cx"> 
</span><del>-#ifndef RTCDataChannelHandlerMock_h
-#define RTCDataChannelHandlerMock_h
</del><ins>+#pragma once
</ins><span class="cx"> 
</span><span class="cx"> #if ENABLE(WEB_RTC)
</span><span class="cx"> 
</span><span class="cx"> #include &quot;RTCDataChannelHandler.h&quot;
</span><del>-#include &quot;RTCPeerConnectionHandler.h&quot;
</del><span class="cx"> #include &quot;TimerEventBasedMock.h&quot;
</span><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="lines">@@ -37,15 +35,14 @@
</span><span class="cx"> class RTCDataChannelHandlerMock final : public RTCDataChannelHandler, public TimerEventBasedMock {
</span><span class="cx"> public:
</span><span class="cx">     RTCDataChannelHandlerMock(const String&amp;, const RTCDataChannelInit&amp;);
</span><del>-    virtual ~RTCDataChannelHandlerMock() { }
</del><span class="cx"> 
</span><del>-    void setClient(RTCDataChannelHandlerClient*) override;
</del><ins>+private:
+    void setClient(RTCDataChannelHandlerClient*) final;
</ins><span class="cx"> 
</span><del>-    bool sendStringData(const String&amp;) override;
-    bool sendRawData(const char*, size_t) override;
-    void close() override;
</del><ins>+    bool sendStringData(const String&amp;) final;
+    bool sendRawData(const char*, size_t) final;
+    void close() final;
</ins><span class="cx"> 
</span><del>-private:
</del><span class="cx">     RTCDataChannelHandlerClient* m_client;
</span><span class="cx"> 
</span><span class="cx">     String m_label;
</span><span class="lines">@@ -55,5 +52,3 @@
</span><span class="cx"> } // namespace WebCore
</span><span class="cx"> 
</span><span class="cx"> #endif // ENABLE(WEB_RTC)
</span><del>-
-#endif // RTCDataChannelHandlerMock_h
</del></span></pre></div>
<a id="trunkSourceWebCoreplatformmockRTCPeerConnectionHandlerMockcpp"></a>
<div class="delfile"><h4>Deleted: trunk/Source/WebCore/platform/mock/RTCPeerConnectionHandlerMock.cpp (209694 => 209695)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/mock/RTCPeerConnectionHandlerMock.cpp        2016-12-12 01:41:16 UTC (rev 209694)
+++ trunk/Source/WebCore/platform/mock/RTCPeerConnectionHandlerMock.cpp        2016-12-12 02:50:06 UTC (rev 209695)
</span><span class="lines">@@ -1,179 +0,0 @@
</span><del>-/*
- *  Copyright (C) 2013 Nokia Corporation and/or its subsidiary(-ies).
- *
- * 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 THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * &quot;AS IS&quot; 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 THE COPYRIGHT
- * OWNER OR 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 &quot;config.h&quot;
-
-#if ENABLE(WEB_RTC)
-
-#include &quot;RTCPeerConnectionHandlerMock.h&quot;
-
-#include &quot;NotImplemented.h&quot;
-#include &quot;RTCDTMFSenderHandler.h&quot;
-#include &quot;RTCDTMFSenderHandlerMock.h&quot;
-#include &quot;RTCDataChannelHandler.h&quot;
-#include &quot;RTCDataChannelHandlerMock.h&quot;
-#include &quot;RTCNotifiersMock.h&quot;
-#include &quot;RTCSessionDescriptionRequest.h&quot;
-#include &quot;RTCVoidRequest.h&quot;
-#include &lt;wtf/text/CString.h&gt;
-
-namespace WebCore {
-
-std::unique_ptr&lt;RTCPeerConnectionHandler&gt; RTCPeerConnectionHandlerMock::create(RTCPeerConnectionHandlerClient* client)
-{
-    return std::make_unique&lt;RTCPeerConnectionHandlerMock&gt;(client);
-}
-
-RTCPeerConnectionHandlerMock::RTCPeerConnectionHandlerMock(RTCPeerConnectionHandlerClient* client)
-    : m_client(client)
-{
-}
-
-bool RTCPeerConnectionHandlerMock::initialize(PassRefPtr&lt;RTCConfigurationPrivate&gt;)
-{
-    RefPtr&lt;IceConnectionNotifier&gt; notifier = adoptRef(new IceConnectionNotifier(m_client, RTCPeerConnectionHandlerClient::IceConnectionStateCompleted, RTCPeerConnectionHandlerClient::IceGatheringStateComplete));
-    m_timerEvents.append(adoptRef(new TimerEvent(this, notifier)));
-    return true;
-}
-
-void RTCPeerConnectionHandlerMock::createOffer(PassRefPtr&lt;RTCSessionDescriptionRequest&gt; request, PassRefPtr&lt;RTCOfferOptionsPrivate&gt;)
-{
-    RefPtr&lt;SessionRequestNotifier&gt; notifier = adoptRef(new SessionRequestNotifier(request, RTCSessionDescriptionDescriptor::create(&quot;offer&quot;, &quot;local&quot;)));
-    m_timerEvents.append(adoptRef(new TimerEvent(this, notifier)));
-}
-
-void RTCPeerConnectionHandlerMock::createAnswer(PassRefPtr&lt;RTCSessionDescriptionRequest&gt; request, PassRefPtr&lt;RTCOfferAnswerOptionsPrivate&gt;)
-{
-    RefPtr&lt;SessionRequestNotifier&gt; notifier = adoptRef(new SessionRequestNotifier(request, RTCSessionDescriptionDescriptor::create(&quot;answer&quot;, &quot;local&quot;)));
-    m_timerEvents.append(adoptRef(new TimerEvent(this, notifier)));
-}
-
-RTCPeerConnectionHandlerClient::SignalingState RTCPeerConnectionHandlerMock::signalingStateFromSDP(RTCSessionDescriptionDescriptor* descriptor)
-{
-    if (descriptor-&gt;type() == &quot;offer&quot; &amp;&amp; descriptor-&gt;sdp() == &quot;local&quot;)
-        return RTCPeerConnectionHandlerClient::SignalingStateHaveLocalOffer;
-    if (descriptor-&gt;type() == &quot;offer&quot; &amp;&amp; descriptor-&gt;sdp() == &quot;remote&quot;)
-        return RTCPeerConnectionHandlerClient::SignalingStateHaveRemoteOffer;
-    if (descriptor-&gt;type() == &quot;pranswer&quot; &amp;&amp; descriptor-&gt;sdp() == &quot;local&quot;)
-        return RTCPeerConnectionHandlerClient::SignalingStateHaveLocalPrAnswer;
-    if (descriptor-&gt;type() == &quot;pranswer&quot; &amp;&amp; descriptor-&gt;sdp() == &quot;remote&quot;)
-        return RTCPeerConnectionHandlerClient::SignalingStateHaveRemotePrAnswer;
-
-    return RTCPeerConnectionHandlerClient::SignalingStateStable;
-}
-
-void RTCPeerConnectionHandlerMock::setLocalDescription(PassRefPtr&lt;RTCVoidRequest&gt; request, PassRefPtr&lt;RTCSessionDescriptionDescriptor&gt; descriptor)
-{
-    RefPtr&lt;VoidRequestNotifier&gt; voidNotifier;
-    RefPtr&lt;SignalingStateNotifier&gt; signalingNotifier;
-    if (!descriptor.get() || descriptor-&gt;sdp() != &quot;local&quot;)
-        voidNotifier = adoptRef(new VoidRequestNotifier(request, false, RTCPeerConnectionHandler::internalErrorName()));
-    else {
-        m_localSessionDescription = descriptor;
-        signalingNotifier = adoptRef(new SignalingStateNotifier(m_client, signalingStateFromSDP(m_localSessionDescription.get())));
-        voidNotifier = adoptRef(new VoidRequestNotifier(request, true));
-        m_timerEvents.append(adoptRef(new TimerEvent(this, signalingNotifier)));
-    }
-
-    m_timerEvents.append(adoptRef(new TimerEvent(this, voidNotifier)));
-}
-
-void RTCPeerConnectionHandlerMock::setRemoteDescription(PassRefPtr&lt;RTCVoidRequest&gt; request, PassRefPtr&lt;RTCSessionDescriptionDescriptor&gt; descriptor)
-{
-    RefPtr&lt;VoidRequestNotifier&gt; voidNotifier;
-    RefPtr&lt;SignalingStateNotifier&gt; signalingNotifier;
-    if (!descriptor.get() || descriptor-&gt;sdp() != &quot;remote&quot;)
-        voidNotifier = adoptRef(new VoidRequestNotifier(request, false, RTCPeerConnectionHandler::internalErrorName()));
-    else {
-        m_remoteSessionDescription = descriptor;
-        signalingNotifier = adoptRef(new SignalingStateNotifier(m_client, signalingStateFromSDP(m_remoteSessionDescription.get())));
-        voidNotifier = adoptRef(new VoidRequestNotifier(request, true));
-        m_timerEvents.append(adoptRef(new TimerEvent(this, signalingNotifier)));
-    }
-
-    m_timerEvents.append(adoptRef(new TimerEvent(this, voidNotifier)));
-}
-
-PassRefPtr&lt;RTCSessionDescriptionDescriptor&gt; RTCPeerConnectionHandlerMock::localDescription()
-{
-    return m_localSessionDescription;
-}
-
-PassRefPtr&lt;RTCSessionDescriptionDescriptor&gt; RTCPeerConnectionHandlerMock::remoteDescription()
-{
-    return m_remoteSessionDescription;
-}
-
-bool RTCPeerConnectionHandlerMock::updateIce(PassRefPtr&lt;RTCConfigurationPrivate&gt;)
-{
-    return true;
-}
-
-bool RTCPeerConnectionHandlerMock::addIceCandidate(PassRefPtr&lt;RTCVoidRequest&gt; request, PassRefPtr&lt;RTCIceCandidateDescriptor&gt;)
-{
-    RefPtr&lt;VoidRequestNotifier&gt; notifier = adoptRef(new VoidRequestNotifier(request, true));
-    m_timerEvents.append(adoptRef(new TimerEvent(this, notifier)));
-    return true;
-}
-
-bool RTCPeerConnectionHandlerMock::addStream(PassRefPtr&lt;MediaStreamPrivate&gt;)
-{
-    // Spec states that every time a stream is added, a negotiationneeded event must be fired.
-    m_client-&gt;negotiationNeeded();
-    return true;
-}
-
-void RTCPeerConnectionHandlerMock::removeStream(PassRefPtr&lt;MediaStreamPrivate&gt;)
-{
-    // Spec states that every time a stream is removed, a negotiationneeded event must be fired.
-    m_client-&gt;negotiationNeeded();
-}
-
-void RTCPeerConnectionHandlerMock::getStats(PassRefPtr&lt;RTCStatsRequest&gt;)
-{
-    // Current tests does not support getUserMedia and this function requires it.
-    // Once WebKit has test support to getUserMedia, this must be fixed.
-    notImplemented();
-}
-
-std::unique_ptr&lt;RTCDataChannelHandler&gt; RTCPeerConnectionHandlerMock::createDataChannel(const String&amp; label, const RTCDataChannelInit&amp; init)
-{
-    RefPtr&lt;RemoteDataChannelNotifier&gt; notifier = adoptRef(new RemoteDataChannelNotifier(m_client));
-    m_timerEvents.append(adoptRef(new TimerEvent(this, notifier)));
-    return std::make_unique&lt;RTCDataChannelHandlerMock&gt;(label, init);
-}
-
-std::unique_ptr&lt;RTCDTMFSenderHandler&gt; RTCPeerConnectionHandlerMock::createDTMFSender(PassRefPtr&lt;RealtimeMediaSource&gt;)
-{
-    return std::make_unique&lt;RTCDTMFSenderHandlerMock&gt;();
-}
-
-void RTCPeerConnectionHandlerMock::stop()
-{
-}
-
-} // namespace WebCore
-
-#endif // ENABLE(WEB_RTC)
</del></span></pre></div>
<a id="trunkSourceWebCoreplatformmockRTCPeerConnectionHandlerMockh"></a>
<div class="delfile"><h4>Deleted: trunk/Source/WebCore/platform/mock/RTCPeerConnectionHandlerMock.h (209694 => 209695)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/mock/RTCPeerConnectionHandlerMock.h        2016-12-12 01:41:16 UTC (rev 209694)
+++ trunk/Source/WebCore/platform/mock/RTCPeerConnectionHandlerMock.h        2016-12-12 02:50:06 UTC (rev 209695)
</span><span class="lines">@@ -1,75 +0,0 @@
</span><del>-/*
- *  Copyright (C) 2013 Nokia Corporation and/or its subsidiary(-ies).
- *
- * 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 THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * &quot;AS IS&quot; 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 THE COPYRIGHT
- * OWNER OR 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.
- */
-
-#ifndef RTCPeerConnectionHandlerMock_h
-#define RTCPeerConnectionHandlerMock_h
-
-#if ENABLE(WEB_RTC)
-
-#include &quot;RTCPeerConnectionHandler.h&quot;
-#include &quot;RTCPeerConnectionHandlerClient.h&quot;
-#include &quot;RTCSessionDescriptionDescriptor.h&quot;
-#include &quot;TimerEventBasedMock.h&quot;
-
-namespace WebCore {
-
-class RTCPeerConnectionHandlerMock final : public RTCPeerConnectionHandler, public TimerEventBasedMock {
-public:
-    WEBCORE_EXPORT static std::unique_ptr&lt;RTCPeerConnectionHandler&gt; create(RTCPeerConnectionHandlerClient*);
-
-    virtual ~RTCPeerConnectionHandlerMock() { }
-
-    bool initialize(PassRefPtr&lt;RTCConfigurationPrivate&gt;) override;
-
-    void createOffer(PassRefPtr&lt;RTCSessionDescriptionRequest&gt;, PassRefPtr&lt;RTCOfferOptionsPrivate&gt;) override;
-    void createAnswer(PassRefPtr&lt;RTCSessionDescriptionRequest&gt;, PassRefPtr&lt;RTCOfferAnswerOptionsPrivate&gt;) override;
-    void setLocalDescription(PassRefPtr&lt;RTCVoidRequest&gt;, PassRefPtr&lt;RTCSessionDescriptionDescriptor&gt;) override;
-    void setRemoteDescription(PassRefPtr&lt;RTCVoidRequest&gt;, PassRefPtr&lt;RTCSessionDescriptionDescriptor&gt;) override;
-    PassRefPtr&lt;RTCSessionDescriptionDescriptor&gt; localDescription() override;
-    PassRefPtr&lt;RTCSessionDescriptionDescriptor&gt; remoteDescription() override;
-    bool updateIce(PassRefPtr&lt;RTCConfigurationPrivate&gt;) override;
-    bool addIceCandidate(PassRefPtr&lt;RTCVoidRequest&gt;, PassRefPtr&lt;RTCIceCandidateDescriptor&gt;) override;
-    bool addStream(PassRefPtr&lt;MediaStreamPrivate&gt;) override;
-    void removeStream(PassRefPtr&lt;MediaStreamPrivate&gt;) override;
-    void getStats(PassRefPtr&lt;RTCStatsRequest&gt;) override;
-    std::unique_ptr&lt;RTCDataChannelHandler&gt; createDataChannel(const String&amp; label, const RTCDataChannelInit&amp;) override;
-    std::unique_ptr&lt;RTCDTMFSenderHandler&gt; createDTMFSender(PassRefPtr&lt;RealtimeMediaSource&gt;) override;
-    void stop() override;
-
-    explicit RTCPeerConnectionHandlerMock(RTCPeerConnectionHandlerClient*);
-
-private:
-    RTCPeerConnectionHandlerClient::SignalingState signalingStateFromSDP(RTCSessionDescriptionDescriptor*);
-    RTCPeerConnectionHandlerClient* m_client;
-
-    RefPtr&lt;RTCSessionDescriptionDescriptor&gt; m_localSessionDescription;
-    RefPtr&lt;RTCSessionDescriptionDescriptor&gt; m_remoteSessionDescription;
-};
-
-} // namespace WebCore
-
-#endif // ENABLE(WEB_RTC)
-
-#endif // RTCPeerConnectionHandlerMock_h
</del></span></pre></div>
<a id="trunkSourceWebCoretestingInternalscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/testing/Internals.cpp (209694 => 209695)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/testing/Internals.cpp        2016-12-12 01:41:16 UTC (rev 209694)
+++ trunk/Source/WebCore/testing/Internals.cpp        2016-12-12 02:50:06 UTC (rev 209695)
</span><span class="lines">@@ -184,7 +184,6 @@
</span><span class="cx"> #if ENABLE(WEB_RTC)
</span><span class="cx"> #include &quot;MockMediaEndpoint.h&quot;
</span><span class="cx"> #include &quot;RTCPeerConnection.h&quot;
</span><del>-#include &quot;RTCPeerConnectionHandlerMock.h&quot;
</del><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(MEDIA_SOURCE)
</span><span class="lines">@@ -433,7 +432,6 @@
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(WEB_RTC)
</span><span class="cx">     enableMockMediaEndpoint();
</span><del>-    enableMockRTCPeerConnectionHandler();
</del><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(WIRELESS_PLAYBACK_TARGET)
</span><span class="lines">@@ -980,11 +978,6 @@
</span><span class="cx">     MediaEndpoint::create = MockMediaEndpoint::create;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void Internals::enableMockRTCPeerConnectionHandler()
-{
-    RTCPeerConnectionHandler::create = RTCPeerConnectionHandlerMock::create;
-}
-
</del><span class="cx"> void Internals::emulateRTCPeerConnectionPlatformEvent(RTCPeerConnection&amp; connection, const String&amp; action)
</span><span class="cx"> {
</span><span class="cx">     connection.emulatePlatformEvent(action);
</span></span></pre>
</div>
</div>

</body>
</html>