diff -r 000000000000 -r 6474c204b198 browser/modules/test/browser_UITour_detach_tab.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/browser/modules/test/browser_UITour_detach_tab.js Wed Dec 31 06:09:35 2014 +0100 @@ -0,0 +1,83 @@ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/publicdomain/zero/1.0/ */ + +/** + * Detaching a tab to a new window shouldn't break the menu panel. + */ + +"use strict"; + +let gTestTab; +let gContentAPI; +let gContentWindow; +let gContentDoc; +let highlight = document.getElementById("UITourHighlight"); +let tooltip = document.getElementById("UITourTooltip"); + +Components.utils.import("resource:///modules/UITour.jsm"); + +function test() { + registerCleanupFunction(function() { + gContentDoc = null; + }); + UITourTest(); +} + +let tests = [ + function test_move_tab_to_new_window(done) { + let gOpenedWindow; + let onVisibilityChange = (aEvent) => { + if (!document.hidden && window != UITour.getChromeWindow(aEvent.target)) { + gContentAPI.showHighlight("appMenu"); + } + }; + let onDOMWindowDestroyed = (aWindow, aTopic, aData) => { + if (gOpenedWindow && aWindow == gOpenedWindow) { + Services.obs.removeObserver(onDOMWindowDestroyed, "dom-window-destroyed", false); + done(); + } + }; + let onBrowserDelayedStartup = (aWindow, aTopic, aData) => { + gOpenedWindow = aWindow; + Services.obs.removeObserver(onBrowserDelayedStartup, "browser-delayed-startup-finished"); + try { + let newWindowHighlight = gOpenedWindow.document.getElementById("UITourHighlight"); + let selectedTab = aWindow.gBrowser.selectedTab; + is(selectedTab.linkedBrowser && selectedTab.linkedBrowser.contentDocument, gContentDoc, "Document should be selected in new window"); + ok(UITour.originTabs && UITour.originTabs.has(aWindow), "Window should be known"); + ok(UITour.originTabs.get(aWindow).has(selectedTab), "Tab should be known"); + waitForElementToBeVisible(newWindowHighlight, function checkHighlightIsThere() { + let shownPromise = promisePanelShown(aWindow); + gContentAPI.showMenu("appMenu"); + shownPromise.then(() => { + isnot(aWindow.PanelUI.panel.state, "closed", "Panel should be open"); + ok(aWindow.PanelUI.contents.children.length > 0, "Panel contents should have children"); + gContentAPI.hideHighlight(); + gContentAPI.hideMenu("appMenu"); + gTestTab = null; + aWindow.close(); + }).then(null, Components.utils.reportError); + }, "Highlight should be shown in new window."); + } catch (ex) { + Cu.reportError(ex); + ok(false, "An error occurred running UITour tab detach test."); + } finally { + gContentDoc.removeEventListener("visibilitychange", onVisibilityChange, false); + Services.obs.addObserver(onDOMWindowDestroyed, "dom-window-destroyed", false); + } + }; + + Services.obs.addObserver(onBrowserDelayedStartup, "browser-delayed-startup-finished", false); + // NB: we're using this rather than gContentWindow.document because the latter wouldn't + // have an XRayWrapper, and we need to compare this to the doc we get using this method + // later on... + gContentDoc = gBrowser.selectedTab.linkedBrowser.contentDocument; + gContentDoc.addEventListener("visibilitychange", onVisibilityChange, false); + gContentAPI.showHighlight("appMenu"); + waitForElementToBeVisible(highlight, function checkForInitialHighlight() { + gBrowser.replaceTabWithWindow(gBrowser.selectedTab); + }); + + }, +]; +