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