summaryrefslogtreecommitdiffstats
path: root/browser/base/content/test/tabs/browser_tab_tooltips.js
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-19 00:47:55 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-19 00:47:55 +0000
commit26a029d407be480d791972afb5975cf62c9360a6 (patch)
treef435a8308119effd964b339f76abb83a57c29483 /browser/base/content/test/tabs/browser_tab_tooltips.js
parentInitial commit. (diff)
downloadfirefox-26a029d407be480d791972afb5975cf62c9360a6.tar.xz
firefox-26a029d407be480d791972afb5975cf62c9360a6.zip
Adding upstream version 124.0.1.upstream/124.0.1
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'browser/base/content/test/tabs/browser_tab_tooltips.js')
-rw-r--r--browser/base/content/test/tabs/browser_tab_tooltips.js149
1 files changed, 149 insertions, 0 deletions
diff --git a/browser/base/content/test/tabs/browser_tab_tooltips.js b/browser/base/content/test/tabs/browser_tab_tooltips.js
new file mode 100644
index 0000000000..ee82816bce
--- /dev/null
+++ b/browser/base/content/test/tabs/browser_tab_tooltips.js
@@ -0,0 +1,149 @@
+// Offset within the tab for the mouse event
+const MOUSE_OFFSET = 7;
+
+// Normal tooltips are positioned vertically at least this amount
+const MIN_VERTICAL_TOOLTIP_OFFSET = 18;
+
+function openTooltip(node, tooltip) {
+ let tooltipShownPromise = BrowserTestUtils.waitForEvent(
+ tooltip,
+ "popupshown"
+ );
+ window.windowUtils.disableNonTestMouseEvents(true);
+ EventUtils.synthesizeMouse(node, 2, 2, { type: "mouseover" });
+ EventUtils.synthesizeMouse(node, 4, 4, { type: "mousemove" });
+ EventUtils.synthesizeMouse(node, MOUSE_OFFSET, MOUSE_OFFSET, {
+ type: "mousemove",
+ });
+ EventUtils.synthesizeMouse(node, 2, 2, { type: "mouseout" });
+ window.windowUtils.disableNonTestMouseEvents(false);
+ return tooltipShownPromise;
+}
+
+function closeTooltip(node, tooltip) {
+ let tooltipHiddenPromise = BrowserTestUtils.waitForEvent(
+ tooltip,
+ "popuphidden"
+ );
+ EventUtils.synthesizeMouse(document.documentElement, 2, 2, {
+ type: "mousemove",
+ });
+ return tooltipHiddenPromise;
+}
+
+// This test verifies that the tab tooltip appears at the correct location, aligned
+// with the bottom of the tab, and that the tooltip appears near the close button.
+add_task(async function () {
+ const tabUrl =
+ "data:text/html,<html><head><title>A Tab</title></head><body>Hello</body></html>";
+ let tab = await BrowserTestUtils.openNewForegroundTab(gBrowser, tabUrl);
+
+ let tooltip = document.getElementById("tabbrowser-tab-tooltip");
+ await openTooltip(tab, tooltip);
+
+ let tabRect = tab.getBoundingClientRect();
+ let tooltipRect = tooltip.getBoundingClientRect();
+
+ isfuzzy(
+ tooltipRect.left,
+ tabRect.left + MOUSE_OFFSET,
+ 1,
+ "tooltip left position for tab"
+ );
+ Assert.greaterOrEqual(
+ tooltipRect.top,
+ tabRect.top + MIN_VERTICAL_TOOLTIP_OFFSET + MOUSE_OFFSET,
+ "tooltip top position for tab"
+ );
+ is(
+ tooltip.getAttribute("position"),
+ "",
+ "tooltip position attribute for tab"
+ );
+
+ await closeTooltip(tab, tooltip);
+
+ await openTooltip(tab.closeButton, tooltip);
+
+ let closeButtonRect = tab.closeButton.getBoundingClientRect();
+ tooltipRect = tooltip.getBoundingClientRect();
+
+ isfuzzy(
+ tooltipRect.left,
+ closeButtonRect.left + MOUSE_OFFSET,
+ 1,
+ "tooltip left position for close button"
+ );
+ Assert.greater(
+ tooltipRect.top,
+ closeButtonRect.top + MIN_VERTICAL_TOOLTIP_OFFSET + MOUSE_OFFSET,
+ "tooltip top position for close button"
+ );
+ ok(
+ !tooltip.hasAttribute("position"),
+ "tooltip position attribute for close button"
+ );
+
+ await closeTooltip(tab, tooltip);
+
+ BrowserTestUtils.removeTab(tab);
+});
+
+// This test verifies that a mouse wheel closes the tooltip.
+add_task(async function () {
+ const tabUrl =
+ "data:text/html,<html><head><title>A Tab</title></head><body>Hello</body></html>";
+ let tab = await BrowserTestUtils.openNewForegroundTab(gBrowser, tabUrl);
+
+ let tooltip = document.getElementById("tabbrowser-tab-tooltip");
+ await openTooltip(tab, tooltip);
+
+ EventUtils.synthesizeWheel(tab, 4, 4, {
+ deltaMode: WheelEvent.DOM_DELTA_LINE,
+ deltaY: 1.0,
+ });
+
+ is(tooltip.state, "closed", "wheel event closed the tooltip");
+
+ BrowserTestUtils.removeTab(tab);
+});
+
+// This test verifies that the tooltip in the tab manager panel matches the
+// tooltip in the tab strip.
+add_task(async function () {
+ // Open a new tab
+ const tabUrl = "https://example.com";
+ let tab = await BrowserTestUtils.openNewForegroundTab(gBrowser, tabUrl);
+
+ // Make the popup of allTabs showing up
+ gTabsPanel.init();
+ let allTabsView = document.getElementById("allTabsMenu-allTabsView");
+ let allTabsPopupShownPromise = BrowserTestUtils.waitForEvent(
+ allTabsView,
+ "ViewShown"
+ );
+ gTabsPanel.showAllTabsPanel();
+ await allTabsPopupShownPromise;
+
+ // Get tooltips and compare them
+ let tabInPanel = Array.from(
+ gTabsPanel.allTabsViewTabs.querySelectorAll(".all-tabs-button")
+ ).at(-1).label;
+ let tabInTabStrip = tab.getAttribute("label");
+
+ is(
+ tabInPanel,
+ tabInTabStrip,
+ "Tooltip in tab manager panel matches tooltip in tab strip"
+ );
+
+ // Close everything
+ let allTabsPopupHiddenPromise = BrowserTestUtils.waitForEvent(
+ allTabsView.panelMultiView,
+ "PanelMultiViewHidden"
+ );
+ gTabsPanel.hideAllTabsPanel();
+ await allTabsPopupHiddenPromise;
+
+ BrowserTestUtils.removeTab(tab);
+});