| Index: third_party/WebKit/LayoutTests/imported/wpt/webrtc/rtcpeerconnection/rtcpeerconnection-constructor.html
|
| diff --git a/third_party/WebKit/LayoutTests/imported/wpt/webrtc/rtcpeerconnection/rtcpeerconnection-constructor.html b/third_party/WebKit/LayoutTests/imported/wpt/webrtc/rtcpeerconnection/rtcpeerconnection-constructor.html
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..a451b6cc04b8bf5b68fb6a19972c4454a2eb05d5
|
| --- /dev/null
|
| +++ b/third_party/WebKit/LayoutTests/imported/wpt/webrtc/rtcpeerconnection/rtcpeerconnection-constructor.html
|
| @@ -0,0 +1,154 @@
|
| +<!doctype html>
|
| +<meta charset=utf-8>
|
| +<title>RTCPeerConnection constructor</title>
|
| +<script src=/resources/testharness.js></script>
|
| +<script src=/resources/testharnessreport.js></script>
|
| +<script>
|
| +test(function() {
|
| + assert_equals(RTCPeerConnection.length, 0);
|
| +}, 'RTCPeerConnection.length');
|
| +
|
| +// These are used for string and number dictionary members to see if they are
|
| +// being accessed at all.
|
| +const toStringThrows = { toString: function() { throw new Error; } };
|
| +const toNumberThrows = Symbol();
|
| +
|
| +// Test the first argument of the constructor. The key is the argument itself,
|
| +// and the value is the first argument for assert_throws, or false if no
|
| +// exception should be thrown.
|
| +const testArgs = {
|
| + // No argument or equivalent.
|
| + '': false,
|
| + 'null': false,
|
| + 'undefined': false,
|
| + '{}': false,
|
| +
|
| + // iceServers
|
| + '{ iceServers: null }': new TypeError,
|
| + '{ iceServers: undefined }': false,
|
| + '{ iceServers: [] }': false,
|
| + '{ iceServers: [{}] }': new TypeError,
|
| + '{ iceServers: [null] }': new TypeError,
|
| + '{ iceServers: [undefined] }': new TypeError,
|
| + '{ iceServers: [{ urls: "stun:stun1.example.net" }] }': false,
|
| + '{ iceServers: [{ urls: [] }] }': false,
|
| + '{ iceServers: [{ urls: ["stun:stun1.example.net"] }] }': false,
|
| + '{ iceServers: [{ urls: ["stun:stun1.example.net", "stun:stun2.example.net"] }] }': false,
|
| + // username and password required for turn: and turns:
|
| + '{ iceServers: [{ urls: "turns:turn.example.org", username: "user", credential: "cred" }] }': false,
|
| + '{ iceServers: [{ urls: "turn:turn.example.net", username: "user", credential: "cred" }] }': false,
|
| + '{ iceServers: [{ urls: ["turns:turn.example.org", "turn:turn.example.net"], username: "user", credential: "cred" }] }': false,
|
| + '{ iceServers: [{ urls: "stun:stun1.example.net", credentialType: "password" }] }': false,
|
| + '{ iceServers: [{ urls: "stun:stun1.example.net", credentialType: "token" }] }': false,
|
| + '{ iceServers: [{ urls: "turn:turn.example.net" }] }': 'InvalidAccessError',
|
| + '{ iceServers: [{ urls: "turn:turn.example.net", username: "user" }] }': 'InvalidAccessError',
|
| + '{ iceServers: [{ urls: "turn:turn.example.net", credential: "cred" }] }': 'InvalidAccessError',
|
| + '{ iceServers: [{ urls: "turns:turn.example.org" }] }': 'InvalidAccessError',
|
| + '{ iceServers: [{ urls: "turns:turn.example.org", username: "user" }] }': 'InvalidAccessError',
|
| + '{ iceServers: [{ urls: "turns:turn.example.org", credential: "cred" }] }': 'InvalidAccessError',
|
| + '{ iceServers: [{ urls: "relative-url" }] }': 'SyntaxError',
|
| + '{ iceServers: [{ urls: "http://example.com" }] }': 'SyntaxError',
|
| + // credentialType
|
| + '{ iceServers: [{ urls: [] }] }': false,
|
| + '{ iceServers: [{ urls: [], credentialType: "password" }] }': false,
|
| + '{ iceServers: [{ urls: [], credentialType: "token" }] }': false,
|
| + '{ iceServers: [{ urls: [], credentialType: "invalid" }] }': new TypeError,
|
| + // Blink and Gecko fall back to url, but it's not in the spec.
|
| + '{ iceServers: [{ url: "stun:stun1.example.net" }] }': new TypeError,
|
| +
|
| + // iceTransportPolicy
|
| + '{ iceTransportPolicy: null }': new TypeError,
|
| + '{ iceTransportPolicy: undefined }': false,
|
| + '{ iceTransportPolicy: "relay" }': false,
|
| + '{ iceTransportPolicy: "all" }': false,
|
| + '{ iceTransportPolicy: "invalid" }': new TypeError,
|
| + // "none" is in Blink and Gecko's IDL, but not in the spec.
|
| + '{ iceTransportPolicy: "none" }': new TypeError,
|
| + // iceTransportPolicy is called iceTransports in Blink.
|
| + '{ iceTransports: "invalid" }': false,
|
| + '{ iceTransports: "none" }': false,
|
| +
|
| + // bundlePolicy
|
| + '{ bundlePolicy: null }': new TypeError,
|
| + '{ bundlePolicy: undefined }': false,
|
| + '{ bundlePolicy: "balanced" }': false,
|
| + '{ bundlePolicy: "max-compat" }': false,
|
| + '{ bundlePolicy: "max-bundle" }': false,
|
| + '{ bundlePolicy: "invalid" }': new TypeError,
|
| +
|
| + // rtcpMuxPolicy
|
| + '{ rtcpMuxPolicy: null }': new TypeError,
|
| + '{ rtcpMuxPolicy: undefined }': false,
|
| + '{ rtcpMuxPolicy: "negotiate" }': false,
|
| + '{ rtcpMuxPolicy: "require" }': false,
|
| + '{ rtcpMuxPolicy: "invalid" }': new TypeError,
|
| +
|
| + // peerIdentity
|
| + '{ peerIdentity: toStringThrows }': new Error,
|
| +
|
| + // certificates
|
| + '{ certificates: null }': new TypeError,
|
| + '{ certificates: undefined }': false,
|
| + '{ certificates: [] }': false,
|
| + '{ certificates: [null] }': new TypeError,
|
| + '{ certificates: [undefined] }': new TypeError,
|
| +
|
| + // iceCandidatePoolSize
|
| + '{ iceCandidatePoolSize: toNumberThrows }': new TypeError,
|
| +}
|
| +
|
| +for (const arg in testArgs) {
|
| + const expr = 'new RTCPeerConnection(' + arg + ')';
|
| + test(function() {
|
| + const throws = testArgs[arg];
|
| + if (throws) {
|
| + assert_throws(throws, function() {
|
| + eval(expr);
|
| + });
|
| + } else {
|
| + eval(expr);
|
| + }
|
| + }, expr);
|
| +}
|
| +
|
| +promise_test(function() {
|
| + return RTCPeerConnection.generateCertificate({ name: "ECDSA", namedCurve: "P-256" })
|
| + .then(certificate => new RTCPeerConnection({ certificates: [certificate] }));
|
| +}, 'new RTCPeerConnection({ certificates: [certificate] })');
|
| +
|
| +promise_test(function() {
|
| + return RTCPeerConnection.generateCertificate({ name: "ECDSA", namedCurve: "P-256", expires: 0 })
|
| + .then(certificate => {
|
| + assert_less_than_equal(certificate.expires, Date.now());
|
| + assert_throws('InvalidAccessError', function() {
|
| + new RTCPeerConnection({ certificates: [certificate] });
|
| + });
|
| + });
|
| +}, 'new RTCPeerConnection({ certificates: [expiredCertificate] })');
|
| +
|
| +// The initial values of attributes of RTCPeerConnection.
|
| +const initialState = {
|
| + 'localDescription': null,
|
| + 'currentLocalDescription': null,
|
| + 'pendingLocalDescription': null,
|
| + 'remoteDescription': null,
|
| + 'currentRemoteDescription': null,
|
| + 'pendingRemoteDescription': null,
|
| + 'signalingState': 'stable',
|
| + 'iceGatheringState': 'new',
|
| + 'iceConnectionState': 'new',
|
| + 'connectionState': 'new',
|
| + 'canTrickleIceCandidates': null,
|
| + // TODO: defaultIceServers
|
| +};
|
| +
|
| +for (const attr in initialState) {
|
| + test(function() {
|
| + // Use one RTCPeerConnection instance for all initial value tests.
|
| + if (!window.pc) {
|
| + window.pc = new RTCPeerConnection;
|
| + }
|
| + assert_equals(pc[attr], initialState[attr]);
|
| + }, attr + ' initial value');
|
| +}
|
| +</script>
|
|
|