summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/content-security-policy/nonce-hiding/nonces.html
blob: 5ce14360e2860ebf2b25e7171d3cba97ce59746f (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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
<!DOCTYPE html>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<div id=log></div>
<script>
  const namespace_url= {
    "HTML": "http://www.w3.org/1999/xhtml",
    "SVG": "http://www.w3.org/2000/svg",
  }
  const test_cases = [
    ["meh"    , "HTML"],
    ["div"    , "HTML"],
    ["script" , "HTML"],
    ["meh"    , "SVG"],
    ["svg"    , "SVG"],
    ["script" , "SVG"],
    ["style"  , "HTML"],
    ["link"   , "HTML"]
  ];

  test_cases.forEach(([localName, namespace]) => {
    test(t => {
      const element = document.createElementNS(namespace_url[namespace], localName);
      t.add_cleanup(() => element.remove());
      assert_equals(element.nonce, "", "Initial IDL attribute value");
      assert_equals(element.getAttribute("nonce"), null, "Initial content attribute");

      element.setAttribute("nonce", "x");
      assert_equals(element.nonce, "x", "IDL attribute is modified after content attribute set");
      assert_equals(element.getAttribute("nonce"), "x", "Content attribute is modified after content attribute set");

      document.body.appendChild(element);
      assert_equals(element.nonce, "x", "IDL attribute is unchanged after element insertion");
      assert_equals(element.getAttribute("nonce"), "", "Content attribute is changed after element insertion");
    }, `Basic nonce tests for ${localName} in ${namespace} namespace`);

    test(t => {
      const element = document.createElementNS(namespace_url[namespace], localName);
      t.add_cleanup(() => element.remove());
      element.setAttribute("nonce", "x");
      assert_equals(element.nonce, "x", "IDL attribute is modified after content attribute set");

      element.removeAttribute("nonce");
      assert_equals(element.nonce, "", "IDL attribute is empty after content attribute removal");
    }, `Ensure that removal of content attribute does not affect IDL attribute for ${localName} in ${namespace} namespace`);

    test(t => {
      const element = document.createElementNS(namespace_url[namespace], localName);
      t.add_cleanup(() => element.remove());
      assert_equals(element.nonce, "");
      assert_equals(element.getAttribute("nonce"), null);

      element.setAttribute("nonce", "");
      assert_equals(element.nonce, "");
      assert_equals(element.getAttribute("nonce"), "");

      document.body.appendChild(element);
      assert_equals(element.nonce, "");
      assert_equals(element.getAttribute("nonce"), "");

      element.removeAttribute("nonce");
      assert_equals(element.nonce, "");
      assert_equals(element.getAttribute("nonce"), null);
    }, `Test empty nonces for ${localName} in ${namespace} namespace`);
  });
</script>