Update web-platform-tests to revision 81962ac8802223d038b188b6f9cb88a0a9c5beee

This commit is contained in:
WPT Sync Bot 2018-05-18 22:02:29 -04:00
parent fe1a057bd1
commit 24183668c4
1960 changed files with 29853 additions and 10555 deletions

View file

@ -148,7 +148,7 @@
7. Set the object's toneBuffer attribute to tones.
*/
promise_test(() => {
promise_test(t => {
return createDtmfSender()
.then(dtmfSender => {
dtmfSender.insertDTMF('123');

View file

@ -118,7 +118,7 @@
validateCandidateParameter(iceTransport.getRemoteParameters());
}
promise_test(() => {
promise_test(t => {
const pc1 = new RTCPeerConnection();
const pc2 = new RTCPeerConnection();
@ -163,7 +163,7 @@
});
}, 'Two connected iceTransports should has matching local/remote candidates returned');
promise_test(() => {
promise_test(t => {
const pc1 = new RTCPeerConnection();
const pc2 = new RTCPeerConnection();
pc1.createDataChannel('');

View file

@ -0,0 +1,30 @@
<!doctype html>
<meta charset=utf-8>
<title>RTCPeerConnection addTrack does not deadlock</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script>
'use strict';
// This test sets up two peer connections using a sequence of operations
// that triggered a deadlock in Chrome. See https://crbug.com/736725.
// If a deadlock is introduced again, this test times out.
promise_test(async t => {
const pc1 = new RTCPeerConnection();
t.add_cleanup(() => pc1.close());
const stream = await navigator.mediaDevices.getUserMedia(
{audio: false, video: true});
const videoTrack = stream.getVideoTracks()[0];
t.add_cleanup(() => videoTrack.stop());
pc1.addTrack(videoTrack, stream);
const offer = await pc1.createOffer();
await pc1.setLocalDescription(offer);
const pc2 = new RTCPeerConnection();
t.add_cleanup(() => pc2.close());
const srdPromise = pc2.setRemoteDescription(offer);
pc2.addTrack(videoTrack, stream);
// The deadlock encountered in https://crbug.com/736725 occured here.
await srdPromise;
await pc2.createAnswer();
}, 'RTCPeerConnection addTrack does not deadlock.');
</script>

View file

@ -35,7 +35,7 @@
assert_equals(pc.canTrickleIceCandidates, null, 'canTrickleIceCandidates property is null');
}, 'canTrickleIceCandidates property is null prior to setRemoteDescription');
promise_test(function() {
promise_test(function(t) {
var pc = new RTCPeerConnection();
return pc.setRemoteDescription(new RTCSessionDescription({type: 'offer', sdp: sdp}))
@ -44,7 +44,7 @@
})
}, 'canTrickleIceCandidates property is true after setRemoteDescription with a=ice-options:trickle');
promise_test(function() {
promise_test(function(t) {
var pc = new RTCPeerConnection();
return pc.setRemoteDescription(new RTCSessionDescription({type: 'offer', sdp: sdp.replace('a=ice-options:trickle\r\n', '')}))

View file

@ -36,7 +36,7 @@
DOMString peerIdentity;
};
*/
promise_test(() => {
promise_test(t => {
const pc = new RTCPeerConnection();
const port = window.location.port;
@ -95,7 +95,7 @@
// When generating assertion, the RTCPeerConnection doesn't care if the returned assertion
// represents identity of different domain
promise_test(() => {
promise_test(t => {
const pc = new RTCPeerConnection();
const port = window.location.port;
@ -217,7 +217,7 @@
promise_test(t => {
const pc = new RTCPeerConnection();
pc.setIdentityProvider('nonexistent-origin.web-platform.test', {
pc.setIdentityProvider('nonexistent.web-platform.test', {
protocol: `non-existent`,
usernameHint: `alice@example.org`,
});
@ -278,7 +278,7 @@
value is provided for the peerIdentity member of RTCConfiguration, the value from
RTCConfiguration is used.
*/
promise_test(() => {
promise_test(t => {
const pc = new RTCPeerConnection({
peerIdentity: 'bob@example.net'
});
@ -302,7 +302,7 @@
9.6. setIdentityProvider
3. If any identity provider value has changed, discard any stored identity assertion.
*/
promise_test(() => {
promise_test(t => {
const pc = new RTCPeerConnection();
const port = window.location.port;
const [idpDomain] = getIdpDomains();

View file

@ -39,12 +39,12 @@
1. Gather the stats indicated by selector according to the stats selection algorithm.
2. Resolve p with the resulting RTCStatsReport object, containing the gathered stats.
*/
promise_test(() => {
promise_test(t => {
const pc = new RTCPeerConnection();
return pc.getStats();
}, 'getStats() with no argument should succeed');
promise_test(() => {
promise_test(t => {
const pc = new RTCPeerConnection();
return pc.getStats(null);
}, 'getStats(null) should succeed');
@ -160,7 +160,7 @@
- All stats objects referenced directly or indirectly by the RTCOutboundRTPStreamStats
objects added.
*/
promise_test(() => {
promise_test(t => {
const pc = new RTCPeerConnection();
return getTrackFromUserMedia('audio')
.then(([track, mediaStream]) => {
@ -183,7 +183,7 @@
- All stats objects referenced directly or indirectly by the RTCInboundRTPStreamStats
added.
*/
promise_test(() => {
promise_test(t => {
const pc = new RTCPeerConnection();
const transceiver = pc.addTransceiver('audio');

View file

@ -54,7 +54,7 @@
is, there is a current value for peerIdentity ), then this also establishes a
target peer identity.
*/
promise_test(() => {
promise_test(t => {
const pc1 = new RTCPeerConnection();
const pc2 = new RTCPeerConnection();

View file

@ -64,7 +64,7 @@
2. Set transceiver's mid value to the mid of the corresponding media
description.
*/
promise_test(() => {
promise_test(t => {
const pc = new RTCPeerConnection();
const transceiver = pc.addTransceiver('audio');
assert_equals(transceiver.mid, null);
@ -97,7 +97,7 @@
transceiver be the result.
3. Set transceiver's mid value to the mid of the corresponding media description.
*/
promise_test(() => {
promise_test(t => {
const pc1 = new RTCPeerConnection();
const pc2 = new RTCPeerConnection();
@ -109,7 +109,7 @@
.then(offer => {
return Promise.all([
pc1.setLocalDescription(offer),
pc2.setRemoteDescrption(offer)
pc2.setRemoteDescription(offer)
])
.then(() => {
const transceivers = pc2.getTransceivers();
@ -137,7 +137,7 @@
the RTCSessionDescription that is being rolled back, set the mid value
of that transceiver to null, as described by [JSEP] (section 4.1.8.2.).
*/
promise_test(() => {
promise_test(t => {
const pc = new RTCPeerConnection();
const transceiver = pc.addTransceiver('audio');
assert_equals(transceiver.mid, null);
@ -157,7 +157,7 @@
});
}, 'setLocalDescription(rollback) should unset transceiver.mid');
promise_test(() => {
promise_test(t => {
const pc = new RTCPeerConnection();
const transceiver1 = pc.addTransceiver('audio');
assert_equals(transceiver1.mid, null);
@ -202,7 +202,7 @@
addTrack, remove that transceiver from connection's set of transceivers,
as described by [JSEP] (section 4.1.8.2.).
*/
promise_test(() => {
promise_test(t => {
const pc1 = new RTCPeerConnection();
const pc2 = new RTCPeerConnection();

View file

@ -11,11 +11,8 @@
// https://w3c.github.io/webrtc-pc/archives/20170605/webrtc.html
// The following helper functions are called from RTCPeerConnection-helper.js:
// generateOffer()
// generateAnswer()
// assert_session_desc_not_equals()
// assert_session_desc_equals()
// test_state_change_event()
/*
4.3.2. Interface Definition
@ -48,76 +45,101 @@
/*
4.6.1. enum RTCSdpType
*/
promise_test(t => {
promise_test(async t => {
const pc = new RTCPeerConnection();
t.add_cleanup(() => pc.close());
// SDP is validated after WebIDL validation
return promise_rejects(t, new TypeError(),
pc.setRemoteDescription({
type: 'bogus',
sdp: 'bogus'
}));
try {
await pc.setRemoteDescription({ type: 'bogus', sdp: 'bogus' });
t.unreached_func("Should have rejected.");
} catch (e) {
assert_throws(new TypeError(), () => { throw e });
}
}, 'setRemoteDescription with invalid type and invalid SDP should reject with TypeError');
promise_test(t => {
promise_test(async t => {
const pc = new RTCPeerConnection();
t.add_cleanup(() => pc.close());
// SDP is validated after validating type
return promise_rejects(t, 'InvalidStateError',
pc.setRemoteDescription({
type: 'answer',
sdp: 'invalid'
}));
try {
await pc.setRemoteDescription({ type: 'answer', sdp: 'invalid' });
t.unreached_func("Should have rejected.");
} catch (e) {
assert_throws('InvalidStateError', () => { throw e });
}
}, 'setRemoteDescription() with invalid SDP and stable state should reject with InvalidStateError');
/* Dedicated signalingstate events test. */
promise_test(async t => {
const pc = new RTCPeerConnection();
const pc2 = new RTCPeerConnection();
t.add_cleanup(() => pc.close());
t.add_cleanup(() => pc2.close());
let eventCount = 0;
const states = [
'stable', 'have-local-offer', 'stable', 'have-remote-offer', 'closed'
];
pc.onsignalingstatechange = () =>
assert_equals(pc.signalingState, states[++eventCount]);
const assert_state = state => {
assert_equals(state, pc.signalingState);
assert_equals(state, states[eventCount]);
};
const offer = await pc.createOffer({ offerToReceiveAudio: true });
assert_state('stable');
await pc.setLocalDescription(offer);
assert_state('have-local-offer');
await pc2.setRemoteDescription(offer);
await pc2.setLocalDescription(await pc2.createAnswer());
await pc.setRemoteDescription(pc2.localDescription);
assert_state('stable');
await pc.setRemoteDescription(await pc2.createOffer());
assert_state('have-remote-offer');
pc.close();
assert_state('closed');
}, 'Negotiation should fire signalingsstate events');
/* Operations after returning to stable state */
promise_test(t => {
promise_test(async t => {
const pc = new RTCPeerConnection();
const pc2 = new RTCPeerConnection();
t.add_cleanup(() => pc.close());
t.add_cleanup(() => pc2.close());
test_state_change_event(t, pc,
['have-remote-offer', 'stable', 'have-remote-offer']);
return pc2.createOffer({ offerToReceiveAudio: true })
.then(offer1 =>
pc.setRemoteDescription(offer1)
.then(() => pc.createAnswer())
.then(answer => pc.setLocalDescription(answer))
.then(() => pc2.createOffer({ offerToReceiveVideo: true }))
.then(offer2 => {
return pc.setRemoteDescription(offer2)
.then(() => {
assert_equals(pc.signalingState, 'have-remote-offer');
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);
});
}));
const offer1 = await pc2.createOffer({ offerToReceiveAudio: true });
await pc.setRemoteDescription(offer1);
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);
}, 'Calling setRemoteDescription() again after one round of remote-offer/local-answer should succeed');
promise_test(t => {
promise_test(async t => {
const pc = new RTCPeerConnection();
const pc2 = new RTCPeerConnection();
t.add_cleanup(() => pc.close());
t.add_cleanup(() => pc2.close());
test_state_change_event(t, pc,
['have-local-offer', 'stable', 'have-remote-offer']);
return pc.createOffer({ offerToReceiveAudio: true })
.then(offer =>
pc.setLocalDescription(offer)
.then(() => generateAnswer(offer)))
.then(answer =>
pc.setRemoteDescription(answer)
.then(() => generateOffer({ pc, data: true }))
.then(offer =>
pc.setRemoteDescription(offer)
.then(() => {
assert_equals(pc.signalingState, 'have-remote-offer');
assert_session_desc_equals(pc.remoteDescription, offer);
assert_session_desc_equals(pc.currentRemoteDescription, answer);
assert_session_desc_equals(pc.pendingRemoteDescription, offer);
})));
const offer = await pc.createOffer({ offerToReceiveAudio: true });
await pc.setLocalDescription(offer);
await pc2.setRemoteDescription(offer);
const answer = await pc2.createAnswer();
await pc2.setLocalDescription(answer);
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);
}, 'Switching role from offerer to answerer after going back to stable state should succeed');
/*

View file

@ -38,7 +38,7 @@
possibly encode, and 127 represents silence.
*/
promise_test(() => {
promise_test(t => {
const pc1 = new RTCPeerConnection();
const pc2 = new RTCPeerConnection();

View file

@ -44,7 +44,7 @@
added.
*/
promise_test(async () => {
promise_test(async t => {
const caller = new RTCPeerConnection();
const callee = new RTCPeerConnection();
const { receiver } = caller.addTransceiver('audio');
@ -55,7 +55,7 @@
assert_stats_report_has_stats(statsReport, ['inbound-rtp']);
}, 'receiver.getStats() via addTransceiver should return stats report containing inbound-rtp stats');
promise_test(async () => {
promise_test(async t => {
const caller = new RTCPeerConnection();
const callee = new RTCPeerConnection();
const stream = await navigator.mediaDevices.getUserMedia({audio:true});

View file

@ -25,7 +25,7 @@
};
*/
promise_test(() => {
promise_test(t => {
const pc1 = new RTCPeerConnection();
const pc2 = new RTCPeerConnection();

View file

@ -39,7 +39,7 @@
objects added.
*/
promise_test(async () => {
promise_test(async t => {
const caller = new RTCPeerConnection();
const callee = new RTCPeerConnection();
const { sender } = caller.addTransceiver('audio');
@ -50,7 +50,7 @@
assert_stats_report_has_stats(statsReport, ['outbound-rtp']);
}, 'sender.getStats() via addTransceiver should return stats report containing outbound-rtp stats');
promise_test(async () => {
promise_test(async t => {
const caller = new RTCPeerConnection();
const callee = new RTCPeerConnection();
const stream = await navigator.mediaDevices.getUserMedia({audio:true});

View file

@ -8,7 +8,7 @@
127.0.0.1 www2.web-platform.test
127.0.0.1 xn--n8j6ds53lwwkrqhv28a.web-platform.test
127.0.0.1 xn--lve-6lad.web-platform.test
0.0.0.0 nonexistent-origin.web-platform.test
0.0.0.0 nonexistent.web-platform.test
*/
/*

View file

@ -0,0 +1,21 @@
This directory contains files that test for behavior relevant to webrtc,
but which is specified in protocol specifications from the IETF, not in
API recommendations from the W3C.
The main specifications are given in the following internet-drafts:
- draft-ietf-rtcweb-overview
- draft-ietf-rtcweb-transports
- draft-ietf-rtcweb-security-arch
- draft-ietf-rtcweb-security
- draft-ietf-rtcweb-rtp-usage
- draft-ietf-rtcweb-jsep
- draft-ietf-rtcweb-ip-handling
- draft-ietf-rtcweb-fec
- draft-ietf-rtcweb-data-protocol
- draft-ietf-rtcweb-data-channel
- RFC 7742, "WebRTC Video Processing and Codec Requirements"
- RFC 7874, "WebRTC Audio Codec and Processing Requirements"
An overview of the dependencies involved is in draft-jennings-rtcweb-deps

View file

@ -0,0 +1,63 @@
<!doctype html>
<meta charset=utf-8>
<title>RTCPeerConnection.prototype.createOffer</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/webrtc/RTCPeerConnection-helper.js"></script>
<script>
'use strict';
// Tests for conformance to RFC 7742,
// "WebRTC Video Processing and Codec Requirements"
// The document was formerly known as draft-ietf-rtcweb-video-codecs.
//
// This tests that the browser is a WebRTC Browser as defined there.
// TODO: Section 3.2: screen capture video MUST be prepared
// to handle resolution changes.
// TODO: Section 4: MUST support generating CVO (orientation)
// Section 5: Browsers MUST implement VP8 and H.264 Constrained Baseline
promise_test(async t => {
const pc = new RTCPeerConnection();
const offer = await pc.createOffer({offerToReceiveVideo: true});
let video_section_found = false;
for (let section of offer.sdp.split(/\r\nm=/)) {
if (section.search('video') != 0) {
continue;
}
video_section_found = true;
// RTPMAP lines have the format a=rtpmap:<pt> <codec>/<clock rate>
let rtpmap_regex = /\r\na=rtpmap:(\d+) (\S+)\/\d+\r\n/g;
let match = rtpmap_regex.exec(offer.sdp);
let payload_type_map = new Array();
while (match) {
payload_type_map[match[1]] = match[2];
match = rtpmap_regex.exec(offer.sdp);
}
assert_true(payload_type_map.indexOf('VP8') > -1,
'VP8 is supported');
assert_true(payload_type_map.indexOf('H264') > -1,
'H.264 is supported');
// TODO: Verify that one of the H.264 PTs supports constrained baseline
}
assert_true(video_section_found);
}, 'H.264 and VP8 should be supported in initial offer');
// TODO: Section 6: Recipients MUST be able to decode 320x240@20 fps
// TODO: Section 6.1: VP8 MUST support RFC 7741 payload formats
// TODO: Section 6.1: VP8 MUST respect max-fr/max-fs
// TODO: Section 6.1: VP8 MUST encode and decode square pixels
// TODO: Section 6.2: H.264 MUST support RFC 6184 payload formats
// TODO: Section 6.2: MUST support Constrained Baseline level 1.2
// TODO: Section 6.2: SHOULD support Constrained High level 1.3
// TODO: Section 6.2: MUST support packetization mode 1.
// TODO: Section 6.2: MUST include profile-level-id
// TODO: Section 6.2: SHOULD interpret max-mbps, max-smbps, max-fs et al
// TODO: Section 6.2: MUST NOT include sprop-parameter-sets
// TODO: Section 6.2: MUST support SEI "filler payload"
// TODO: Section 6.2: MUST support SEI "full frame freeze"
// TODO: Section 6.2: MUST be prepared to receive User Data messages
// TODO: Section 6.2: MUST encode and decode square pixels unless signaled
</script>