Bug 1873833 - Make tooltips work on anonymous content / UA widgets. r=smaug,Gijs
[gecko.git] / toolkit / components / tooltiptext / tests / browser_nac_tooltip.js
blob449c8b9da723bd973ac14ec8c9fd9910f61b36c6
1 /* Any copyright is dedicated to the Public Domain.
2  * http://creativecommons.org/publicdomain/zero/1.0/ */
3 /* eslint-disable mozilla/no-arbitrary-setTimeout */
5 "use strict";
7 add_setup(async function () {
8   await SpecialPowers.pushPrefEnv({ set: [["ui.tooltip.delay_ms", 0]] });
9 });
11 add_task(async function () {
12   await BrowserTestUtils.withNewTab(
13     {
14       gBrowser,
15       url: "data:text/html,<!DOCTYPE html>",
16     },
17     async function (browser) {
18       info("Moving mouse out of the way.");
19       await EventUtils.synthesizeAndWaitNativeMouseMove(browser, 300, 300);
21       await SpecialPowers.spawn(browser, [], function () {
22         let widget = content.document.insertAnonymousContent();
23         widget.root.innerHTML = `<button style="pointer-events: auto; position: absolute; width: 200px; height: 200px;" title="foo">bar</button>`;
24         let tttp = Cc[
25           "@mozilla.org/embedcomp/default-tooltiptextprovider;1"
26         ].getService(Ci.nsITooltipTextProvider);
28         let text = {};
29         let dir = {};
30         ok(
31           tttp.getNodeText(widget.root.querySelector("button"), text, dir),
32           "A tooltip should be shown for NAC"
33         );
34         is(text.value, "foo", "Tooltip text should be correct");
35       });
37       let awaitTooltipOpen = new Promise(resolve => {
38         let tooltipId = Services.appinfo.browserTabsRemoteAutostart
39           ? "remoteBrowserTooltip"
40           : "aHTMLTooltip";
41         let tooltip = document.getElementById(tooltipId);
42         tooltip.addEventListener(
43           "popupshown",
44           function (event) {
45             resolve(event.target);
46           },
47           { once: true }
48         );
49       });
51       info("Initial mouse move");
52       await EventUtils.synthesizeAndWaitNativeMouseMove(browser, 50, 5);
53       info("Waiting");
54       await new Promise(resolve => setTimeout(resolve, 400));
55       info("Second mouse move");
56       await EventUtils.synthesizeAndWaitNativeMouseMove(browser, 70, 5);
57       info("Waiting for tooltip to open");
58       let tooltip = await awaitTooltipOpen;
59       is(
60         tooltip.getAttribute("label"),
61         "foo",
62         "tooltip label should match expectation"
63       );
64     }
65   );
66 });