Update web-platform-tests to revision c2b30ef30749b6a8f2cc832761dfe011e63d5e94

This commit is contained in:
WPT Sync Bot 2018-10-05 21:34:34 -04:00
parent 987e376ca7
commit eda9b9b73a
142 changed files with 3513 additions and 851 deletions

View file

@ -463,11 +463,13 @@ function getUserMediaTracksAndStreams(count, type = 'audio') {
});
}
// Performs an offer exchange caller -> callee.
async function exchangeOffer(caller, callee) {
const offer = await caller.createOffer();
await caller.setLocalDescription(offer);
return callee.setRemoteDescription(offer);
}
// Performs an answer exchange caller -> callee.
async function exchangeAnswer(caller, callee) {
const answer = await callee.createAnswer();
await callee.setLocalDescription(answer);
@ -477,7 +479,18 @@ async function exchangeOfferAnswer(caller, callee) {
await exchangeOffer(caller, callee);
return exchangeAnswer(caller, callee);
}
// The returned promise is resolved with caller's ontrack event.
async function exchangeAnswerAndListenToOntrack(t, caller, callee) {
const ontrackPromise = addEventListenerPromise(t, caller, 'track');
await exchangeAnswer(caller, callee);
return ontrackPromise;
}
// The returned promise is resolved with callee's ontrack event.
async function exchangeOfferAndListenToOntrack(t, caller, callee) {
const ontrackPromise = addEventListenerPromise(t, callee, 'track');
await exchangeOffer(caller, callee);
return ontrackPromise;
}
// The resolver has a |promise| that can be resolved or rejected using |resolve|
// or |reject|.
@ -503,3 +516,27 @@ function addEventListenerPromise(t, target, type, listener) {
}));
});
}
function createPeerConnectionWithCleanup(t) {
const pc = new RTCPeerConnection();
t.add_cleanup(() => pc.close());
return pc;
}
async function createTrackAndStreamWithCleanup(t, kind = 'audio') {
let constraints = {};
constraints[kind] = true;
const stream = await navigator.mediaDevices.getUserMedia(constraints);
const [track] = stream.getTracks();
t.add_cleanup(() => track.stop());
return [track, stream];
}
function findTransceiverForSender(pc, sender) {
const transceivers = pc.getTransceivers();
for (let i = 0; i < transceivers.length; ++i) {
if (transceivers[i].sender == sender)
return transceivers[i];
}
return null;
}

View file

@ -0,0 +1,98 @@
<!doctype html>
<meta charset=utf-8>
<title>RTCPeerConnection-transceivers.https.html</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="RTCPeerConnection-helper.js"></script>
<script>
'use strict';
// The following helper functions are called from RTCPeerConnection-helper.js:
// exchangeOffer
// exchangeOfferAndListenToOntrack
// exchangeAnswer
// exchangeAnswerAndListenToOntrack
// addEventListenerPromise
// createPeerConnectionWithCleanup
// createTrackAndStreamWithCleanup
// findTransceiverForSender
promise_test(async t => {
const pc1 = createPeerConnectionWithCleanup(t);
pc1.addTrack(... await createTrackAndStreamWithCleanup(t));
const pc2 = createPeerConnectionWithCleanup(t);
exchangeIceCandidates(pc1, pc2);
const unmuteResolver = new Resolver();
let remoteTrack = null;
// The unmuting it timing sensitive so we hook up to the event directly
// instead of wrapping it in an EventWatcher which uses promises.
pc2.ontrack = t.step_func(e => {
remoteTrack = e.track;
assert_true(remoteTrack.muted, 'track is muted in ontrack');
remoteTrack.onunmute = t.step_func(e => {
assert_false(remoteTrack.muted, 'track is unmuted in onunmute');
unmuteResolver.resolve();
});
pc2.ontrack = t.step_func(e => {
assert_unreached('ontrack fired unexpectedly');
});
});
await exchangeOfferAnswer(pc1, pc2);
await unmuteResolver.promise;
}, 'ontrack: track goes from muted to unmuted');
promise_test(async t => {
const pc1 = createPeerConnectionWithCleanup(t);
const pc1Sender = pc1.addTrack(... await createTrackAndStreamWithCleanup(t));
const localTransceiver = findTransceiverForSender(pc1, pc1Sender);
const pc2 = createPeerConnectionWithCleanup(t);
exchangeIceCandidates(pc1, pc2);
const e = await exchangeOfferAndListenToOntrack(t, pc1, pc2);
await exchangeAnswer(pc1, pc2);
const muteWatcher = new EventWatcher(t, e.track, ['mute']);
const mutePromise = muteWatcher.wait_for('mute');
localTransceiver.direction = 'inactive';
await exchangeOfferAnswer(pc1, pc2);
await mutePromise;
}, 'Changing transceiver direction to \'inactive\' mutes the remote track');
promise_test(async t => {
const pc1 = createPeerConnectionWithCleanup(t);
const pc1Sender = pc1.addTrack(... await createTrackAndStreamWithCleanup(t));
const localTransceiver = findTransceiverForSender(pc1, pc1Sender);
const pc2 = createPeerConnectionWithCleanup(t);
exchangeIceCandidates(pc1, pc2);
const e = await exchangeOfferAndListenToOntrack(t, pc1, pc2);
await exchangeAnswer(pc1, pc2);
localTransceiver.direction = 'inactive';
await exchangeOfferAnswer(pc1, pc2);
const unmuteWatcher = new EventWatcher(t, e.track, ['unmute']);
const unmutePromise = unmuteWatcher.wait_for('unmute');
localTransceiver.direction = 'sendrecv';
await exchangeOfferAnswer(pc1, pc2);
await unmutePromise;
}, 'Changing transceiver direction to \'sendrecv\' unmutes the remote track');
promise_test(async t => {
const pc1 = createPeerConnectionWithCleanup(t);
const pc1Sender = pc1.addTrack(... await createTrackAndStreamWithCleanup(t));
const localTransceiver = findTransceiverForSender(pc1, pc1Sender);
const pc2 = createPeerConnectionWithCleanup(t);
exchangeIceCandidates(pc1, pc2);
const e = await exchangeOfferAndListenToOntrack(t, pc1, pc2);
await exchangeAnswer(pc1, pc2);
const muteWatcher = new EventWatcher(t, e.track, ['mute']);
const mutePromise = muteWatcher.wait_for('mute');
pc2.close();
await mutePromise;
}, 'pc.close() mutes remote tracks');
</script>

View file

@ -8,59 +8,14 @@
'use strict';
// The following helper functions are called from RTCPeerConnection-helper.js:
// exchangeOffer
// exchangeOfferAndListenToOntrack
// exchangeAnswer
// exchangeAnswerAndListenToOntrack
// addEventListenerPromise
function createPeerConnectionWithCleanup(t) {
const pc = new RTCPeerConnection();
t.add_cleanup(() => pc.close());
return pc;
}
async function createTrackAndStreamWithCleanup(t, kind = 'audio') {
let constraints = {};
constraints[kind] = true;
const stream = await navigator.mediaDevices.getUserMedia(constraints);
const [track] = stream.getTracks();
t.add_cleanup(() => track.stop());
return [track, stream];
}
function findTransceiverForSender(pc, sender) {
const transceivers = pc.getTransceivers();
for (let i = 0; i < transceivers.length; ++i) {
if (transceivers[i].sender == sender)
return transceivers[i];
}
return null;
}
// Performs an offer exchange pc1 -> pc2.
async function exchangeOffer(pc1, pc2) {
const offer = await pc1.createOffer();
await pc1.setLocalDescription(offer);
await pc2.setRemoteDescription(offer);
}
// The returned promise is resolved with pc2's ontrack event.
async function exchangeOfferAndListenToOntrack(t, pc1, pc2) {
const ontrackPromise = addEventListenerPromise(t, pc2, 'track');
await exchangeOffer(pc1, pc2);
return ontrackPromise;
}
// Performs an answer exchange pc2 -> pc1.
async function exchangeAnswer(pc1, pc2) {
const answer = await pc2.createAnswer();
await pc2.setLocalDescription(answer);
await pc1.setRemoteDescription(answer);
}
// The returned promise is resolved with pc1's ontrack event.
async function exchangeAnswerAndListenToOntrack(t, pc1, pc2) {
const ontrackPromise = addEventListenerPromise(t, pc1, 'track');
await exchangeAnswer(pc1, pc2);
return ontrackPromise;
}
// createPeerConnectionWithCleanup
// createTrackAndStreamWithCleanup
// findTransceiverForSender
promise_test(async t => {
const pc = createPeerConnectionWithCleanup(t);
@ -493,4 +448,20 @@ promise_test(async t => {
assert_true(transceiver.stopped);
}, 'Closing the PC stops the transceivers');
promise_test(async t => {
const pc1 = createPeerConnectionWithCleanup(t);
const pc1Sender = pc1.addTrack(... await createTrackAndStreamWithCleanup(t));
const localTransceiver = findTransceiverForSender(pc1, pc1Sender);
const pc2 = createPeerConnectionWithCleanup(t);
exchangeIceCandidates(pc1, pc2);
const e = await exchangeOfferAndListenToOntrack(t, pc1, pc2);
await exchangeAnswer(pc1, pc2);
localTransceiver.direction = 'inactive';
await exchangeOfferAnswer(pc1, pc2);
localTransceiver.direction = 'sendrecv';
await exchangeOfferAndListenToOntrack(t, pc1, pc2);
}, 'Changing transceiver direction to \'sendrecv\' makes ontrack fire');
</script>