summaryrefslogtreecommitdiffstats
path: root/dom/media/webrtc/tests
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-19 01:13:27 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-19 01:13:27 +0000
commit40a355a42d4a9444dc753c04c6608dade2f06a23 (patch)
tree871fc667d2de662f171103ce5ec067014ef85e61 /dom/media/webrtc/tests
parentAdding upstream version 124.0.1. (diff)
downloadfirefox-adbda400be353e676059e335c3c0aaf99e719475.tar.xz
firefox-adbda400be353e676059e335c3c0aaf99e719475.zip
Adding upstream version 125.0.1.upstream/125.0.1
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'dom/media/webrtc/tests')
-rw-r--r--dom/media/webrtc/tests/mochitests/head.js1
-rw-r--r--dom/media/webrtc/tests/mochitests/iceTestUtils.js126
-rw-r--r--dom/media/webrtc/tests/mochitests/pc.js21
-rw-r--r--dom/media/webrtc/tests/mochitests/test_peerConnection_RTCIceTransport.html197
-rw-r--r--dom/media/webrtc/tests/mochitests/test_peerConnection_basicAudioNATRelay.html2
-rw-r--r--dom/media/webrtc/tests/mochitests/test_peerConnection_basicAudioNATRelayTCP.html2
-rw-r--r--dom/media/webrtc/tests/mochitests/test_peerConnection_basicAudioNATRelayTLS.html2
-rw-r--r--dom/media/webrtc/tests/mochitests/test_peerConnection_basicAudioNATSrflx.html2
-rw-r--r--dom/media/webrtc/tests/mochitests/test_peerConnection_basicAudioNoisyUDPBlock.html2
-rw-r--r--dom/media/webrtc/tests/mochitests/test_peerConnection_basicAudioRelayPolicy.html5
-rw-r--r--dom/media/webrtc/tests/mochitests/test_peerConnection_bug825703.html79
-rw-r--r--dom/media/webrtc/tests/mochitests/test_peerConnection_callbacks.html29
-rw-r--r--dom/media/webrtc/tests/mochitests/test_peerConnection_localRollback.html2
-rw-r--r--dom/media/webrtc/tests/mochitests/test_peerConnection_portRestrictions.html4
-rw-r--r--dom/media/webrtc/tests/mochitests/test_peerConnection_restartIce.html12
-rw-r--r--dom/media/webrtc/tests/mochitests/test_peerConnection_restartIceLocalAndRemoteRollback.html10
-rw-r--r--dom/media/webrtc/tests/mochitests/test_peerConnection_restartIceLocalRollback.html9
-rw-r--r--dom/media/webrtc/tests/mochitests/test_peerConnection_restartIceNoBundle.html12
-rw-r--r--dom/media/webrtc/tests/mochitests/test_peerConnection_restartIceNoBundleNoRtcpMux.html12
-rw-r--r--dom/media/webrtc/tests/mochitests/test_peerConnection_restartIceNoRtcpMux.html13
-rw-r--r--dom/media/webrtc/tests/mochitests/test_peerConnection_sillyCodecPriorities.html12
-rw-r--r--dom/media/webrtc/tests/mochitests/test_peerConnection_stats_relayProtocol.html2
-rw-r--r--dom/media/webrtc/tests/mochitests/test_peerConnection_threeUnbundledConnections.html4
-rw-r--r--dom/media/webrtc/tests/mochitests/test_peerConnection_throwInCallbacks.html7
-rw-r--r--dom/media/webrtc/tests/mochitests/test_peerConnection_verifyDescriptions.html89
25 files changed, 509 insertions, 147 deletions
diff --git a/dom/media/webrtc/tests/mochitests/head.js b/dom/media/webrtc/tests/mochitests/head.js
index 9a4e5682a3..1fd559217a 100644
--- a/dom/media/webrtc/tests/mochitests/head.js
+++ b/dom/media/webrtc/tests/mochitests/head.js
@@ -424,6 +424,7 @@ function setupEnvironment() {
["media.peerconnection.nat_simulator.block_udp", false],
["media.peerconnection.nat_simulator.redirect_address", ""],
["media.peerconnection.nat_simulator.redirect_targets", ""],
+ ["media.peerconnection.treat_warnings_as_errors", true],
],
};
diff --git a/dom/media/webrtc/tests/mochitests/iceTestUtils.js b/dom/media/webrtc/tests/mochitests/iceTestUtils.js
index d4d1f5c4b4..9e76e3f7df 100644
--- a/dom/media/webrtc/tests/mochitests/iceTestUtils.js
+++ b/dom/media/webrtc/tests/mochitests/iceTestUtils.js
@@ -300,3 +300,129 @@ async function checkNoRelay(iceServers) {
);
pc.close();
}
+
+function gatheringStateReached(object, state) {
+ if (object instanceof RTCIceTransport) {
+ return new Promise(r =>
+ object.addEventListener("gatheringstatechange", function listener() {
+ if (object.gatheringState == state) {
+ object.removeEventListener("gatheringstatechange", listener);
+ r(state);
+ }
+ })
+ );
+ } else if (object instanceof RTCPeerConnection) {
+ return new Promise(r =>
+ object.addEventListener("icegatheringstatechange", function listener() {
+ if (object.iceGatheringState == state) {
+ object.removeEventListener("icegatheringstatechange", listener);
+ r(state);
+ }
+ })
+ );
+ } else {
+ throw "First parameter is neither an RTCIceTransport nor an RTCPeerConnection";
+ }
+}
+
+function nextGatheringState(object) {
+ if (object instanceof RTCIceTransport) {
+ return new Promise(resolve =>
+ object.addEventListener(
+ "gatheringstatechange",
+ () => resolve(object.gatheringState),
+ { once: true }
+ )
+ );
+ } else if (object instanceof RTCPeerConnection) {
+ return new Promise(resolve =>
+ object.addEventListener(
+ "icegatheringstatechange",
+ () => resolve(object.iceGatheringState),
+ { once: true }
+ )
+ );
+ } else {
+ throw "First parameter is neither an RTCIceTransport nor an RTCPeerConnection";
+ }
+}
+
+function emptyCandidate(pc) {
+ return new Promise(r =>
+ pc.addEventListener("icecandidate", function listener(e) {
+ if (e.candidate && e.candidate.candidate == "") {
+ pc.removeEventListener("icecandidate", listener);
+ r(e);
+ }
+ })
+ );
+}
+
+function nullCandidate(pc) {
+ return new Promise(r =>
+ pc.addEventListener("icecandidate", function listener(e) {
+ if (!e.candidate) {
+ pc.removeEventListener("icecandidate", listener);
+ r(e);
+ }
+ })
+ );
+}
+
+function connectionStateReached(object, state) {
+ if (object instanceof RTCIceTransport || object instanceof RTCDtlsTransport) {
+ return new Promise(resolve =>
+ object.addEventListener("statechange", function listener() {
+ if (object.state == state) {
+ object.removeEventListener("statechange", listener);
+ resolve(state);
+ }
+ })
+ );
+ } else if (object instanceof RTCPeerConnection) {
+ return new Promise(resolve =>
+ object.addEventListener("connectionstatechange", function listener() {
+ if (object.connectionState == state) {
+ object.removeEventListener("connectionstatechange", listener);
+ resolve(state);
+ }
+ })
+ );
+ } else {
+ throw "First parameter is neither an RTCIceTransport, an RTCDtlsTransport, nor an RTCPeerConnection";
+ }
+}
+
+function nextConnectionState(object) {
+ if (object instanceof RTCIceTransport || object instanceof RTCDtlsTransport) {
+ return new Promise(resolve =>
+ object.addEventListener("statechange", () => resolve(object.state), {
+ once: true,
+ })
+ );
+ } else if (object instanceof RTCPeerConnection) {
+ return new Promise(resolve =>
+ object.addEventListener(
+ "connectionstatechange",
+ () => resolve(object.connectionState),
+ { once: true }
+ )
+ );
+ } else {
+ throw "First parameter is neither an RTCIceTransport, an RTCDtlsTransport, nor an RTCPeerConnection";
+ }
+}
+
+function nextIceConnectionState(pc) {
+ if (pc instanceof RTCPeerConnection) {
+ return new Promise(resolve =>
+ pc.addEventListener(
+ "iceconnectionstatechange",
+ () => resolve(pc.iceConnectionState),
+ { once: true }
+ )
+ );
+ } else {
+ throw "First parameter is not an RTCPeerConnection";
+ }
+}
diff --git a/dom/media/webrtc/tests/mochitests/pc.js b/dom/media/webrtc/tests/mochitests/pc.js
index 73e1b2c2f0..5778c61392 100644
--- a/dom/media/webrtc/tests/mochitests/pc.js
+++ b/dom/media/webrtc/tests/mochitests/pc.js
@@ -12,8 +12,8 @@ const iceStateTransitions = {
checking: ["new", "connected", "failed", "closed"], //Note: do we need to
// allow 'completed' in
// here as well?
- connected: ["new", "completed", "disconnected", "closed"],
- completed: ["new", "disconnected", "closed"],
+ connected: ["new", "checking", "completed", "disconnected", "closed"],
+ completed: ["new", "checking", "disconnected", "closed"],
disconnected: ["new", "connected", "completed", "failed", "closed"],
failed: ["new", "disconnected", "closed"],
closed: [],
@@ -367,9 +367,7 @@ PeerConnectionTest.prototype.createDataChannel = function (options) {
PeerConnectionTest.prototype.createAnswer = function (peer) {
return peer.createAnswer().then(answer => {
// make a copy so this does not get updated with ICE candidates
- this.originalAnswer = new RTCSessionDescription(
- JSON.parse(JSON.stringify(answer))
- );
+ this.originalAnswer = JSON.parse(JSON.stringify(answer));
return answer;
});
};
@@ -384,9 +382,7 @@ PeerConnectionTest.prototype.createAnswer = function (peer) {
PeerConnectionTest.prototype.createOffer = function (peer) {
return peer.createOffer().then(offer => {
// make a copy so this does not get updated with ICE candidates
- this.originalOffer = new RTCSessionDescription(
- JSON.parse(JSON.stringify(offer))
- );
+ this.originalOffer = JSON.parse(JSON.stringify(offer));
return offer;
});
};
@@ -1399,10 +1395,6 @@ PeerConnectionWrapper.prototype = {
});
},
- isTrackOnPC(track) {
- return !!this.getStreamForRecvTrack(track);
- },
-
allExpectedTracksAreObserved(expected, observed) {
return Object.keys(expected).every(trackId => observed[trackId]);
},
@@ -1459,7 +1451,10 @@ PeerConnectionWrapper.prototype = {
setupTrackEventHandler() {
this._pc.addEventListener("track", ({ track, streams }) => {
info(`${this}: 'ontrack' event fired for ${track.id}`);
- ok(this.isTrackOnPC(track), `Found track ${track.id}`);
+ ok(
+ this._pc.getReceivers().some(r => r.track == track),
+ `Found track ${track.id}`
+ );
let gratuitousEvent = true;
let streamsContainingTrack = this.remoteStreamsByTrackId.get(track.id);
diff --git a/dom/media/webrtc/tests/mochitests/test_peerConnection_RTCIceTransport.html b/dom/media/webrtc/tests/mochitests/test_peerConnection_RTCIceTransport.html
new file mode 100644
index 0000000000..893d1aad5b
--- /dev/null
+++ b/dom/media/webrtc/tests/mochitests/test_peerConnection_RTCIceTransport.html
@@ -0,0 +1,197 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+ <script type="application/javascript" src="pc.js"></script>
+ <script type="application/javascript" src="iceTestUtils.js"></script>
+ <script type="application/javascript" src="helpers_from_wpt/sdp.js"></script></head>
+<body>
+<pre id="test">
+<script type="application/javascript">
+ createHTML({
+ bug: "1811912",
+ title: "Tests for RTCIceTransport"
+ });
+
+ const tests = [
+ async function iceRestartNewGathersFirst() {
+ await pushPrefs(
+ ['media.peerconnection.nat_simulator.block_udp', true]);
+ // We block UDP, and configure a fake UDP STUN server; this should result
+ // in gathering taking a while, because we'll just be sending UDP packets
+ // off to be eaten by the NAT simulator.
+ const pc1 = new RTCPeerConnection({ iceServers: [{
+ urls: ['stun:192.168.1.1']
+ }] });
+ const pc2 = new RTCPeerConnection();
+
+ const transceiver = pc1.addTransceiver('audio');
+ await pc1.setLocalDescription();
+ const {iceTransport} = transceiver.sender.transport;
+ is(await nextGatheringState(iceTransport), 'gathering');
+
+ await pc2.setRemoteDescription(pc1.localDescription);
+ await pc2.setLocalDescription();
+ await pc1.setRemoteDescription(pc2.localDescription);
+
+ pc1.setConfiguration({iceServers: []});
+ await pc1.setLocalDescription(await pc1.createOffer({iceRestart: true}));
+ is(iceTransport.gatheringState, 'gathering');
+
+ const gatheringDonePromise = nextGatheringState(iceTransport);
+ // The empty candidate should fire for the new underlying transport
+ // (created by the ICE restart), but there should be no gathering state
+ // change yet. (Spec says that the RTCIceTransport object is the same
+ // here, even thougb there's actually a new transport)
+ await emptyCandidate(pc1);
+
+ // New transport is done gathering, old should not be.
+ let result = await Promise.race([gatheringDonePromise, new Promise(r => setTimeout(r, 100))]);
+ is(result, undefined, 'Gathering should not complete yet');
+
+ await pc2.setRemoteDescription(pc1.localDescription);
+ await pc2.setLocalDescription();
+ await pc1.setRemoteDescription(pc2.localDescription);
+
+ // We might or might not have an empty candidate for the generation we
+ // just abandoned, depending on how the spec shakes out.
+
+ // Completing negotiation should result in a transition to complete very
+ // quickly
+ result = await Promise.race([gatheringDonePromise, new Promise(r => setTimeout(r, 100))]);
+ is(result, 'complete', 'Gathering should complete soon after the ICE restart is complete');
+ pc1.close();
+ pc2.close();
+ await SpecialPowers.popPrefEnv();
+ },
+
+ async function iceRestartNewGathersFirstThenRollback() {
+ await pushPrefs(
+ ['media.peerconnection.nat_simulator.block_udp', true]);
+ // This should result in gathering taking a while
+ const pc1 = new RTCPeerConnection({ iceServers: [{
+ urls: ['stun:192.168.1.1']
+ }] });
+ const pc2 = new RTCPeerConnection();
+
+ const transceiver = pc1.addTransceiver('audio');
+ await pc1.setLocalDescription();
+ const {iceTransport} = transceiver.sender.transport;
+ is(await nextGatheringState(iceTransport), 'gathering');
+
+ await pc2.setRemoteDescription(pc1.localDescription);
+ await pc2.setLocalDescription();
+ await pc1.setRemoteDescription(pc2.localDescription);
+
+ pc1.setConfiguration({iceServers: []});
+ await pc1.setLocalDescription(await pc1.createOffer({iceRestart: true}));
+ is(iceTransport.gatheringState, 'gathering');
+
+ const gatheringDonePromise = nextGatheringState(iceTransport);
+ // This should fire for the new transport, but there should be no
+ // gathering state change yet.
+ await emptyCandidate(pc1);
+
+ // Rollback should abandon the new transport, and we should remain in
+ // 'gathering'
+ await pc1.setLocalDescription({type: 'rollback', sdp: ''});
+
+ let result = await Promise.race([gatheringDonePromise, new Promise(r => setTimeout(r, 1000))]);
+ is(result, undefined, 'Gathering should not complete');
+ pc1.close();
+ pc2.close();
+ await SpecialPowers.popPrefEnv();
+ },
+
+ async function iceRestartOldGathersFirst() {
+ await pushPrefs(
+ ['media.peerconnection.nat_simulator.block_udp', true]);
+ const pc1 = new RTCPeerConnection();
+ const pc2 = new RTCPeerConnection();
+
+ const transceiver = pc1.addTransceiver('audio');
+ await pc1.setLocalDescription();
+ const {iceTransport} = transceiver.sender.transport;
+ is(await nextGatheringState(iceTransport), 'gathering');
+ is(await nextGatheringState(iceTransport), 'complete');
+
+ await pc2.setRemoteDescription(pc1.localDescription);
+ await pc2.setLocalDescription();
+ await pc1.setRemoteDescription(pc2.localDescription);
+
+ // This should result in gathering taking a while
+ pc1.setConfiguration({ iceServers: [{
+ urls: ['stun:192.168.1.1']
+ }] });
+ await pc1.setLocalDescription(await pc1.createOffer({iceRestart: true}));
+
+ is(await nextGatheringState(iceTransport), 'gathering');
+
+ const gatheringDonePromise = nextGatheringState(iceTransport);
+ let result = await Promise.race([gatheringDonePromise, new Promise(r => setTimeout(r, 100))]);
+ is(result, undefined, 'Gathering should not complete');
+
+ await pc2.setRemoteDescription(pc1.localDescription);
+ await pc2.setLocalDescription();
+ await pc1.setRemoteDescription(pc2.localDescription);
+
+ result = await Promise.race([gatheringDonePromise, new Promise(r => setTimeout(r, 100))]);
+ is(result, undefined, 'Gathering should not complete');
+ pc1.close();
+ pc2.close();
+ await SpecialPowers.popPrefEnv();
+ },
+
+ async function iceRestartOldGathersFirstThenRollback() {
+ await pushPrefs(
+ ['media.peerconnection.nat_simulator.block_udp', true]);
+ const pc1 = new RTCPeerConnection();
+ const pc2 = new RTCPeerConnection();
+
+ const transceiver = pc1.addTransceiver('audio');
+ await pc1.setLocalDescription();
+ const {iceTransport} = transceiver.sender.transport;
+ is(await nextGatheringState(iceTransport), 'gathering');
+ is(await nextGatheringState(iceTransport), 'complete');
+
+ await pc2.setRemoteDescription(pc1.localDescription);
+ await pc2.setLocalDescription();
+ await pc1.setRemoteDescription(pc2.localDescription);
+
+ // This should result in gathering taking a while
+ pc1.setConfiguration({ iceServers: [{
+ urls: ['stun:192.168.1.1']
+ }] });
+ await pc1.setLocalDescription(await pc1.createOffer({iceRestart: true}));
+
+ is(await nextGatheringState(iceTransport), 'gathering', 'ICE restart should put us back in gathering');
+
+ const gatheringDonePromise = nextGatheringState(iceTransport);
+ is(iceTransport.gatheringState, 'gathering');
+ await pc1.setLocalDescription({type: 'rollback', sdp: ''});
+ const result = await Promise.race([gatheringDonePromise, new Promise(r => setTimeout(r, 200))]);
+ is(iceTransport.gatheringState, 'complete', 'Rollback of ICE restart to transport that was already done gathering should result in a transition back to "complete"');
+ is(result, 'complete', 'Rollback that brings the gathering state back to complete should result in a gatheringstatechange event');
+ pc1.close();
+ pc2.close();
+ await SpecialPowers.popPrefEnv();
+ },
+ ];
+
+ runNetworkTest(async () => {
+ for (const test of tests) {
+ info(`Running test: ${test.name}`);
+ try {
+ await test();
+ } catch (e) {
+ ok(false, `Caught ${e.name}: ${e.message} ${e.stack}`);
+ }
+ info(`Done running test: ${test.name}`);
+ // Make sure we don't build up a pile of GC work, and also get PCImpl to
+ // print their timecards.
+ await new Promise(r => SpecialPowers.exactGC(r));
+ }
+ }, { useIceServer: true });
+</script>
+</pre>
+</body>
+</html>
diff --git a/dom/media/webrtc/tests/mochitests/test_peerConnection_basicAudioNATRelay.html b/dom/media/webrtc/tests/mochitests/test_peerConnection_basicAudioNATRelay.html
index 180abc075a..7f3f9f57ad 100644
--- a/dom/media/webrtc/tests/mochitests/test_peerConnection_basicAudioNATRelay.html
+++ b/dom/media/webrtc/tests/mochitests/test_peerConnection_basicAudioNATRelay.html
@@ -24,6 +24,8 @@ if (!("mediaDevices" in navigator)) {
['media.peerconnection.nat_simulator.filtering_type', 'PORT_DEPENDENT'],
['media.peerconnection.nat_simulator.mapping_type', 'PORT_DEPENDENT'],
['media.peerconnection.nat_simulator.block_tcp', true],
+ // The above triggers warning about 5 ICE servers
+ ['media.peerconnection.treat_warnings_as_errors', false],
['media.getusermedia.insecure.enabled', true]);
options.expectedLocalCandidateType = "srflx";
options.expectedRemoteCandidateType = "relay";
diff --git a/dom/media/webrtc/tests/mochitests/test_peerConnection_basicAudioNATRelayTCP.html b/dom/media/webrtc/tests/mochitests/test_peerConnection_basicAudioNATRelayTCP.html
index 7bb51764bd..387341151f 100644
--- a/dom/media/webrtc/tests/mochitests/test_peerConnection_basicAudioNATRelayTCP.html
+++ b/dom/media/webrtc/tests/mochitests/test_peerConnection_basicAudioNATRelayTCP.html
@@ -26,6 +26,8 @@ if (!("mediaDevices" in navigator)) {
['media.peerconnection.nat_simulator.block_tcp', false],
['media.peerconnection.nat_simulator.block_tls', true],
['media.peerconnection.ice.loopback', true],
+ // The above sets up 5+ ICE servers which triggers a warning
+ ['media.peerconnection.treat_warnings_as_errors', false],
['media.getusermedia.insecure.enabled', true]);
options.expectedLocalCandidateType = "relay-tcp";
options.expectedRemoteCandidateType = "relay-tcp";
diff --git a/dom/media/webrtc/tests/mochitests/test_peerConnection_basicAudioNATRelayTLS.html b/dom/media/webrtc/tests/mochitests/test_peerConnection_basicAudioNATRelayTLS.html
index 7446401f87..2ac886c156 100644
--- a/dom/media/webrtc/tests/mochitests/test_peerConnection_basicAudioNATRelayTLS.html
+++ b/dom/media/webrtc/tests/mochitests/test_peerConnection_basicAudioNATRelayTLS.html
@@ -25,6 +25,8 @@ if (!("mediaDevices" in navigator)) {
['media.peerconnection.nat_simulator.block_udp', true],
['media.peerconnection.nat_simulator.block_tcp', true],
['media.peerconnection.ice.loopback', true],
+ // The above triggers warning about 5 ICE servers
+ ['media.peerconnection.treat_warnings_as_errors', false],
['media.getusermedia.insecure.enabled', true]);
options.expectedLocalCandidateType = "relay-tls";
options.expectedRemoteCandidateType = "relay-tls";
diff --git a/dom/media/webrtc/tests/mochitests/test_peerConnection_basicAudioNATSrflx.html b/dom/media/webrtc/tests/mochitests/test_peerConnection_basicAudioNATSrflx.html
index 78fa8bcb2c..69fc2af80a 100644
--- a/dom/media/webrtc/tests/mochitests/test_peerConnection_basicAudioNATSrflx.html
+++ b/dom/media/webrtc/tests/mochitests/test_peerConnection_basicAudioNATSrflx.html
@@ -24,6 +24,8 @@ if (!("mediaDevices" in navigator)) {
['media.peerconnection.nat_simulator.filtering_type', 'ENDPOINT_INDEPENDENT'],
['media.peerconnection.nat_simulator.mapping_type', 'ENDPOINT_INDEPENDENT'],
['media.peerconnection.nat_simulator.block_tcp', true],
+ // The above triggers warning about 5 ICE servers
+ ['media.peerconnection.treat_warnings_as_errors', false],
['media.getusermedia.insecure.enabled', true]);
options.expectedLocalCandidateType = "srflx";
options.expectedRemoteCandidateType = "srflx";
diff --git a/dom/media/webrtc/tests/mochitests/test_peerConnection_basicAudioNoisyUDPBlock.html b/dom/media/webrtc/tests/mochitests/test_peerConnection_basicAudioNoisyUDPBlock.html
index 297121cd94..4175419d44 100644
--- a/dom/media/webrtc/tests/mochitests/test_peerConnection_basicAudioNoisyUDPBlock.html
+++ b/dom/media/webrtc/tests/mochitests/test_peerConnection_basicAudioNoisyUDPBlock.html
@@ -25,6 +25,8 @@ if (!("mediaDevices" in navigator)) {
['media.peerconnection.nat_simulator.block_udp', true],
['media.peerconnection.nat_simulator.error_code_for_drop', 3 /*R_INTERNAL*/],
['media.peerconnection.nat_simulator.block_tls', true],
+ // The above triggers warning about 5 ICE servers
+ ['media.peerconnection.treat_warnings_as_errors', false],
['media.getusermedia.insecure.enabled', true]);
options.expectedLocalCandidateType = "relay-tcp";
options.expectedRemoteCandidateType = "relay-tcp";
diff --git a/dom/media/webrtc/tests/mochitests/test_peerConnection_basicAudioRelayPolicy.html b/dom/media/webrtc/tests/mochitests/test_peerConnection_basicAudioRelayPolicy.html
index ced57ff8a3..313d76441b 100644
--- a/dom/media/webrtc/tests/mochitests/test_peerConnection_basicAudioRelayPolicy.html
+++ b/dom/media/webrtc/tests/mochitests/test_peerConnection_basicAudioRelayPolicy.html
@@ -14,7 +14,10 @@ createHTML({
runNetworkTest(async () => {
await pushPrefs(
// Enable mDNS, since there are some checks we want to run with that
- ['media.peerconnection.ice.obfuscate_host_addresses', true]);
+ ['media.peerconnection.ice.obfuscate_host_addresses', true],
+ // The above triggers warning about 5 ICE servers
+ ['media.peerconnection.treat_warnings_as_errors', false],
+ );
const offerer = new RTCPeerConnection({iceServers: iceServersArray, iceTransportPolicy: 'relay'});
const answerer = new RTCPeerConnection({iceServers: iceServersArray});
diff --git a/dom/media/webrtc/tests/mochitests/test_peerConnection_bug825703.html b/dom/media/webrtc/tests/mochitests/test_peerConnection_bug825703.html
index 5cd168af8a..5efb4a17d2 100644
--- a/dom/media/webrtc/tests/mochitests/test_peerConnection_bug825703.html
+++ b/dom/media/webrtc/tests/mochitests/test_peerConnection_bug825703.html
@@ -25,7 +25,7 @@ var makePC = (config, expected_error) => {
exception = e;
}
is((exception? exception.name : "success"), expected_error || "success",
- "RTCPeerConnection(" + JSON.stringify(config) + ")");
+ "RTCPeerConnection(" + JSON.stringify(config) + ") " + exception?.message);
};
// The order of properties in objects is not guaranteed in JavaScript, so this
@@ -39,8 +39,8 @@ var toComparable = o =>
}, {});
// This is a test of the iceServers parsing code + readable errors
-runNetworkTest(() => {
- var exception = null;
+runNetworkTest(async () => {
+ let exception = null;
try {
new RTCPeerConnection().close();
@@ -56,26 +56,37 @@ runNetworkTest(() => {
{ urls:"stun:127.0.0.1" },
{ urls:"stun:localhost", foo:"" },
{ urls: ["stun:127.0.0.1", "stun:localhost"] },
- { urls:"stuns:localhost", foo:"" },
+ ]});
+ makePC({ iceServers: [
{ urls:"turn:[::1]:3478", username:"p", credential:"p" },
{ urls:"turn:[::1]:3478", username:"", credential:"" },
{ urls:"turns:[::1]:3478", username:"", credential:"" },
+ ]});
+ makePC({ iceServers: [
{ urls:"turn:localhost:3478?transport=udp", username:"p", credential:"p" },
{ urls: ["turn:[::1]:3478", "turn:localhost"], username:"p", credential:"p" },
{ urls:"turns:localhost:3478?transport=udp", username:"p", credential:"p" },
- { url:"stun:localhost", foo:"" },
- { url:"turn:localhost", username:"p", credential:"p" }
]});
-
makePC({ iceServers: [{ urls:"http:0.0.0.0" }] }, "SyntaxError");
try {
- new RTCPeerConnection({ iceServers: [{ url:"http:0.0.0.0" }] }).close();
+ new RTCPeerConnection({ iceServers: [{ urls:"http:0.0.0.0" }] }).close();
} catch (e) {
ok(e.message.indexOf("http") > 0,
"RTCPeerConnection() constructor has readable exceptions");
}
+ const push = prefs => SpecialPowers.pushPrefEnv(prefs);
+
+ // Remaining tests trigger warnings
+ await push({ set: [['media.peerconnection.treat_warnings_as_errors', false]] });
+
+ makePC({ iceServers: [
+ { urls:"stuns:localhost", foo:"" },
+ { url:"stun:localhost", foo:"" },
+ { url:"turn:localhost", username:"p", credential:"p" }
+ ]});
+
// Test getConfiguration
const config = {
bundlePolicy: "max-bundle",
@@ -98,41 +109,35 @@ runNetworkTest(() => {
JSON.stringify(toComparable(config)), "getConfiguration");
pc.close();
- var push = prefs => SpecialPowers.pushPrefEnv(prefs);
-
- return Promise.resolve()
// This set of tests are setting the about:config User preferences for default
// ice servers and checking the outputs when RTCPeerConnection() is
// invoked. See Bug 1167922 for more information.
- .then(() => push({ set: [['media.peerconnection.default_iceservers', ""]] })
- .then(() => makePC())
- .then(() => push({ set: [['media.peerconnection.default_iceservers', "k"]] }))
- .then(() => makePC())
- .then(() => push({ set: [['media.peerconnection.default_iceservers', "[{\"urls\": [\"stun:stun.services.mozilla.com\"]}]"]] }))
- .then(() => makePC()))
+ await push({ set: [['media.peerconnection.default_iceservers', ""]] });
+ makePC();
+ await push({ set: [['media.peerconnection.default_iceservers', "k"]] });
+ makePC();
+ await push({ set: [['media.peerconnection.default_iceservers',
+ "[{\"urls\": [\"stun:stun.services.mozilla.com\"]}]"]]});
+ makePC();
// This set of tests check that warnings work. See Bug 1254839 for more.
- .then(() => {
- let promise = new Promise(resolve => {
- SpecialPowers.registerConsoleListener(msg => {
- if (msg.message.includes("onaddstream")) {
- SpecialPowers.postConsoleSentinel();
- resolve(msg.message);
- }
- });
+ const warning = await new Promise(resolve => {
+ SpecialPowers.registerConsoleListener(msg => {
+ if (msg.message.includes("onaddstream")) {
+ SpecialPowers.postConsoleSentinel();
+ resolve(msg.message);
+ }
});
lineNumberAndFunction.func();
- return promise;
- }).then(warning => {
- is(warning.split('"')[1],
- "WebRTC: onaddstream is deprecated! Use peerConnection.ontrack instead.",
- "warning logged");
- var remainder = warning.split('"').slice(2).join('"');
- info(remainder);
- ok(remainder.includes('file: "' + window.location + '"'),
- "warning has this file");
- ok(remainder.includes('line: ' + lineNumberAndFunction.line),
- "warning has correct line number");
- });
+ });
+ is(warning.split('"')[1],
+ "WebRTC: onaddstream is deprecated! Use peerConnection.ontrack instead.",
+ "warning logged");
+ const remainder = warning.split('"').slice(2).join('"');
+ info(remainder);
+ ok(remainder.includes('file: "' + window.location + '"'),
+ "warning has this file");
+ ok(remainder.includes('line: ' + lineNumberAndFunction.line),
+ "warning has correct line number");
});
</script>
</pre>
diff --git a/dom/media/webrtc/tests/mochitests/test_peerConnection_callbacks.html b/dom/media/webrtc/tests/mochitests/test_peerConnection_callbacks.html
index 4c890e4400..ffd7a1b0c1 100644
--- a/dom/media/webrtc/tests/mochitests/test_peerConnection_callbacks.html
+++ b/dom/media/webrtc/tests/mochitests/test_peerConnection_callbacks.html
@@ -1,4 +1,4 @@
-<!DOCTYPE HTML>
+<!DOCTYPE HTML>
<html>
<head>
<script type="application/javascript" src="pc.js"></script>
@@ -50,22 +50,27 @@ pc2.onicecandidate = e => {
.catch(generateErrorCallback());
};
-var v1, v2;
-var delivered = new Promise(resolve => {
- pc2.onaddstream = e => {
- v2.srcObject = e.stream;
- resolve(e.stream);
- };
-});
+runNetworkTest(async function() {
+ // Tests trigger warnings
+ await SpecialPowers.pushPrefEnv({
+ set: [['media.peerconnection.treat_warnings_as_errors', false]]
+ });
+
+ const v1 = createMediaElement('video', 'v1');
+ const v2 = createMediaElement('video', 'v2');
+
+ const delivered = new Promise(resolve => {
+ pc2.onaddstream = e => {
+ v2.srcObject = e.stream;
+ resolve(e.stream);
+ };
+ });
-runNetworkTest(function() {
- v1 = createMediaElement('video', 'v1');
- v2 = createMediaElement('video', 'v2');
var canPlayThrough = new Promise(resolve => v2.canplaythrough = resolve);
is(v2.currentTime, 0, "v2.currentTime is zero at outset");
// not testing legacy gUM here
- return navigator.mediaDevices.getUserMedia({ video: true, audio: true })
+ await navigator.mediaDevices.getUserMedia({ video: true, audio: true })
.then(stream => pc1.addStream(v1.srcObject = stream))
.then(() => pcall(pc1, pc1.createOffer))
.then(offer => pcall(pc1, pc1.setLocalDescription, offer))
diff --git a/dom/media/webrtc/tests/mochitests/test_peerConnection_localRollback.html b/dom/media/webrtc/tests/mochitests/test_peerConnection_localRollback.html
index 5bdc8cc029..8c9470e7f2 100644
--- a/dom/media/webrtc/tests/mochitests/test_peerConnection_localRollback.html
+++ b/dom/media/webrtc/tests/mochitests/test_peerConnection_localRollback.html
@@ -32,7 +32,7 @@
// Rolling back should shut down gathering
function PC_REMOTE_WAIT_FOR_END_OF_TRICKLE(test) {
- return test.pcRemote.endOfTrickleIce;
+ is(test.pcRemote._pc.iceGatheringState, "new");
},
function PC_REMOTE_SETUP_ICE_HANDLER(test) {
diff --git a/dom/media/webrtc/tests/mochitests/test_peerConnection_portRestrictions.html b/dom/media/webrtc/tests/mochitests/test_peerConnection_portRestrictions.html
index 7cd695ff54..589d8ed6ad 100644
--- a/dom/media/webrtc/tests/mochitests/test_peerConnection_portRestrictions.html
+++ b/dom/media/webrtc/tests/mochitests/test_peerConnection_portRestrictions.html
@@ -46,10 +46,14 @@ runNetworkTest(() => {
{ urls:"turn:[::1]:5349", username:"p", credential:"p" },
{ urls:"turn:[::1]:3478", username:"p", credential:"p" },
{ urls:"turn:[::1]", username:"p", credential:"p" },
+ ]});
+ makePC({ iceServers: [
{ urls:"turn:localhost:53?transport=udp", username:"p", credential:"p" },
{ urls:"turn:localhost:3478?transport=udp", username:"p", credential:"p" },
{ urls:"turn:localhost:53?transport=tcp", username:"p", credential:"p" },
{ urls:"turn:localhost:3478?transport=tcp", username:"p", credential:"p" },
+ ]});
+ makePC({ iceServers: [
{ urls:"turns:localhost:3478?transport=udp", username:"p", credential:"p" },
{ urls:"stun:localhost", foo:"" }
]});
diff --git a/dom/media/webrtc/tests/mochitests/test_peerConnection_restartIce.html b/dom/media/webrtc/tests/mochitests/test_peerConnection_restartIce.html
index d94bb084b7..add3882a4d 100644
--- a/dom/media/webrtc/tests/mochitests/test_peerConnection_restartIce.html
+++ b/dom/media/webrtc/tests/mochitests/test_peerConnection_restartIce.html
@@ -21,12 +21,14 @@
function PC_LOCAL_SET_OFFER_OPTION(test) {
test.setOfferOptions({ iceRestart: true });
},
- function PC_LOCAL_EXPECT_ICE_CHECKING(test) {
- test.pcLocal.expectIceChecking();
+ // Make sure we don't get the end of gathering racing against the
+ // setting of the new offer
+ function PC_LOCAL_WAIT_FOR_END_OF_TRICKLE(test) {
+ return test.pcLocal.endOfTrickleIce;
+ },
+ function PC_LOCAL_SETUP_ICE_HANDLER(test) {
+ test.pcLocal.setupIceCandidateHandler(test);
},
- function PC_REMOTE_EXPECT_ICE_CHECKING(test) {
- test.pcRemote.expectIceChecking();
- }
]
);
diff --git a/dom/media/webrtc/tests/mochitests/test_peerConnection_restartIceLocalAndRemoteRollback.html b/dom/media/webrtc/tests/mochitests/test_peerConnection_restartIceLocalAndRemoteRollback.html
index 6bbf9440fc..3307258ef9 100644
--- a/dom/media/webrtc/tests/mochitests/test_peerConnection_restartIceLocalAndRemoteRollback.html
+++ b/dom/media/webrtc/tests/mochitests/test_peerConnection_restartIceLocalAndRemoteRollback.html
@@ -31,10 +31,6 @@
test.chain.replaceAfter('PC_REMOTE_CREATE_ANSWER',
[
- function PC_LOCAL_EXPECT_ICE_CONNECTED(test) {
- test.pcLocal.iceCheckingIceRollbackExpected = true;
- },
-
function PC_REMOTE_ROLLBACK(test) {
return test.setRemoteDescription(test.pcRemote, { type: "rollback" },
STABLE);
@@ -58,12 +54,6 @@
return test.pcLocal.endOfTrickleIce;
},
- function PC_LOCAL_EXPECT_ICE_CHECKING(test) {
- test.pcLocal.expectIceChecking();
- },
- function PC_REMOTE_EXPECT_ICE_CHECKING(test) {
- test.pcRemote.expectIceChecking();
- }
],
1 // Replaces after second PC_REMOTE_CREATE_ANSWER
);
diff --git a/dom/media/webrtc/tests/mochitests/test_peerConnection_restartIceLocalRollback.html b/dom/media/webrtc/tests/mochitests/test_peerConnection_restartIceLocalRollback.html
index f5f9a1f220..a7adb7c3e9 100644
--- a/dom/media/webrtc/tests/mochitests/test_peerConnection_restartIceLocalRollback.html
+++ b/dom/media/webrtc/tests/mochitests/test_peerConnection_restartIceLocalRollback.html
@@ -33,9 +33,6 @@
HAVE_LOCAL_OFFER);
});
},
- function PC_LOCAL_EXPECT_ICE_CONNECTED(test) {
- test.pcLocal.iceCheckingIceRollbackExpected = true;
- },
function PC_LOCAL_WAIT_FOR_GATHERING(test) {
return new Promise(r => {
test.pcLocal._pc.addEventListener("icegatheringstatechange", () => {
@@ -54,12 +51,6 @@
function PC_LOCAL_WAIT_FOR_END_OF_TRICKLE(test) {
return test.pcLocal.endOfTrickleIce;
},
- function PC_LOCAL_EXPECT_ICE_CHECKING(test) {
- test.pcLocal.expectIceChecking();
- },
- function PC_REMOTE_EXPECT_ICE_CHECKING(test) {
- test.pcRemote.expectIceChecking();
- }
]
);
diff --git a/dom/media/webrtc/tests/mochitests/test_peerConnection_restartIceNoBundle.html b/dom/media/webrtc/tests/mochitests/test_peerConnection_restartIceNoBundle.html
index 134fa97cc0..ef40d4039c 100644
--- a/dom/media/webrtc/tests/mochitests/test_peerConnection_restartIceNoBundle.html
+++ b/dom/media/webrtc/tests/mochitests/test_peerConnection_restartIceNoBundle.html
@@ -23,12 +23,14 @@
function PC_LOCAL_SET_OFFER_OPTION(test) {
test.setOfferOptions({ iceRestart: true });
},
- function PC_LOCAL_EXPECT_ICE_CHECKING(test) {
- test.pcLocal.expectIceChecking();
+ // Make sure we don't get the end of gathering racing against the
+ // setting of the new offer
+ function PC_LOCAL_WAIT_FOR_END_OF_TRICKLE(test) {
+ return test.pcLocal.endOfTrickleIce;
+ },
+ function PC_LOCAL_SETUP_ICE_HANDLER(test) {
+ test.pcLocal.setupIceCandidateHandler(test);
},
- function PC_REMOTE_EXPECT_ICE_CHECKING(test) {
- test.pcRemote.expectIceChecking();
- }
]
);
diff --git a/dom/media/webrtc/tests/mochitests/test_peerConnection_restartIceNoBundleNoRtcpMux.html b/dom/media/webrtc/tests/mochitests/test_peerConnection_restartIceNoBundleNoRtcpMux.html
index 06a3a3c980..85a3fcc45d 100644
--- a/dom/media/webrtc/tests/mochitests/test_peerConnection_restartIceNoBundleNoRtcpMux.html
+++ b/dom/media/webrtc/tests/mochitests/test_peerConnection_restartIceNoBundleNoRtcpMux.html
@@ -24,12 +24,14 @@
function PC_LOCAL_SET_OFFER_OPTION(test) {
test.setOfferOptions({ iceRestart: true });
},
- function PC_LOCAL_EXPECT_ICE_CHECKING(test) {
- test.pcLocal.expectIceChecking();
+ // Make sure we don't get the end of gathering racing against the
+ // setting of the new offer
+ function PC_LOCAL_WAIT_FOR_END_OF_TRICKLE(test) {
+ return test.pcLocal.endOfTrickleIce;
+ },
+ function PC_LOCAL_SETUP_ICE_HANDLER(test) {
+ test.pcLocal.setupIceCandidateHandler(test);
},
- function PC_REMOTE_EXPECT_ICE_CHECKING(test) {
- test.pcRemote.expectIceChecking();
- }
]
);
diff --git a/dom/media/webrtc/tests/mochitests/test_peerConnection_restartIceNoRtcpMux.html b/dom/media/webrtc/tests/mochitests/test_peerConnection_restartIceNoRtcpMux.html
index 5d4780211a..80fd1090bc 100644
--- a/dom/media/webrtc/tests/mochitests/test_peerConnection_restartIceNoRtcpMux.html
+++ b/dom/media/webrtc/tests/mochitests/test_peerConnection_restartIceNoRtcpMux.html
@@ -23,12 +23,15 @@
function PC_LOCAL_SET_OFFER_OPTION(test) {
test.setOfferOptions({ iceRestart: true });
},
- function PC_LOCAL_EXPECT_ICE_CHECKING(test) {
- test.pcLocal.expectIceChecking();
+ // Make sure we don't get the end of gathering racing against the
+ // setting of the new offer
+ function PC_LOCAL_WAIT_FOR_END_OF_TRICKLE(test) {
+ return test.pcLocal.endOfTrickleIce;
+ },
+ // Expect gathering to start again
+ function PC_LOCAL_SETUP_ICE_HANDLER(test) {
+ test.pcLocal.setupIceCandidateHandler(test);
},
- function PC_REMOTE_EXPECT_ICE_CHECKING(test) {
- test.pcRemote.expectIceChecking();
- }
]
);
diff --git a/dom/media/webrtc/tests/mochitests/test_peerConnection_sillyCodecPriorities.html b/dom/media/webrtc/tests/mochitests/test_peerConnection_sillyCodecPriorities.html
index c8354356b0..aa0644ebbb 100644
--- a/dom/media/webrtc/tests/mochitests/test_peerConnection_sillyCodecPriorities.html
+++ b/dom/media/webrtc/tests/mochitests/test_peerConnection_sillyCodecPriorities.html
@@ -15,12 +15,12 @@
visible: true
});
- function makeCodecTopPriority(sdp, codec) {
+ function makeCodecTopPriority({type, sdp}, codec) {
const ptToMove = sdputils.findCodecId(sdp, codec);
- return sdp.replace(
+ return {type, sdp: sdp.replace(
// m=video port type pts ptToMove more-pts?
new RegExp(`(m=video [^ ]+ [^ ]+)(.*)( ${ptToMove})( [^ ]+)?`, "g"),
- '$1$3$2$4');
+ '$1$3$2$4')};
}
function isCodecFirst(sdp, codec) {
@@ -34,8 +34,7 @@
const stream = await navigator.mediaDevices.getUserMedia({ video: true });
const sender = pc1.addTrack(stream.getTracks()[0]);
await pc1.setLocalDescription();
- let mungedOffer = pc1.localDescription;
- mungedOffer.sdp = makeCodecTopPriority(mungedOffer.sdp, codec);
+ const mungedOffer = makeCodecTopPriority(pc1.localDescription, codec);
await pc2.setRemoteDescription(mungedOffer);
await pc2.setLocalDescription();
await pc1.setRemoteDescription(pc2.localDescription);
@@ -51,8 +50,7 @@
await pc1.setLocalDescription();
await pc2.setRemoteDescription(pc1.localDescription);
await pc2.setLocalDescription();
- let mungedAnswer = pc2.localDescription;
- mungedAnswer.sdp = makeCodecTopPriority(mungedAnswer.sdp, codec);
+ const mungedAnswer = makeCodecTopPriority(pc2.localDescription, codec);
await pc1.setRemoteDescription(mungedAnswer);
is(isCodecFirst((await pc1.createOffer()).sdp, codec), !isPseudoCodec,
"Top-priority codecs should come first in reoffers, unless they are pseudo codecs (eg; ulpfec)");
diff --git a/dom/media/webrtc/tests/mochitests/test_peerConnection_stats_relayProtocol.html b/dom/media/webrtc/tests/mochitests/test_peerConnection_stats_relayProtocol.html
index cdc328fd2b..5146d423a6 100644
--- a/dom/media/webrtc/tests/mochitests/test_peerConnection_stats_relayProtocol.html
+++ b/dom/media/webrtc/tests/mochitests/test_peerConnection_stats_relayProtocol.html
@@ -23,6 +23,8 @@ if (!("mediaDevices" in navigator)) {
await pushPrefs(
['media.peerconnection.nat_simulator.filtering_type', 'ENDPOINT_INDEPENDENT'],
['media.peerconnection.nat_simulator.mapping_type', 'ENDPOINT_INDEPENDENT'],
+ // The above triggers warning about 5 ICE servers
+ ['media.peerconnection.treat_warnings_as_errors', false],
['media.getusermedia.insecure.enabled', true]);
const test = new PeerConnectionTest(options);
makeOffererNonTrickle(test.chain);
diff --git a/dom/media/webrtc/tests/mochitests/test_peerConnection_threeUnbundledConnections.html b/dom/media/webrtc/tests/mochitests/test_peerConnection_threeUnbundledConnections.html
index 75f0d12463..8627590b65 100644
--- a/dom/media/webrtc/tests/mochitests/test_peerConnection_threeUnbundledConnections.html
+++ b/dom/media/webrtc/tests/mochitests/test_peerConnection_threeUnbundledConnections.html
@@ -98,10 +98,10 @@ runNetworkTest(async () => {
//info("Original OFFER: " + JSON.stringify(offer));
offer.sdp = sdputils.removeBundle(offer.sdp);
//info("OFFER w/o BUNDLE: " + JSON.stringify(offer));
- const offerAudio = new RTCSessionDescription(JSON.parse(JSON.stringify(offer)));
+ const offerAudio = JSON.parse(JSON.stringify(offer));
offerAudio.sdp = offerAudio.sdp.replace('m=video 9', 'm=video 0');
//info("offerAudio: " + JSON.stringify(offerAudio));
- const offerVideo = new RTCSessionDescription(JSON.parse(JSON.stringify(offer)));
+ const offerVideo = JSON.parse(JSON.stringify(offer));
offerVideo.sdp = offerVideo.sdp.replace('m=audio 9', 'm=audio 0');
//info("offerVideo: " + JSON.stringify(offerVideo));
diff --git a/dom/media/webrtc/tests/mochitests/test_peerConnection_throwInCallbacks.html b/dom/media/webrtc/tests/mochitests/test_peerConnection_throwInCallbacks.html
index c476c60161..342b72a5e1 100644
--- a/dom/media/webrtc/tests/mochitests/test_peerConnection_throwInCallbacks.html
+++ b/dom/media/webrtc/tests/mochitests/test_peerConnection_throwInCallbacks.html
@@ -11,7 +11,12 @@
title: "Throw in PeerConnection callbacks"
});
-runNetworkTest(function () {
+runNetworkTest(async function () {
+ // Tests trigger warnings
+ await SpecialPowers.pushPrefEnv({
+ set: [['media.peerconnection.treat_warnings_as_errors', false]]
+ });
+
let finish;
const onfinished = new Promise(r => finish = async () => {
window.onerror = oldOnError;
diff --git a/dom/media/webrtc/tests/mochitests/test_peerConnection_verifyDescriptions.html b/dom/media/webrtc/tests/mochitests/test_peerConnection_verifyDescriptions.html
index f685f7c99a..8c12a50942 100644
--- a/dom/media/webrtc/tests/mochitests/test_peerConnection_verifyDescriptions.html
+++ b/dom/media/webrtc/tests/mochitests/test_peerConnection_verifyDescriptions.html
@@ -8,49 +8,70 @@
<script type="application/javascript">
createHTML({
bug: "1264479",
- title: "PeerConnection verify current and pending descriptions"
+ title: "PeerConnection verify current and pending descriptions in legacy mode"
});
- const pc1 = new RTCPeerConnection();
- const pc2 = new RTCPeerConnection();
+ // Mostly covered by WPT tests these days, except for in our legacy mode
- var add = (pc, can, failed) => can && pc.addIceCandidate(can).catch(failed);
- pc1.onicecandidate = e => add(pc2, e.candidate, generateErrorCallback());
- pc2.onicecandidate = e => add(pc1, e.candidate, generateErrorCallback());
+ const isSimilarDescription = (d1, d2, msg) => {
+ isnot(d1, d2, msg + " — not the same object");
+ is(d1.type, d2.type, msg + " — but same type");
+ is(d1.sdp, d2.sdp, msg + " — and same sdp");
+ }
+ runNetworkTest(async () => {
+ await SpecialPowers.pushPrefEnv({
+ set: [['media.peerconnection.description.legacy.enabled', true]]
+ });
+
+ const pc1 = new RTCPeerConnection();
+ const pc2 = new RTCPeerConnection();
+
+ const add = (pc, can, failed) => can && pc.addIceCandidate(can).catch(failed);
+ pc1.onicecandidate = e => add(pc2, e.candidate, generateErrorCallback());
+ pc2.onicecandidate = e => add(pc1, e.candidate, generateErrorCallback());
- runNetworkTest(function() {
const v1 = createMediaElement('video', 'v1');
const v2 = createMediaElement('video', 'v2');
- return navigator.mediaDevices.getUserMedia({ video: true, audio: true })
- .then(stream => (v1.srcObject = stream).getTracks().forEach(t => pc1.addTrack(t, stream)))
- .then(() => pc1.createOffer({})) // check that createOffer accepts arg.
- .then(offer => pc1.setLocalDescription(offer))
- .then(() => {
- ok(!pc1.currentLocalDescription, "pc1 currentLocalDescription is empty");
- ok(pc1.pendingLocalDescription, "pc1 pendingLocalDescription is set");
- ok(pc1.localDescription, "pc1 localDescription is set");
- })
- .then(() => pc2.setRemoteDescription(pc1.localDescription))
- .then(() => {
- ok(!pc2.currentRemoteDescription, "pc2 currentRemoteDescription is empty");
- ok(pc2.pendingRemoteDescription, "pc2 pendingRemoteDescription is set");
- ok(pc2.remoteDescription, "pc2 remoteDescription is set");
- })
- .then(() => pc2.createAnswer({})) // check that createAnswer accepts arg.
- .then(answer => pc2.setLocalDescription(answer))
- .then(() => {
- ok(pc2.currentLocalDescription, "pc2 currentLocalDescription is set");
- ok(!pc2.pendingLocalDescription, "pc2 pendingLocalDescription is empty");
- ok(pc2.localDescription, "pc2 localDescription is set");
- })
- .then(() => pc1.setRemoteDescription(pc2.localDescription))
- .then(() => {
- ok(pc1.currentRemoteDescription, "pc1 currentRemoteDescription is set");
- ok(!pc1.pendingRemoteDescription, "pc1 pendingRemoteDescription is empty");
- ok(pc1.remoteDescription, "pc1 remoteDescription is set");
+ const stream = await navigator.mediaDevices.getUserMedia({
+ video: true, audio: true
});
+ v1.srcObject = stream;
+ for (const track of stream.getTracks()) {
+ pc1.addTrack(track, stream);
+ }
+ await pc1.setLocalDescription();
+ is(pc1.currentLocalDescription, null, "pc1 currentLocalDescription is null");
+ ok(pc1.pendingLocalDescription, "pc1 pendingLocalDescription is set");
+ ok(pc1.localDescription, "pc1 localDescription is set");
+ isSimilarDescription(pc1.pendingLocalDescription, pc1.pendingLocalDescription, "pendingLocalDescription");
+ isSimilarDescription(pc1.localDescription, pc1.localDescription, "localDescription");
+ isSimilarDescription(pc1.localDescription, pc1.pendingLocalDescription, "local and pending");
+
+ await pc2.setRemoteDescription(pc1.localDescription);
+ is(pc2.currentRemoteDescription, null, "pc2 currentRemoteDescription is null");
+ ok(pc2.pendingRemoteDescription, "pc2 pendingRemoteDescription is set");
+ ok(pc2.remoteDescription, "pc2 remoteDescription is set");
+ isSimilarDescription(pc2.pendingRemoteDescription, pc2.pendingRemoteDescription, "pendingRemoteDescription");
+ isSimilarDescription(pc2.remoteDescription, pc2.remoteDescription, "remoteDescription");
+ isSimilarDescription(pc2.remoteDescription, pc2.pendingRemoteDescription, "remote and pending");
+
+ await pc2.setLocalDescription();
+ ok(pc2.currentLocalDescription, "pc2 currentLocalDescription is set");
+ is(pc2.pendingLocalDescription, null, "pc2 pendingLocalDescription is null");
+ ok(pc2.localDescription, "pc2 localDescription is set");
+ isSimilarDescription(pc2.currentLocalDescription, pc2.currentLocalDescription, "currentLocalDescription");
+ isSimilarDescription(pc2.localDescription, pc2.localDescription, "localDescription");
+ isSimilarDescription(pc2.localDescription, pc2.currentLocalDescription, "local and current");
+
+ await pc1.setRemoteDescription(pc2.localDescription);
+ ok(pc1.currentRemoteDescription, "pc1 currentRemoteDescription is set");
+ is(pc1.pendingRemoteDescription, null, "pc1 pendingRemoteDescription is null");
+ ok(pc1.remoteDescription, "pc1 remoteDescription is set");
+ isSimilarDescription(pc1.currentRemoteDescription, pc1.currentRemoteDescription, "currentRemoteDescription");
+ isSimilarDescription(pc1.remoteDescription, pc1.remoteDescription, "remoteDescription");
+ isSimilarDescription(pc1.remoteDescription, pc1.currentRemoteDescription, "remote and current");
});
</script>
</pre>