Bug 1266456 - part4: HTMLTooltip support XUL docs using page instead of window;r=ochameau draft
authorJulian Descottes <jdescottes@mozilla.com>
Wed, 22 Jun 2016 19:44:59 +0200
changeset 381151 3740bcf6a94faae214336f5dc0cdfd1eea0f346e
parent 381150 c99aba735f0ed75fb79ff161afd1a848688a45b6
child 381152 3ddfdc6ca484e051c3e2291c62e0af2367d8df3a
push id21409
push userjdescottes@mozilla.com
push dateFri, 24 Jun 2016 14:54:55 +0000
reviewersochameau
bugs1266456
milestone50.0a1
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
devtools/client/shared/test/browser_html_tooltip-01.js
devtools/client/shared/widgets/HTMLTooltip.js
--- 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;