File: test_pushState_structuredclone.html

package info (click to toggle)
firefox 147.0-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 4,683,324 kB
  • sloc: cpp: 7,607,156; javascript: 6,532,492; ansic: 3,775,158; python: 1,415,368; xml: 634,556; asm: 438,949; java: 186,241; sh: 62,751; makefile: 18,079; objc: 13,092; perl: 12,808; yacc: 4,583; cs: 3,846; pascal: 3,448; lex: 1,720; ruby: 1,003; php: 436; lisp: 258; awk: 247; sql: 66; sed: 54; csh: 10; exp: 6
file content (51 lines) | stat: -rw-r--r-- 1,950 bytes parent folder | download | duplicates (20)
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
<!DOCTYPE HTML>
<html>
<head>
  <meta charset="utf-8" />
  <title>history.pushState with serializable objects in state</title>
  <script src="/tests/SimpleTest/SimpleTest.js"></script>
  <link rel="stylesheet" href="/tests/SimpleTest/test.css"/>
</head>
<body>
<p id="display"></p>
<script>
  add_task(async function test() {
    let state = {
      b: new Blob(['1234567890']),
      // CryptoKey
      k: await crypto.subtle.generateKey({ name: "HMAC", length: 256, hash: {name: "SHA-256"} }, true, ["sign", "verify"]),
      mr: new DOMMatrixReadOnly([1, 2, 3, 4, 5, 6]),
      m: new DOMMatrix([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]),
      pr: new DOMPointReadOnly(1, 2, 3, 4),
      p: new DOMPoint(4, 3, 2, 1),
      q: new DOMQuad(new DOMRectReadOnly(1, 2, 3, 4)),
      rr: new DOMRectReadOnly(1, 2, 3, 4),
      r: new DOMRect(1, 2, 3, 4),
      f: new File(['9876543210'], ''),
      i: new ImageData(4, 4),
      // RTCCertificate
      c: await RTCPeerConnection.generateCertificate({ name: 'ECDSA', namedCurve: 'P-256' }),
    };

    history.pushState(state, "", "?withState");
    ok(history.state instanceof Object,
       "pushState with an object should set history.state.");
    SimpleTest.isDeeply(history.state, state,
                        "Check that history.state retains all serializable fields.");

    history.pushState(undefined, "", "?withoutState");
    let promisePoppedState = new Promise(resolve => {
      window.addEventListener('popstate', event => {
        resolve(event.state);
      }, { once: true });
    });
    history.back();
    let poppedState = await promisePoppedState;
    ok(poppedState instanceof Object,
       "Going back from pushState with an object should return an object in the popstate event.");
    SimpleTest.isDeeply(poppedState, state,
                        "Check that going back from pushState retains all serializable fields.");
  });
</script>
</body>
</html>