summaryrefslogtreecommitdiffstats
path: root/dom/u2f/tests/test_polyfill_interaction.html
blob: 871b7e4322849a030407f94aa484f8967a42af40 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
<!DOCTYPE HTML>
<html>
<head>
  <meta charset="utf-8">
  <title>Test that our U2F implementation interacts OK with the Google polyfill</title>
  <script src="/tests/SimpleTest/SimpleTest.js"></script>
  <link rel="stylesheet" href="/tests/SimpleTest/test.css"/>
  <script>
    // We want to run our test script at toplevel, because that's where the
    // polyfill runs.  But we also need to wait until the pref is set, so go
    // ahead and use a dynamically created script element.
    SimpleTest.waitForExplicitFinish();
    SpecialPowers.pushPrefEnv({ "set": [["security.webauth.u2f", true]] },
                              doTest);

    function doTest() {
        // Need a new global for the pref to really take effect.
        var iframe = document.createElement("iframe");
        document.documentElement.appendChild(iframe);
        var win = iframe.contentWindow;
        var s = document.createElement("script");
        s.textContent = `
          'use strict';
          try {
            var savedU2f = u2f;
            var savedRegister = savedU2f.register;
            var savedSign = savedU2f.sign;
            var u2f = u2f || {};
            u2f.register = function() {};
            u2f.sign = function() {};
            parent.is(u2f, savedU2f, "Should still have the right object");
            parent.is(u2f.register, savedRegister, "Should not allow overriding 'sign'");
            parent.is(u2f.sign, savedSign, "Should not allow overriding 'sign'");
          } catch (e) {
            parent.ok(false, "Threw an exception: " + e);
          } finally {
            parent.SimpleTest.finish();
          }
        `;
        win.document.documentElement.appendChild(s);
    }
  </script>
</head>
<body>
<p id="display"></p>
<div id="content" style="display: none"></div>
<pre id="test"></pre>
</body>
</html>