Bug 1266456 - part4: HTMLTooltip support XUL docs using page instead of window;r=ochameau
Some test documents are using a <page> object instead of a <window> object.
When inserting the tooltip container inside of the document, the HTMLTooltip
will now insert the container in the documentElement
MozReview-Commit-ID: F57vP2lfvrg
--- a/devtools/client/shared/test/browser_html_tooltip-01.js
+++ b/devtools/client/shared/test/browser_html_tooltip-01.js
@@ -4,43 +4,61 @@
"use strict";
/**
* Test the HTMLTooltip show & hide methods.
*/
const HTML_NS = "http://www.w3.org/1999/xhtml";
-const TEST_URI = `data:text/xml;charset=UTF-8,<?xml version="1.0"?>
+const TEST_WINDOW_URI = `data:text/xml;charset=UTF-8,<?xml version="1.0"?>
<?xml-stylesheet href="chrome://global/skin/global.css"?>
<?xml-stylesheet href="chrome://devtools/skin/tooltips.css"?>
<window xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
title="Tooltip test">
<vbox flex="1">
<hbox id="box1" flex="1">test1</hbox>
<hbox id="box2" flex="1">test2</hbox>
<hbox id="box3" flex="1">test3</hbox>
<hbox id="box4" flex="1">test4</hbox>
</vbox>
</window>`;
+const TEST_PAGE_URI = `data:text/xml;charset=UTF-8,<?xml version="1.0"?>
+ <?xml-stylesheet href="chrome://global/skin/global.css"?>
+ <?xml-stylesheet href="chrome://devtools/skin/tooltips.css"?>
+ <page xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
+ title="Tooltip test with document using a Page element">
+ <vbox flex="1">
+ <hbox id="box1" flex="1">test1</hbox>
+ </vbox>
+ </page>`;
+
const {HTMLTooltip} = require("devtools/client/shared/widgets/HTMLTooltip");
loadHelperScript("helper_html_tooltip.js");
function getTooltipContent(doc) {
let div = doc.createElementNS(HTML_NS, "div");
div.style.height = "50px";
div.style.boxSizing = "border-box";
div.textContent = "tooltip";
return div;
}
add_task(function* () {
- yield addTab("about:blank");
- let [,, doc] = yield createHost("bottom", TEST_URI);
+ info("Test showing a basic tooltip in XUL document using <window>");
+ yield testTooltipForUri(TEST_WINDOW_URI);
+
+ info("Test showing a basic tooltip in XUL document using <page>");
+ yield testTooltipForUri(TEST_PAGE_URI);
+});
+
+function* testTooltipForUri(uri) {
+ let tab = yield addTab("about:blank");
+ let [,, doc] = yield createHost("bottom", uri);
let tooltip = new HTMLTooltip({doc}, {});
info("Set tooltip content");
tooltip.setContent(getTooltipContent(doc), {width: 100, height: 50});
is(tooltip.isVisible(), false, "Tooltip is not visible");
@@ -66,9 +84,11 @@ add_task(function* () {
let onPopupHidden = tooltip.once("hidden");
tooltip.hide();
yield onPopupHidden;
is(hidden, 1, "Event hidden was fired once");
yield waitForReflow(tooltip);
is(tooltip.isVisible(), false, "Tooltip is not visible");
-});
+
+ yield removeTab(tab);
+}
--- a/devtools/client/shared/widgets/HTMLTooltip.js
+++ b/devtools/client/shared/widgets/HTMLTooltip.js
@@ -72,17 +72,17 @@ function HTMLTooltip(toolbox,
this._toggle = new TooltipToggle(this);
this.startTogglingOnHover = this._toggle.start.bind(this._toggle);
this.stopTogglingOnHover = this._toggle.stop.bind(this._toggle);
this.container = this._createContainer();
if (this._isXUL()) {
- this.doc.querySelector("window").appendChild(this.container);
+ this.doc.documentElement.appendChild(this.container);
} else {
// In non-XUL context the container is ready to use as is.
this.doc.body.appendChild(this.container);
}
}
module.exports.HTMLTooltip = HTMLTooltip;