summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/soft-navigation-heuristics/popstate-multiple-backs.tentative.html
diff options
context:
space:
mode:
Diffstat (limited to 'testing/web-platform/tests/soft-navigation-heuristics/popstate-multiple-backs.tentative.html')
-rw-r--r--testing/web-platform/tests/soft-navigation-heuristics/popstate-multiple-backs.tentative.html64
1 files changed, 64 insertions, 0 deletions
diff --git a/testing/web-platform/tests/soft-navigation-heuristics/popstate-multiple-backs.tentative.html b/testing/web-platform/tests/soft-navigation-heuristics/popstate-multiple-backs.tentative.html
new file mode 100644
index 0000000000..fd87f5f03e
--- /dev/null
+++ b/testing/web-platform/tests/soft-navigation-heuristics/popstate-multiple-backs.tentative.html
@@ -0,0 +1,64 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+<meta charset="utf-8">
+<title>Soft navigation with multiple popstate calls.</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/testdriver.js"></script>
+<script src="/resources/testdriver-vendor.js"></script>
+<script src="resources/soft-navigation-helper.js"></script>
+</head>
+<body>
+ <main id=main>
+ <div>
+ <a id=link>Click me!</a>
+ </div>
+ </main>
+ <script>
+ // Push state 4 times, as history.back() calls will trigger popstate
+ // events.
+ history.pushState({}, "", "foobar.html");
+ history.pushState({}, "", "another_one.html");
+ history.pushState({}, "", "and_another.html");
+ history.pushState({}, "", "and_yet_another.html");
+
+ // This function runs at the start of the popstate event.
+ const eventPrepWork = t => {
+ // If this is an event due to the first click, go back() twice more.
+ if (!t.popped) {
+ step_timeout(()=>history.back(), 0);
+ step_timeout(()=>history.back(), 0);
+ t.popped = 0;
+ }
+ ++t.popped;
+ // return true for the second time the event fires, which is the first
+ // back() triggered by the popstate event. The means that the first one
+ // of those back() navigations would trigger a soft navigation, but not
+ // the last one.
+ return t.popped == 2;
+ }
+ const link = document.getElementById("link");
+ link.addEventListener("click", () => {
+ history.back();
+ timestamps[counter]["eventEnd"] = performance.now();
+ });
+ testSoftNavigation({
+ addContent: () => {
+ // Add the content to the main element
+ const main = document.getElementById("main");
+ main.removeChild(document.getElementsByTagName("div")[0]);
+ const div = document.createElement("div");
+ const text = document.createTextNode("Lorem ipsum");
+ div.appendChild(text);
+ div.style="font-size: 3em";
+ main.appendChild(div);
+ },
+ link: link,
+ eventPrepWork: eventPrepWork,
+ testName: "A soft navigation that started from a back() call inside a "
+ + "popstate event is recognized by SoftNavigationHeuristics",
+ eventType: "popstate"});
+ </script>
+</body>
+</html>