summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/content-security-policy/webrtc/webrtc.js
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--testing/web-platform/tests/content-security-policy/webrtc/webrtc.js56
1 files changed, 56 insertions, 0 deletions
diff --git a/testing/web-platform/tests/content-security-policy/webrtc/webrtc.js b/testing/web-platform/tests/content-security-policy/webrtc/webrtc.js
new file mode 100644
index 0000000000..a4075557ad
--- /dev/null
+++ b/testing/web-platform/tests/content-security-policy/webrtc/webrtc.js
@@ -0,0 +1,56 @@
+
+// Creates two RTCPeerConnection and tries to connect them. Returns
+// "allowed" if the connection is permitted, "blocked" if it is
+// blocked on both sides and "inconsistent" in the event that the
+// result is not the same on both sides (should never happen).
+async function tryConnect() {
+ const pc1 = new RTCPeerConnection();
+ const pc2 = new RTCPeerConnection();
+
+ // Returns a promise which resolves to a boolean which is true
+ // if and only if pc.iceConnectionState settles in the "failed"
+ // state, and never transitions to any state other than "new"
+ // or "failed."
+ const pcFailed = (pc) => {
+ return new Promise((resolve, _reject) => {
+ pc.oniceconnectionstatechange = (e) => {
+ resolve(pc.iceConnectionState == "failed");
+ };
+ });
+ }
+ pc1Failed = pcFailed(pc1);
+ pc2Failed = pcFailed(pc2);
+
+ // Creating a data channel is necessary to induce negotiation:
+ const channel = pc1.createDataChannel('test');
+
+ // Usual webrtc signaling dance:
+ pc1.onicecandidate = ({candidate}) => pc2.addIceCandidate(candidate);
+ pc2.onicecandidate = ({candidate}) => pc1.addIceCandidate(candidate);
+ const offer = await pc1.createOffer();
+ await pc1.setLocalDescription(offer);
+ await pc2.setRemoteDescription(pc1.localDescription);
+ const answer = await pc2.createAnswer();
+ await pc2.setLocalDescription(answer);
+ await pc1.setRemoteDescription(pc2.localDescription);
+
+ const failed1 = await pc1Failed;
+ const failed2 = await pc2Failed;
+ if(failed1 && failed2) {
+ return 'blocked';
+ } else if(!failed1 && !failed2) {
+ return 'allowed';
+ } else {
+ return 'inconsistent';
+ }
+}
+
+async function expectAllow() {
+ promise_test(async () => assert_equals(await tryConnect(), 'allowed'));
+}
+
+async function expectBlock() {
+ promise_test(async () => assert_equals(await tryConnect(), 'blocked'));
+}
+
+// vim: set ts=4 sw=4 et :