Diff
Modified: trunk/LayoutTests/ChangeLog (219392 => 219393)
--- trunk/LayoutTests/ChangeLog 2017-07-12 13:59:37 UTC (rev 219392)
+++ trunk/LayoutTests/ChangeLog 2017-07-12 14:27:31 UTC (rev 219393)
@@ -1,3 +1,13 @@
+2017-07-12 Youenn Fablet <[email protected]>
+
+ WebRTC: Incorrect sdpMLineIndex for video breaks Firefox interop
+ https://bugs.webkit.org/show_bug.cgi?id=173530
+
+ Reviewed by Alex Christensen.
+
+ * webrtc/ice-candidate-sdpMLineIndex-expected.txt: Added.
+ * webrtc/ice-candidate-sdpMLineIndex.html: Added.
+
2017-07-12 Zan Dobersek <[email protected]>
[GCrypt] Implement CryptoKeyEC PKCS#8 exports
Added: trunk/LayoutTests/webrtc/ice-candidate-sdpMLineIndex-expected.txt (0 => 219393)
--- trunk/LayoutTests/webrtc/ice-candidate-sdpMLineIndex-expected.txt (rev 0)
+++ trunk/LayoutTests/webrtc/ice-candidate-sdpMLineIndex-expected.txt 2017-07-12 14:27:31 UTC (rev 219393)
@@ -0,0 +1,3 @@
+
+PASS Basic audio/video ICE candidate gathering
+
Added: trunk/LayoutTests/webrtc/ice-candidate-sdpMLineIndex.html (0 => 219393)
--- trunk/LayoutTests/webrtc/ice-candidate-sdpMLineIndex.html (rev 0)
+++ trunk/LayoutTests/webrtc/ice-candidate-sdpMLineIndex.html 2017-07-12 14:27:31 UTC (rev 219393)
@@ -0,0 +1,46 @@
+<!doctype html>
+<html>
+ <head>
+ <meta charset="utf-8">
+ <title>Testing ICE candidates with audio and video tracks</title>
+ <script src=""
+ <script src=""
+ </head>
+ <body>
+ <script>
+promise_test((test) => {
+ if (window.testRunner)
+ testRunner.setUserMediaPermission(true);
+
+ return navigator.mediaDevices.getUserMedia({audio: true, video: true}).then((stream) => {
+ return new Promise((resolve, reject) => {
+ var pc = new RTCPeerConnection();
+ pc.addTrack(stream.getAudioTracks()[0], stream);
+ pc.addTrack(stream.getVideoTracks()[0], stream);
+ var candidates = [];
+ pc._onicecandidate_ = (event) => {
+ if (event.candidate === null) {
+ resolve(candidates);
+ return;
+ }
+ candidates.push(event.candidate.candidate);
+ };
+ pc.createOffer().then((offer) => {
+ pc.setLocalDescription(offer);
+ });
+ });
+ }).then((candidates) => {
+ var index0Count, index1Count;
+ for (var candidate of candidates) {
+ if (candidate.sdpMLineIndex === 0)
+ index0Count++;
+ if (candidate.sdpMLineIndex === 1)
+ index1Count++;
+ }
+ assert_true(!!candidates.length, "candidates should be found");
+ assert_equals(index0Count, index1Count, "same number of candidates should be found for audio and video");
+ });
+}, "Basic audio/video ICE candidate gathering");
+ </script>
+ </body>
+</html>
Modified: trunk/Source/WebCore/ChangeLog (219392 => 219393)
--- trunk/Source/WebCore/ChangeLog 2017-07-12 13:59:37 UTC (rev 219392)
+++ trunk/Source/WebCore/ChangeLog 2017-07-12 14:27:31 UTC (rev 219393)
@@ -1,3 +1,21 @@
+2017-07-12 Youenn Fablet <[email protected]>
+
+ WebRTC: Incorrect sdpMLineIndex for video breaks Firefox interop
+ https://bugs.webkit.org/show_bug.cgi?id=173530
+
+ Reviewed by Alex Christensen.
+
+ Test: webrtc/ice-candidate-sdpMLineIndex.html
+
+ Reading missing parameter from libwebrtc backend and setting it when firing the RTCIceCandidate event.
+
+ * Modules/mediastream/PeerConnectionBackend.cpp:
+ (WebCore::PeerConnectionBackend::disableICECandidateFiltering):
+ (WebCore::PeerConnectionBackend::newICECandidate):
+ * Modules/mediastream/PeerConnectionBackend.h:
+ * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp:
+ (WebCore::LibWebRTCMediaEndpoint::OnIceCandidate):
+
2017-07-12 Zan Dobersek <[email protected]>
[GCrypt] Implement CryptoKeyEC PKCS#8 exports
Modified: trunk/Source/WebCore/Modules/mediastream/PeerConnectionBackend.cpp (219392 => 219393)
--- trunk/Source/WebCore/Modules/mediastream/PeerConnectionBackend.cpp 2017-07-12 13:59:37 UTC (rev 219392)
+++ trunk/Source/WebCore/Modules/mediastream/PeerConnectionBackend.cpp 2017-07-12 14:27:31 UTC (rev 219393)
@@ -297,7 +297,7 @@
{
m_shouldFilterICECandidates = false;
for (auto& pendingICECandidate : m_pendingICECandidates)
- fireICECandidateEvent(RTCIceCandidate::create(WTFMove(pendingICECandidate.sdp), WTFMove(pendingICECandidate.mid), 0));
+ fireICECandidateEvent(RTCIceCandidate::create(WTFMove(pendingICECandidate.sdp), WTFMove(pendingICECandidate.mid), pendingICECandidate.sdpMLineIndex));
m_pendingICECandidates.clear();
}
@@ -347,19 +347,19 @@
return filteredSDP.toString();
}
-void PeerConnectionBackend::newICECandidate(String&& sdp, String&& mid)
+void PeerConnectionBackend::newICECandidate(String&& sdp, String&& mid, unsigned short sdpMLineIndex)
{
RELEASE_LOG(WebRTC, "Gathered ice candidate:\n%{public}s\n", sdp.utf8().data());
if (!m_shouldFilterICECandidates) {
- fireICECandidateEvent(RTCIceCandidate::create(WTFMove(sdp), WTFMove(mid), 0));
+ fireICECandidateEvent(RTCIceCandidate::create(WTFMove(sdp), WTFMove(mid), sdpMLineIndex));
return;
}
if (sdp.find(" host ", 0) != notFound) {
- m_pendingICECandidates.append(PendingICECandidate { WTFMove(sdp), WTFMove(mid)});
+ m_pendingICECandidates.append(PendingICECandidate { WTFMove(sdp), WTFMove(mid), sdpMLineIndex});
return;
}
- fireICECandidateEvent(RTCIceCandidate::create(filterICECandidate(WTFMove(sdp)), WTFMove(mid), 0));
+ fireICECandidateEvent(RTCIceCandidate::create(filterICECandidate(WTFMove(sdp)), WTFMove(mid), sdpMLineIndex));
}
void PeerConnectionBackend::doneGatheringCandidates()
Modified: trunk/Source/WebCore/Modules/mediastream/PeerConnectionBackend.h (219392 => 219393)
--- trunk/Source/WebCore/Modules/mediastream/PeerConnectionBackend.h 2017-07-12 13:59:37 UTC (rev 219392)
+++ trunk/Source/WebCore/Modules/mediastream/PeerConnectionBackend.h 2017-07-12 14:27:31 UTC (rev 219393)
@@ -107,7 +107,7 @@
virtual void emulatePlatformEvent(const String& action) = 0;
- void newICECandidate(String&& sdp, String&& mid);
+ void newICECandidate(String&& sdp, String&& mid, unsigned short sdpMLineIndex);
void disableICECandidateFiltering();
void enableICECandidateFiltering();
@@ -158,6 +158,7 @@
// Fields described in https://www.w3.org/TR/webrtc/#idl-def-rtcicecandidateinit.
String sdp;
String mid;
+ unsigned short sdpMLineIndex;
};
Vector<PendingICECandidate> m_pendingICECandidates;
Modified: trunk/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp (219392 => 219393)
--- trunk/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp 2017-07-12 13:59:37 UTC (rev 219392)
+++ trunk/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp 2017-07-12 14:27:31 UTC (rev 219393)
@@ -852,10 +852,12 @@
auto mid = rtcCandidate->sdp_mid();
String candidateMid(mid.data(), mid.size());
- callOnMainThread([protectedThis = makeRef(*this), mid = WTFMove(candidateMid), sdp = WTFMove(candidateSDP)] {
+ auto sdpMLineIndex = safeCast<unsigned short>(rtcCandidate->sdp_mline_index());
+
+ callOnMainThread([protectedThis = makeRef(*this), mid = WTFMove(candidateMid), sdp = WTFMove(candidateSDP), sdpMLineIndex] {
if (protectedThis->isStopped())
return;
- protectedThis->m_peerConnectionBackend.newICECandidate(String(sdp), String(mid));
+ protectedThis->m_peerConnectionBackend.newICECandidate(String(sdp), String(mid), sdpMLineIndex);
});
}