tor-browser

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

commit 84386d4e9762a83bc3069615122437ff36d321d3
parent aa1fb64b4ab55247735735d513aa905acb48ddd3
Author: Andreas Farre <farre@mozilla.com>
Date:   Tue, 14 Oct 2025 13:34:21 +0000

Bug 1994118 - Test replaceState inside back handler. r=zcorpan

Copy navigation-api/navigate-event/replaceState-inside-back-handler.html
test and make it consider the infinite recursion case.

Since the only observable check is an optional throw in spec, mark this
test as optonal.

Differential Revision: https://phabricator.services.mozilla.com/D268498

Diffstat:
Atesting/web-platform/meta/navigation-api/navigate-event/replaceState-inside-back-handler-infinite.optional.html.ini | 6++++++
Atesting/web-platform/tests/navigation-api/navigate-event/replaceState-inside-back-handler-infinite.optional.html | 21+++++++++++++++++++++
2 files changed, 27 insertions(+), 0 deletions(-)

diff --git a/testing/web-platform/meta/navigation-api/navigate-event/replaceState-inside-back-handler-infinite.optional.html.ini b/testing/web-platform/meta/navigation-api/navigate-event/replaceState-inside-back-handler-infinite.optional.html.ini @@ -0,0 +1,6 @@ +[replaceState-inside-back-handler-infinite.optional.html] + expected: + if os == "android": TIMEOUT + [infinite replaceState inside a navigate event for navigation.back()] + expected: + if os == "android": TIMEOUT diff --git a/testing/web-platform/tests/navigation-api/navigate-event/replaceState-inside-back-handler-infinite.optional.html b/testing/web-platform/tests/navigation-api/navigate-event/replaceState-inside-back-handler-infinite.optional.html @@ -0,0 +1,21 @@ +<!doctype html> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="../navigation-methods/return-value/resources/helpers.js"></script> +<script> +promise_test(async t => { + await new Promise(resolve => window.onload = () => t.step_timeout(resolve, 0)); + await navigation.navigate("#push").finished; + let { reject, promise } = Promise.withResolvers(); + navigation.addEventListener("navigate", () => { + try { + history.replaceState(null, "", "#"); + } catch (e) { + reject(e); + } + }); + await Promise.all([ + promise_rejects_dom(t, "SecurityError", promise, "Infinite recursion in replaceState"), + assertBothRejectDOM(t, navigation.back(), "AbortError")]); +}, "infinite replaceState inside a navigate event for navigation.back()"); +</script>