summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/html/browsers/browsing-the-web/history-traversal/event-order/same-document-traverse-immediate.html
blob: 51ea20b289dd01e25b64238447fc1df7df27cf12 (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
<!DOCTYPE html>
<meta charset="utf-8">
<title>Popstate/hashchange/load event ordering</title>

<script>
// Set these up super-early before we hit the network for the test harness, just in case.
window.eventOrder = [];
window.onhashchange = () => window.eventOrder.push("hashchange");
window.onpopstate = () => window.eventOrder.push("popstate");
window.onload = () => window.eventOrder.push("load");
</script>

<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>

<script>
async_test(t => {
  assert_array_equals(window.eventOrder, []);

  // 0 timeout is necessary because if we do location.hash assignment before load is finished firing it counts as a replacement.
  window.addEventListener("load", () => t.step_timeout(() => {
    assert_array_equals(window.eventOrder, ["load"]);

    window.addEventListener("hashchange", t.step_func(() => {
      assert_array_equals(window.eventOrder, ["load", "popstate", "hashchange"]);

      window.addEventListener("hashchange", t.step_func_done(() => {
        assert_array_equals(window.eventOrder, ["load", "popstate", "hashchange", "popstate", "hashchange"]);
      }));
    }), { once: true });

    location.hash = "#1";
    assert_array_equals(window.eventOrder, ["load", "popstate"]);
    history.back();
    assert_array_equals(window.eventOrder, ["load", "popstate"]);
  }, 0));
}, "when traversing back, before hashchange");
</script>