<!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>[212699] 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/212699">212699</a></dd>
<dt>Author</dt> <dd>achristensen@apple.com</dd>
<dt>Date</dt> <dd>2017-02-20 21:50:06 -0800 (Mon, 20 Feb 2017)</dd>
</dl>

<h3>Log Message</h3>
<pre>[WebRTC][Mac] Activate libwebrtc
https://bugs.webkit.org/show_bug.cgi?id=167293
LayoutTests/imported/w3c:

&lt;rdar://problem/30401864&gt;

Patch by Youenn Fablet &lt;youennf@gmail.com&gt; on 2017-02-20
Reviewed by Alex Christensen.

* web-platform-tests/webrtc/datachannel-emptystring-expected.txt:
* web-platform-tests/webrtc/no-media-call-expected.txt:
* web-platform-tests/webrtc/promises-call-expected.txt:

Source/ThirdParty/libwebrtc:

&lt;rdar://problem/30401864&gt;

Patch by Youenn Fablet &lt;youenn@apple.com&gt; on 2017-02-20
Reviewed by Alex Christensen.

Doing some clean-up.

* Configurations/libwebrtc.xcconfig:
* Source/webrtc/base/checks.h:
* libwebrtc.xcodeproj/project.pbxproj:

Source/WebCore:


Patch by Youenn Fablet &lt;youenn@apple.com&gt; on 2017-02-20
Reviewed by Alex Christensen.

* Configurations/WebCore.xcconfig:
* Configurations/WebCoreTestSupport.xcconfig:

Source/WebKit2:

&lt;rdar://problem/30401864&gt;

Patch by Youenn Fablet &lt;youenn@apple.com&gt; on 2017-02-20
Reviewed by Alex Christensen.

Activating PeerConnection runtime flag based on successful loading of libwebrtc.dylib.

* Configurations/WebKit.xcconfig:
* Shared/WebPreferencesDefinitions.h:
* UIProcess/WebPreferences.cpp:
(WebKit::checkWebRTCAvailability):

Source/WTF:


Patch by Youenn Fablet &lt;youenn@apple.com&gt; on 2017-02-20
Reviewed by Alex Christensen.

* wtf/Platform.h:

Tools:

&lt;rdar://problem/30401864&gt;

Patch by Youenn Fablet &lt;youenn@apple.com&gt; on 2017-02-20
Reviewed by Alex Christensen.

Fixing paths to allow loading libwebrtc.dylib successfully.

* Scripts/build-webkit:
* Scripts/webkitdirs.pm:
(setupMacWebKitEnvironment):
(setupIOSWebKitEnvironment):

LayoutTests:

&lt;rdar://problem/30401864&gt;

Patch by Youenn Fablet &lt;youenn@apple.com&gt; on 2017-02-20
Reviewed by Alex Christensen.

* TestExpectations:
* fast/mediastream/RTCPeerConnection-addIceCandidate-expected.txt:
* fast/mediastream/RTCPeerConnection-addTrack-reuse-sender-expected.txt:
* fast/mediastream/RTCPeerConnection-icecandidate-event-expected.txt:
* fast/mediastream/RTCPeerConnection-legacy-stream-based-api-expected.txt:
* platform/gtk/TestExpectations:
* platform/gtk/fast/mediastream/RTCPeerConnection-AddRemoveStream-expected.txt: Added.
* platform/gtk/fast/mediastream/RTCPeerConnection-addIceCandidate-expected.txt: Copied from LayoutTests/fast/mediastream/RTCPeerConnection-addIceCandidate-expected.txt.
* platform/gtk/fast/mediastream/RTCPeerConnection-addTrack-reuse-sender-expected.txt: Copied from LayoutTests/fast/mediastream/RTCPeerConnection-addTrack-reuse-sender-expected.txt.
* platform/gtk/fast/mediastream/RTCPeerConnection-closed-state-expected.txt: Added.
* platform/gtk/fast/mediastream/RTCPeerConnection-icecandidate-event-expected.txt: Copied from LayoutTests/fast/mediastream/RTCPeerConnection-icecandidate-event-expected.txt.
* platform/gtk/fast/mediastream/RTCPeerConnection-iceconnectionstatechange-event-expected.txt: Added.
* platform/gtk/fast/mediastream/RTCPeerConnection-legacy-stream-based-api-expected.txt: Copied from LayoutTests/fast/mediastream/RTCPeerConnection-legacy-stream-based-api-expected.txt.
* platform/gtk/fast/mediastream/RTCPeerConnection-onnegotiationneeded-expected.txt: Added.
* platform/gtk/fast/mediastream/RTCPeerConnection-overloaded-operations-params-expected.txt: Added.
* platform/gtk/fast/mediastream/RTCRtpSender-replaceTrack-expected.txt: Added.
* platform/gtk/fast/mediastream/no-media-call-expected.txt: Added.
* platform/ios-simulator-wk2/TestExpectations:
* platform/mac-wk1/TestExpectations:</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsChangeLog">trunk/LayoutTests/ChangeLog</a></li>
<li><a href="#trunkLayoutTestsTestExpectations">trunk/LayoutTests/TestExpectations</a></li>
<li><a href="#trunkLayoutTestsfastmediastreamRTCPeerConnectionaddIceCandidateexpectedtxt">trunk/LayoutTests/fast/mediastream/RTCPeerConnection-addIceCandidate-expected.txt</a></li>
<li><a href="#trunkLayoutTestsfastmediastreamRTCPeerConnectionaddTrackreusesenderexpectedtxt">trunk/LayoutTests/fast/mediastream/RTCPeerConnection-addTrack-reuse-sender-expected.txt</a></li>
<li><a href="#trunkLayoutTestsfastmediastreamRTCPeerConnectionicecandidateeventexpectedtxt">trunk/LayoutTests/fast/mediastream/RTCPeerConnection-icecandidate-event-expected.txt</a></li>
<li><a href="#trunkLayoutTestsfastmediastreamRTCPeerConnectionlegacystreambasedapiexpectedtxt">trunk/LayoutTests/fast/mediastream/RTCPeerConnection-legacy-stream-based-api-expected.txt</a></li>
<li><a href="#trunkLayoutTestsimportedw3cChangeLog">trunk/LayoutTests/imported/w3c/ChangeLog</a></li>
<li><a href="#trunkLayoutTestsimportedw3cwebplatformtestswebrtcdatachannelemptystringexpectedtxt">trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc/datachannel-emptystring-expected.txt</a></li>
<li><a href="#trunkLayoutTestsimportedw3cwebplatformtestswebrtcnomediacallexpectedtxt">trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc/no-media-call-expected.txt</a></li>
<li><a href="#trunkLayoutTestsimportedw3cwebplatformtestswebrtcpromisescallexpectedtxt">trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc/promises-call-expected.txt</a></li>
<li><a href="#trunkLayoutTestsplatformgtkTestExpectations">trunk/LayoutTests/platform/gtk/TestExpectations</a></li>
<li><a href="#trunkLayoutTestsplatformiossimulatorwk2TestExpectations">trunk/LayoutTests/platform/ios-simulator-wk2/TestExpectations</a></li>
<li><a href="#trunkLayoutTestsplatformmacwk1TestExpectations">trunk/LayoutTests/platform/mac-wk1/TestExpectations</a></li>
<li><a href="#trunkSourceThirdPartylibwebrtcChangeLog">trunk/Source/ThirdParty/libwebrtc/ChangeLog</a></li>
<li><a href="#trunkSourceThirdPartylibwebrtcConfigurationslibwebrtcxcconfig">trunk/Source/ThirdParty/libwebrtc/Configurations/libwebrtc.xcconfig</a></li>
<li><a href="#trunkSourceThirdPartylibwebrtcSourcewebrtcbasechecksh">trunk/Source/ThirdParty/libwebrtc/Source/webrtc/base/checks.h</a></li>
<li><a href="#trunkSourceThirdPartylibwebrtclibwebrtcxcodeprojprojectpbxproj">trunk/Source/ThirdParty/libwebrtc/libwebrtc.xcodeproj/project.pbxproj</a></li>
<li><a href="#trunkSourceWTFChangeLog">trunk/Source/WTF/ChangeLog</a></li>
<li><a href="#trunkSourceWTFwtfPlatformh">trunk/Source/WTF/wtf/Platform.h</a></li>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCoreConfigurationsWebCorexcconfig">trunk/Source/WebCore/Configurations/WebCore.xcconfig</a></li>
<li><a href="#trunkSourceWebCoreConfigurationsWebCoreTestSupportxcconfig">trunk/Source/WebCore/Configurations/WebCoreTestSupport.xcconfig</a></li>
<li><a href="#trunkSourceWebKit2ChangeLog">trunk/Source/WebKit2/ChangeLog</a></li>
<li><a href="#trunkSourceWebKit2ConfigurationsWebKitxcconfig">trunk/Source/WebKit2/Configurations/WebKit.xcconfig</a></li>
<li><a href="#trunkSourceWebKit2SharedWebPreferencesDefinitionsh">trunk/Source/WebKit2/Shared/WebPreferencesDefinitions.h</a></li>
<li><a href="#trunkSourceWebKit2UIProcessWebPreferencescpp">trunk/Source/WebKit2/UIProcess/WebPreferences.cpp</a></li>
<li><a href="#trunkToolsChangeLog">trunk/Tools/ChangeLog</a></li>
<li><a href="#trunkToolsScriptsbuildwebkit">trunk/Tools/Scripts/build-webkit</a></li>
<li><a href="#trunkToolsScriptswebkitdirspm">trunk/Tools/Scripts/webkitdirs.pm</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsplatformgtkfastmediastreamRTCPeerConnectionAddRemoveStreamexpectedtxt">trunk/LayoutTests/platform/gtk/fast/mediastream/RTCPeerConnection-AddRemoveStream-expected.txt</a></li>
<li><a href="#trunkLayoutTestsplatformgtkfastmediastreamRTCPeerConnectionaddIceCandidateexpectedtxt">trunk/LayoutTests/platform/gtk/fast/mediastream/RTCPeerConnection-addIceCandidate-expected.txt</a></li>
<li><a href="#trunkLayoutTestsplatformgtkfastmediastreamRTCPeerConnectionaddTrackreusesenderexpectedtxt">trunk/LayoutTests/platform/gtk/fast/mediastream/RTCPeerConnection-addTrack-reuse-sender-expected.txt</a></li>
<li><a href="#trunkLayoutTestsplatformgtkfastmediastreamRTCPeerConnectionclosedstateexpectedtxt">trunk/LayoutTests/platform/gtk/fast/mediastream/RTCPeerConnection-closed-state-expected.txt</a></li>
<li><a href="#trunkLayoutTestsplatformgtkfastmediastreamRTCPeerConnectionicecandidateeventexpectedtxt">trunk/LayoutTests/platform/gtk/fast/mediastream/RTCPeerConnection-icecandidate-event-expected.txt</a></li>
<li><a href="#trunkLayoutTestsplatformgtkfastmediastreamRTCPeerConnectioniceconnectionstatechangeeventexpectedtxt">trunk/LayoutTests/platform/gtk/fast/mediastream/RTCPeerConnection-iceconnectionstatechange-event-expected.txt</a></li>
<li><a href="#trunkLayoutTestsplatformgtkfastmediastreamRTCPeerConnectionlegacystreambasedapiexpectedtxt">trunk/LayoutTests/platform/gtk/fast/mediastream/RTCPeerConnection-legacy-stream-based-api-expected.txt</a></li>
<li><a href="#trunkLayoutTestsplatformgtkfastmediastreamRTCPeerConnectiononnegotiationneededexpectedtxt">trunk/LayoutTests/platform/gtk/fast/mediastream/RTCPeerConnection-onnegotiationneeded-expected.txt</a></li>
<li><a href="#trunkLayoutTestsplatformgtkfastmediastreamRTCPeerConnectionoverloadedoperationsparamsexpectedtxt">trunk/LayoutTests/platform/gtk/fast/mediastream/RTCPeerConnection-overloaded-operations-params-expected.txt</a></li>
<li><a href="#trunkLayoutTestsplatformgtkfastmediastreamRTCRtpSenderreplaceTrackexpectedtxt">trunk/LayoutTests/platform/gtk/fast/mediastream/RTCRtpSender-replaceTrack-expected.txt</a></li>
<li><a href="#trunkLayoutTestsplatformgtkfastmediastreamnomediacallexpectedtxt">trunk/LayoutTests/platform/gtk/fast/mediastream/no-media-call-expected.txt</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkLayoutTestsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/ChangeLog (212698 => 212699)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/ChangeLog        2017-02-21 05:02:32 UTC (rev 212698)
+++ trunk/LayoutTests/ChangeLog        2017-02-21 05:50:06 UTC (rev 212699)
</span><span class="lines">@@ -1,3 +1,31 @@
</span><ins>+2017-02-20  Youenn Fablet  &lt;youenn@apple.com&gt;
+
+        [WebRTC][Mac] Activate libwebrtc
+        https://bugs.webkit.org/show_bug.cgi?id=167293
+        &lt;rdar://problem/30401864&gt;
+
+        Reviewed by Alex Christensen.
+
+        * TestExpectations:
+        * fast/mediastream/RTCPeerConnection-addIceCandidate-expected.txt:
+        * fast/mediastream/RTCPeerConnection-addTrack-reuse-sender-expected.txt:
+        * fast/mediastream/RTCPeerConnection-icecandidate-event-expected.txt:
+        * fast/mediastream/RTCPeerConnection-legacy-stream-based-api-expected.txt:
+        * platform/gtk/TestExpectations:
+        * platform/gtk/fast/mediastream/RTCPeerConnection-AddRemoveStream-expected.txt: Added.
+        * platform/gtk/fast/mediastream/RTCPeerConnection-addIceCandidate-expected.txt: Copied from LayoutTests/fast/mediastream/RTCPeerConnection-addIceCandidate-expected.txt.
+        * platform/gtk/fast/mediastream/RTCPeerConnection-addTrack-reuse-sender-expected.txt: Copied from LayoutTests/fast/mediastream/RTCPeerConnection-addTrack-reuse-sender-expected.txt.
+        * platform/gtk/fast/mediastream/RTCPeerConnection-closed-state-expected.txt: Added.
+        * platform/gtk/fast/mediastream/RTCPeerConnection-icecandidate-event-expected.txt: Copied from LayoutTests/fast/mediastream/RTCPeerConnection-icecandidate-event-expected.txt.
+        * platform/gtk/fast/mediastream/RTCPeerConnection-iceconnectionstatechange-event-expected.txt: Added.
+        * platform/gtk/fast/mediastream/RTCPeerConnection-legacy-stream-based-api-expected.txt: Copied from LayoutTests/fast/mediastream/RTCPeerConnection-legacy-stream-based-api-expected.txt.
+        * platform/gtk/fast/mediastream/RTCPeerConnection-onnegotiationneeded-expected.txt: Added.
+        * platform/gtk/fast/mediastream/RTCPeerConnection-overloaded-operations-params-expected.txt: Added.
+        * platform/gtk/fast/mediastream/RTCRtpSender-replaceTrack-expected.txt: Added.
+        * platform/gtk/fast/mediastream/no-media-call-expected.txt: Added.
+        * platform/ios-simulator-wk2/TestExpectations:
+        * platform/mac-wk1/TestExpectations:
+
</ins><span class="cx"> 2017-02-20  Joseph Pecoraro  &lt;pecoraro@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         ASSERTION FAILED: m_normalWorld-&gt;hasOneRef() under WorkerThread::stop
</span></span></pre></div>
<a id="trunkLayoutTestsTestExpectations"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/TestExpectations (212698 => 212699)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/TestExpectations        2017-02-21 05:02:32 UTC (rev 212698)
+++ trunk/LayoutTests/TestExpectations        2017-02-21 05:50:06 UTC (rev 212699)
</span><span class="lines">@@ -692,6 +692,14 @@
</span><span class="cx"> # WebRTC backend not enabled by default.
</span><span class="cx"> webrtc [ Skip ]
</span><span class="cx"> fast/mediastream/getUserMedia-webaudio.html [ Skip ]
</span><ins>+fast/mediastream/RTCPeerConnection-AddRemoveStream.html [ Skip ]
+fast/mediastream/RTCPeerConnection-closed-state.html [ Skip ]
+fast/mediastream/RTCPeerConnection-iceconnectionstatechange-event.html [ Skip ]
+fast/mediastream/RTCPeerConnection-more-media-to-negotiate.html [ Skip ]
+fast/mediastream/RTCPeerConnection-onnegotiationneeded.html [ Skip ]
+fast/mediastream/RTCPeerConnection-overloaded-operations-params.html [ Skip ]
+fast/mediastream/RTCRtpSender-replaceTrack.html [ Skip ]
+fast/mediastream/RTCPeerConnection-icecandidate-event.html [ Pass Failure ]
</ins><span class="cx"> 
</span><span class="cx"> # Only iOS WK1 has testRunner.setPagePaused.
</span><span class="cx"> fast/dom/timer-fire-after-page-pause.html [ Skip ]
</span></span></pre></div>
<a id="trunkLayoutTestsfastmediastreamRTCPeerConnectionaddIceCandidateexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/fast/mediastream/RTCPeerConnection-addIceCandidate-expected.txt (212698 => 212699)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/mediastream/RTCPeerConnection-addIceCandidate-expected.txt        2017-02-21 05:02:32 UTC (rev 212698)
+++ trunk/LayoutTests/fast/mediastream/RTCPeerConnection-addIceCandidate-expected.txt        2017-02-21 05:50:06 UTC (rev 212699)
</span><span class="lines">@@ -11,23 +11,7 @@
</span><span class="cx"> 
</span><span class="cx"> *** Define sdpMid, badSdpMid, sdpMLineIndex and badSdpMLineIndex for testing
</span><span class="cx"> PASS sdpMLineIndex is not badSdpMLineIndex
</span><del>-PASS sdpMid is not null
-PASS sdpMid is not badSdpMid
-PASS promise pc.addIceCandidate(new RTCIceCandidate({candidate: validCandidate, sdpMid: badSdpMid})) rejected with OperationError (DOM Exception 34): sdpMid did not match any media description
-PASS promise pc.addIceCandidate(new RTCIceCandidate({candidate: validCandidate, sdpMLineIndex: badSdpMLineIndex})) rejected with OperationError (DOM Exception 34): sdpMLineIndex is out of range
-*** A (bad) sdpMid takes precedesce over valid sdpMLineIndex
-PASS promise pc.addIceCandidate(new RTCIceCandidate({candidate: validCandidate, sdpMid: badSdpMid, sdpMLineIndex: sdpMLineIndex})) rejected with OperationError (DOM Exception 34): sdpMid did not match any media description
-*** Test bad candidate content with valid sdpMid
-PASS promise pc.addIceCandidate(new RTCIceCandidate({candidate: 'bad content', sdpMid: sdpMid})) rejected with OperationError (DOM Exception 34): Invalid candidate content
-*** Test bad candidate content with valid sdpMLineIndex
-PASS promise pc.addIceCandidate(new RTCIceCandidate({candidate: 'bad content', sdpMLineIndex: sdpMLineIndex})) rejected with OperationError (DOM Exception 34): Invalid candidate content
-
-*** Test some OK input
-PASS promise pc.addIceCandidate({candidate: validCandidate, sdpMid: sdpMid}) fulfilled with undefined
-PASS promise pc.addIceCandidate(new RTCIceCandidate({candidate: validCandidate, sdpMLineIndex: sdpMLineIndex})) fulfilled with undefined
-*** A valid sdpMid takes precedesce over a bad sdpMLineIndex
-PASS promise pc.addIceCandidate(new RTCIceCandidate({candidate: validCandidate, sdpMid: sdpMid, sdpMLineIndex: badSdpMLineIndex})) fulfilled with undefined
-PASS End of test promise chain
</del><ins>+FAIL Error in promise chain: TypeError: undefined is not an object (evaluating 'pc.getTransceivers()[0].mid')
</ins><span class="cx"> PASS successfullyParsed is true
</span><span class="cx"> 
</span><span class="cx"> TEST COMPLETE
</span></span></pre></div>
<a id="trunkLayoutTestsfastmediastreamRTCPeerConnectionaddTrackreusesenderexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/fast/mediastream/RTCPeerConnection-addTrack-reuse-sender-expected.txt (212698 => 212699)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/mediastream/RTCPeerConnection-addTrack-reuse-sender-expected.txt        2017-02-21 05:02:32 UTC (rev 212698)
+++ trunk/LayoutTests/fast/mediastream/RTCPeerConnection-addTrack-reuse-sender-expected.txt        2017-02-21 05:50:06 UTC (rev 212699)
</span><span class="lines">@@ -4,14 +4,14 @@
</span><span class="cx"> 
</span><span class="cx"> 
</span><span class="cx"> *** Remote description with audio offer set
</span><del>-PASS pc.getSenders().length is 1
-PASS pc.getReceivers().length is 1
-PASS pc.getReceivers()[0].track.kind is 'audio'
-PASS pc.getTransceivers().length is 1
</del><ins>+FAIL pc.getSenders().length should be 1. Was 0.
+FAIL pc.getReceivers().length should be 1. Was 0.
+FAIL pc.getReceivers()[0].track.kind should be audio. Threw exception TypeError: undefined is not an object (evaluating 'pc.getReceivers()[0].track')
+FAIL pc.getTransceivers().length should be 1. Was 0.
</ins><span class="cx"> 
</span><span class="cx"> *** Check unused sender
</span><span class="cx"> audioSender = pc.getSenders()[0]
</span><del>-PASS audioSender.track is null
</del><ins>+FAIL audioSender.track should be null. Threw exception TypeError: undefined is not an object (evaluating 'audioSender.track')
</ins><span class="cx"> 
</span><span class="cx"> *** Adding a video track should not reuse audioSender (wrong kind)
</span><span class="cx"> senderFromAddTrack = pc.addTrack(videoTrack, stream)
</span><span class="lines">@@ -18,14 +18,14 @@
</span><span class="cx"> PASS senderFromAddTrack is not audioSender
</span><span class="cx"> 
</span><span class="cx"> *** An extra sender should have been added
</span><del>-PASS pc.getSenders().length is 2
-PASS pc.getSenders().includes(audioSender) is true
</del><ins>+FAIL pc.getSenders().length should be 2. Was 1.
+FAIL pc.getSenders().includes(audioSender) should be true. Was false.
</ins><span class="cx"> PASS pc.getSenders().includes(senderFromAddTrack) is true
</span><span class="cx"> 
</span><span class="cx"> *** Adding an audio track should reuse audioSender
</span><span class="cx"> senderFromAddTrack = pc.addTrack(audioTrack, stream)
</span><del>-PASS senderFromAddTrack is audioSender
-PASS audioSender.track is audioTrack
</del><ins>+FAIL senderFromAddTrack should be undefined (of type undefined). Was [object RTCRtpSender] (of type object).
+FAIL audioSender.track should be [object MediaStreamTrack]. Threw exception TypeError: undefined is not an object (evaluating 'audioSender.track')
</ins><span class="cx"> 
</span><span class="cx"> *** The number of senders should not have changed
</span><span class="cx"> PASS pc.getSenders().length is 2
</span></span></pre></div>
<a id="trunkLayoutTestsfastmediastreamRTCPeerConnectionicecandidateeventexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/fast/mediastream/RTCPeerConnection-icecandidate-event-expected.txt (212698 => 212699)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/mediastream/RTCPeerConnection-icecandidate-event-expected.txt        2017-02-21 05:02:32 UTC (rev 212698)
+++ trunk/LayoutTests/fast/mediastream/RTCPeerConnection-icecandidate-event-expected.txt        2017-02-21 05:50:06 UTC (rev 212699)
</span><span class="lines">@@ -3,26 +3,23 @@
</span><span class="cx"> On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
</span><span class="cx"> 
</span><span class="cx"> 
</span><del>-PASS Local description set
-PASS End of test promise chain
</del><span class="cx"> PASS Got candidate
</span><span class="cx"> PASS event.candidate instanceof RTCIceCandidate is true
</span><span class="cx"> PASS event.candidate.sdpMLineIndex is 0
</span><del>-PASS event.candidate.sdpMid is pc.getTransceivers()[0].mid
-PASS event.candidate.candidate: candidate:1 1 UDP 2013266431 192.168.0.100 38838 typ host
-
</del><ins>+FAIL event.candidate.sdpMid should be null (of type object). Was 1 (of type string).
+PASS event.candidate.candidate: 2013266431 1 udp 2013266432 192.168.0.100 38838 typ host generation 0
+PASS Local description set
+PASS End of test promise chain
</ins><span class="cx"> PASS Got candidate
</span><span class="cx"> PASS event.candidate instanceof RTCIceCandidate is true
</span><span class="cx"> PASS event.candidate.sdpMLineIndex is 0
</span><del>-PASS event.candidate.sdpMid is pc.getTransceivers()[0].mid
-PASS event.candidate.candidate: candidate:2 1 TCP 1019216383 192.168.0.100 9 typ host tcptype active
-
</del><ins>+FAIL event.candidate.sdpMid should be null (of type object). Was 1 (of type string).
+PASS event.candidate.candidate: 1019216383 1 tcp 1019216384 192.168.0.100 9 typ host tcptype passive generation 0
</ins><span class="cx"> PASS Got candidate
</span><span class="cx"> PASS event.candidate instanceof RTCIceCandidate is true
</span><span class="cx"> PASS event.candidate.sdpMLineIndex is 0
</span><del>-PASS event.candidate.sdpMid is pc.getTransceivers()[0].mid
-PASS event.candidate.candidate: candidate:3 1 UDP 1677722111 172.18.0.1 47989 typ srflx raddr 192.168.0.100 rport 47989
-
</del><ins>+FAIL event.candidate.sdpMid should be null (of type object). Was 1 (of type string).
+PASS event.candidate.candidate: 1677722111 1 tcp 1677722112 172.18.0.1 47989 typ srflx raddr 192.168.0.100 rport 47989 generation 0
</ins><span class="cx"> PASS Got end of candidates
</span><span class="cx"> PASS event.candidate is null
</span><span class="cx"> PASS successfullyParsed is true
</span></span></pre></div>
<a id="trunkLayoutTestsfastmediastreamRTCPeerConnectionlegacystreambasedapiexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/fast/mediastream/RTCPeerConnection-legacy-stream-based-api-expected.txt (212698 => 212699)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/mediastream/RTCPeerConnection-legacy-stream-based-api-expected.txt        2017-02-21 05:02:32 UTC (rev 212698)
+++ trunk/LayoutTests/fast/mediastream/RTCPeerConnection-legacy-stream-based-api-expected.txt        2017-02-21 05:50:06 UTC (rev 212699)
</span><span class="lines">@@ -48,11 +48,6 @@
</span><span class="cx"> Test applying a remote description offering a stream with two tracks
</span><span class="cx"> Create remote offer
</span><span class="cx"> Got remote offer, set it
</span><del>-PASS Got 'addstream' event (before setRemoteDescription promise fulfilled)
-PASS remoteStream.getTracks().length is 2
-PASS pc.getRemoteStreams().length is 1
-PASS pc.getRemoteStreams()[0] is remoteStream
-PASS pc.getStreamById(remoteStream.id) is remoteStream
</del><span class="cx"> Remote offer set
</span><span class="cx"> PASS End of test promise chain
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkLayoutTestsimportedw3cChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/imported/w3c/ChangeLog (212698 => 212699)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/imported/w3c/ChangeLog        2017-02-21 05:02:32 UTC (rev 212698)
+++ trunk/LayoutTests/imported/w3c/ChangeLog        2017-02-21 05:50:06 UTC (rev 212699)
</span><span class="lines">@@ -1,3 +1,15 @@
</span><ins>+2017-02-20  Youenn Fablet  &lt;youennf@gmail.com&gt;
+
+        [WebRTC][Mac] Activate libwebrtc
+        https://bugs.webkit.org/show_bug.cgi?id=167293
+        &lt;rdar://problem/30401864&gt;
+
+        Reviewed by Alex Christensen.
+
+        * web-platform-tests/webrtc/datachannel-emptystring-expected.txt:
+        * web-platform-tests/webrtc/no-media-call-expected.txt:
+        * web-platform-tests/webrtc/promises-call-expected.txt:
+
</ins><span class="cx"> 2017-02-20  Romain Bellessort  &lt;romain.bellessort@crf.canon.fr&gt;
</span><span class="cx"> 
</span><span class="cx">         [Readable Streams API] Add ReadableByteStreamController byobRequest attribute
</span></span></pre></div>
<a id="trunkLayoutTestsimportedw3cwebplatformtestswebrtcdatachannelemptystringexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc/datachannel-emptystring-expected.txt (212698 => 212699)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc/datachannel-emptystring-expected.txt        2017-02-21 05:02:32 UTC (rev 212698)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc/datachannel-emptystring-expected.txt        2017-02-21 05:50:06 UTC (rev 212699)
</span><span class="lines">@@ -1,9 +1,5 @@
</span><span class="cx"> 
</span><del>-Harness Error (TIMEOUT), message = null
-
-TIMEOUT Can send empty strings across a WebRTC data channel. Test timed out
</del><ins>+FAIL Can send empty strings across a WebRTC data channel. assert_unreached: Error TypeError: Argument 1 ('description') to RTCPeerConnection.setRemoteDescription must be an instance of RTCSessionDescription Reached unreachable code
</ins><span class="cx"> Messages exchanged
</span><span class="cx"> 
</span><del>-Sent: [empty string]
-Sent: &quot;done&quot;
</del><span class="cx"> 
</span></span></pre></div>
<a id="trunkLayoutTestsimportedw3cwebplatformtestswebrtcnomediacallexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc/no-media-call-expected.txt (212698 => 212699)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc/no-media-call-expected.txt        2017-02-21 05:02:32 UTC (rev 212698)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc/no-media-call-expected.txt        2017-02-21 05:50:06 UTC (rev 212699)
</span><span class="lines">@@ -1,7 +1,5 @@
</span><span class="cx"> 
</span><del>-Harness Error (TIMEOUT), message = null
-
-TIMEOUT Can set up a basic WebRTC call with no data. Test timed out
</del><ins>+FAIL Can set up a basic WebRTC call with no data. assert_unreached: WebRTC called error callback for setRemoteDescription first Reached unreachable code
</ins><span class="cx"> iceConnectionState info
</span><span class="cx"> 
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkLayoutTestsimportedw3cwebplatformtestswebrtcpromisescallexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc/promises-call-expected.txt (212698 => 212699)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc/promises-call-expected.txt        2017-02-21 05:02:32 UTC (rev 212698)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc/promises-call-expected.txt        2017-02-21 05:50:06 UTC (rev 212699)
</span><span class="lines">@@ -1,7 +1,5 @@
</span><span class="cx"> 
</span><del>-Harness Error (TIMEOUT), message = null
-
-TIMEOUT Can set up a basic WebRTC call with only data using promises. Test timed out
</del><ins>+FAIL Can set up a basic WebRTC call with only data using promises. assert_unreached: Error TypeError: Argument 1 ('description') to RTCPeerConnection.setRemoteDescription must be an instance of RTCSessionDescription happened at step Set remote description at second Reached unreachable code
</ins><span class="cx"> iceConnectionState info
</span><span class="cx"> 
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkLayoutTestsplatformgtkTestExpectations"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/platform/gtk/TestExpectations (212698 => 212699)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/platform/gtk/TestExpectations        2017-02-21 05:02:32 UTC (rev 212698)
+++ trunk/LayoutTests/platform/gtk/TestExpectations        2017-02-21 05:50:06 UTC (rev 212699)
</span><span class="lines">@@ -340,6 +340,15 @@
</span><span class="cx"> webkit.org/b/160996 fast/mediastream/MediaStream-video-element-video-tracks-disabled.html [ ImageOnlyFailure ]
</span><span class="cx"> webkit.org/b/161956 fast/mediastream/MediaStream-video-element-displays-buffer.html [ Failure ]
</span><span class="cx"> 
</span><ins>+# Test skipped in the main expectation file.
+fast/mediastream/RTCPeerConnection-AddRemoveStream.html [ Pass ]
+fast/mediastream/RTCPeerConnection-closed-state.html [ Pass ]
+fast/mediastream/RTCPeerConnection-iceconnectionstatechange-event.html [ Pass ]
+fast/mediastream/RTCPeerConnection-more-media-to-negotiate.html [ Pass ]
+fast/mediastream/RTCPeerConnection-onnegotiationneeded.html [ Pass ]
+fast/mediastream/RTCPeerConnection-overloaded-operations-params.html [ Pass ]
+fast/mediastream/RTCRtpSender-replaceTrack.html [ Pass ]
+
</ins><span class="cx"> # Proximity Events is not supported.
</span><span class="cx"> webkit.org/b/99060 proximity [ Failure ]
</span><span class="cx"> webkit.org/b/99060 proximity/event-after-navigation.html [ Timeout ]
</span></span></pre></div>
<a id="trunkLayoutTestsplatformgtkfastmediastreamRTCPeerConnectionAddRemoveStreamexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/platform/gtk/fast/mediastream/RTCPeerConnection-AddRemoveStream-expected.txt (0 => 212699)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/platform/gtk/fast/mediastream/RTCPeerConnection-AddRemoveStream-expected.txt                                (rev 0)
+++ trunk/LayoutTests/platform/gtk/fast/mediastream/RTCPeerConnection-AddRemoveStream-expected.txt        2017-02-21 05:50:06 UTC (rev 212699)
</span><span class="lines">@@ -0,0 +1,21 @@
</span><ins>+Tests RTCPeerConnection [add|remove]Stream.
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+PASS Got a stream.
+PASS pc.addStream(null) threw exception TypeError: Argument 1 ('stream') to RTCPeerConnection.addStream must be an instance of MediaStream.
+PASS pc.getLocalStreams().length is 0
+PASS Got another stream.
+PASS stream.id === stream2.id is false
+PASS onAddStream was called.
+PASS pc.getStreamById(stream.id) is stream
+PASS pc.getStreamById(stream2.id) is null
+PASS pc.getLocalStreams().length is 1
+PASS pc.getLocalStreams().length is 1
+PASS onRemoveStream was called.
+PASS pc.getLocalStreams().length is 0
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsplatformgtkfastmediastreamRTCPeerConnectionaddIceCandidateexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/platform/gtk/fast/mediastream/RTCPeerConnection-addIceCandidate-expected.txt (0 => 212699)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/platform/gtk/fast/mediastream/RTCPeerConnection-addIceCandidate-expected.txt                                (rev 0)
+++ trunk/LayoutTests/platform/gtk/fast/mediastream/RTCPeerConnection-addIceCandidate-expected.txt        2017-02-21 05:50:06 UTC (rev 212699)
</span><span class="lines">@@ -0,0 +1,34 @@
</span><ins>+Test behavior of RTCPeerConnection.addIceCandidate
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+
+*** A remote description is needed before a candidate can be added
+PASS pc.remoteDescription is null
+PASS promise pc.addIceCandidate(new RTCIceCandidate({candidate: 'foo', sdpMid: 0})) rejected with InvalidStateError (DOM Exception 11): No remote description set
+PASS Remote description set
+
+*** Define sdpMid, badSdpMid, sdpMLineIndex and badSdpMLineIndex for testing
+PASS sdpMLineIndex is not badSdpMLineIndex
+PASS sdpMid is not null
+PASS sdpMid is not badSdpMid
+PASS promise pc.addIceCandidate(new RTCIceCandidate({candidate: validCandidate, sdpMid: badSdpMid})) rejected with OperationError (DOM Exception 34): sdpMid did not match any media description
+PASS promise pc.addIceCandidate(new RTCIceCandidate({candidate: validCandidate, sdpMLineIndex: badSdpMLineIndex})) rejected with OperationError (DOM Exception 34): sdpMLineIndex is out of range
+*** A (bad) sdpMid takes precedesce over valid sdpMLineIndex
+PASS promise pc.addIceCandidate(new RTCIceCandidate({candidate: validCandidate, sdpMid: badSdpMid, sdpMLineIndex: sdpMLineIndex})) rejected with OperationError (DOM Exception 34): sdpMid did not match any media description
+*** Test bad candidate content with valid sdpMid
+PASS promise pc.addIceCandidate(new RTCIceCandidate({candidate: 'bad content', sdpMid: sdpMid})) rejected with OperationError (DOM Exception 34): Invalid candidate content
+*** Test bad candidate content with valid sdpMLineIndex
+PASS promise pc.addIceCandidate(new RTCIceCandidate({candidate: 'bad content', sdpMLineIndex: sdpMLineIndex})) rejected with OperationError (DOM Exception 34): Invalid candidate content
+
+*** Test some OK input
+PASS promise pc.addIceCandidate({candidate: validCandidate, sdpMid: sdpMid}) fulfilled with undefined
+PASS promise pc.addIceCandidate(new RTCIceCandidate({candidate: validCandidate, sdpMLineIndex: sdpMLineIndex})) fulfilled with undefined
+*** A valid sdpMid takes precedesce over a bad sdpMLineIndex
+PASS promise pc.addIceCandidate(new RTCIceCandidate({candidate: validCandidate, sdpMid: sdpMid, sdpMLineIndex: badSdpMLineIndex})) fulfilled with undefined
+PASS End of test promise chain
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsplatformgtkfastmediastreamRTCPeerConnectionaddTrackreusesenderexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/platform/gtk/fast/mediastream/RTCPeerConnection-addTrack-reuse-sender-expected.txt (0 => 212699)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/platform/gtk/fast/mediastream/RTCPeerConnection-addTrack-reuse-sender-expected.txt                                (rev 0)
+++ trunk/LayoutTests/platform/gtk/fast/mediastream/RTCPeerConnection-addTrack-reuse-sender-expected.txt        2017-02-21 05:50:06 UTC (rev 212699)
</span><span class="lines">@@ -0,0 +1,35 @@
</span><ins>+Test that RTCPeerConnection.addTrack reuses an unused sender of the same kind if present
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+*** Remote description with audio offer set
+PASS pc.getSenders().length is 1
+PASS pc.getReceivers().length is 1
+PASS pc.getReceivers()[0].track.kind is 'audio'
+PASS pc.getTransceivers().length is 1
+
+*** Check unused sender
+audioSender = pc.getSenders()[0]
+PASS audioSender.track is null
+
+*** Adding a video track should not reuse audioSender (wrong kind)
+senderFromAddTrack = pc.addTrack(videoTrack, stream)
+PASS senderFromAddTrack is not audioSender
+
+*** An extra sender should have been added
+PASS pc.getSenders().length is 2
+PASS pc.getSenders().includes(audioSender) is true
+PASS pc.getSenders().includes(senderFromAddTrack) is true
+
+*** Adding an audio track should reuse audioSender
+senderFromAddTrack = pc.addTrack(audioTrack, stream)
+PASS senderFromAddTrack is audioSender
+PASS audioSender.track is audioTrack
+
+*** The number of senders should not have changed
+PASS pc.getSenders().length is 2
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsplatformgtkfastmediastreamRTCPeerConnectionclosedstateexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/platform/gtk/fast/mediastream/RTCPeerConnection-closed-state-expected.txt (0 => 212699)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/platform/gtk/fast/mediastream/RTCPeerConnection-closed-state-expected.txt                                (rev 0)
+++ trunk/LayoutTests/platform/gtk/fast/mediastream/RTCPeerConnection-closed-state-expected.txt        2017-02-21 05:50:06 UTC (rev 212699)
</span><span class="lines">@@ -0,0 +1,43 @@
</span><ins>+Test calling RTCPeerConnection functions/attributes in closed state
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+PASS pc = new RTCPeerConnection({iceServers:[{urls:'stun:foo.com'}]}); did not throw exception.
+PASS pc.signalingState is &quot;stable&quot;
+Get a sender before closing (to test removeTrack later)
+PASS sender = pc.addTrack(stream.getTracks()[0], stream) did not throw exception.
+
+Test promise-returning functions
+PASS createOffer rejected on closed state
+PASS createAnswer rejected on closed state
+PASS setLocalDescription rejected on closed state
+PASS setRemoteDescription rejected on closed state
+PASS addIceCandidate rejected on closed state
+PASS getStats rejected on closed state
+
+Test non-promise functions
+PASS pc.addTrack(stream.getTracks()[0], stream) threw exception InvalidStateError (DOM Exception 11): The object is in an invalid state..
+PASS pc.removeTrack(sender) threw exception InvalidStateError (DOM Exception 11): The object is in an invalid state..
+PASS pc.getSenders() did not throw exception.
+PASS pc.getReceivers() did not throw exception.
+PASS pc.getConfiguration() did not throw exception.
+PASS pc.setConfiguration({}) threw exception InvalidStateError (DOM Exception 11): The object is in an invalid state..
+PASS pc.createDataChannel(&quot;foo&quot;) threw exception InvalidStateError (DOM Exception 11): The object is in an invalid state..
+PASS pc.close() did not throw exception.
+
+Test attributes
+PASS pc.localDescription did not throw exception.
+PASS pc.currentLocalDescription did not throw exception.
+PASS pc.pendingLocalDescription did not throw exception.
+PASS pc.remoteDescription did not throw exception.
+PASS pc.currentRemoteDescription did not throw exception.
+PASS pc.pendingRemoteDescription did not throw exception.
+PASS pc.signalingState did not throw exception.
+PASS pc.iceGatheringState did not throw exception.
+PASS pc.iceConnectionState did not throw exception.
+
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsplatformgtkfastmediastreamRTCPeerConnectionicecandidateeventexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/platform/gtk/fast/mediastream/RTCPeerConnection-icecandidate-event-expected.txt (0 => 212699)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/platform/gtk/fast/mediastream/RTCPeerConnection-icecandidate-event-expected.txt                                (rev 0)
+++ trunk/LayoutTests/platform/gtk/fast/mediastream/RTCPeerConnection-icecandidate-event-expected.txt        2017-02-21 05:50:06 UTC (rev 212699)
</span><span class="lines">@@ -0,0 +1,31 @@
</span><ins>+Test RTCPeerConnection 'icecandidate' event and gathering done
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+PASS Local description set
+PASS End of test promise chain
+PASS Got candidate
+PASS event.candidate instanceof RTCIceCandidate is true
+PASS event.candidate.sdpMLineIndex is 0
+PASS event.candidate.sdpMid is pc.getTransceivers()[0].mid
+PASS event.candidate.candidate: candidate:1 1 UDP 2013266431 192.168.0.100 38838 typ host
+
+PASS Got candidate
+PASS event.candidate instanceof RTCIceCandidate is true
+PASS event.candidate.sdpMLineIndex is 0
+PASS event.candidate.sdpMid is pc.getTransceivers()[0].mid
+PASS event.candidate.candidate: candidate:2 1 TCP 1019216383 192.168.0.100 9 typ host tcptype active
+
+PASS Got candidate
+PASS event.candidate instanceof RTCIceCandidate is true
+PASS event.candidate.sdpMLineIndex is 0
+PASS event.candidate.sdpMid is pc.getTransceivers()[0].mid
+PASS event.candidate.candidate: candidate:3 1 UDP 1677722111 172.18.0.1 47989 typ srflx raddr 192.168.0.100 rport 47989
+
+PASS Got end of candidates
+PASS event.candidate is null
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsplatformgtkfastmediastreamRTCPeerConnectioniceconnectionstatechangeeventexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/platform/gtk/fast/mediastream/RTCPeerConnection-iceconnectionstatechange-event-expected.txt (0 => 212699)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/platform/gtk/fast/mediastream/RTCPeerConnection-iceconnectionstatechange-event-expected.txt                                (rev 0)
+++ trunk/LayoutTests/platform/gtk/fast/mediastream/RTCPeerConnection-iceconnectionstatechange-event-expected.txt        2017-02-21 05:50:06 UTC (rev 212699)
</span><span class="lines">@@ -0,0 +1,38 @@
</span><ins>+Test RTCPeerConnection 'iceconnectionstatechange' event
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+PASS Local description set
+PASS pc.getTransceivers().length is 3
+PASS pc.iceConnectionState is 'new'
+PASS End of test promise chain
+
+PASS Got icetransportstatechange event
+expectedState is &quot;checking&quot;
+PASS pc.iceConnectionState is expectedState
+
+PASS Got icetransportstatechange event
+expectedState is &quot;connected&quot;
+PASS pc.iceConnectionState is expectedState
+
+PASS Got icetransportstatechange event
+expectedState is &quot;completed&quot;
+PASS pc.iceConnectionState is expectedState
+
+PASS Got icetransportstatechange event
+expectedState is &quot;failed&quot;
+PASS pc.iceConnectionState is expectedState
+
+PASS Got icetransportstatechange event
+expectedState is &quot;disconnected&quot;
+PASS pc.iceConnectionState is expectedState
+
+PASS Got icetransportstatechange event
+expectedState is &quot;new&quot;
+PASS pc.iceConnectionState is expectedState
+
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsplatformgtkfastmediastreamRTCPeerConnectionlegacystreambasedapiexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/platform/gtk/fast/mediastream/RTCPeerConnection-legacy-stream-based-api-expected.txt (0 => 212699)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/platform/gtk/fast/mediastream/RTCPeerConnection-legacy-stream-based-api-expected.txt                                (rev 0)
+++ trunk/LayoutTests/platform/gtk/fast/mediastream/RTCPeerConnection-legacy-stream-based-api-expected.txt        2017-02-21 05:50:06 UTC (rev 212699)
</span><span class="lines">@@ -0,0 +1,62 @@
</span><ins>+Test RTCPeerConnection's legacy MediaStream-based API
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+Stream sets should be empty initially
+PASS pc.getLocalStreams().length is 0
+PASS pc.getRemoteStreams().length is 0
+
+Test with single track MediaStream
+audioTrack = stream.getAudioTracks()[0]
+PASS pc.addStream(stream) did not throw exception.
+PASS pc.getLocalStreams().length is 1
+PASS pc.getLocalStreams()[0] is stream
+PASS pc.getStreamById(stream.id) is stream
+PASS pc.getSenders().length is 1
+PASS pc.getSenders()[0].track is audioTrack
+Adding the same stream again should be a no-op
+PASS pc.addStream(stream) did not throw exception.
+PASS pc.getLocalStreams().length is 1
+
+Test with audio and video MediaStream
+audioTrack = stream.getAudioTracks()[0]
+videoTrack = stream.getVideoTracks()[0]
+PASS pc.addStream(stream) did not throw exception.
+PASS pc.getLocalStreams().length is 2
+PASS pc.getLocalStreams().includes(stream) is true
+PASS pc.getStreamById(stream.id) is stream
+PASS pc.getSenders().length is 3
+PASS audioTrackFoundAmongSenders is true
+PASS videoTrackFoundAmongSenders is true
+
+Test removeStream
+Remove a non-existent stream
+otherStream = stream.clone()
+PASS pc.removeStream(otherStream) did not throw exception.
+Both streams should still be present
+PASS pc.getLocalStreams().length is 2
+PASS pc.removeStream(stream) did not throw exception.
+PASS pc.getLocalStreams().length is 1
+PASS pc.getStreamById(stream.id) is null
+All senders should still be present
+PASS pc.getSenders().length is 3
+Removing the same stream again should be a no-op
+PASS pc.removeStream(stream) did not throw exception.
+PASS pc.getLocalStreams().length is 1
+
+Test applying a remote description offering a stream with two tracks
+Create remote offer
+Got remote offer, set it
+PASS Got 'addstream' event (before setRemoteDescription promise fulfilled)
+PASS remoteStream.getTracks().length is 2
+PASS pc.getRemoteStreams().length is 1
+PASS pc.getRemoteStreams()[0] is remoteStream
+PASS pc.getStreamById(remoteStream.id) is remoteStream
+Remote offer set
+PASS End of test promise chain
+
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsplatformgtkfastmediastreamRTCPeerConnectiononnegotiationneededexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/platform/gtk/fast/mediastream/RTCPeerConnection-onnegotiationneeded-expected.txt (0 => 212699)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/platform/gtk/fast/mediastream/RTCPeerConnection-onnegotiationneeded-expected.txt                                (rev 0)
+++ trunk/LayoutTests/platform/gtk/fast/mediastream/RTCPeerConnection-onnegotiationneeded-expected.txt        2017-02-21 05:50:06 UTC (rev 212699)
</span><span class="lines">@@ -0,0 +1,13 @@
</span><ins>+Tests RTCPeerConnection onnegotiationneeded.
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+PASS Got a stream.
+PASS onNegotiationNeeded was called when a track was added.
+PASS onNegotiationNeeded2 was called when a track was removed.
+PASS onNegotiationNeeded3 was called when a track was added.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsplatformgtkfastmediastreamRTCPeerConnectionoverloadedoperationsparamsexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/platform/gtk/fast/mediastream/RTCPeerConnection-overloaded-operations-params-expected.txt (0 => 212699)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/platform/gtk/fast/mediastream/RTCPeerConnection-overloaded-operations-params-expected.txt                                (rev 0)
+++ trunk/LayoutTests/platform/gtk/fast/mediastream/RTCPeerConnection-overloaded-operations-params-expected.txt        2017-02-21 05:50:06 UTC (rev 212699)
</span><span class="lines">@@ -0,0 +1,110 @@
</span><ins>+Test various arguments to RTCPeerConnection overloaded functions
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+PASS pc = new RTCPeerConnection({iceServers:[{urls:'stun:foo.com'}]}); did not throw exception.
+*** Test createOffer
+PASS promise pc.createOffer() did not reject with TypeError.
+PASS promise pc.createOffer(emptyFunc, emptyFunc) did not reject with TypeError.
+PASS promise pc.createOffer(null) did not reject with TypeError.
+PASS promise pc.createOffer(undefined) did not reject with TypeError.
+PASS promise pc.createOffer({}) did not reject with TypeError.
+PASS promise pc.createOffer(emptyFunc, emptyFunc, null) did not reject with TypeError.
+PASS promise pc.createOffer(emptyFunc, emptyFunc, undefined) did not reject with TypeError.
+PASS promise pc.createOffer(emptyFunc, emptyFunc, {}) did not reject with TypeError.
+*** Options object must be last
+PASS promise pc.createOffer({}, emptyFunc, emptyFunc) rejected with TypeError: Argument 1 ('successCallback') to RTCPeerConnection.createOffer must be a function
+*** Callbacks are not nullable
+PASS promise pc.createOffer(emptyFunc, null) rejected with TypeError: Argument 2 ('errorCallback') to RTCPeerConnection.createOffer must be a function
+PASS promise pc.createOffer(null, emptyFunc) rejected with TypeError: Argument 1 ('successCallback') to RTCPeerConnection.createOffer must be a function
+PASS promise pc.createOffer(null, null) rejected with TypeError: Argument 1 ('successCallback') to RTCPeerConnection.createOffer must be a function
+*** Bad input
+PASS promise pc.createOffer({}, emptyFunc) rejected with TypeError: Argument 1 ('successCallback') to RTCPeerConnection.createOffer must be a function
+PASS promise pc.createOffer(emptyFunc, {}) rejected with TypeError: Argument 2 ('errorCallback') to RTCPeerConnection.createOffer must be a function
+PASS promise pc.createOffer(1) rejected with TypeError: Argument 1 ('options') to RTCPeerConnection.createOffer must be a dictionary
+PASS promise pc.createOffer(emptyFunc, emptyFunc, 1) rejected with TypeError: Argument 3 ('options') to RTCPeerConnection.createOffer must be a dictionary
+
+*** Test createAnswer
+PASS promise pc.createAnswer() did not reject with TypeError.
+PASS promise pc.createAnswer(emptyFunc, emptyFunc) did not reject with TypeError.
+PASS promise pc.createAnswer(null) did not reject with TypeError.
+PASS promise pc.createAnswer(undefined) did not reject with TypeError.
+PASS promise pc.createAnswer({}) did not reject with TypeError.
+PASS promise pc.createAnswer(emptyFunc, emptyFunc, null) did not reject with TypeError.
+PASS promise pc.createAnswer(emptyFunc, emptyFunc, undefined) did not reject with TypeError.
+PASS promise pc.createAnswer(emptyFunc, emptyFunc, {}) did not reject with TypeError.
+*** Options object must be last
+PASS promise pc.createAnswer({}, emptyFunc, emptyFunc) rejected with TypeError: Argument 1 ('successCallback') to RTCPeerConnection.createAnswer must be a function
+*** Callbacks are not nullable
+PASS promise pc.createAnswer(emptyFunc, null) rejected with TypeError: Argument 2 ('errorCallback') to RTCPeerConnection.createAnswer must be a function
+PASS promise pc.createAnswer(null, emptyFunc) rejected with TypeError: Argument 1 ('successCallback') to RTCPeerConnection.createAnswer must be a function
+PASS promise pc.createAnswer(null, null) rejected with TypeError: Argument 1 ('successCallback') to RTCPeerConnection.createAnswer must be a function
+*** Bad input
+PASS promise pc.createAnswer({}, emptyFunc) rejected with TypeError: Argument 1 ('successCallback') to RTCPeerConnection.createAnswer must be a function
+PASS promise pc.createAnswer(emptyFunc, {}) rejected with TypeError: Argument 2 ('errorCallback') to RTCPeerConnection.createAnswer must be a function
+PASS promise pc.createAnswer(1) rejected with TypeError: Argument 1 ('options') to RTCPeerConnection.createAnswer must be a dictionary
+PASS promise pc.createAnswer(emptyFunc, emptyFunc, 1) rejected with TypeError: Argument 3 ('options') to RTCPeerConnection.createAnswer must be a dictionary
+
+*** Test setLocalDescription
+PASS promise pc.setLocalDescription(desc) did not reject with TypeError.
+PASS promise pc.setLocalDescription(desc, emptyFunc, emptyFunc) did not reject with TypeError.
+*** desc is not optional
+PASS promise pc.setLocalDescription() rejected with TypeError: Not enough arguments
+*** desc is not nullable
+PASS promise pc.setLocalDescription(null) rejected with TypeError: Argument 1 ('description') to RTCPeerConnection.setLocalDescription must be an instance of RTCSessionDescription
+PASS promise pc.setLocalDescription(null, emptyFunc, emptyFunc) rejected with TypeError: Argument 1 ('description') to RTCPeerConnection.setLocalDescription must be an instance of RTCSessionDescription
+PASS promise pc.setLocalDescription(1) rejected with TypeError: Argument 1 ('description') to RTCPeerConnection.setLocalDescription must be an instance of RTCSessionDescription
+*** Bad input as desc
+PASS promise pc.setLocalDescription('foo') rejected with TypeError: Argument 1 ('description') to RTCPeerConnection.setLocalDescription must be an instance of RTCSessionDescription
+PASS promise pc.setLocalDescription('foo', emptyFunc, emptyFunc) rejected with TypeError: Argument 1 ('description') to RTCPeerConnection.setLocalDescription must be an instance of RTCSessionDescription
+PASS promise pc.setLocalDescription(1) rejected with TypeError: Argument 1 ('description') to RTCPeerConnection.setLocalDescription must be an instance of RTCSessionDescription
+PASS promise pc.setLocalDescription(1, emptyFunc, emptyFunc) rejected with TypeError: Argument 1 ('description') to RTCPeerConnection.setLocalDescription must be an instance of RTCSessionDescription
+
+*** Test setRemoteDescription
+PASS promise pc.setRemoteDescription(desc) did not reject with TypeError.
+PASS promise pc.setRemoteDescription(desc, emptyFunc, emptyFunc) did not reject with TypeError.
+*** desc is not optional
+PASS promise pc.setRemoteDescription() rejected with TypeError: Not enough arguments
+*** desc is not nullable
+PASS promise pc.setRemoteDescription(null) rejected with TypeError: Argument 1 ('description') to RTCPeerConnection.setRemoteDescription must be an instance of RTCSessionDescription
+PASS promise pc.setRemoteDescription(null, emptyFunc, emptyFunc) rejected with TypeError: Argument 1 ('description') to RTCPeerConnection.setRemoteDescription must be an instance of RTCSessionDescription
+PASS promise pc.setRemoteDescription(1) rejected with TypeError: Argument 1 ('description') to RTCPeerConnection.setRemoteDescription must be an instance of RTCSessionDescription
+*** Bad input as desc
+PASS promise pc.setRemoteDescription('foo') rejected with TypeError: Argument 1 ('description') to RTCPeerConnection.setRemoteDescription must be an instance of RTCSessionDescription
+PASS promise pc.setRemoteDescription('foo', emptyFunc, emptyFunc) rejected with TypeError: Argument 1 ('description') to RTCPeerConnection.setRemoteDescription must be an instance of RTCSessionDescription
+PASS promise pc.setRemoteDescription(1) rejected with TypeError: Argument 1 ('description') to RTCPeerConnection.setRemoteDescription must be an instance of RTCSessionDescription
+PASS promise pc.setRemoteDescription(1, emptyFunc, emptyFunc) rejected with TypeError: Argument 1 ('description') to RTCPeerConnection.setRemoteDescription must be an instance of RTCSessionDescription
+
+*** Test addIceCandidate
+PASS promise pc.addIceCandidate(candidate) did not reject with TypeError.
+PASS promise pc.addIceCandidate(candidate, emptyFunc, emptyFunc) did not reject with TypeError.
+*** candidate is not optional
+PASS promise pc.addIceCandidate() rejected with TypeError: Not enough arguments
+*** candidate is not nullable
+PASS promise pc.addIceCandidate(null) rejected with TypeError: Argument 1 ('candidate') to RTCPeerConnection.addIceCandidate must be an instance of RTCIceCandidate
+PASS promise pc.addIceCandidate(null, emptyFunc, emptyFunc) rejected with TypeError: Argument 1 ('candidate') to RTCPeerConnection.addIceCandidate must be an instance of RTCIceCandidate
+PASS promise pc.addIceCandidate(1) rejected with TypeError: Argument 1 ('candidate') to RTCPeerConnection.addIceCandidate must be an instance of RTCIceCandidate
+*** Bad input as candidate
+PASS promise pc.addIceCandidate('foo') rejected with TypeError: Argument 1 ('candidate') to RTCPeerConnection.addIceCandidate must be an instance of RTCIceCandidate
+PASS promise pc.addIceCandidate('foo', emptyFunc, emptyFunc) rejected with TypeError: Argument 1 ('candidate') to RTCPeerConnection.addIceCandidate must be an instance of RTCIceCandidate
+PASS promise pc.addIceCandidate(1) rejected with TypeError: Argument 1 ('candidate') to RTCPeerConnection.addIceCandidate must be an instance of RTCIceCandidate
+PASS promise pc.addIceCandidate(1, emptyFunc, emptyFunc) rejected with TypeError: Argument 1 ('candidate') to RTCPeerConnection.addIceCandidate must be an instance of RTCIceCandidate
+
+*** Test getStats
+PASS promise pc.getStats() did not reject with TypeError.
+PASS promise pc.getStats(null) did not reject with TypeError.
+PASS promise pc.getStats(selector) did not reject with TypeError.
+PASS promise pc.getStats(null, emptyFunc, emptyFunc) did not reject with TypeError.
+PASS promise pc.getStats(selector, emptyFunc, emptyFunc) did not reject with TypeError.
+PASS promise pc.getStats(1) rejected with TypeError: Argument 1 ('selector') to RTCPeerConnection.getStats must be an instance of MediaStreamTrack
+*** Bad input as selector
+PASS promise pc.getStats('foo') rejected with TypeError: Argument 1 ('selector') to RTCPeerConnection.getStats must be an instance of MediaStreamTrack
+PASS promise pc.getStats('foo', emptyFunc, emptyFunc) rejected with TypeError: Argument 1 ('selector') to RTCPeerConnection.getStats must be an instance of MediaStreamTrack
+PASS promise pc.getStats(1) rejected with TypeError: Argument 1 ('selector') to RTCPeerConnection.getStats must be an instance of MediaStreamTrack
+PASS promise pc.getStats(1, emptyFunc, emptyFunc) rejected with TypeError: Argument 1 ('selector') to RTCPeerConnection.getStats must be an instance of MediaStreamTrack
+
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsplatformgtkfastmediastreamRTCRtpSenderreplaceTrackexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/platform/gtk/fast/mediastream/RTCRtpSender-replaceTrack-expected.txt (0 => 212699)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/platform/gtk/fast/mediastream/RTCRtpSender-replaceTrack-expected.txt                                (rev 0)
+++ trunk/LayoutTests/platform/gtk/fast/mediastream/RTCRtpSender-replaceTrack-expected.txt        2017-02-21 05:50:06 UTC (rev 212699)
</span><span class="lines">@@ -0,0 +1,32 @@
</span><ins>+Test basic behavior of RTCRtpSender.replaceTrack()
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+PASS pc.getSenders().length is 0
+PASS sender = pc.addTrack(audioTrack, stream) did not throw exception.
+PASS sender is an instance of RTCRtpSender
+PASS sender.track is audioTrack
+PASS promise sender.replaceTrack() rejected with TypeError: Not enough arguments
+PASS promise sender.replaceTrack(null) rejected with TypeError: Argument 1 ('withTrack') to RTCRtpSender.replaceTrack must be an instance of MediaStreamTrack
+PASS promise sender.replaceTrack({}) rejected with TypeError: Argument 1 ('withTrack') to RTCRtpSender.replaceTrack must be an instance of MediaStreamTrack
+Test mismatching track kind
+PASS promise sender.replaceTrack(videoTrack) rejected with TypeError: Type error
+PASS promise sender.replaceTrack(audioTrack2) fulfilled with undefined
+PASS Track successfully replaced
+PASS sender.track is audioTrack2
+Sender should still use old track (audioTrack) id in negotiation.
+PASS offer created
+PASS offer.sdp.indexOf(audioTrack.id) is not -1
+PASS offer.sdp.indexOf(audioTrack2.id) is -1
+Stop sender, and try replacing the track
+PASS promise sender.replaceTrack(audioTrack2) rejected with InvalidStateError (DOM Exception 11): The object is in an invalid state.
+Create a new sender
+PASS sender = pc.addTrack(audioTrack2, stream) did not throw exception.
+Close pc and try replacing the track
+PASS promise sender.replaceTrack(audioTrack3) rejected with InvalidStateError (DOM Exception 11): The object is in an invalid state.
+End of promise chain
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsplatformgtkfastmediastreamnomediacallexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/platform/gtk/fast/mediastream/no-media-call-expected.txt (0 => 212699)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/platform/gtk/fast/mediastream/no-media-call-expected.txt                                (rev 0)
+++ trunk/LayoutTests/platform/gtk/fast/mediastream/no-media-call-expected.txt        2017-02-21 05:50:06 UTC (rev 212699)
</span><span class="lines">@@ -0,0 +1,5 @@
</span><ins>+
+FAIL Can set up a basic WebRTC call with no data. assert_unreached: WebRTC called error callback for setRemoteDescription first Reached unreachable code
+iceConnectionState info
+
+
</ins></span></pre></div>
<a id="trunkLayoutTestsplatformiossimulatorwk2TestExpectations"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/platform/ios-simulator-wk2/TestExpectations (212698 => 212699)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/platform/ios-simulator-wk2/TestExpectations        2017-02-21 05:02:32 UTC (rev 212698)
+++ trunk/LayoutTests/platform/ios-simulator-wk2/TestExpectations        2017-02-21 05:50:06 UTC (rev 212699)
</span><span class="lines">@@ -1915,3 +1915,5 @@
</span><span class="cx"> webkit.org/b/166025 http/tests/fetch/fetching-same-resource-with-diffferent-options.html [ Pass Failure ]
</span><span class="cx"> 
</span><span class="cx"> webkit.org/b/167258 media/modern-media-controls/audio/audio-controls-metrics.html [ Skip ]
</span><ins>+
+imported/w3c/web-platform-tests/webrtc [ Skip ]
</ins></span></pre></div>
<a id="trunkLayoutTestsplatformmacwk1TestExpectations"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/platform/mac-wk1/TestExpectations (212698 => 212699)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/platform/mac-wk1/TestExpectations        2017-02-21 05:02:32 UTC (rev 212698)
+++ trunk/LayoutTests/platform/mac-wk1/TestExpectations        2017-02-21 05:50:06 UTC (rev 212699)
</span><span class="lines">@@ -94,6 +94,9 @@
</span><span class="cx"> http/tests/media/media-stream
</span><span class="cx"> http/tests/ssl/media-stream
</span><span class="cx"> 
</span><ins>+# Skip WebRTC for now in WK1
+imported/w3c/web-platform-tests/webrtc [ Skip ]
+
</ins><span class="cx"> # These tests test the Shadow DOM based HTML form validation UI but Mac WK1 is using native dialogs instead.
</span><span class="cx"> fast/forms/validation-message-on-listbox.html
</span><span class="cx"> fast/forms/validation-message-on-menulist.html
</span></span></pre></div>
<a id="trunkSourceThirdPartylibwebrtcChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/ThirdParty/libwebrtc/ChangeLog (212698 => 212699)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/ThirdParty/libwebrtc/ChangeLog        2017-02-21 05:02:32 UTC (rev 212698)
+++ trunk/Source/ThirdParty/libwebrtc/ChangeLog        2017-02-21 05:50:06 UTC (rev 212699)
</span><span class="lines">@@ -1,3 +1,17 @@
</span><ins>+2017-02-20  Youenn Fablet  &lt;youenn@apple.com&gt;
+
+        [WebRTC][Mac] Activate libwebrtc
+        https://bugs.webkit.org/show_bug.cgi?id=167293
+        &lt;rdar://problem/30401864&gt;
+
+        Reviewed by Alex Christensen.
+
+        Doing some clean-up.
+
+        * Configurations/libwebrtc.xcconfig:
+        * Source/webrtc/base/checks.h:
+        * libwebrtc.xcodeproj/project.pbxproj:
+
</ins><span class="cx"> 2017-02-17  Alex Christensen  &lt;achristensen@webkit.org&gt;
</span><span class="cx"> 
</span><span class="cx">         Fix iOS ASAN build after r212401
</span></span></pre></div>
<a id="trunkSourceThirdPartylibwebrtcConfigurationslibwebrtcxcconfig"></a>
<div class="modfile"><h4>Modified: trunk/Source/ThirdParty/libwebrtc/Configurations/libwebrtc.xcconfig (212698 => 212699)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/ThirdParty/libwebrtc/Configurations/libwebrtc.xcconfig        2017-02-21 05:02:32 UTC (rev 212698)
+++ trunk/Source/ThirdParty/libwebrtc/Configurations/libwebrtc.xcconfig        2017-02-21 05:50:06 UTC (rev 212699)
</span><span class="lines">@@ -8,7 +8,6 @@
</span><span class="cx"> ENABLE_STRICT_OBJC_MSGSEND = YES;
</span><span class="cx"> HEADER_SEARCH_PATHS = Source Source/third_party/jsoncpp/source/include Source/third_party/libsrtp/crypto/include Source/third_party/libsrtp/include Source/third_party/boringssl/src/include Source/third_party/libyuv/include Source/third_party/usrsctp/usrsctplib Source/third_party/usrsctp/usrsctplib/usrsctplib Source/webrtc/sdk/objc/Framework/Headers Source/webrtc/common_audio/signal_processing/include Source/webrtc/modules/audio_coding/codecs/isac/main/include Source/third_party/opus/src/celt Source/third_party/opus/src/include Source/third_party/opus/src/src Source/webrtc/modules/audio_device/mac Source/third_party/usrsctp/usrsctplib/usrsctplib/netinet Source/webrtc/modules/audio_device/ios;
</span><span class="cx"> 
</span><del>-INSTALL_PATH = /usr/local/lib;
</del><span class="cx"> PUBLIC_HEADERS_FOLDER_PATH = /usr/local/include/libwebrtc;
</span><span class="cx"> USE_HEADERMAP = NO;
</span><span class="cx"> WARNING_CFLAGS = -Wno-exit-time-destructors -Wno-objc-property-no-attribute -Wno-objc-missing-super-calls -Wno-deprecated-declarations;
</span><span class="lines">@@ -21,4 +20,4 @@
</span><span class="cx"> 
</span><span class="cx"> EXCLUDED_SOURCE_FILE_NAMES[sdk=iphoneos*] = *_sse.cc *_sse2.cc macutils.cc macwindowpicker.cc audio_device_mac.cc audio_mixer_manager_mac.cc;
</span><span class="cx"> EXCLUDED_SOURCE_FILE_NAMES[sdk=iphonesimulator*] = macutils.cc macwindowpicker.cc audio_device_mac.cc audio_mixer_manager_mac.cc;
</span><del>-EXCLUDED_SOURCE_FILE_NAMES[sdk=macosx*] = audio_device_ios.mm voice_processing_audio_unit.mm audio_device_not_implemented_ios.mm RTCAudioSessionConfiguration.m RTCAudioSessionDelegateAdapter.mm RTCAudioSession.mm RTCAudioSession+Configuration.mm RTCUIApplication.mm;
</del><ins>+EXCLUDED_SOURCE_FILE_NAMES[sdk=macosx*] = voice_processing_audio_unit.mm;
</ins></span></pre></div>
<a id="trunkSourceThirdPartylibwebrtcSourcewebrtcbasechecksh"></a>
<div class="modfile"><h4>Modified: trunk/Source/ThirdParty/libwebrtc/Source/webrtc/base/checks.h (212698 => 212699)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/ThirdParty/libwebrtc/Source/webrtc/base/checks.h        2017-02-21 05:02:32 UTC (rev 212698)
+++ trunk/Source/ThirdParty/libwebrtc/Source/webrtc/base/checks.h        2017-02-21 05:50:06 UTC (rev 212699)
</span><span class="lines">@@ -211,7 +211,7 @@
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx"> // This is identical to LogMessageVoidify but in name.
</span><del>-class WEBRTC_EXPORT FatalMessageVoidify {
</del><ins>+class FatalMessageVoidify {
</ins><span class="cx">  public:
</span><span class="cx">   FatalMessageVoidify() { }
</span><span class="cx">   // This has to be an operator with a precedence lower than &lt;&lt; but
</span></span></pre></div>
<a id="trunkSourceThirdPartylibwebrtclibwebrtcxcodeprojprojectpbxproj"></a>
<div class="modfile"><h4>Modified: trunk/Source/ThirdParty/libwebrtc/libwebrtc.xcodeproj/project.pbxproj (212698 => 212699)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/ThirdParty/libwebrtc/libwebrtc.xcodeproj/project.pbxproj        2017-02-21 05:02:32 UTC (rev 212698)
+++ trunk/Source/ThirdParty/libwebrtc/libwebrtc.xcodeproj/project.pbxproj        2017-02-21 05:50:06 UTC (rev 212699)
</span><span class="lines">@@ -2413,7 +2413,6 @@
</span><span class="cx">                 5CFD53801E4BA4F500482908 /* audio_session_observer.h in Headers */ = {isa = PBXBuildFile; fileRef = 5CFD53791E4BA4F500482908 /* audio_session_observer.h */; };
</span><span class="cx">                 5CFD53811E4BA4F500482908 /* voice_processing_audio_unit.h in Headers */ = {isa = PBXBuildFile; fileRef = 5CFD537A1E4BA4F500482908 /* voice_processing_audio_unit.h */; };
</span><span class="cx">                 5CFD53821E4BA4F500482908 /* voice_processing_audio_unit.mm in Sources */ = {isa = PBXBuildFile; fileRef = 5CFD537B1E4BA4F500482908 /* voice_processing_audio_unit.mm */; settings = {COMPILER_FLAGS = &quot;-fobjc-arc&quot;; }; };
</span><del>-                5CFD53841E4BBD8D00482908 /* audio_device_not_implemented_ios.mm in Sources */ = {isa = PBXBuildFile; fileRef = 5CFD53831E4BBD8D00482908 /* audio_device_not_implemented_ios.mm */; settings = {COMPILER_FLAGS = &quot;-fobjc-arc&quot;; }; };
</del><span class="cx">                 5CFD538D1E4BD3A300482908 /* compare_neon.cc in Sources */ = {isa = PBXBuildFile; fileRef = 5CFD53851E4BD3A300482908 /* compare_neon.cc */; };
</span><span class="cx">                 5CFD538E1E4BD3A300482908 /* compare_neon64.cc in Sources */ = {isa = PBXBuildFile; fileRef = 5CFD53861E4BD3A300482908 /* compare_neon64.cc */; };
</span><span class="cx">                 5CFD538F1E4BD3A300482908 /* rotate_neon.cc in Sources */ = {isa = PBXBuildFile; fileRef = 5CFD53871E4BD3A300482908 /* rotate_neon.cc */; };
</span><span class="lines">@@ -11023,7 +11022,6 @@
</span><span class="cx">                                 5C11A01D1E457578004F0987 /* audio_device_dummy.cc in Sources */,
</span><span class="cx">                                 5C119FFE1E457400004F0987 /* audio_device_generic.cc in Sources */,
</span><span class="cx">                                 5C11A00B1E457448004F0987 /* audio_device_mac.cc in Sources */,
</span><del>-                                5CFD53841E4BBD8D00482908 /* audio_device_not_implemented_ios.mm in Sources */,
</del><span class="cx">                                 5CDD84171E439B2900621E92 /* audio_encoder.cc in Sources */,
</span><span class="cx">                                 5CDD8CA71E43C6F700621E92 /* audio_encoder_cng.cc in Sources */,
</span><span class="cx">                                 5CDD8FF31E43CDF400621E92 /* audio_encoder_copy_red.cc in Sources */,
</span></span></pre></div>
<a id="trunkSourceWTFChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WTF/ChangeLog (212698 => 212699)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WTF/ChangeLog        2017-02-21 05:02:32 UTC (rev 212698)
+++ trunk/Source/WTF/ChangeLog        2017-02-21 05:50:06 UTC (rev 212699)
</span><span class="lines">@@ -1,3 +1,12 @@
</span><ins>+2017-02-20  Youenn Fablet  &lt;youenn@apple.com&gt;
+
+        [WebRTC][Mac] Activate libwebrtc
+        https://bugs.webkit.org/show_bug.cgi?id=167293
+
+        Reviewed by Alex Christensen.
+
+        * wtf/Platform.h:
+
</ins><span class="cx"> 2017-02-20  Mark Lam  &lt;mark.lam@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         [Re-landing] CachedCall should let GC know to keep its arguments alive.
</span></span></pre></div>
<a id="trunkSourceWTFwtfPlatformh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WTF/wtf/Platform.h (212698 => 212699)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WTF/wtf/Platform.h        2017-02-21 05:02:32 UTC (rev 212698)
+++ trunk/Source/WTF/wtf/Platform.h        2017-02-21 05:50:06 UTC (rev 212699)
</span><span class="lines">@@ -1208,4 +1208,8 @@
</span><span class="cx"> #endif
</span><span class="cx"> #endif /* PLATFORM(MAC) &amp;&amp; __MAC_OS_X_VERSION_MAX_ALLOWED &gt;= 101201 &amp;&amp; __MAC_OS_X_VERSION_MIN_REQUIRED &gt;= 101200 */
</span><span class="cx"> 
</span><ins>+#if PLATFORM(MAC)
+#define USE_LIBWEBRTC 1
+#endif
+
</ins><span class="cx"> #endif /* WTF_Platform_h */
</span></span></pre></div>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (212698 => 212699)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2017-02-21 05:02:32 UTC (rev 212698)
+++ trunk/Source/WebCore/ChangeLog        2017-02-21 05:50:06 UTC (rev 212699)
</span><span class="lines">@@ -1,3 +1,13 @@
</span><ins>+2017-02-20  Youenn Fablet  &lt;youenn@apple.com&gt;
+
+        [WebRTC][Mac] Activate libwebrtc
+        https://bugs.webkit.org/show_bug.cgi?id=167293
+
+        Reviewed by Alex Christensen.
+
+        * Configurations/WebCore.xcconfig:
+        * Configurations/WebCoreTestSupport.xcconfig:
+
</ins><span class="cx"> 2017-02-20  Joseph Pecoraro  &lt;pecoraro@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         ASSERTION FAILED: m_normalWorld-&gt;hasOneRef() under WorkerThread::stop
</span></span></pre></div>
<a id="trunkSourceWebCoreConfigurationsWebCorexcconfig"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Configurations/WebCore.xcconfig (212698 => 212699)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Configurations/WebCore.xcconfig        2017-02-21 05:02:32 UTC (rev 212698)
+++ trunk/Source/WebCore/Configurations/WebCore.xcconfig        2017-02-21 05:50:06 UTC (rev 212699)
</span><span class="lines">@@ -71,7 +71,7 @@
</span><span class="cx"> OTHER_LDFLAGS_BASE_ios = $(OTHER_LDFLAGS_BASE) -framework CFNetwork -framework CoreGraphics -framework CoreText -framework Foundation -framework ImageIO -framework MobileCoreServices -framework OpenGLES -lMobileGestalt $(WK_IOS_BINCOMPAT_LDFLAGS);
</span><span class="cx"> OTHER_LDFLAGS_PLATFORM[sdk=iphoneos*] = $(OTHER_LDFLAGS_BASE_ios) -framework IOSurface -framework GraphicsServices;
</span><span class="cx"> OTHER_LDFLAGS_PLATFORM[sdk=iphonesimulator*] = $(OTHER_LDFLAGS_BASE_ios);
</span><del>-OTHER_LDFLAGS_PLATFORM[sdk=macosx*] = $(OTHER_LDFLAGS_BASE) -sub_library libobjc -umbrella WebKit -allowable_client WebCoreTestSupport -allowable_client WebKit2 -allowable_client WebKitLegacy -framework ApplicationServices -framework AudioUnit -framework Carbon -framework Cocoa -framework CoreAudio -framework DataDetectorsCore -framework IOSurface -framework OpenGL -framework SystemConfiguration;
</del><ins>+OTHER_LDFLAGS_PLATFORM[sdk=macosx*] = $(OTHER_LDFLAGS_BASE) -sub_library libobjc -umbrella WebKit -allowable_client WebCoreTestSupport -allowable_client WebKit2 -allowable_client WebKitLegacy -framework ApplicationServices -framework AudioUnit -framework Carbon -framework Cocoa -framework CoreAudio -framework DataDetectorsCore -framework IOSurface -framework OpenGL -framework SystemConfiguration -framework VideoToolbox -framework CoreMedia -weak-lwebrtc;
</ins><span class="cx"> 
</span><span class="cx"> SECTORDER_FLAGS = $(SECTORDER_FLAGS_$(CONFIGURATION));
</span><span class="cx"> SECTORDER_FLAGS_Production[sdk=iphoneos*] = -Wl,-order_file,$(SDKROOT)/AppleInternal/OrderFiles/WebCore.order;
</span></span></pre></div>
<a id="trunkSourceWebCoreConfigurationsWebCoreTestSupportxcconfig"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Configurations/WebCoreTestSupport.xcconfig (212698 => 212699)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Configurations/WebCoreTestSupport.xcconfig        2017-02-21 05:02:32 UTC (rev 212698)
+++ trunk/Source/WebCore/Configurations/WebCoreTestSupport.xcconfig        2017-02-21 05:50:06 UTC (rev 212699)
</span><span class="lines">@@ -49,7 +49,8 @@
</span><span class="cx"> EXPORTED_SYMBOLS_FILE = ;
</span><span class="cx"> GCC_SYMBOLS_PRIVATE_EXTERN = YES;
</span><span class="cx"> OTHER_LDFLAGS = $(ASAN_OTHER_LDFLAGS);
</span><del>-OTHER_LDFLAGS[sdk=macos*] = $(ASAN_OTHER_LDFLAGS) -framework AppKit;
</del><ins>+OTHER_LDFLAGS[sdk=macos*] = $(ASAN_OTHER_LDFLAGS) -framework AppKit -weak-lwebrtc;
+
</ins><span class="cx"> OTHER_LDFLAGS[sdk=iphoneos*] = $(ASAN_OTHER_LDFLAGS) -lAccessibility -F$(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/PhonyWebKitLegacy;
</span><span class="cx"> OTHER_LDFLAGS[sdk=iphonesimulator*] = $(ASAN_OTHER_LDFLAGS) -lAccessibility -F$(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/PhonyWebKitLegacy;
</span><span class="cx"> SECT_ORDER_FLAGS = ;
</span></span></pre></div>
<a id="trunkSourceWebKit2ChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/ChangeLog (212698 => 212699)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/ChangeLog        2017-02-21 05:02:32 UTC (rev 212698)
+++ trunk/Source/WebKit2/ChangeLog        2017-02-21 05:50:06 UTC (rev 212699)
</span><span class="lines">@@ -1,3 +1,18 @@
</span><ins>+2017-02-20  Youenn Fablet  &lt;youenn@apple.com&gt;
+
+        [WebRTC][Mac] Activate libwebrtc
+        https://bugs.webkit.org/show_bug.cgi?id=167293
+        &lt;rdar://problem/30401864&gt;
+
+        Reviewed by Alex Christensen.
+
+        Activating PeerConnection runtime flag based on successful loading of libwebrtc.dylib.
+
+        * Configurations/WebKit.xcconfig:
+        * Shared/WebPreferencesDefinitions.h:
+        * UIProcess/WebPreferences.cpp:
+        (WebKit::checkWebRTCAvailability):
+
</ins><span class="cx"> 2017-02-20  Ryan Haddad  &lt;ryanhaddad@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Unreviewed, rolling out r212685.
</span></span></pre></div>
<a id="trunkSourceWebKit2ConfigurationsWebKitxcconfig"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/Configurations/WebKit.xcconfig (212698 => 212699)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/Configurations/WebKit.xcconfig        2017-02-21 05:02:32 UTC (rev 212698)
+++ trunk/Source/WebKit2/Configurations/WebKit.xcconfig        2017-02-21 05:50:06 UTC (rev 212699)
</span><span class="lines">@@ -45,7 +45,7 @@
</span><span class="cx"> UNEXPORTED_SYMBOL_LDFLAGS = -Wl,-unexported_symbol -Wl,__ZTISt9bad_alloc -Wl,-unexported_symbol -Wl,__ZTISt9exception -Wl,-unexported_symbol -Wl,__ZTSSt9bad_alloc -Wl,-unexported_symbol -Wl,__ZTSSt9exception -Wl,-unexported_symbol -Wl,__ZdlPvS_ -Wl,-unexported_symbol -Wl,__ZnwmPv -Wl,-unexported_symbol -Wl,__Znwm -Wl,-unexported_symbol, -Wl,__ZNSt3__18functionIFvN7WebCore12PolicyActionEEEC2EOS4_ -Wl,-unexported_symbol, -Wl,__ZNSt3__18functionIFvN7WebCore12PolicyActionEEEC1EOS4_ -Wl,-unexported_symbol, -Wl,__ZNSt3__18functionIFvN7WebCore12PolicyActionEEEaSEDn -Wl,-unexported_symbol, -Wl,__ZNKSt3__18functionIFvN7WebCore12PolicyActionEEEclES2_ -Wl,-unexported_symbol, -Wl,__ZNSt3__18functionIFvN7WebCore12PolicyActionEEE4swapERS4_ -Wl,-unexported_symbol, -Wl,__ZNSt3__18functionIFvN7WebCore12PolicyActionEEEC1ERKS4_ -Wl,-unexported_symbol, -Wl,__ZNSt3__18functionIFvN7WebCore12PolicyActionEEEC2ERKS4_ -Wl,-unexported_symbol, -Wl,__ZNSt3__18functionIFvN7WebCore
 12PolicyActionEEED1Ev -Wl,-unexported_symbol, -Wl,__ZNSt3__18functionIFvN7WebCore12PolicyActionEEED2Ev -Wl,-unexported_symbol, -Wl,__ZNSt3__18functionIFvN7WebCore12PolicyActionEEEaSERKS4_ -Wl,-unexported_symbol, -Wl,__ZTVNSt3__117bad_function_callE;
</span><span class="cx"> 
</span><span class="cx"> OTHER_LDFLAGS = $(inherited) $(UNEXPORTED_SYMBOL_LDFLAGS) $(ASAN_OTHER_LDFLAGS) $(FRAMEWORK_AND_LIBRARY_LDFLAGS) $(OTHER_LDFLAGS_PLATFORM) -framework WebKitLegacy -sub_umbrella WebKitLegacy;
</span><del>-OTHER_LDFLAGS_PLATFORM[sdk=macosx*] = -sub_umbrella WebCore;
</del><ins>+OTHER_LDFLAGS_PLATFORM[sdk=macosx*] = -sub_umbrella WebCore -weak-lwebrtc;
</ins><span class="cx"> OTHER_LDFLAGS_PLATFORM[sdk=iphoneos*] = -lAccessibility;
</span><span class="cx"> OTHER_LDFLAGS_PLATFORM[sdk=iphonesimulator*] = -lAccessibility;
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebKit2SharedWebPreferencesDefinitionsh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/Shared/WebPreferencesDefinitions.h (212698 => 212699)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/Shared/WebPreferencesDefinitions.h        2017-02-21 05:02:32 UTC (rev 212698)
+++ trunk/Source/WebKit2/Shared/WebPreferencesDefinitions.h        2017-02-21 05:50:06 UTC (rev 212699)
</span><span class="lines">@@ -305,6 +305,11 @@
</span><span class="cx"> //   DEFAULT_EXPERIMENTAL_FEATURE_ENABLED (for features that are ready for
</span><span class="cx"> //   wider testing).
</span><span class="cx"> 
</span><ins>+// Disable webrtc feature if libwebrtc library is not present
+namespace WebKit {
+bool checkWebRTCAvailability();
+}
+
</ins><span class="cx"> #define FOR_EACH_WEBKIT_EXPERIMENTAL_FEATURE_PREFERENCE(macro) \
</span><span class="cx">     macro(SpringTimingFunctionEnabled, springTimingFunctionEnabled, Bool, bool, DEFAULT_EXPERIMENTAL_FEATURES_ENABLED, &quot;CSS Spring Animations&quot;, &quot;CSS Spring Animation prototype&quot;) \
</span><span class="cx">     macro(GamepadsEnabled, gamepadsEnabled, Bool, bool, DEFAULT_EXPERIMENTAL_FEATURES_ENABLED, &quot;Gamepads&quot;, &quot;Web Gamepad API support&quot;) \
</span><span class="lines">@@ -311,7 +316,7 @@
</span><span class="cx">     macro(LinkPreloadEnabled, linkPreloadEnabled, Bool, bool, DEFAULT_EXPERIMENTAL_FEATURES_ENABLED, &quot;Link Preload&quot;, &quot;Link preload support&quot;) \
</span><span class="cx">     macro(ModernMediaControlsEnabled, modernMediaControlsEnabled, Bool, bool, DEFAULT_EXPERIMENTAL_FEATURES_ENABLED, &quot;Modern Media Controls&quot;, &quot;Use modern media controls look&quot;) \
</span><span class="cx">     macro(InputEventsEnabled, inputEventsEnabled, Bool, bool, DEFAULT_EXPERIMENTAL_FEATURES_ENABLED, &quot;Input Events&quot;, &quot;Enable InputEvents support&quot;) \
</span><del>-    macro(PeerConnectionEnabled, peerConnectionEnabled, Bool, bool, false, &quot;WebRTC&quot;, &quot;Enable WebRTC API&quot;) \
</del><ins>+    macro(PeerConnectionEnabled, peerConnectionEnabled, Bool, bool, checkWebRTCAvailability(), &quot;WebRTC&quot;, &quot;Enable WebRTC API&quot;) \
</ins><span class="cx">     macro(SubtleCryptoEnabled, subtleCryptoEnabled, Bool, bool, DEFAULT_EXPERIMENTAL_FEATURES_ENABLED, &quot;SubtleCrypto&quot;, &quot;Enable SubtleCrypto support&quot;) \
</span><span class="cx">     macro(UserTimingEnabled, userTimingEnabled, Bool, bool, false, &quot;User Timing&quot;, &quot;Enable UserTiming API&quot;) \
</span><span class="cx">     macro(WebAnimationsEnabled, webAnimationsEnabled, Bool, bool, false, &quot;Web Animations&quot;, &quot;Web Animations prototype&quot;) \
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessWebPreferencescpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/WebPreferences.cpp (212698 => 212699)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/WebPreferences.cpp        2017-02-21 05:02:32 UTC (rev 212698)
+++ trunk/Source/WebKit2/UIProcess/WebPreferences.cpp        2017-02-21 05:50:06 UTC (rev 212699)
</span><span class="lines">@@ -29,6 +29,7 @@
</span><span class="cx"> #include &quot;WebPageGroup.h&quot;
</span><span class="cx"> #include &quot;WebPreferencesKeys.h&quot;
</span><span class="cx"> #include &quot;WebProcessPool.h&quot;
</span><ins>+#include &lt;dlfcn.h&gt;
</ins><span class="cx"> #include &lt;wtf/NeverDestroyed.h&gt;
</span><span class="cx"> #include &lt;wtf/ThreadingPrimitives.h&gt;
</span><span class="cx"> 
</span><span class="lines">@@ -195,6 +196,19 @@
</span><span class="cx"> 
</span><span class="cx"> #undef DEFINE_PREFERENCE_GETTER_AND_SETTERS
</span><span class="cx"> 
</span><ins>+bool checkWebRTCAvailability()
+{
+#if USE(LIBWEBRTC)
+    void* libwebrtcLibrary = dlopen(&quot;libwebrtc.dylib&quot;, RTLD_NOW);
+    if (!libwebrtcLibrary)
+        return false;
+    dlclose(libwebrtcLibrary);
+    return true;
+#else
+    return true;
+#endif
+}
+
</ins><span class="cx"> #define DEFINE_EXPERIMENTAL_PREFERENCE_GETTER_AND_SETTERS(KeyUpper, KeyLower, TypeName, Type, DefaultValue, HumanReadableName, HumanReadableDescription) \
</span><span class="cx">     void WebPreferences::set##KeyUpper(const Type&amp; value) \
</span><span class="cx">     { \
</span></span></pre></div>
<a id="trunkToolsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Tools/ChangeLog (212698 => 212699)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/ChangeLog        2017-02-21 05:02:32 UTC (rev 212698)
+++ trunk/Tools/ChangeLog        2017-02-21 05:50:06 UTC (rev 212699)
</span><span class="lines">@@ -1,3 +1,18 @@
</span><ins>+2017-02-20  Youenn Fablet  &lt;youenn@apple.com&gt;
+
+        [WebRTC][Mac] Activate libwebrtc
+        https://bugs.webkit.org/show_bug.cgi?id=167293
+        &lt;rdar://problem/30401864&gt;
+
+        Reviewed by Alex Christensen.
+
+        Fixing paths to allow loading libwebrtc.dylib successfully.
+
+        * Scripts/build-webkit:
+        * Scripts/webkitdirs.pm:
+        (setupMacWebKitEnvironment):
+        (setupIOSWebKitEnvironment):
+
</ins><span class="cx"> 2017-02-20  Ryan Haddad  &lt;ryanhaddad@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Unreviewed, rolling out r212685.
</span></span></pre></div>
<a id="trunkToolsScriptsbuildwebkit"></a>
<div class="modfile"><h4>Modified: trunk/Tools/Scripts/build-webkit (212698 => 212699)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/Scripts/build-webkit        2017-02-21 05:02:32 UTC (rev 212698)
+++ trunk/Tools/Scripts/build-webkit        2017-02-21 05:50:06 UTC (rev 212699)
</span><span class="lines">@@ -184,6 +184,7 @@
</span><span class="cx"> 
</span><span class="cx">     # ANGLE and libwebrtc must come before WebCore
</span><span class="cx">     splice @projects, 0, 0, (&quot;Source/ThirdParty/ANGLE&quot;);
</span><ins>+    splice @projects, 0, 0, (&quot;Source/ThirdParty/libwebrtc&quot;);
</ins><span class="cx"> 
</span><span class="cx">     push @projects, (&quot;Source/WebKit2&quot;);
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkToolsScriptswebkitdirspm"></a>
<div class="modfile"><h4>Modified: trunk/Tools/Scripts/webkitdirs.pm (212698 => 212699)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/Scripts/webkitdirs.pm        2017-02-21 05:02:32 UTC (rev 212698)
+++ trunk/Tools/Scripts/webkitdirs.pm        2017-02-21 05:50:06 UTC (rev 212699)
</span><span class="lines">@@ -2137,6 +2137,8 @@
</span><span class="cx"> 
</span><span class="cx">     prependToEnvironmentVariableList(&quot;DYLD_FRAMEWORK_PATH&quot;, $dyldFrameworkPath);
</span><span class="cx">     prependToEnvironmentVariableList(&quot;__XPC_DYLD_FRAMEWORK_PATH&quot;, $dyldFrameworkPath);
</span><ins>+    prependToEnvironmentVariableList(&quot;DYLD_LIBRARY_PATH&quot;, $dyldFrameworkPath);
+    prependToEnvironmentVariableList(&quot;__XPC_DYLD_LIBRARY_PATH&quot;, $dyldFrameworkPath);
</ins><span class="cx">     $ENV{WEBKIT_UNSET_DYLD_FRAMEWORK_PATH} = &quot;YES&quot;;
</span><span class="cx"> 
</span><span class="cx">     setUpGuardMallocIfNeeded();
</span><span class="lines">@@ -2149,6 +2151,8 @@
</span><span class="cx"> 
</span><span class="cx">     prependToEnvironmentVariableList(&quot;DYLD_FRAMEWORK_PATH&quot;, $dyldFrameworkPath);
</span><span class="cx">     prependToEnvironmentVariableList(&quot;DYLD_LIBRARY_PATH&quot;, $dyldFrameworkPath);
</span><ins>+    prependToEnvironmentVariableList(&quot;DYLD_LIBRARY_PATH&quot;, $dyldFrameworkPath);
+    prependToEnvironmentVariableList(&quot;__XPC_DYLD_LIBRARY_PATH&quot;, $dyldFrameworkPath);
</ins><span class="cx"> 
</span><span class="cx">     setUpGuardMallocIfNeeded();
</span><span class="cx"> }
</span></span></pre>
</div>
</div>

</body>
</html>