mirror of
https://github.com/servo/servo.git
synced 2025-10-04 02:29:12 +01:00
Update web-platform-tests to revision 60220357131c65146444da1f54624d5b54d0975d
This commit is contained in:
parent
c45192614c
commit
775b784f79
2144 changed files with 58115 additions and 29658 deletions
|
@ -1,3 +1,4 @@
|
|||
spec: https://w3c.github.io/webrtc-pc/
|
||||
suggested_reviewers:
|
||||
- snuggs
|
||||
- agouaillard
|
||||
|
|
|
@ -119,7 +119,9 @@
|
|||
const offer = await caller.createOffer();
|
||||
await caller.setLocalDescription(offer);
|
||||
await callee.setRemoteDescription(offer);
|
||||
const track = generateMediaStreamTrack('audio');
|
||||
const stream = await navigator.mediaDevices.getUserMedia({audio: true});
|
||||
t.add_cleanup(() => stream.getTracks().forEach(track => track.stop()));
|
||||
const [track] = stream.getTracks();
|
||||
callee.addTrack(track);
|
||||
const answer = await callee.createAnswer();
|
||||
await callee.setLocalDescription(answer);
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
<title>RTCPeerConnection addTrack does not deadlock</title>
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<script src="RTCPeerConnection-helper.js"></script>
|
||||
<script>
|
||||
'use strict';
|
||||
|
||||
|
@ -12,7 +13,7 @@
|
|||
promise_test(async t => {
|
||||
const pc1 = new RTCPeerConnection();
|
||||
t.add_cleanup(() => pc1.close());
|
||||
const stream = await navigator.mediaDevices.getUserMedia(
|
||||
const stream = await getNoiseStream(
|
||||
{audio: false, video: true});
|
||||
t.add_cleanup(() => stream.getTracks().forEach(track => track.stop()));
|
||||
const videoTrack = stream.getVideoTracks()[0];
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
// https://w3c.github.io/webrtc-pc/archives/20170605/webrtc.html
|
||||
|
||||
// The following helper functions are called from RTCPeerConnection-helper.js:
|
||||
// generateMediaStreamTrack
|
||||
// getNoiseStream()
|
||||
|
||||
/*
|
||||
5.1. RTCPeerConnection Interface Extensions
|
||||
|
@ -41,7 +41,7 @@
|
|||
const pc = new RTCPeerConnection();
|
||||
t.add_cleanup(() => pc.close());
|
||||
|
||||
const stream = await navigator.mediaDevices.getUserMedia({ audio: true });
|
||||
const stream = await getNoiseStream({ audio: true });
|
||||
t.add_cleanup(() => stream.getTracks().forEach(track => track.stop()));
|
||||
const [track] = stream.getTracks();
|
||||
|
||||
|
@ -64,7 +64,7 @@
|
|||
const pc = new RTCPeerConnection();
|
||||
t.add_cleanup(() => pc.close());
|
||||
|
||||
const stream = await navigator.mediaDevices.getUserMedia({ audio: true });
|
||||
const stream = await getNoiseStream({ audio: true });
|
||||
t.add_cleanup(() => stream.getTracks().forEach(track => track.stop()));
|
||||
const [track] = stream.getTracks();
|
||||
|
||||
|
@ -96,7 +96,7 @@
|
|||
const pc = new RTCPeerConnection();
|
||||
t.add_cleanup(() => pc.close());
|
||||
|
||||
const stream = await navigator.mediaDevices.getUserMedia({ audio: true });
|
||||
const stream = await getNoiseStream({ audio: true });
|
||||
t.add_cleanup(() => stream.getTracks().forEach(track => track.stop()));
|
||||
const [track] = stream.getTracks();
|
||||
|
||||
|
@ -113,7 +113,7 @@
|
|||
const pc = new RTCPeerConnection();
|
||||
t.add_cleanup(() => pc.close());
|
||||
|
||||
const stream = await navigator.mediaDevices.getUserMedia({ audio: true });
|
||||
const stream = await getNoiseStream({ audio: true });
|
||||
t.add_cleanup(() => stream.getTracks().forEach(track => track.stop()));
|
||||
const [track] = stream.getTracks();
|
||||
|
||||
|
@ -137,7 +137,7 @@
|
|||
const pc = new RTCPeerConnection();
|
||||
t.add_cleanup(() => pc.close());
|
||||
|
||||
const stream = await navigator.mediaDevices.getUserMedia({ audio: true });
|
||||
const stream = await getNoiseStream({ audio: true });
|
||||
t.add_cleanup(() => stream.getTracks().forEach(track => track.stop()));
|
||||
const [track] = stream.getTracks();
|
||||
|
||||
|
@ -171,7 +171,9 @@
|
|||
assert_equals(transceiver.sender.track, null);
|
||||
assert_equals(transceiver.direction, 'recvonly');
|
||||
|
||||
const track = generateMediaStreamTrack('audio');
|
||||
const stream = await navigator.mediaDevices.getUserMedia({audio: true});
|
||||
t.add_cleanup(() => stream.getTracks().forEach(track => track.stop()));
|
||||
const [track] = stream.getTracks();
|
||||
const sender = pc.addTrack(track);
|
||||
|
||||
assert_equals(sender, transceiver.sender);
|
||||
|
@ -188,7 +190,9 @@
|
|||
assert_equals(transceiver.sender.track, null);
|
||||
assert_equals(transceiver.direction, 'sendrecv');
|
||||
|
||||
const track = generateMediaStreamTrack('audio');
|
||||
const stream = await navigator.mediaDevices.getUserMedia({audio: true});
|
||||
t.add_cleanup(() => stream.getTracks().forEach(track => track.stop()));
|
||||
const [track] = stream.getTracks();
|
||||
const sender = pc.addTrack(track);
|
||||
|
||||
assert_equals(sender.track, track);
|
||||
|
@ -201,8 +205,10 @@
|
|||
const callee = new RTCPeerConnection();
|
||||
t.add_cleanup(() => callee.close());
|
||||
|
||||
const transceiver =
|
||||
caller.addTransceiver(generateMediaStreamTrack('audio'));
|
||||
const stream = await navigator.mediaDevices.getUserMedia({audio: true});
|
||||
t.add_cleanup(() => stream.getTracks().forEach(track => track.stop()));
|
||||
const [track] = stream.getTracks();
|
||||
const transceiver = caller.addTransceiver(track);
|
||||
{
|
||||
const offer = await caller.createOffer();
|
||||
await caller.setLocalDescription(offer);
|
||||
|
@ -227,7 +233,7 @@
|
|||
|
||||
// |transceiver.sender| is currently not used for sending, but it should not
|
||||
// be reused because it has been used for sending before.
|
||||
const sender = caller.addTrack(generateMediaStreamTrack('audio'));
|
||||
const sender = caller.addTrack(track);
|
||||
assert_true(sender != null);
|
||||
assert_not_equals(sender, transceiver.sender);
|
||||
}, 'addTrack with existing sender that has been used to send should create new sender');
|
||||
|
@ -240,7 +246,9 @@
|
|||
assert_equals(transceiver.sender.track, null);
|
||||
assert_equals(transceiver.direction, 'recvonly');
|
||||
|
||||
const track = generateMediaStreamTrack('audio');
|
||||
const stream = await navigator.mediaDevices.getUserMedia({audio: true});
|
||||
t.add_cleanup(() => stream.getTracks().forEach(track => track.stop()));
|
||||
const [track] = stream.getTracks();
|
||||
const sender = pc.addTrack(track);
|
||||
|
||||
assert_equals(sender.track, track);
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
// generateAnswer()
|
||||
// countAudioLine()
|
||||
// countVideoLine()
|
||||
// assert_session_desc_equals()
|
||||
// assert_session_desc_similar()
|
||||
|
||||
/*
|
||||
* 4.3.2. createOffer()
|
||||
|
@ -54,8 +54,8 @@
|
|||
pc.setLocalDescription(offer)
|
||||
.then(() => {
|
||||
assert_equals(pc.signalingState, 'have-local-offer');
|
||||
assert_session_desc_equals(pc.localDescription, offer);
|
||||
assert_session_desc_equals(pc.pendingLocalDescription, offer);
|
||||
assert_session_desc_similar(pc.localDescription, offer);
|
||||
assert_session_desc_similar(pc.pendingLocalDescription, offer);
|
||||
assert_equals(pc.currentLocalDescription, null);
|
||||
|
||||
assert_array_equals(states, ['have-local-offer']);
|
||||
|
|
|
@ -78,10 +78,13 @@
|
|||
});
|
||||
}, 'getStats() with track added via addTrack should succeed');
|
||||
|
||||
promise_test(t => {
|
||||
promise_test(async t => {
|
||||
const pc = new RTCPeerConnection();
|
||||
t.add_cleanup(() => pc.close());
|
||||
const track = generateMediaStreamTrack('audio');
|
||||
|
||||
const stream = await navigator.mediaDevices.getUserMedia({audio: true});
|
||||
t.add_cleanup(() => stream.getTracks().forEach(track => track.stop()));
|
||||
const [track] = stream.getTracks();
|
||||
pc.addTransceiver(track);
|
||||
|
||||
return pc.getStats(track);
|
||||
|
@ -238,7 +241,7 @@
|
|||
|
||||
const dataChannel = pc1.createDataChannel('test-channel');
|
||||
|
||||
return navigator.mediaDevices.getUserMedia({
|
||||
return getNoiseStream({
|
||||
audio: true,
|
||||
video: true
|
||||
})
|
||||
|
|
|
@ -93,12 +93,12 @@ function isSimilarSessionDescription(sessionDesc1, sessionDesc2) {
|
|||
}
|
||||
}
|
||||
|
||||
function assert_session_desc_equals(sessionDesc1, sessionDesc2) {
|
||||
function assert_session_desc_similar(sessionDesc1, sessionDesc2) {
|
||||
assert_true(isSimilarSessionDescription(sessionDesc1, sessionDesc2),
|
||||
'Expect both session descriptions to have the same count of media lines');
|
||||
}
|
||||
|
||||
function assert_session_desc_not_equals(sessionDesc1, sessionDesc2) {
|
||||
function assert_session_desc_not_similar(sessionDesc1, sessionDesc2) {
|
||||
assert_false(isSimilarSessionDescription(sessionDesc1, sessionDesc2),
|
||||
'Expect both session descriptions to have different count of media lines');
|
||||
}
|
||||
|
@ -350,12 +350,110 @@ function generateMediaStreamTrack(kind) {
|
|||
return track;
|
||||
}
|
||||
|
||||
// Obtain a MediaStreamTrack of kind using getUserMedia.
|
||||
// These media tracks will be continually updated with deterministic "noise" in
|
||||
// order to ensure UAs do not cease transmission in response to apparent
|
||||
// silence.
|
||||
//
|
||||
// > Many codecs and systems are capable of detecting "silence" and changing
|
||||
// > their behavior in this case by doing things such as not transmitting any
|
||||
// > media.
|
||||
//
|
||||
// Source: https://w3c.github.io/webrtc-pc/#offer-answer-options
|
||||
const trackFactories = {
|
||||
// Share a single context between tests to avoid exceeding resource limits
|
||||
// without requiring explicit destruction.
|
||||
audioContext: null,
|
||||
|
||||
/**
|
||||
* Given a set of requested media types, determine if the user agent is
|
||||
* capable of procedurally generating a suitable media stream.
|
||||
*
|
||||
* @param {object} requested
|
||||
* @param {boolean} [requested.audio] - flag indicating whether the desired
|
||||
* stream should include an audio track
|
||||
* @param {boolean} [requested.video] - flag indicating whether the desired
|
||||
* stream should include a video track
|
||||
*
|
||||
* @returns {boolean}
|
||||
*/
|
||||
canCreate(requested) {
|
||||
const supported = {
|
||||
audio: !!window.MediaStreamAudioDestinationNode,
|
||||
video: !!HTMLCanvasElement.prototype.captureStream
|
||||
};
|
||||
|
||||
return (!requested.audio || supported.audio) &&
|
||||
(!requested.video || supported.video);
|
||||
},
|
||||
|
||||
audio() {
|
||||
const ctx = trackFactories.audioContext = trackFactories.audioContext ||
|
||||
new AudioContext();
|
||||
const oscillator = ctx.createOscillator();
|
||||
const dst = oscillator.connect(ctx.createMediaStreamDestination());
|
||||
oscillator.start();
|
||||
return dst.stream.getAudioTracks()[0];
|
||||
},
|
||||
|
||||
video({width = 640, height = 480} = {}) {
|
||||
const canvas = Object.assign(
|
||||
document.createElement("canvas"), {width, height}
|
||||
);
|
||||
const ctx = canvas.getContext('2d');
|
||||
const stream = canvas.captureStream();
|
||||
|
||||
let count = 0;
|
||||
setInterval(() => {
|
||||
ctx.fillStyle = `rgb(${count%255}, ${count*count%255}, ${count%255})`;
|
||||
count += 1;
|
||||
|
||||
ctx.fillRect(0, 0, width, height);
|
||||
}, 100);
|
||||
|
||||
if (document.body) {
|
||||
document.body.appendChild(canvas);
|
||||
} else {
|
||||
document.addEventListener('DOMContentLoaded', () => {
|
||||
document.body.appendChild(canvas);
|
||||
});
|
||||
}
|
||||
|
||||
return stream.getVideoTracks()[0];
|
||||
}
|
||||
};
|
||||
|
||||
// Generate a MediaStream bearing the specified tracks.
|
||||
//
|
||||
// @param {object} [caps]
|
||||
// @param {boolean} [caps.audio] - flag indicating whether the generated stream
|
||||
// should include an audio track
|
||||
// @param {boolean} [caps.video] - flag indicating whether the generated stream
|
||||
// should include a video track
|
||||
async function getNoiseStream(caps = {}) {
|
||||
if (!trackFactories.canCreate(caps)) {
|
||||
return navigator.mediaDevices.getUserMedia(caps);
|
||||
}
|
||||
const tracks = [];
|
||||
|
||||
if (caps.audio) {
|
||||
tracks.push(trackFactories.audio());
|
||||
}
|
||||
|
||||
if (caps.video) {
|
||||
tracks.push(trackFactories.video());
|
||||
}
|
||||
|
||||
return new MediaStream(tracks);
|
||||
}
|
||||
|
||||
// Obtain a MediaStreamTrack of kind using procedurally-generated streams (and
|
||||
// falling back to `getUserMedia` when the user agent cannot generate the
|
||||
// requested streams).
|
||||
// Return Promise of pair of track and associated mediaStream.
|
||||
// Assumes that there is at least one available device
|
||||
// to generate the track.
|
||||
function getTrackFromUserMedia(kind) {
|
||||
return navigator.mediaDevices.getUserMedia({ [kind]: true })
|
||||
return getNoiseStream({ [kind]: true })
|
||||
.then(mediaStream => {
|
||||
const [track] = mediaStream.getTracks();
|
||||
return [track, mediaStream];
|
||||
|
|
|
@ -12,7 +12,6 @@
|
|||
|
||||
// The following helper functions are called from RTCPeerConnection-helper.js:
|
||||
// generateAnswer
|
||||
// generateMediaStreamTrack
|
||||
|
||||
/*
|
||||
5.1. RTCPeerConnection Interface Extensions
|
||||
|
@ -35,22 +34,23 @@
|
|||
5.1. removeTrack
|
||||
3. If connection's [[isClosed]] slot is true, throw an InvalidStateError.
|
||||
*/
|
||||
test(t => {
|
||||
promise_test(async t => {
|
||||
const pc = new RTCPeerConnection();
|
||||
const track = generateMediaStreamTrack('audio');
|
||||
const stream = await navigator.mediaDevices.getUserMedia({audio: true});
|
||||
t.add_cleanup(() => stream.getTracks().forEach(track => track.stop()));
|
||||
const [track] = stream.getTracks();
|
||||
const transceiver = pc.addTransceiver(track);
|
||||
const { sender } = transceiver;
|
||||
|
||||
pc.close();
|
||||
assert_throws('InvalidStateError', () => pc.removeTrack(sender));
|
||||
|
||||
}, 'addTransceiver - Calling removeTrack when connection is closed should throw InvalidStateError');
|
||||
|
||||
promise_test(async t => {
|
||||
const pc = new RTCPeerConnection();
|
||||
t.add_cleanup(() => pc.close());
|
||||
|
||||
const stream = await navigator.mediaDevices.getUserMedia({ audio: true });
|
||||
const stream = await getNoiseStream({ audio: true });
|
||||
t.add_cleanup(() => stream.getTracks().forEach(track => track.stop()));
|
||||
const [track] = stream.getTracks();
|
||||
const sender = pc.addTrack(track, stream);
|
||||
|
@ -59,23 +59,24 @@
|
|||
assert_throws('InvalidStateError', () => pc.removeTrack(sender));
|
||||
}, 'addTrack - Calling removeTrack when connection is closed should throw InvalidStateError');
|
||||
|
||||
test(t => {
|
||||
promise_test(async t => {
|
||||
const pc = new RTCPeerConnection();
|
||||
const track = generateMediaStreamTrack('audio');
|
||||
const stream = await navigator.mediaDevices.getUserMedia({audio: true});
|
||||
t.add_cleanup(() => stream.getTracks().forEach(track => track.stop()));
|
||||
const [track] = stream.getTracks();
|
||||
const transceiver = pc.addTransceiver(track);
|
||||
const { sender } = transceiver;
|
||||
|
||||
const pc2 = new RTCPeerConnection();
|
||||
pc2.close();
|
||||
assert_throws('InvalidStateError', () => pc2.removeTrack(sender));
|
||||
|
||||
}, 'addTransceiver - Calling removeTrack on different connection that is closed should throw InvalidStateError');
|
||||
|
||||
promise_test(async t => {
|
||||
const pc = new RTCPeerConnection();
|
||||
t.add_cleanup(() => pc.close());
|
||||
|
||||
const stream = await navigator.mediaDevices.getUserMedia({ audio: true });
|
||||
const stream = await getNoiseStream({ audio: true });
|
||||
t.add_cleanup(() => stream.getTracks().forEach(track => track.stop()));
|
||||
const [track] = stream.getTracks();
|
||||
const sender = pc.addTrack(track, stream);
|
||||
|
@ -89,22 +90,23 @@
|
|||
5.1. removeTrack
|
||||
4. If sender was not created by connection, throw an InvalidAccessError.
|
||||
*/
|
||||
test(t => {
|
||||
promise_test(async t => {
|
||||
const pc = new RTCPeerConnection();
|
||||
const track = generateMediaStreamTrack('audio');
|
||||
const stream = await navigator.mediaDevices.getUserMedia({audio: true});
|
||||
t.add_cleanup(() => stream.getTracks().forEach(track => track.stop()));
|
||||
const [track] = stream.getTracks();
|
||||
const transceiver = pc.addTransceiver(track);
|
||||
const { sender } = transceiver;
|
||||
|
||||
const pc2 = new RTCPeerConnection();
|
||||
assert_throws('InvalidAccessError', () => pc2.removeTrack(sender));
|
||||
|
||||
}, 'addTransceiver - Calling removeTrack on different connection should throw InvalidAccessError');
|
||||
|
||||
promise_test(async t => {
|
||||
const pc = new RTCPeerConnection();
|
||||
t.add_cleanup(() => pc.close());
|
||||
|
||||
const stream = await navigator.mediaDevices.getUserMedia({ audio: true });
|
||||
const stream = await getNoiseStream({ audio: true });
|
||||
t.add_cleanup(() => stream.getTracks().forEach(track => track.stop()));
|
||||
const [track] = stream.getTracks();
|
||||
const sender = pc.addTrack(track, stream);
|
||||
|
@ -117,9 +119,11 @@
|
|||
5.1. removeTrack
|
||||
7. Set sender.track to null.
|
||||
*/
|
||||
test(t => {
|
||||
promise_test(async t => {
|
||||
const pc = new RTCPeerConnection();
|
||||
const track = generateMediaStreamTrack('audio');
|
||||
const stream = await navigator.mediaDevices.getUserMedia({audio: true});
|
||||
t.add_cleanup(() => stream.getTracks().forEach(track => track.stop()));
|
||||
const [track] = stream.getTracks();
|
||||
const transceiver = pc.addTransceiver(track);
|
||||
const { sender } = transceiver;
|
||||
|
||||
|
@ -130,14 +134,13 @@
|
|||
pc.removeTrack(sender);
|
||||
assert_equals(sender.track, null);
|
||||
assert_equals(transceiver.direction, 'recvonly');
|
||||
|
||||
}, 'addTransceiver - Calling removeTrack with valid sender should set sender.track to null');
|
||||
|
||||
promise_test(async t => {
|
||||
const pc = new RTCPeerConnection();
|
||||
t.add_cleanup(() => pc.close());
|
||||
|
||||
const stream = await navigator.mediaDevices.getUserMedia({ audio: true });
|
||||
const stream = await getNoiseStream({ audio: true });
|
||||
t.add_cleanup(() => stream.getTracks().forEach(track => track.stop()));
|
||||
const [track] = stream.getTracks();
|
||||
const sender = pc.addTrack(track, stream);
|
||||
|
@ -159,7 +162,9 @@
|
|||
t.add_cleanup(() => caller.close());
|
||||
const callee = new RTCPeerConnection();
|
||||
t.add_cleanup(() => callee.close());
|
||||
const track = generateMediaStreamTrack('audio');
|
||||
const stream = await navigator.mediaDevices.getUserMedia({audio: true});
|
||||
t.add_cleanup(() => stream.getTracks().forEach(track => track.stop()));
|
||||
const [track] = stream.getTracks();
|
||||
const transceiver = caller.addTransceiver(track);
|
||||
const { sender } = transceiver;
|
||||
|
||||
|
@ -192,7 +197,9 @@
|
|||
promise_test(async t => {
|
||||
const pc = new RTCPeerConnection();
|
||||
t.add_cleanup(() => pc.close());
|
||||
const track = generateMediaStreamTrack('audio');
|
||||
const stream = await navigator.mediaDevices.getUserMedia({audio: true});
|
||||
t.add_cleanup(() => stream.getTracks().forEach(track => track.stop()));
|
||||
const [track] = stream.getTracks();
|
||||
const transceiver = pc.addTransceiver(track, { direction: 'sendonly' });
|
||||
const { sender } = transceiver;
|
||||
|
||||
|
@ -224,7 +231,9 @@
|
|||
t.add_cleanup(() => caller.close());
|
||||
const callee = new RTCPeerConnection();
|
||||
t.add_cleanup(() => callee.close());
|
||||
const track = generateMediaStreamTrack('audio');
|
||||
const stream = await navigator.mediaDevices.getUserMedia({audio: true});
|
||||
t.add_cleanup(() => stream.getTracks().forEach(track => track.stop()));
|
||||
const [track] = stream.getTracks();
|
||||
const transceiver = caller.addTransceiver(track, { direction: 'recvonly' });
|
||||
const { sender } = transceiver;
|
||||
|
||||
|
@ -256,7 +265,9 @@
|
|||
promise_test(async t => {
|
||||
const pc = new RTCPeerConnection();
|
||||
t.add_cleanup(() => pc.close());
|
||||
const track = generateMediaStreamTrack('audio');
|
||||
const stream = await navigator.mediaDevices.getUserMedia({audio: true});
|
||||
t.add_cleanup(() => stream.getTracks().forEach(track => track.stop()));
|
||||
const [track] = stream.getTracks();
|
||||
const transceiver = pc.addTransceiver(track, { direction: 'inactive' });
|
||||
const { sender } = transceiver;
|
||||
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
// The following helper functions are called from RTCPeerConnection-helper.js:
|
||||
// generateOffer
|
||||
// generateAnswer
|
||||
// assert_session_desc_equals
|
||||
// assert_session_desc_similar
|
||||
|
||||
/*
|
||||
4.3.2. Interface Definition
|
||||
|
@ -73,11 +73,11 @@
|
|||
pc.setLocalDescription(answer)
|
||||
.then(() => {
|
||||
assert_equals(pc.signalingState, 'stable');
|
||||
assert_session_desc_equals(pc.localDescription, answer);
|
||||
assert_session_desc_equals(pc.remoteDescription, offer);
|
||||
assert_session_desc_similar(pc.localDescription, answer);
|
||||
assert_session_desc_similar(pc.remoteDescription, offer);
|
||||
|
||||
assert_session_desc_equals(pc.currentLocalDescription, answer);
|
||||
assert_session_desc_equals(pc.currentRemoteDescription, offer);
|
||||
assert_session_desc_similar(pc.currentLocalDescription, answer);
|
||||
assert_session_desc_similar(pc.currentRemoteDescription, offer);
|
||||
|
||||
assert_equals(pc.pendingLocalDescription, null);
|
||||
assert_equals(pc.pendingRemoteDescription, null);
|
||||
|
@ -105,11 +105,11 @@
|
|||
pc.setLocalDescription({ type: 'answer' })
|
||||
.then(() => {
|
||||
assert_equals(pc.signalingState, 'stable');
|
||||
assert_session_desc_equals(pc.localDescription, answer);
|
||||
assert_session_desc_equals(pc.remoteDescription, offer);
|
||||
assert_session_desc_similar(pc.localDescription, answer);
|
||||
assert_session_desc_similar(pc.remoteDescription, offer);
|
||||
|
||||
assert_session_desc_equals(pc.currentLocalDescription, answer);
|
||||
assert_session_desc_equals(pc.currentRemoteDescription, offer);
|
||||
assert_session_desc_similar(pc.currentLocalDescription, answer);
|
||||
assert_session_desc_similar(pc.currentRemoteDescription, offer);
|
||||
|
||||
assert_equals(pc.pendingLocalDescription, null);
|
||||
assert_equals(pc.pendingRemoteDescription, null);
|
||||
|
|
|
@ -12,8 +12,8 @@
|
|||
|
||||
// The following helper functions are called from RTCPeerConnection-helper.js:
|
||||
// generateOffer
|
||||
// assert_session_desc_not_equals
|
||||
// assert_session_desc_equals
|
||||
// assert_session_desc_not_similar
|
||||
// assert_session_desc_similar
|
||||
|
||||
/*
|
||||
4.3.2. Interface Definition
|
||||
|
@ -67,8 +67,8 @@
|
|||
pc.setLocalDescription(offer)
|
||||
.then(() => {
|
||||
assert_equals(pc.signalingState, 'have-local-offer');
|
||||
assert_session_desc_equals(pc.localDescription, offer);
|
||||
assert_session_desc_equals(pc.pendingLocalDescription, offer);
|
||||
assert_session_desc_similar(pc.localDescription, offer);
|
||||
assert_session_desc_similar(pc.pendingLocalDescription, offer);
|
||||
assert_equals(pc.currentLocalDescription, null);
|
||||
|
||||
assert_array_equals(states, ['have-local-offer']);
|
||||
|
@ -89,8 +89,8 @@
|
|||
pc.setLocalDescription({ type: 'offer' })
|
||||
.then(() => {
|
||||
assert_equals(pc.signalingState, 'have-local-offer');
|
||||
assert_session_desc_equals(pc.localDescription, offer);
|
||||
assert_session_desc_equals(pc.pendingLocalDescription, offer);
|
||||
assert_session_desc_similar(pc.localDescription, offer);
|
||||
assert_session_desc_similar(pc.pendingLocalDescription, offer);
|
||||
assert_equals(pc.currentLocalDescription, null);
|
||||
}));
|
||||
}, 'setLocalDescription with type offer and null sdp should use lastOffer generated from createOffer');
|
||||
|
@ -126,7 +126,7 @@
|
|||
.then(offer1 =>
|
||||
pc.createOffer({ offerToReceiveVideo: true })
|
||||
.then(offer2 => {
|
||||
assert_session_desc_not_equals(offer1, offer2);
|
||||
assert_session_desc_not_similar(offer1, offer2);
|
||||
return promise_rejects(t, 'InvalidModificationError',
|
||||
pc.setLocalDescription(offer1));
|
||||
}));
|
||||
|
@ -147,10 +147,10 @@
|
|||
.then(offer2 =>
|
||||
pc.setLocalDescription(offer2)
|
||||
.then(offer2 => {
|
||||
assert_session_desc_not_equals(offer1, offer2);
|
||||
assert_session_desc_not_similar(offer1, offer2);
|
||||
assert_equals(pc.signalingState, 'have-local-offer');
|
||||
assert_session_desc_equals(pc.localDescription, offer2);
|
||||
assert_session_desc_equals(pc.pendingLocalDescription, offer2);
|
||||
assert_session_desc_similar(pc.localDescription, offer2);
|
||||
assert_session_desc_similar(pc.pendingLocalDescription, offer2);
|
||||
assert_equals(pc.currentLocalDescription, null);
|
||||
|
||||
assert_array_equals(states, ['have-local-offer']);
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
// The following helper functions are called from RTCPeerConnection-helper.js:
|
||||
// generateOffer
|
||||
// generateAnswer
|
||||
// assert_session_desc_equals
|
||||
// assert_session_desc_similar
|
||||
|
||||
/*
|
||||
4.3.2. Interface Definition
|
||||
|
@ -97,12 +97,12 @@
|
|||
.then(() => {
|
||||
assert_equals(pc.signalingState, 'have-local-pranswer');
|
||||
|
||||
assert_session_desc_equals(pc.remoteDescription, offer);
|
||||
assert_session_desc_equals(pc.pendingRemoteDescription, offer);
|
||||
assert_session_desc_similar(pc.remoteDescription, offer);
|
||||
assert_session_desc_similar(pc.pendingRemoteDescription, offer);
|
||||
assert_equals(pc.currentRemoteDescription, null);
|
||||
|
||||
assert_session_desc_equals(pc.localDescription, pranswer);
|
||||
assert_session_desc_equals(pc.pendingLocalDescription, pranswer);
|
||||
assert_session_desc_similar(pc.localDescription, pranswer);
|
||||
assert_session_desc_similar(pc.pendingLocalDescription, pranswer);
|
||||
assert_equals(pc.currentLocalDescription, null);
|
||||
|
||||
assert_equals(pc.pendingRemoteDescription, null);
|
||||
|
@ -152,11 +152,11 @@
|
|||
.then(() => pc.setLocalDescription(answer))
|
||||
.then(() => {
|
||||
assert_equals(pc.signalingState, 'stable');
|
||||
assert_session_desc_equals(pc.localDescription, answer);
|
||||
assert_session_desc_equals(pc.remoteDescription, offer);
|
||||
assert_session_desc_similar(pc.localDescription, answer);
|
||||
assert_session_desc_similar(pc.remoteDescription, offer);
|
||||
|
||||
assert_session_desc_equals(pc.currentLocalDescription, answer);
|
||||
assert_session_desc_equals(pc.currentRemoteDescription, offer);
|
||||
assert_session_desc_similar(pc.currentLocalDescription, answer);
|
||||
assert_session_desc_similar(pc.currentRemoteDescription, offer);
|
||||
|
||||
assert_equals(pc.pendingLocalDescription, null);
|
||||
assert_equals(pc.pendingRemoteDescription, null);
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
// https://w3c.github.io/webrtc-pc/archives/20170605/webrtc.html
|
||||
|
||||
// The following helper functions are called from RTCPeerConnection-helper.js:
|
||||
// assert_session_desc_equals
|
||||
// assert_session_desc_similar
|
||||
|
||||
/*
|
||||
4.3.2. Interface Definition
|
||||
|
|
|
@ -12,8 +12,8 @@
|
|||
|
||||
// The following helper functions are called from RTCPeerConnection-helper.js:
|
||||
// generateOffer
|
||||
// assert_session_desc_not_equals
|
||||
// assert_session_desc_equals
|
||||
// assert_session_desc_not_similar
|
||||
// assert_session_desc_similar
|
||||
|
||||
/*
|
||||
4.3.2. Interface Definition
|
||||
|
@ -63,10 +63,10 @@
|
|||
pc.setLocalDescription(offer2)
|
||||
.then(() => {
|
||||
assert_equals(pc.signalingState, 'have-local-offer');
|
||||
assert_session_desc_not_equals(offer1, offer2);
|
||||
assert_session_desc_equals(pc.localDescription, offer2);
|
||||
assert_session_desc_equals(pc.currentLocalDescription, offer1);
|
||||
assert_session_desc_equals(pc.pendingLocalDescription, offer2);
|
||||
assert_session_desc_not_similar(offer1, offer2);
|
||||
assert_session_desc_similar(pc.localDescription, offer2);
|
||||
assert_session_desc_similar(pc.currentLocalDescription, offer1);
|
||||
assert_session_desc_similar(pc.pendingLocalDescription, offer2);
|
||||
|
||||
assert_array_equals(states, ['have-local-offer', 'stable', 'have-local-offer']);
|
||||
})));
|
||||
|
@ -89,9 +89,9 @@
|
|||
pc.setLocalDescription(offer)
|
||||
.then(() => {
|
||||
assert_equals(pc.signalingState, 'have-local-offer');
|
||||
assert_session_desc_equals(pc.localDescription, offer);
|
||||
assert_session_desc_equals(pc.currentLocalDescription, answer);
|
||||
assert_session_desc_equals(pc.pendingLocalDescription, offer);
|
||||
assert_session_desc_similar(pc.localDescription, offer);
|
||||
assert_session_desc_similar(pc.currentLocalDescription, answer);
|
||||
assert_session_desc_similar(pc.pendingLocalDescription, offer);
|
||||
|
||||
assert_array_equals(states, ['have-remote-offer', 'stable', 'have-local-offer']);
|
||||
})));
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
// The following helper functions are called from RTCPeerConnection-helper.js:
|
||||
// generateOffer()
|
||||
// generateAnswer()
|
||||
// assert_session_desc_equals()
|
||||
// assert_session_desc_similar()
|
||||
|
||||
/*
|
||||
4.3.2. Interface Definition
|
||||
|
@ -73,11 +73,11 @@
|
|||
.then(() => {
|
||||
assert_equals(pc.signalingState, 'stable');
|
||||
|
||||
assert_session_desc_equals(pc.localDescription, offer);
|
||||
assert_session_desc_equals(pc.remoteDescription, answer);
|
||||
assert_session_desc_similar(pc.localDescription, offer);
|
||||
assert_session_desc_similar(pc.remoteDescription, answer);
|
||||
|
||||
assert_session_desc_equals(pc.currentLocalDescription, offer);
|
||||
assert_session_desc_equals(pc.currentRemoteDescription, answer);
|
||||
assert_session_desc_similar(pc.currentLocalDescription, offer);
|
||||
assert_session_desc_similar(pc.currentRemoteDescription, answer);
|
||||
|
||||
assert_equals(pc.pendingLocalDescription, null);
|
||||
assert_equals(pc.pendingRemoteDescription, null);
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
// https://w3c.github.io/webrtc-pc/archives/20170605/webrtc.html
|
||||
|
||||
// The following helper functions are called from RTCPeerConnection-helper.js:
|
||||
// assert_session_desc_equals()
|
||||
// assert_session_desc_similar()
|
||||
|
||||
/*
|
||||
4.3.2. Interface Definition
|
||||
|
@ -65,8 +65,8 @@
|
|||
return pc2.setRemoteDescription(offer)
|
||||
.then(() => {
|
||||
assert_equals(pc2.signalingState, 'have-remote-offer');
|
||||
assert_session_desc_equals(pc2.remoteDescription, offer);
|
||||
assert_session_desc_equals(pc2.pendingRemoteDescription, offer);
|
||||
assert_session_desc_similar(pc2.remoteDescription, offer);
|
||||
assert_session_desc_similar(pc2.pendingRemoteDescription, offer);
|
||||
assert_equals(pc2.currentRemoteDescription, null);
|
||||
|
||||
assert_array_equals(states, ['have-remote-offer']);
|
||||
|
@ -91,8 +91,8 @@
|
|||
.then(() => pc2.setRemoteDescription(offer))
|
||||
.then(() => {
|
||||
assert_equals(pc2.signalingState, 'have-remote-offer');
|
||||
assert_session_desc_equals(pc2.remoteDescription, offer);
|
||||
assert_session_desc_equals(pc2.pendingRemoteDescription, offer);
|
||||
assert_session_desc_similar(pc2.remoteDescription, offer);
|
||||
assert_session_desc_similar(pc2.pendingRemoteDescription, offer);
|
||||
assert_equals(pc2.currentRemoteDescription, null);
|
||||
|
||||
assert_array_equals(states, ['have-remote-offer']);
|
||||
|
@ -117,14 +117,14 @@
|
|||
.then(()=> {
|
||||
return pc1.createOffer({ offerToReceiveAudio: true })
|
||||
.then(offer2 => {
|
||||
assert_session_desc_not_equals(offer1, offer2);
|
||||
assert_session_desc_not_similar(offer1, offer2);
|
||||
|
||||
return pc2.setRemoteDescription(offer1)
|
||||
.then(() => pc2.setRemoteDescription(offer2))
|
||||
.then(() => {
|
||||
assert_equals(pc2.signalingState, 'have-remote-offer');
|
||||
assert_session_desc_equals(pc2.remoteDescription, offer2);
|
||||
assert_session_desc_equals(pc2.pendingRemoteDescription, offer2);
|
||||
assert_session_desc_similar(pc2.remoteDescription, offer2);
|
||||
assert_session_desc_similar(pc2.pendingRemoteDescription, offer2);
|
||||
assert_equals(pc2.currentRemoteDescription, null);
|
||||
|
||||
assert_array_equals(states, ['have-remote-offer']);
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
// The following helper functions are called from RTCPeerConnection-helper.js:
|
||||
// generateOffer
|
||||
// generateAnswer
|
||||
// assert_session_desc_equals
|
||||
// assert_session_desc_similar
|
||||
|
||||
/*
|
||||
4.3.2. Interface Definition
|
||||
|
@ -97,12 +97,12 @@
|
|||
.then(() => {
|
||||
assert_equals(pc.signalingState, 'have-remote-pranswer');
|
||||
|
||||
assert_session_desc_equals(pc.localDescription, offer);
|
||||
assert_session_desc_equals(pc.pendingLocalDescription, offer);
|
||||
assert_session_desc_similar(pc.localDescription, offer);
|
||||
assert_session_desc_similar(pc.pendingLocalDescription, offer);
|
||||
assert_equals(pc.currentLocalDescription, null);
|
||||
|
||||
assert_session_desc_equals(pc.remoteDescription, pranswer);
|
||||
assert_session_desc_equals(pc.pendingRemoteDescription, pranswer);
|
||||
assert_session_desc_similar(pc.remoteDescription, pranswer);
|
||||
assert_session_desc_similar(pc.pendingRemoteDescription, pranswer);
|
||||
assert_equals(pc.currentRemoteDescription, null);
|
||||
|
||||
assert_array_equals(states, ['have-local-offer', 'have-remote-pranswer']);
|
||||
|
@ -151,12 +151,12 @@
|
|||
.then(() => {
|
||||
assert_equals(pc.signalingState, 'stable');
|
||||
|
||||
assert_session_desc_equals(pc.localDescription, offer);
|
||||
assert_session_desc_equals(pc.currentLocalDescription, offer);
|
||||
assert_session_desc_similar(pc.localDescription, offer);
|
||||
assert_session_desc_similar(pc.currentLocalDescription, offer);
|
||||
assert_equals(pc.pendingLocalDescription, null);
|
||||
|
||||
assert_session_desc_equals(pc.remoteDescription, answer);
|
||||
assert_session_desc_equals(pc.currentRemoteDescription, answer);
|
||||
assert_session_desc_similar(pc.remoteDescription, answer);
|
||||
assert_session_desc_similar(pc.currentRemoteDescription, answer);
|
||||
assert_equals(pc.pendingRemoteDescription, null);
|
||||
|
||||
assert_array_equals(states, ['have-local-offer', 'have-remote-pranswer', 'stable']);
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
|
||||
// The following helper functions are called from RTCPeerConnection-helper.js:
|
||||
// generateOffer
|
||||
// assert_session_desc_equals
|
||||
// assert_session_desc_similar
|
||||
|
||||
/*
|
||||
4.3.2. Interface Definition
|
||||
|
|
|
@ -23,7 +23,7 @@
|
|||
const callee = new RTCPeerConnection();
|
||||
t.add_cleanup(() => callee.close());
|
||||
const localStream =
|
||||
await navigator.mediaDevices.getUserMedia({audio: true});
|
||||
await getNoiseStream({audio: true});
|
||||
t.add_cleanup(() => localStream.getTracks().forEach(track => track.stop()));
|
||||
caller.addTrack(localStream.getTracks()[0]);
|
||||
const ontrackPromise = addEventListenerPromise(t, callee, 'track', e => {
|
||||
|
@ -41,7 +41,7 @@
|
|||
const callee = new RTCPeerConnection();
|
||||
t.add_cleanup(() => callee.close());
|
||||
const localStream =
|
||||
await navigator.mediaDevices.getUserMedia({audio: true});
|
||||
await getNoiseStream({audio: true});
|
||||
t.add_cleanup(() => localStream.getTracks().forEach(track => track.stop()));
|
||||
caller.addTrack(localStream.getTracks()[0], localStream);
|
||||
const ontrackPromise = addEventListenerPromise(t, callee, 'track', e => {
|
||||
|
@ -64,7 +64,7 @@
|
|||
t.add_cleanup(() => callee.close());
|
||||
let eventSequence = '';
|
||||
const localStream =
|
||||
await navigator.mediaDevices.getUserMedia({audio: true});
|
||||
await getNoiseStream({audio: true});
|
||||
t.add_cleanup(() => localStream.getTracks().forEach(track => track.stop()));
|
||||
caller.addTrack(localStream.getTracks()[0], localStream);
|
||||
const ontrackPromise = addEventListenerPromise(t, callee, 'track', e => {
|
||||
|
@ -82,8 +82,8 @@
|
|||
const callee = new RTCPeerConnection();
|
||||
t.add_cleanup(() => callee.close());
|
||||
const localStreams = await Promise.all([
|
||||
navigator.mediaDevices.getUserMedia({audio: true}),
|
||||
navigator.mediaDevices.getUserMedia({audio: true}),
|
||||
getNoiseStream({audio: true}),
|
||||
getNoiseStream({audio: true}),
|
||||
]);
|
||||
caller.addTrack(localStreams[0].getTracks()[0], localStreams[0]);
|
||||
caller.addTrack(localStreams[1].getTracks()[0], localStreams[0]);
|
||||
|
@ -126,8 +126,8 @@
|
|||
t.add_cleanup(() => callee.close());
|
||||
let eventSequence = '';
|
||||
const localStreams = await Promise.all([
|
||||
navigator.mediaDevices.getUserMedia({audio: true}),
|
||||
navigator.mediaDevices.getUserMedia({audio: true}),
|
||||
getNoiseStream({audio: true}),
|
||||
getNoiseStream({audio: true}),
|
||||
]);
|
||||
caller.addTrack(localStreams[0].getTracks()[0], localStreams[0]);
|
||||
const remoteStreams = [];
|
||||
|
@ -158,8 +158,8 @@
|
|||
t.add_cleanup(() => callee.close());
|
||||
let eventSequence = '';
|
||||
const localStreams = await Promise.all([
|
||||
navigator.mediaDevices.getUserMedia({audio: true}),
|
||||
navigator.mediaDevices.getUserMedia({audio: true}),
|
||||
getNoiseStream({audio: true}),
|
||||
getNoiseStream({audio: true}),
|
||||
]);
|
||||
caller.addTrack(localStreams[0].getTracks()[0], localStreams[0]);
|
||||
const remoteStreams = [];
|
||||
|
@ -187,8 +187,8 @@
|
|||
const callee = new RTCPeerConnection();
|
||||
t.add_cleanup(() => callee.close());
|
||||
const localStreams = await Promise.all([
|
||||
navigator.mediaDevices.getUserMedia({audio: true}),
|
||||
navigator.mediaDevices.getUserMedia({audio: true}),
|
||||
getNoiseStream({audio: true}),
|
||||
getNoiseStream({audio: true}),
|
||||
]);
|
||||
caller.addTrack(localStreams[0].getTracks()[0],
|
||||
localStreams[0], localStreams[1]);
|
||||
|
@ -215,7 +215,7 @@
|
|||
const callee = new RTCPeerConnection();
|
||||
t.add_cleanup(() => callee.close());
|
||||
const localStream =
|
||||
await navigator.mediaDevices.getUserMedia({audio: true});
|
||||
await getNoiseStream({audio: true});
|
||||
t.add_cleanup(() => localStream.getTracks().forEach(track => track.stop()));
|
||||
caller.addTrack(localStream.getTracks()[0]);
|
||||
const ontrackPromise = addEventListenerPromise(t, callee, 'track', e => {
|
||||
|
@ -232,7 +232,7 @@
|
|||
const callee = new RTCPeerConnection();
|
||||
t.add_cleanup(() => callee.close());
|
||||
const localStream =
|
||||
await navigator.mediaDevices.getUserMedia({audio: true});
|
||||
await getNoiseStream({audio: true});
|
||||
t.add_cleanup(() => localStream.getTracks().forEach(track => track.stop()));
|
||||
const sender = caller.addTrack(localStream.getTracks()[0]);
|
||||
const ontrackPromise = addEventListenerPromise(t, callee, 'track');
|
||||
|
@ -250,7 +250,7 @@
|
|||
const callee = new RTCPeerConnection();
|
||||
t.add_cleanup(() => callee.close());
|
||||
const localStream =
|
||||
await navigator.mediaDevices.getUserMedia({audio: true});
|
||||
await getNoiseStream({audio: true});
|
||||
t.add_cleanup(() => localStream.getTracks().forEach(track => track.stop()));
|
||||
const [track] = localStream.getTracks();
|
||||
const sender = caller.addTrack(track, localStream);
|
||||
|
@ -279,7 +279,7 @@
|
|||
t.add_cleanup(() => callee.close());
|
||||
let eventSequence = '';
|
||||
const localStream =
|
||||
await navigator.mediaDevices.getUserMedia({audio: true});
|
||||
await getNoiseStream({audio: true});
|
||||
t.add_cleanup(() => localStream.getTracks().forEach(track => track.stop()));
|
||||
const sender = caller.addTrack(localStream.getTracks()[0], localStream);
|
||||
const ontrackPromise = addEventListenerPromise(t, callee, 'track', e => {
|
||||
|
@ -306,7 +306,7 @@
|
|||
const callee = new RTCPeerConnection();
|
||||
t.add_cleanup(() => callee.close());
|
||||
const localStream =
|
||||
await navigator.mediaDevices.getUserMedia({audio: true});
|
||||
await getNoiseStream({audio: true});
|
||||
t.add_cleanup(() => localStream.getTracks().forEach(track => track.stop()));
|
||||
const sender = caller.addTrack(localStream.getTracks()[0], localStream);
|
||||
const ontrackPromise = addEventListenerPromise(t, callee, 'track', e => {
|
||||
|
@ -332,7 +332,7 @@
|
|||
t.add_cleanup(() => callee.close());
|
||||
let eventSequence = '';
|
||||
const localStream =
|
||||
await navigator.mediaDevices.getUserMedia({audio: true});
|
||||
await getNoiseStream({audio: true});
|
||||
t.add_cleanup(() => localStream.getTracks().forEach(track => track.stop()));
|
||||
const sender = caller.addTrack(localStream.getTracks()[0], localStream);
|
||||
const ontrackPromise = addEventListenerPromise(t, callee, 'track', e => {
|
||||
|
@ -356,7 +356,7 @@
|
|||
promise_test(async t => {
|
||||
const pc = new RTCPeerConnection();
|
||||
t.add_cleanup(() => pc.close());
|
||||
const stream = await navigator.mediaDevices.getUserMedia({audio: true});
|
||||
const stream = await getNoiseStream({audio: true});
|
||||
t.add_cleanup(() => stream.getTracks().forEach(track => track.stop()));
|
||||
const sender = pc.addTrack(stream.getTracks()[0]);
|
||||
pc.removeTrack(sender);
|
||||
|
|
|
@ -11,8 +11,8 @@
|
|||
// https://w3c.github.io/webrtc-pc/archives/20170605/webrtc.html
|
||||
|
||||
// The following helper functions are called from RTCPeerConnection-helper.js:
|
||||
// assert_session_desc_not_equals()
|
||||
// assert_session_desc_equals()
|
||||
// assert_session_desc_not_similar()
|
||||
// assert_session_desc_similar()
|
||||
|
||||
/*
|
||||
4.3.2. Interface Definition
|
||||
|
@ -116,10 +116,10 @@
|
|||
await pc.setLocalDescription(await pc.createAnswer());
|
||||
const offer2 = await pc2.createOffer({ offerToReceiveVideo: true });
|
||||
await pc.setRemoteDescription(offer2);
|
||||
assert_session_desc_not_equals(offer1, offer2);
|
||||
assert_session_desc_equals(pc.remoteDescription, offer2);
|
||||
assert_session_desc_equals(pc.currentRemoteDescription, offer1);
|
||||
assert_session_desc_equals(pc.pendingRemoteDescription, offer2);
|
||||
assert_session_desc_not_similar(offer1, offer2);
|
||||
assert_session_desc_similar(pc.remoteDescription, offer2);
|
||||
assert_session_desc_similar(pc.currentRemoteDescription, offer1);
|
||||
assert_session_desc_similar(pc.pendingRemoteDescription, offer2);
|
||||
}, 'Calling setRemoteDescription() again after one round of remote-offer/local-answer should succeed');
|
||||
|
||||
promise_test(async t => {
|
||||
|
@ -136,8 +136,8 @@
|
|||
await pc.setRemoteDescription(answer);
|
||||
await pc.setRemoteDescription(await pc2.createOffer());
|
||||
assert_equals(pc.remoteDescription.sdp, pc.pendingRemoteDescription.sdp);
|
||||
assert_session_desc_equals(pc.remoteDescription, offer);
|
||||
assert_session_desc_equals(pc.currentRemoteDescription, answer);
|
||||
assert_session_desc_similar(pc.remoteDescription, offer);
|
||||
assert_session_desc_similar(pc.currentRemoteDescription, answer);
|
||||
}, 'Switching role from offerer to answerer after going back to stable state should succeed');
|
||||
|
||||
/*
|
||||
|
|
|
@ -12,6 +12,7 @@
|
|||
// https://w3c.github.io/webrtc-pc/archives/20170605/webrtc.html
|
||||
|
||||
// The following helper functions are called from RTCRtpParameters-helper.js:
|
||||
// doOfferAnswerExchange
|
||||
// validateSenderRtpParameters
|
||||
|
||||
/*
|
||||
|
@ -80,10 +81,13 @@
|
|||
with a newly created InvalidModificationError. Note that this also applies
|
||||
to transactionId.
|
||||
*/
|
||||
promise_test(t => {
|
||||
promise_test(async t => {
|
||||
const pc = new RTCPeerConnection();
|
||||
t.add_cleanup(() => pc.close());
|
||||
|
||||
const { sender } = pc.addTransceiver('audio');
|
||||
await doOfferAnswerExchange(t, pc);
|
||||
|
||||
const param = sender.getParameters();
|
||||
validateSenderRtpParameters(param);
|
||||
|
||||
|
@ -99,10 +103,11 @@
|
|||
sender.setParameters(param));
|
||||
}, 'setParameters() with codec.payloadType modified should reject with InvalidModificationError');
|
||||
|
||||
promise_test(t => {
|
||||
promise_test(async t => {
|
||||
const pc = new RTCPeerConnection();
|
||||
t.add_cleanup(() => pc.close());
|
||||
const { sender } = pc.addTransceiver('audio');
|
||||
await doOfferAnswerExchange(t, pc);
|
||||
const param = sender.getParameters();
|
||||
validateSenderRtpParameters(param);
|
||||
|
||||
|
@ -118,10 +123,11 @@
|
|||
sender.setParameters(param));
|
||||
}, 'setParameters() with codec.mimeType modified should reject with InvalidModificationError');
|
||||
|
||||
promise_test(t => {
|
||||
promise_test(async t => {
|
||||
const pc = new RTCPeerConnection();
|
||||
t.add_cleanup(() => pc.close());
|
||||
const { sender } = pc.addTransceiver('audio');
|
||||
await doOfferAnswerExchange(t, pc);
|
||||
const param = sender.getParameters();
|
||||
validateSenderRtpParameters(param);
|
||||
|
||||
|
@ -137,10 +143,11 @@
|
|||
sender.setParameters(param));
|
||||
}, 'setParameters() with codec.clockRate modified should reject with InvalidModificationError');
|
||||
|
||||
promise_test(t => {
|
||||
promise_test(async t => {
|
||||
const pc = new RTCPeerConnection();
|
||||
t.add_cleanup(() => pc.close());
|
||||
const { sender } = pc.addTransceiver('audio');
|
||||
await doOfferAnswerExchange(t, pc);
|
||||
const param = sender.getParameters();
|
||||
validateSenderRtpParameters(param);
|
||||
|
||||
|
@ -156,11 +163,11 @@
|
|||
sender.setParameters(param));
|
||||
}, 'setParameters() with codec.channels modified should reject with InvalidModificationError');
|
||||
|
||||
|
||||
promise_test(t => {
|
||||
promise_test(async t => {
|
||||
const pc = new RTCPeerConnection();
|
||||
t.add_cleanup(() => pc.close());
|
||||
const { sender } = pc.addTransceiver('audio');
|
||||
await doOfferAnswerExchange(t, pc);
|
||||
const param = sender.getParameters();
|
||||
validateSenderRtpParameters(param);
|
||||
|
||||
|
@ -176,11 +183,11 @@
|
|||
sender.setParameters(param));
|
||||
}, 'setParameters() with codec.sdpFmtpLine modified should reject with InvalidModificationError');
|
||||
|
||||
|
||||
promise_test(t => {
|
||||
promise_test(async t => {
|
||||
const pc = new RTCPeerConnection();
|
||||
t.add_cleanup(() => pc.close());
|
||||
const { sender } = pc.addTransceiver('audio');
|
||||
await doOfferAnswerExchange(t, pc);
|
||||
const param = sender.getParameters();
|
||||
validateSenderRtpParameters(param);
|
||||
|
||||
|
@ -197,37 +204,4 @@
|
|||
sender.setParameters(param));
|
||||
}, 'setParameters() with new codecs inserted should reject with InvalidModificationError');
|
||||
|
||||
promise_test(t => {
|
||||
const pc = new RTCPeerConnection();
|
||||
t.add_cleanup(() => pc.close());
|
||||
const { sender } = pc.addTransceiver('audio');
|
||||
const param = sender.getParameters();
|
||||
validateSenderRtpParameters(param);
|
||||
|
||||
const { codecs } = param;
|
||||
|
||||
// skip and pass test if there is less than 2 codecs
|
||||
if(codecs.length >= 2) {
|
||||
const tmp = codecs[0];
|
||||
codecs[0] = codecs[1];
|
||||
codecs[1] = tmp;
|
||||
}
|
||||
|
||||
return sender.setParameters(param);
|
||||
}, 'setParameters with reordered codecs should succeed');
|
||||
|
||||
promise_test(t => {
|
||||
const pc = new RTCPeerConnection();
|
||||
t.add_cleanup(() => pc.close());
|
||||
const { sender } = pc.addTransceiver('audio');
|
||||
const param = sender.getParameters();
|
||||
validateSenderRtpParameters(param);
|
||||
|
||||
const { codecs } = param;
|
||||
|
||||
param.codecs = codecs.slice(1);
|
||||
|
||||
return sender.setParameters(param);
|
||||
}, 'setParameters with dropped codec should succeed');
|
||||
|
||||
</script>
|
||||
|
|
|
@ -12,6 +12,7 @@
|
|||
// https://w3c.github.io/webrtc-pc/archives/20170605/webrtc.html
|
||||
|
||||
// The following helper functions are called from RTCRtpParameters-helper.js:
|
||||
// doOfferAnswerExchange
|
||||
// validateSenderRtpParameters
|
||||
|
||||
/*
|
||||
|
@ -114,9 +115,12 @@
|
|||
Otherwise, set it to a list containing a single RTCRtpEncodingParameters
|
||||
with active set to true.
|
||||
*/
|
||||
test(() => {
|
||||
promise_test(async t => {
|
||||
const pc = new RTCPeerConnection();
|
||||
t.add_cleanup(() => pc.close());
|
||||
const transceiver = pc.addTransceiver('audio');
|
||||
await doOfferAnswerExchange(t, pc);
|
||||
|
||||
const param = transceiver.sender.getParameters();
|
||||
validateSenderRtpParameters(param);
|
||||
const { encodings } = param;
|
||||
|
@ -125,9 +129,11 @@
|
|||
assert_equals(encoding.active, true);
|
||||
}, 'addTransceiver() with undefined sendEncodings should have default encoding parameter with active set to true');
|
||||
|
||||
test(() => {
|
||||
promise_test(async t => {
|
||||
const pc = new RTCPeerConnection();
|
||||
t.add_cleanup(() => pc.close());
|
||||
const transceiver = pc.addTransceiver('audio', { sendEncodings: [] });
|
||||
await doOfferAnswerExchange(t, pc);
|
||||
|
||||
const param = transceiver.sender.getParameters();
|
||||
validateSenderRtpParameters(param);
|
||||
|
@ -151,8 +157,9 @@
|
|||
5.2. getParameters
|
||||
- encodings is set to the value of the [[send encodings]] internal slot.
|
||||
*/
|
||||
test(() => {
|
||||
promise_test(async t => {
|
||||
const pc = new RTCPeerConnection();
|
||||
t.add_cleanup(() => pc.close());
|
||||
const { sender } = pc.addTransceiver('audio', {
|
||||
sendEncodings: [{
|
||||
dtx: 'enabled',
|
||||
|
@ -164,6 +171,7 @@
|
|||
rid: 'foo'
|
||||
}]
|
||||
});
|
||||
await doOfferAnswerExchange(t, pc);
|
||||
|
||||
const param = sender.getParameters();
|
||||
validateSenderRtpParameters(param);
|
||||
|
@ -190,10 +198,12 @@
|
|||
with a newly created InvalidModificationError. Note that this also applies
|
||||
to transactionId.
|
||||
*/
|
||||
promise_test(t => {
|
||||
promise_test(async t => {
|
||||
const pc = new RTCPeerConnection();
|
||||
t.add_cleanup(() => pc.close());
|
||||
const { sender } = pc.addTransceiver('audio');
|
||||
await doOfferAnswerExchange(t, pc);
|
||||
|
||||
const param = sender.getParameters();
|
||||
validateSenderRtpParameters(param);
|
||||
|
||||
|
@ -208,10 +218,12 @@
|
|||
sender.setParameters(param));
|
||||
}, `sender.setParameters() with mismatch number of encodings should reject with InvalidModificationError`);
|
||||
|
||||
promise_test(t => {
|
||||
promise_test(async t => {
|
||||
const pc = new RTCPeerConnection();
|
||||
t.add_cleanup(() => pc.close());
|
||||
const { sender } = pc.addTransceiver('audio');
|
||||
await doOfferAnswerExchange(t, pc);
|
||||
|
||||
const param = sender.getParameters();
|
||||
validateSenderRtpParameters(param);
|
||||
|
||||
|
@ -221,32 +233,11 @@
|
|||
sender.setParameters(param));
|
||||
}, `sender.setParameters() with encodings unset should reject with InvalidModificationError`);
|
||||
|
||||
promise_test(t => {
|
||||
const pc = new RTCPeerConnection();
|
||||
t.add_cleanup(() => pc.close());
|
||||
const { sender } = pc.addTransceiver('audio');
|
||||
|
||||
const param = sender.getParameters();
|
||||
validateSenderRtpParameters(param);
|
||||
const encoding = getFirstEncoding(param);
|
||||
const { ssrc } = encoding;
|
||||
|
||||
// ssrc may not be set since it is optional
|
||||
if(ssrc === undefined) {
|
||||
encoding.ssrc = 2;
|
||||
} else {
|
||||
// If it is set, increase the number by 1 to make it different from original
|
||||
encoding.ssrc = ssrc + 1;
|
||||
}
|
||||
|
||||
return promise_rejects(t, 'InvalidModificationError',
|
||||
sender.setParameters(param));
|
||||
}, `setParameters() with modified encoding.ssrc field should reject with InvalidModificationError`);
|
||||
|
||||
promise_test(t => {
|
||||
promise_test(async t => {
|
||||
const pc = new RTCPeerConnection();
|
||||
t.add_cleanup(() => pc.close());
|
||||
const { sender } = pc.addTransceiver('audio');
|
||||
await doOfferAnswerExchange(t, pc);
|
||||
|
||||
const param = sender.getParameters();
|
||||
validateSenderRtpParameters(param);
|
||||
|
@ -265,34 +256,13 @@
|
|||
sender.setParameters(param));
|
||||
}, `setParameters() with modified encoding.rtx field should reject with InvalidModificationError`);
|
||||
|
||||
promise_test(t => {
|
||||
const pc = new RTCPeerConnection();
|
||||
t.add_cleanup(() => pc.close());
|
||||
const { sender } = pc.addTransceiver('audio');
|
||||
|
||||
const param = sender.getParameters();
|
||||
validateSenderRtpParameters(param);
|
||||
const encoding = getFirstEncoding(param);
|
||||
const { fec } = encoding;
|
||||
|
||||
if(fec === undefined) {
|
||||
encoding.fec = { ssrc: 2 };
|
||||
} else if(fec.ssrc === undefined) {
|
||||
fec.ssrc = 2;
|
||||
} else {
|
||||
fec.ssrc += 1;
|
||||
}
|
||||
|
||||
return promise_rejects(t, 'InvalidModificationError',
|
||||
sender.setParameters(param));
|
||||
}, `setParameters() with modified encoding.fec field should reject with InvalidModificationError`);
|
||||
|
||||
promise_test(t => {
|
||||
promise_test(async t => {
|
||||
const pc = new RTCPeerConnection();
|
||||
t.add_cleanup(() => pc.close());
|
||||
const { sender } = pc.addTransceiver('audio', {
|
||||
sendEncodings: [{ rid: 'foo' }],
|
||||
});
|
||||
await doOfferAnswerExchange(t, pc);
|
||||
|
||||
const param = sender.getParameters();
|
||||
validateSenderRtpParameters(param);
|
||||
|
@ -311,10 +281,11 @@
|
|||
value less than 1.0, abort these steps and return a promise rejected with
|
||||
a newly created RangeError.
|
||||
*/
|
||||
promise_test(t => {
|
||||
promise_test(async t => {
|
||||
const pc = new RTCPeerConnection();
|
||||
t.add_cleanup(() => pc.close());
|
||||
const { sender } = pc.addTransceiver('audio');
|
||||
await doOfferAnswerExchange(t, pc);
|
||||
|
||||
const param = sender.getParameters();
|
||||
validateSenderRtpParameters(param);
|
||||
|
@ -325,10 +296,11 @@
|
|||
sender.setParameters(param));
|
||||
}, `setParameters() with encoding.scaleResolutionDownBy field set to less than 1.0 should reject with RangeError`);
|
||||
|
||||
promise_test(t => {
|
||||
promise_test(async t => {
|
||||
const pc = new RTCPeerConnection();
|
||||
t.add_cleanup(() => pc.close());
|
||||
const { sender } = pc.addTransceiver('audio');
|
||||
await doOfferAnswerExchange(t, pc);
|
||||
|
||||
const param = sender.getParameters();
|
||||
validateSenderRtpParameters(param);
|
||||
|
@ -346,52 +318,76 @@
|
|||
}, `setParameters() with encoding.scaleResolutionDownBy field set to greater than 1.0 should succeed`);
|
||||
|
||||
// Helper function to test that modifying an encoding field should succeed
|
||||
function test_modified_encoding(field, value1, value2, desc) {
|
||||
promise_test(t => {
|
||||
function test_modified_encoding(kind, field, value1, value2, desc) {
|
||||
promise_test(async t => {
|
||||
const pc = new RTCPeerConnection();
|
||||
t.add_cleanup(() => pc.close());
|
||||
const { sender } = pc.addTransceiver('audio', {
|
||||
const { sender } = pc.addTransceiver(kind, {
|
||||
sendEncodings: [{
|
||||
[field]: value1
|
||||
}]
|
||||
});
|
||||
await doOfferAnswerExchange(t, pc);
|
||||
|
||||
const param = sender.getParameters();
|
||||
validateSenderRtpParameters(param);
|
||||
const encoding = getFirstEncoding(param);
|
||||
const param1 = sender.getParameters();
|
||||
validateSenderRtpParameters(param1);
|
||||
const encoding1 = getFirstEncoding(param1);
|
||||
|
||||
assert_equals(encoding[field], value1);
|
||||
encoding[field] = value2;
|
||||
assert_equals(encoding1[field], value1);
|
||||
encoding1[field] = value2;
|
||||
|
||||
return sender.setParameters(param)
|
||||
.then(() => {
|
||||
const param = sender.getParameters();
|
||||
validateSenderRtpParameters(param);
|
||||
const encoding = getFirstEncoding(param);
|
||||
assert_equals(encoding[field], value2);
|
||||
});
|
||||
}, desc);
|
||||
await sender.setParameters(param1);
|
||||
const param2 = sender.getParameters();
|
||||
validateSenderRtpParameters(param2);
|
||||
const encoding2 = getFirstEncoding(param2);
|
||||
assert_equals(encoding2[field], value2);
|
||||
}, desc + ' with RTCRtpTransceiverInit');
|
||||
|
||||
promise_test(async t => {
|
||||
const pc = new RTCPeerConnection();
|
||||
t.add_cleanup(() => pc.close());
|
||||
const { sender } = pc.addTransceiver(kind);
|
||||
await doOfferAnswerExchange(t, pc);
|
||||
|
||||
const initParam = sender.getParameters();
|
||||
validateSenderRtpParameters(initParam);
|
||||
initParam.encodings[0][field] = value1;
|
||||
await sender.setParameters(initParam);
|
||||
|
||||
const param1 = sender.getParameters();
|
||||
validateSenderRtpParameters(param1);
|
||||
const encoding1 = getFirstEncoding(param1);
|
||||
|
||||
assert_equals(encoding1[field], value1);
|
||||
encoding1[field] = value2;
|
||||
|
||||
await sender.setParameters(param1);
|
||||
const param2 = sender.getParameters();
|
||||
validateSenderRtpParameters(param2);
|
||||
const encoding2 = getFirstEncoding(param2);
|
||||
assert_equals(encoding2[field], value2);
|
||||
}, desc + ' without RTCRtpTransceiverInit');
|
||||
}
|
||||
|
||||
test_modified_encoding('dtx', 'enabled', 'disabled',
|
||||
test_modified_encoding('audio', 'dtx', 'enabled', 'disabled',
|
||||
'setParameters() with modified encoding.dtx should succeed');
|
||||
|
||||
test_modified_encoding('dtx', 'enabled', undefined,
|
||||
test_modified_encoding('audio', 'dtx', 'enabled', undefined,
|
||||
'setParameters() with unset encoding.dtx should succeed');
|
||||
|
||||
test_modified_encoding('active', true, false,
|
||||
test_modified_encoding('audio', 'active', false, true,
|
||||
'setParameters() with modified encoding.active should succeed');
|
||||
|
||||
test_modified_encoding('priority', 'very-low', 'high',
|
||||
test_modified_encoding('audio', 'priority', 'very-low', 'high',
|
||||
'setParameters() with modified encoding.priority should succeed');
|
||||
|
||||
test_modified_encoding('ptime', 2, 4,
|
||||
test_modified_encoding('audio', 'ptime', 2, 4,
|
||||
'setParameters() with modified encoding.ptime should succeed');
|
||||
|
||||
test_modified_encoding('maxBitrate', 2, 4,
|
||||
test_modified_encoding('audio', 'maxBitrate', 10000, 20000,
|
||||
'setParameters() with modified encoding.maxBitrate should succeed');
|
||||
|
||||
test_modified_encoding('maxBitrate', 24, 16,
|
||||
test_modified_encoding('video', 'maxFramerate', 24, 16,
|
||||
'setParameters() with modified encoding.maxFramerate should succeed');
|
||||
|
||||
</script>
|
||||
|
|
|
@ -8,6 +8,19 @@
|
|||
// This file depends on dictionary-helper.js which should
|
||||
// be loaded from the main HTML file.
|
||||
|
||||
// An offer/answer exchange is necessary for getParameters() to have any
|
||||
// negotiated parameters to return.
|
||||
async function doOfferAnswerExchange(t, caller) {
|
||||
const callee = new RTCPeerConnection();
|
||||
t.add_cleanup(() => callee.close());
|
||||
const offer = await caller.createOffer();
|
||||
await caller.setLocalDescription(offer);
|
||||
await callee.setRemoteDescription(offer);
|
||||
const answer = await callee.createAnswer();
|
||||
await callee.setLocalDescription(answer);
|
||||
await caller.setRemoteDescription(answer);
|
||||
}
|
||||
|
||||
/*
|
||||
Validates the RTCRtpParameters returned from RTCRtpSender.prototype.getParameters
|
||||
|
||||
|
|
|
@ -12,6 +12,7 @@
|
|||
// https://w3c.github.io/webrtc-pc/archives/20170605/webrtc.html
|
||||
|
||||
// The following helper functions are called from RTCRtpParameters-helper.js:
|
||||
// doOfferAnswerExchange
|
||||
// validateSenderRtpParameters
|
||||
|
||||
/*
|
||||
|
@ -60,9 +61,10 @@
|
|||
- transactionId is set to a new unique identifier, used to match this
|
||||
getParameters call to a setParameters call that may occur later.
|
||||
*/
|
||||
test(() => {
|
||||
promise_test(async t => {
|
||||
const pc = new RTCPeerConnection();
|
||||
const { sender } = pc.addTransceiver('audio');
|
||||
await doOfferAnswerExchange(t, pc);
|
||||
|
||||
const param1 = sender.getParameters();
|
||||
const param2 = sender.getParameters();
|
||||
|
@ -83,10 +85,11 @@
|
|||
with a newly created InvalidModificationError. Note that this also applies
|
||||
to transactionId.
|
||||
*/
|
||||
promise_test(t => {
|
||||
promise_test(async t => {
|
||||
const pc = new RTCPeerConnection();
|
||||
t.add_cleanup(() => pc.close());
|
||||
const { sender } = pc.addTransceiver('audio');
|
||||
await doOfferAnswerExchange(t, pc);
|
||||
|
||||
const param = sender.getParameters();
|
||||
validateSenderRtpParameters(param);
|
||||
|
@ -98,10 +101,11 @@
|
|||
sender.setParameters(param));
|
||||
}, `sender.setParameters() with transaction ID different from last getParameters() should reject with InvalidModificationError`);
|
||||
|
||||
promise_test(t => {
|
||||
promise_test(async t => {
|
||||
const pc = new RTCPeerConnection();
|
||||
t.add_cleanup(() => pc.close());
|
||||
const { sender } = pc.addTransceiver('audio');
|
||||
await doOfferAnswerExchange(t, pc);
|
||||
|
||||
const param = sender.getParameters();
|
||||
validateSenderRtpParameters(param);
|
||||
|
@ -112,24 +116,26 @@
|
|||
sender.setParameters(param));
|
||||
}, `sender.setParameters() with transaction ID unset should reject with InvalidModificationError`);
|
||||
|
||||
promise_test(t => {
|
||||
promise_test(async t => {
|
||||
const pc = new RTCPeerConnection();
|
||||
t.add_cleanup(() => pc.close());
|
||||
const { sender } = pc.addTransceiver('audio');
|
||||
await doOfferAnswerExchange(t, pc);
|
||||
|
||||
const param = sender.getParameters();
|
||||
validateSenderRtpParameters(param);
|
||||
|
||||
return sender.setParameters(param)
|
||||
.then(() =>
|
||||
promise_rejects(t, 'InvalidModificationError',
|
||||
promise_rejects(t, 'InvalidStateError',
|
||||
sender.setParameters(param)));
|
||||
}, `setParameters() twice with the same parameters should reject with InvalidModificationError`);
|
||||
}, `setParameters() twice with the same parameters should reject with InvalidStateError`);
|
||||
|
||||
promise_test(t => {
|
||||
promise_test(async t => {
|
||||
const pc = new RTCPeerConnection();
|
||||
t.add_cleanup(() => pc.close());
|
||||
const { sender } = pc.addTransceiver('audio');
|
||||
await doOfferAnswerExchange(t, pc);
|
||||
|
||||
const param1 = sender.getParameters();
|
||||
const param2 = sender.getParameters();
|
||||
|
|
|
@ -62,7 +62,7 @@
|
|||
t.add_cleanup(() => caller.close());
|
||||
const callee = new RTCPeerConnection();
|
||||
t.add_cleanup(() => callee.close());
|
||||
const stream = await navigator.mediaDevices.getUserMedia({audio:true});
|
||||
const stream = await getNoiseStream({audio:true});
|
||||
t.add_cleanup(() => stream.getTracks().forEach(track => track.stop()));
|
||||
const [track] = stream.getTracks();
|
||||
caller.addTrack(track, stream);
|
||||
|
|
|
@ -57,7 +57,7 @@
|
|||
t.add_cleanup(() => caller.close());
|
||||
const callee = new RTCPeerConnection();
|
||||
t.add_cleanup(() => callee.close());
|
||||
const stream = await navigator.mediaDevices.getUserMedia({audio:true});
|
||||
const stream = await getNoiseStream({audio:true});
|
||||
t.add_cleanup(() => stream.getTracks().forEach(track => track.stop()));
|
||||
const [track] = stream.getTracks();
|
||||
const sender = caller.addTrack(track, stream);
|
||||
|
|
|
@ -79,7 +79,7 @@
|
|||
|
||||
// Asynchoronously generate MediaStreamTrack from getUserMedia
|
||||
function asyncInitMediaStreamTrack() {
|
||||
return navigator.mediaDevices.getUserMedia({ audio: true })
|
||||
return getNoiseStream({ audio: true })
|
||||
.then(mediaStream => {
|
||||
idlTestObjects.mediaStreamTrack = mediaStream.getTracks()[0];
|
||||
});
|
||||
|
@ -109,7 +109,7 @@
|
|||
const idlArray = new IdlArray();
|
||||
|
||||
let webrtcIdl = fetch('/interfaces/webrtc-pc.idl').then(r => r.text());
|
||||
let mediacaptureMainIdl = fetch('/interfaces/mediacapture-main.idl').then(r => r.text());
|
||||
let mediacaptureMainIdl = fetch('/interfaces/mediacapture-streams.idl').then(r => r.text());
|
||||
|
||||
idlArray.add_untested_idls(mediacaptureMainIdl, { only: ['MediaStreamConstraints'] });
|
||||
idlArray.add_idls(webrtcIdl);
|
||||
|
|
|
@ -1,23 +1,15 @@
|
|||
<!doctype html>
|
||||
<!--
|
||||
To run this test, you must have a webcam and a microphone or use
|
||||
fake devices by specifying
|
||||
--use-fake-device-for-media-stream --use-fake-ui-for-media-stream
|
||||
for Chrome or by setting the
|
||||
media.navigator.streams.fake
|
||||
property to true in Firefox.
|
||||
-->
|
||||
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
||||
<title>RTCPeerConnection Connection Test</title>
|
||||
<script src="RTCPeerConnection-helper.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<div id="log"></div>
|
||||
<div>
|
||||
<video id="local-view" autoplay="autoplay"></video>
|
||||
<video id="remote-view" autoplay="autoplay"/>
|
||||
<video id="local-view" muted autoplay="autoplay"></video>
|
||||
<video id="remote-view" muted autoplay="autoplay"/>
|
||||
</video>
|
||||
</div>
|
||||
|
||||
|
@ -38,7 +30,7 @@ property to true in Firefox.
|
|||
test.done();
|
||||
});
|
||||
|
||||
function getUserMediaOkCallback(localStream) {
|
||||
function getNoiseStreamOkCallback(localStream) {
|
||||
gFirstConnection = new RTCPeerConnection(null);
|
||||
gFirstConnection.onicecandidate = onIceCandidateToFirst;
|
||||
localStream.getTracks().forEach(function(track) {
|
||||
|
@ -111,8 +103,8 @@ property to true in Firefox.
|
|||
|
||||
// This function starts the test.
|
||||
test.step(function() {
|
||||
navigator.mediaDevices.getUserMedia({ video: true, audio: true })
|
||||
.then(test.step_func(getUserMediaOkCallback), failed('getUserMedia'));
|
||||
getNoiseStream({ video: true, audio: true })
|
||||
.then(test.step_func(getNoiseStreamOkCallback), failed('getNoiseStream'));
|
||||
});
|
||||
</script>
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue