diff options
Diffstat (limited to 'browser/base/content/test/general/browser_tabs_isActive.js')
-rw-r--r-- | browser/base/content/test/general/browser_tabs_isActive.js | 152 |
1 files changed, 152 insertions, 0 deletions
diff --git a/browser/base/content/test/general/browser_tabs_isActive.js b/browser/base/content/test/general/browser_tabs_isActive.js new file mode 100644 index 000000000..0725757e7 --- /dev/null +++ b/browser/base/content/test/general/browser_tabs_isActive.js @@ -0,0 +1,152 @@ +/* Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +// Test for the docshell active state of local and remote browsers. + +const kTestPage = "http://example.org/browser/browser/base/content/test/general/dummy_page.html"; + +function promiseNewTabSwitched() { + return new Promise(resolve => { + gBrowser.addEventListener("TabSwitchDone", function onSwitch() { + gBrowser.removeEventListener("TabSwitchDone", onSwitch); + executeSoon(resolve); + }); + }); +} + +function getParentTabState(aTab) { + return aTab.linkedBrowser.docShellIsActive; +} + +function getChildTabState(aTab) { + return ContentTask.spawn(aTab.linkedBrowser, {}, function* () { + return docShell.isActive; + }); +} + +function checkState(parentSide, childSide, value, message) { + is(parentSide, value, message + " (parent side)"); + is(childSide, value, message + " (child side)"); +} + +function waitForMs(aMs) { + return new Promise((resolve) => { + setTimeout(done, aMs); + function done() { + resolve(true); + } + }); +} + +add_task(function *() { + let url = kTestPage; + let originalTab = gBrowser.selectedTab; // test tab + let newTab = gBrowser.addTab(url, {skipAnimation: true}); + let parentSide, childSide; + + // new tab added but not selected checks + parentSide = getParentTabState(newTab); + childSide = yield getChildTabState(newTab); + checkState(parentSide, childSide, false, "newly added " + url + " tab is not active"); + parentSide = getParentTabState(originalTab); + childSide = yield getChildTabState(originalTab); + checkState(parentSide, childSide, true, "original tab is active initially"); + + // select the newly added tab and wait for TabSwitchDone event + let tabSwitchedPromise = promiseNewTabSwitched(); + gBrowser.selectedTab = newTab; + yield tabSwitchedPromise; + + if (Services.appinfo.browserTabsRemoteAutostart) { + ok(newTab.linkedBrowser.isRemoteBrowser, "for testing we need a remote tab"); + } + + // check active state of both tabs + parentSide = getParentTabState(newTab); + childSide = yield getChildTabState(newTab); + checkState(parentSide, childSide, true, "newly added " + url + " tab is active after selection"); + parentSide = getParentTabState(originalTab); + childSide = yield getChildTabState(originalTab); + checkState(parentSide, childSide, false, "original tab is not active while unselected"); + + // switch back to the original test tab and wait for TabSwitchDone event + tabSwitchedPromise = promiseNewTabSwitched(); + gBrowser.selectedTab = originalTab; + yield tabSwitchedPromise; + + // check active state of both tabs + parentSide = getParentTabState(newTab); + childSide = yield getChildTabState(newTab); + checkState(parentSide, childSide, false, "newly added " + url + " tab is not active after switch back"); + parentSide = getParentTabState(originalTab); + childSide = yield getChildTabState(originalTab); + checkState(parentSide, childSide, true, "original tab is active again after switch back"); + + // switch to the new tab and wait for TabSwitchDone event + tabSwitchedPromise = promiseNewTabSwitched(); + gBrowser.selectedTab = newTab; + yield tabSwitchedPromise; + + // check active state of both tabs + parentSide = getParentTabState(newTab); + childSide = yield getChildTabState(newTab); + checkState(parentSide, childSide, true, "newly added " + url + " tab is not active after switch back"); + parentSide = getParentTabState(originalTab); + childSide = yield getChildTabState(originalTab); + checkState(parentSide, childSide, false, "original tab is active again after switch back"); + + gBrowser.removeTab(newTab); +}); + +add_task(function *() { + let url = "about:about"; + let originalTab = gBrowser.selectedTab; // test tab + let newTab = gBrowser.addTab(url, {skipAnimation: true}); + let parentSide, childSide; + + parentSide = getParentTabState(newTab); + childSide = yield getChildTabState(newTab); + checkState(parentSide, childSide, false, "newly added " + url + " tab is not active"); + parentSide = getParentTabState(originalTab); + childSide = yield getChildTabState(originalTab); + checkState(parentSide, childSide, true, "original tab is active initially"); + + let tabSwitchedPromise = promiseNewTabSwitched(); + gBrowser.selectedTab = newTab; + yield tabSwitchedPromise; + + if (Services.appinfo.browserTabsRemoteAutostart) { + ok(!newTab.linkedBrowser.isRemoteBrowser, "for testing we need a local tab"); + } + + parentSide = getParentTabState(newTab); + childSide = yield getChildTabState(newTab); + checkState(parentSide, childSide, true, "newly added " + url + " tab is active after selection"); + parentSide = getParentTabState(originalTab); + childSide = yield getChildTabState(originalTab); + checkState(parentSide, childSide, false, "original tab is not active while unselected"); + + tabSwitchedPromise = promiseNewTabSwitched(); + gBrowser.selectedTab = originalTab; + yield tabSwitchedPromise; + + parentSide = getParentTabState(newTab); + childSide = yield getChildTabState(newTab); + checkState(parentSide, childSide, false, "newly added " + url + " tab is not active after switch back"); + parentSide = getParentTabState(originalTab); + childSide = yield getChildTabState(originalTab); + checkState(parentSide, childSide, true, "original tab is active again after switch back"); + + tabSwitchedPromise = promiseNewTabSwitched(); + gBrowser.selectedTab = newTab; + yield tabSwitchedPromise; + + parentSide = getParentTabState(newTab); + childSide = yield getChildTabState(newTab); + checkState(parentSide, childSide, true, "newly added " + url + " tab is not active after switch back"); + parentSide = getParentTabState(originalTab); + childSide = yield getChildTabState(originalTab); + checkState(parentSide, childSide, false, "original tab is active again after switch back"); + + gBrowser.removeTab(newTab); +}); |