File: location-protocol-setter.html

package info (click to toggle)
firefox 144.0-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 4,637,504 kB
  • sloc: cpp: 7,576,692; javascript: 6,430,831; ansic: 3,748,119; python: 1,398,978; xml: 628,810; asm: 438,679; java: 186,194; sh: 63,212; makefile: 19,159; objc: 13,086; perl: 12,986; yacc: 4,583; cs: 3,846; pascal: 3,448; lex: 1,720; ruby: 1,003; exp: 762; php: 436; lisp: 258; awk: 247; sql: 66; sed: 53; csh: 10
file content (104 lines) | stat: -rw-r--r-- 2,052 bytes parent folder | download | duplicates (18)
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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
<!doctype html>
<title>Set location.protocol to schemes that throw</title>
<script src=/resources/testharness.js></script>
<script src=/resources/testharnessreport.js></script>
<div id=log></div>
<iframe src="data:text/html,<script>
onmessage = (e) => {
  let results = [];
  e.data.forEach((val) => {
    try {
      location.protocol = val;
      results.push('failure')
    } catch(e) {
      results.push(e.name)
    }
  });
  parent.postMessage(results, '*')
}
</script>"></iframe>
<iframe srcdoc="<script>
onmessage = (e) => {
  let results = [];
  e.data.forEach((val) => {
    try {
      location.protocol = val;
      results.push('failure')
    } catch(e) {
      results.push(e.name)
    }
  });
  parent.postMessage(results, '*')
}
</script>"></iframe>
<script>
  const broken = [
    '\x00',
    '\x01',
    '\x09', // becomes the empty string
    '\x0A', // becomes the empty string
    '\x0C',
    '\x0D',
    '\x20',
    '\x21',
    '\x7F',
    '\x80',
    '\xFF',
    ':',
    '†',
    '\x00x',
    '\x01x',
    '\x20x',
    '\x21x',
    '\x7Fx',
    '\x80x',
    '\xFFx',
    ':x',
    '†x',
    '\x00X',
    '\x01X',
    '\x20X',
    '\x21X',
    '\x7FX',
    '\x80X',
    '\xFFX',
    ':X',
    '†X',
    'x\x00',
    'x\x01',
    'x\x20',
    'x\x21',
    'x\x7F',
    'x\x80',
    'x\xFF',
    'x†',
    'X\x00',
    'X\x01',
    'X\x20',
    'X\x21',
    'X\x7F',
    'X\x80',
    'X\xFF',
    'X†',
  ];

  broken.forEach(val => {
    test(() => {
      assert_throws_dom("SyntaxError", () => { location.protocol = val })
    }, `${encodeURI(val)} (percent-encoded here for clarity) is not a scheme`)
  })
  let c = 0
  async_test((t) => {
    self.onload = t.step_func(() => {
      self.onmessage = t.step_func((e) => {
        assert_array_equals(e.data, broken.map(() => "SyntaxError"))
        c++
        if(c === 2) {
          t.done()
        }
      })
      self[0].postMessage(broken, "*")
      self[1].postMessage(broken, "*")
    })
  }, "Equivalent tests for data URL and srcdoc <iframe>s")
</script>