tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

serialization-via-history.https.html (1414B)


      1 <!DOCTYPE html>
      2 <meta charset="utf-8">
      3 <title>SharedArrayBuffers cloning via history's methods invoking StructuredSerializeForStorage</title>
      4 <link rel="help" href="https://html.spec.whatwg.org/multipage/#structuredserializeforstorage">
      5 <link rel="help" href="https://html.spec.whatwg.org/multipage/#dom-history-pushstate">
      6 <link rel="help" href="https://html.spec.whatwg.org/multipage/#dom-history-replacestate">
      7 <link rel="author" title="Domenic Denicola" href="mailto:d@domenic.me">
      8 <script src="/resources/testharness.js"></script>
      9 <script src="/resources/testharnessreport.js"></script>
     10 
     11 <script>
     12 "use strict";
     13 
     14 for (const method of ["pushState", "replaceState"]) {
     15  test(() => {
     16    assert_throws_dom("DataCloneError", () => {
     17      history[method](new SharedArrayBuffer(), "dummy title");
     18    });
     19  }, `history.${method}(): simple case`);
     20 
     21  test(() => {
     22    let getter1Called = false;
     23    let getter2Called = false;
     24    assert_throws_dom("DataCloneError", () => {
     25      history[method]([
     26        { get x() { getter1Called = true; return 5; } },
     27        new SharedArrayBuffer(),
     28        { get x() { getter2Called = true; return 5; } }
     29      ], "dummy title");
     30    });
     31 
     32    assert_true(getter1Called, "The getter before the SAB must have been called");
     33    assert_false(getter2Called, "The getter after the SAB must not have been called");
     34  }, `history.${method}(): is interleaved correctly`);
     35 }
     36 </script>