From 6bf0a5cb5034a7e684dcc3500e841785237ce2dd Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 7 Apr 2024 19:32:43 +0200 Subject: Adding upstream version 1:115.7.0. Signed-off-by: Daniel Baumann --- layout/base/tests/browser_bug1791083.js | 81 +++++++++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 layout/base/tests/browser_bug1791083.js (limited to 'layout/base/tests/browser_bug1791083.js') diff --git a/layout/base/tests/browser_bug1791083.js b/layout/base/tests/browser_bug1791083.js new file mode 100644 index 0000000000..fcc59f5c18 --- /dev/null +++ b/layout/base/tests/browser_bug1791083.js @@ -0,0 +1,81 @@ +/* Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +const URL = + "data:text/html," + + "" + + "" + + "Click Me" + + ""; + +function isAnchorHovered(win) { + return SpecialPowers.spawn( + win.gBrowser.selectedBrowser, + [], + async function () { + const a = content.document.querySelector("a"); + return a.matches(":hover"); + } + ); +} + +add_task(async function test() { + let newWin = await BrowserTestUtils.openNewBrowserWindow(); + + // This bug is only reproducible if the cursor is out of the viewport, so + // we resize the window to ensure the cursor is out of the viewport. + + // SynthesizeMouse isn't sufficient because it only synthesizes + // mouse events without actually moving the cursor permanently to a + // new location. + newWin.resizeTo(50, 50); + + BrowserTestUtils.loadURIString(newWin.gBrowser.selectedBrowser, URL); + await BrowserTestUtils.browserLoaded(newWin.gBrowser.selectedBrowser); + + await SpecialPowers.spawn( + newWin.gBrowser.selectedBrowser, + [], + async function () { + const a = content.document.querySelector("a"); + await EventUtils.synthesizeMouseAtCenter( + a, + { type: "mousemove" }, + content + ); + } + ); + + // We've hovered the anchor element. + let anchorHovered = await isAnchorHovered(newWin); + ok(anchorHovered, "Anchor should be hovered"); + + let locationChange = BrowserTestUtils.waitForLocationChange(newWin.gBrowser); + + // Click the anchor to navigate away + await SpecialPowers.spawn( + newWin.gBrowser.selectedBrowser, + [], + async function () { + const a = content.document.querySelector("a"); + await EventUtils.synthesizeMouseAtCenter( + a, + { type: "mousedown" }, + content + ); + await EventUtils.synthesizeMouseAtCenter(a, { type: "mouseup" }, content); + } + ); + await locationChange; + + // Navigate back to the previous page which has the anchor + locationChange = BrowserTestUtils.waitForLocationChange(newWin.gBrowser); + newWin.gBrowser.selectedBrowser.goBack(); + await locationChange; + + // Hover state should be cleared upon page caching. + anchorHovered = await isAnchorHovered(newWin); + ok(!anchorHovered, "Anchor should not be hovered"); + + BrowserTestUtils.closeWindow(newWin); +}); -- cgit v1.2.3