Bug 1300822 - Fix tab load event wait in devtools test helpers. r=jryans
MozReview-Commit-ID: 8vSSaDloJND
--- a/devtools/client/framework/test/shared-head.js
+++ b/devtools/client/framework/test/shared-head.js
@@ -108,17 +108,17 @@ registerCleanupFunction(function* cleanu
* Add a new test tab in the browser and load the given url.
* @param {String} url The url to be loaded in the new tab
* @return a promise that resolves to the tab object when the url is loaded
*/
var addTab = Task.async(function* (url) {
info("Adding a new tab with URL: " + url);
let tab = gBrowser.selectedTab = gBrowser.addTab(url);
- yield once(gBrowser.selectedBrowser, "load", true);
+ yield waitForTabLoad(gBrowser.selectedBrowser);
info("Tab added and finished loading");
return tab;
});
/**
* Remove the given tab.
@@ -137,23 +137,43 @@ var removeTab = Task.async(function* (ta
/**
* Refresh the given tab.
* @param {Object} tab The tab to be refreshed.
* @return Promise<undefined> resolved when the tab is successfully refreshed.
*/
var refreshTab = Task.async(function*(tab) {
info("Refreshing tab.");
- const finished = once(gBrowser.selectedBrowser, "load", true);
+ const finished = waitForTabLoad(gBrowser.selectedBrowser);
gBrowser.reloadTab(gBrowser.selectedTab);
yield finished;
info("Tab finished refreshing.");
});
/**
+ * Wait for tab load. Ignore iframes load event.
+ * @param {Object} browser The browser element for a given tab
+ * @return Promise<undefined> resolved when the tab is successfully loaded.
+ */
+var waitForTabLoad = function (browser) {
+ return ContentTask.spawn(browser, null, function* () {
+ yield new Promise(done => {
+ let listener = function (event) {
+ // Only consider top document load to ignore iframes
+ if (event.target == content.document) {
+ removeEventListener("load", listener, true);
+ done();
+ }
+ };
+ addEventListener("load", listener, true);
+ });
+ });
+}
+
+/**
* Simulate a key event from a <key> element.
* @param {DOMNode} key
*/
function synthesizeKeyFromKeyTag(key) {
is(key && key.tagName, "key", "Successfully retrieved the <key> node");
let modifiersAttr = key.getAttribute("modifiers");
--- a/devtools/client/inspector/markup/test/browser_markup_links_05.js
+++ b/devtools/client/inspector/markup/test/browser_markup_links_05.js
@@ -20,17 +20,17 @@ add_task(function* () {
openContextMenuAndGetAllItems(inspector, {
target: editor.attrElements.get("poster").querySelector(".link"),
});
info("Follow the link and wait for the new tab to open");
let onTabOpened = once(gBrowser.tabContainer, "TabOpen");
inspector.onFollowLink();
let {target: tab} = yield onTabOpened;
- yield waitForTabLoad(tab);
+ yield waitForTabLoad(tab.linkedBrowser);
ok(true, "A new tab opened");
is(tab.linkedBrowser.currentURI.spec, URL_ROOT + "doc_markup_tooltip.png",
"The URL for the new tab is correct");
gBrowser.removeTab(tab);
info("Select a node with a IDREF attribute");
yield selectNode("label", inspector);
@@ -62,21 +62,8 @@ add_task(function* () {
let onFailed = inspector.once("idref-attribute-link-failed");
inspector.onFollowLink();
yield onFailed;
ok(true, "The node selection failed");
is(inspector.selection.nodeFront.tagName.toLowerCase(), "output",
"The <output> node is still selected");
});
-
-function waitForTabLoad(tab) {
- let def = defer();
- tab.addEventListener("load", function onLoad(e) {
- // Skip load event for about:blank
- if (tab.linkedBrowser.currentURI.spec === "about:blank") {
- return;
- }
- tab.removeEventListener("load", onLoad);
- def.resolve();
- });
- return def.promise;
-}
--- a/devtools/client/inspector/markup/test/browser_markup_links_07.js
+++ b/devtools/client/inspector/markup/test/browser_markup_links_07.js
@@ -53,29 +53,16 @@ add_task(function* () {
info("Try to follow link wiith middle-click, check no new node selected");
yield followLinkNoNewNode(linkEl, false, inspector);
info("Try to follow link wiith meta/ctrl-click, check no new node selected");
yield followLinkNoNewNode(linkEl, true, inspector);
});
-function waitForTabLoad(tab) {
- let def = defer();
- tab.addEventListener("load", function onLoad() {
- // Skip load event for about:blank
- if (tab.linkedBrowser.currentURI.spec === "about:blank") {
- return;
- }
- tab.removeEventListener("load", onLoad);
- def.resolve();
- });
- return def.promise;
-}
-
function performMouseDown(linkEl, metactrl) {
let evt = linkEl.ownerDocument.createEvent("MouseEvents");
let button = -1;
if (metactrl) {
info("Performing Meta/Ctrl+Left Click");
button = 0;
@@ -90,17 +77,17 @@ function performMouseDown(linkEl, metact
linkEl.dispatchEvent(evt);
}
function* followLinkWaitForTab(linkEl, isMetaClick, expectedTabURI) {
let onTabOpened = once(gBrowser.tabContainer, "TabOpen");
performMouseDown(linkEl, isMetaClick);
let {target} = yield onTabOpened;
- yield waitForTabLoad(target);
+ yield waitForTabLoad(target.linkedBrowser);
ok(true, "A new tab opened");
is(target.linkedBrowser.currentURI.spec, expectedTabURI,
"The URL for the new tab is correct");
gBrowser.removeTab(target);
}
function* followLinkWaitForNewNode(linkEl, isMetaClick, inspector) {
let onSelection = inspector.selection.once("new-node-front");