mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-28 12:45:27 +00:00
1d940dfabd
MozReview-Commit-ID: 5tBbn4WW3cq --HG-- extra : rebase_source : e9e68bb54bc33ec764f1253d523f57d9eaf7e7fb
161 lines
5.2 KiB
HTML
161 lines
5.2 KiB
HTML
<!DOCTYPE HTML>
|
|
<html>
|
|
<head>
|
|
<script type="application/javascript" src="pc.js"></script>
|
|
</head>
|
|
<body>
|
|
<pre id="test">
|
|
<script type="application/javascript">
|
|
createHTML({
|
|
bug: "825703",
|
|
title: "RTCConfiguration valid/invalid permutations"
|
|
});
|
|
|
|
// ^^^ Don't insert data above this line without adjusting line number below!
|
|
var lineNumberAndFunction = {
|
|
// <--- 16 is the line this must be.
|
|
line: 17, func: () => new RTCPeerConnection().onaddstream = () => {}
|
|
};
|
|
|
|
var makePC = (config, expected_error) => {
|
|
var exception;
|
|
try {
|
|
new RTCPeerConnection(config).close();
|
|
} catch (e) {
|
|
exception = e;
|
|
}
|
|
is((exception? exception.name : "success"), expected_error || "success",
|
|
"RTCPeerConnection(" + JSON.stringify(config) + ")");
|
|
};
|
|
|
|
// The order of properties in objects is not guaranteed in JavaScript, so this
|
|
// transform produces json-comparable dictionaries. The resulting copy is only
|
|
// meant to be used in comparisons (e.g. array-ness is not preserved).
|
|
|
|
var toComparable = o =>
|
|
(typeof o != 'object' || !o)? o : Object.keys(o).sort().reduce((co, key) => {
|
|
co[key] = toComparable(o[key]);
|
|
return co;
|
|
}, {});
|
|
|
|
// This is a test of the iceServers parsing code + readable errors
|
|
runNetworkTest(() => {
|
|
var exception = null;
|
|
|
|
try {
|
|
new RTCPeerConnection().close();
|
|
} catch (e) {
|
|
exception = e;
|
|
}
|
|
ok(!exception, "RTCPeerConnection() succeeds");
|
|
exception = null;
|
|
|
|
makePC();
|
|
|
|
makePC(1, "TypeError");
|
|
|
|
makePC({});
|
|
|
|
makePC({ iceServers: [] });
|
|
|
|
makePC({ iceServers: [{ urls:"" }] }, "SyntaxError");
|
|
|
|
makePC({ iceServers: [
|
|
{ urls:"stun:127.0.0.1" },
|
|
{ urls:"stun:localhost", foo:"" },
|
|
{ urls: ["stun:127.0.0.1", "stun:localhost"] },
|
|
{ urls:"stuns:localhost", foo:"" },
|
|
{ urls:"turn:[::1]:3478", username:"p", credential:"p" },
|
|
{ urls:"turn:localhost:3478?transport=udp", username:"p", credential:"p" },
|
|
{ urls: ["turn:[::1]:3478", "turn:localhost"], username:"p", credential:"p" },
|
|
{ urls:"turns:localhost:3478?transport=udp", username:"p", credential:"p" },
|
|
{ url:"stun:localhost", foo:"" },
|
|
{ url:"turn:localhost", username:"p", credential:"p" }
|
|
]});
|
|
|
|
makePC({ iceServers: [{ urls: ["stun:127.0.0.1", ""] }] }, "SyntaxError");
|
|
|
|
makePC({ iceServers: [{ urls:"turns:localhost:3478", username:"p" }] }, "InvalidAccessError");
|
|
|
|
makePC({ iceServers: [{ url:"turns:localhost:3478", credential:"p" }] }, "InvalidAccessError");
|
|
|
|
makePC({ iceServers: [{ urls:"http:0.0.0.0" }] }, "SyntaxError");
|
|
|
|
try {
|
|
new RTCPeerConnection({ iceServers: [{ url:"http:0.0.0.0" }] }).close();
|
|
} catch (e) {
|
|
ok(e.message.indexOf("http") > 0,
|
|
"RTCPeerConnection() constructor has readable exceptions");
|
|
}
|
|
|
|
// Test getConfiguration
|
|
var config = {
|
|
bundlePolicy: "max-bundle",
|
|
iceTransportPolicy: "relay",
|
|
peerIdentity: null,
|
|
iceServers: [
|
|
{ urls: ["stun:127.0.0.1", "stun:localhost"], credentialType:"password" },
|
|
{ urls: ["turn:[::1]:3478"], username:"p", credential:"p", credentialType:"token" },
|
|
],
|
|
};
|
|
var pc = new RTCPeerConnection(config);
|
|
is(JSON.stringify(toComparable(pc.getConfiguration())),
|
|
JSON.stringify(toComparable(config)), "getConfiguration");
|
|
pc.close();
|
|
|
|
var push = prefs => new Promise(resolve =>
|
|
SpecialPowers.pushPrefEnv(prefs, resolve));
|
|
|
|
Promise.resolve()
|
|
// This set of tests are setting the about:config User preferences for default
|
|
// ice servers and checking the outputs when RTCPeerConnection() is
|
|
// invoked. See Bug 1167922 for more information.
|
|
.then(() => push({ set: [['media.peerconnection.default_iceservers', ""]] })
|
|
.then(() => makePC())
|
|
.then(() => push({ set: [['media.peerconnection.default_iceservers', "k"]] }))
|
|
.then(() => makePC())
|
|
.then(() => push({ set: [['media.peerconnection.default_iceservers', "[{\"urls\": [\"stun:stun.services.mozilla.com\"]}]"]] }))
|
|
.then(() => makePC()))
|
|
// This set of tests check that warnings work. See Bug 1254839 for more.
|
|
.then(() => {
|
|
var consoleService = SpecialPowers.Cc["@mozilla.org/consoleservice;1"]
|
|
.getService(SpecialPowers.Ci.nsIConsoleService);
|
|
var warning = "";
|
|
var listener = SpecialPowers.wrapCallbackObject({
|
|
QueryInterface(iid) {
|
|
if (![SpecialPowers.Ci.nsIConsoleListener,
|
|
SpecialPowers.Ci.nsISupports].some(i => iid.equals(i))) {
|
|
throw SpecialPowers.Cr.NS_NOINTERFACE;
|
|
}
|
|
return this;
|
|
},
|
|
|
|
observe(msg) {
|
|
if (msg.message.includes("JavaScript Warning")) {
|
|
warning = msg.message;
|
|
}
|
|
}
|
|
});
|
|
consoleService.registerListener(listener);
|
|
lineNumberAndFunction.func();
|
|
// Console output is asynchronous, so we must queue a task.
|
|
return wait(0).then(() => {
|
|
is(warning.split('"')[1],
|
|
"onaddstream is deprecated! Use peerConnection.ontrack instead.",
|
|
"warning logged");
|
|
var remainder = warning.split('"').slice(2).join('"');
|
|
info(remainder);
|
|
ok(remainder.includes('file: "' + window.location + '"'),
|
|
"warning has this file");
|
|
ok(remainder.includes('line: ' + lineNumberAndFunction.line),
|
|
"warning has correct line number");
|
|
consoleService.unregisterListener(listener);
|
|
});
|
|
})
|
|
.then(networkTestFinished);
|
|
});
|
|
</script>
|
|
</pre>
|
|
</body>
|
|
</html>
|