diff options
Diffstat (limited to 'devtools/client/aboutdebugging/test/browser/browser_aboutdebugging_tab_zombietab.js')
-rw-r--r-- | devtools/client/aboutdebugging/test/browser/browser_aboutdebugging_tab_zombietab.js | 108 |
1 files changed, 108 insertions, 0 deletions
diff --git a/devtools/client/aboutdebugging/test/browser/browser_aboutdebugging_tab_zombietab.js b/devtools/client/aboutdebugging/test/browser/browser_aboutdebugging_tab_zombietab.js new file mode 100644 index 0000000000..1243d3374d --- /dev/null +++ b/devtools/client/aboutdebugging/test/browser/browser_aboutdebugging_tab_zombietab.js @@ -0,0 +1,108 @@ +/* Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +"use strict"; + +let gUniqueCounter = 0; + +const triggeringPrincipal_base64 = E10SUtils.SERIALIZED_SYSTEMPRINCIPAL; + +const BROWSER_STATE_TABS = [ + "about:debugging", + "data:text/html,<title>TEST_TAB_1</title>", + "data:text/html,<title>TEST_TAB_2</title>", + "data:text/html,<title>TEST_TAB_3</title>", +]; +const BROWSER_STATE = { + windows: [ + { + tabs: BROWSER_STATE_TABS.map(url => { + return { + entries: [{ url, triggeringPrincipal_base64 }], + extData: { uniq: Date.now() + "-" + ++gUniqueCounter }, + }; + }), + selected: 1, + }, + ], +}; + +// Check that the inspect action is disabled for lazy/zombie tabs, such as the +// ones created after a session restore. +add_task(async function () { + // This setup is normally handed by the openAboutDebugging helper, but here we + // open about:debugging via session restore. + silenceWorkerUpdates(); + await pushPref("devtools.aboutdebugging.local-tab-debugging", true); + + info("Restore 4 tabs including a selected about:debugging tab"); + const onBrowserSessionRestored = Promise.all([ + TestUtils.topicObserved("sessionstore-browser-state-restored"), + BrowserTestUtils.waitForEvent(gBrowser.tabContainer, "SSTabRestored"), + ]); + SessionStore.setBrowserState(JSON.stringify(BROWSER_STATE)); + await onBrowserSessionRestored; + + const tab = gBrowser.selectedTab; + const browser = tab.linkedBrowser; + const doc = browser.contentDocument; + const win = browser.contentWindow; + const store = win.AboutDebugging.store; + + info("Wait until Connect page is displayed"); + await waitUntil(() => doc.querySelector(".qa-connect-page")); + + await selectThisFirefoxPage(doc, store); + + // Check that all inspect butttons are disabled. + checkInspectButton("TEST_TAB_1", doc, { expectDisabled: true }); + checkInspectButton("TEST_TAB_2", doc, { expectDisabled: true }); + checkInspectButton("TEST_TAB_3", doc, { expectDisabled: true }); + + info("Select the TEST_TAB_2 tab top restore it completely"); + const onTabRestored = BrowserTestUtils.waitForEvent( + gBrowser.tabContainer, + "SSTabRestored" + ); + gBrowser.selectedTab = gBrowser.tabs[2]; + await onTabRestored; + + const onTabsSuccess = waitForDispatch(store, "REQUEST_TABS_SUCCESS"); + + info("Select the about:debugging tab again"); + gBrowser.selectedTab = tab; + + info("Wait until the tabs update is finished"); + await onTabsSuccess; + + info("Wait until the inspect button for TEST_TAB_2 is enabled"); + await waitUntil(() => { + const target = findDebugTargetByText("TEST_TAB_2", doc); + if (!target) { + // TEST_TAB_2 target might be missing while the tab target list updates. + return false; + } + + const button = target.querySelector(".qa-debug-target-inspect-button"); + return !button.disabled; + }); + + // Check that all inspect butttons are disabled, except for #2. + checkInspectButton("TEST_TAB_1", doc, { expectDisabled: true }); + checkInspectButton("TEST_TAB_2", doc, { expectDisabled: false }); + checkInspectButton("TEST_TAB_3", doc, { expectDisabled: true }); +}); + +function checkInspectButton(targetText, doc, { expectDisabled }) { + const inspectButton = getInspectButton(targetText, doc); + if (expectDisabled) { + ok(inspectButton.disabled, `Inspect button is disabled for ${targetText}`); + } else { + ok(!inspectButton.disabled, `Inspect button is enabled for ${targetText}`); + } +} + +function getInspectButton(targetText, doc) { + const targetElement = findDebugTargetByText(targetText, doc); + return targetElement.querySelector(".qa-debug-target-inspect-button"); +} |