mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-11-27 14:52:16 +00:00
Bug 1877191 - Add removeTabOptions parameter to ContextualIdentityService.closeContainerTabs r=mconley
Adds a removeTabOptions optional parameter to closeContainerTabs that will be forwarded to tabbrowser.removeTab This allows to set options such as skipPermitUnload. Browser mochitest added to check the new behavior. This should be a noop for current consumers of the API. Differential Revision: https://phabricator.services.mozilla.com/D200018
This commit is contained in:
parent
8b02ebad10
commit
69300a43c4
@ -567,7 +567,7 @@ _ContextualIdentityService.prototype = {
|
||||
return count;
|
||||
},
|
||||
|
||||
closeContainerTabs(userContextId = 0) {
|
||||
closeContainerTabs(userContextId = 0, removeTabOptions = {}) {
|
||||
return new Promise(resolve => {
|
||||
let remoteTabIds = new Set();
|
||||
this._forEachContainerTab((tab, tabbrowser) => {
|
||||
@ -578,7 +578,7 @@ _ContextualIdentityService.prototype = {
|
||||
remoteTabIds.add(frameLoader.remoteTab.tabId);
|
||||
}
|
||||
|
||||
tabbrowser.removeTab(tab);
|
||||
tabbrowser.removeTab(tab, removeTabOptions);
|
||||
}, userContextId);
|
||||
|
||||
if (remoteTabIds.size == 0) {
|
||||
|
@ -11,4 +11,5 @@ EXTRA_JS_MODULES += [
|
||||
"ContextualIdentityService.sys.mjs",
|
||||
]
|
||||
|
||||
BROWSER_CHROME_MANIFESTS += ["tests/browser/browser.toml"]
|
||||
XPCSHELL_TESTS_MANIFESTS += ["tests/unit/xpcshell.toml"]
|
||||
|
@ -0,0 +1,3 @@
|
||||
[DEFAULT]
|
||||
|
||||
["browser_closeContainerTabs.js"]
|
@ -0,0 +1,81 @@
|
||||
/* Any copyright is dedicated to the Public Domain.
|
||||
* http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||
|
||||
"use strict";
|
||||
|
||||
const { PromptTestUtils } = ChromeUtils.importESModule(
|
||||
"resource://testing-common/PromptTestUtils.sys.mjs"
|
||||
);
|
||||
|
||||
const BUILDER_URL = "https://example.com/document-builder.sjs?html=";
|
||||
const PAGE_MARKUP = `
|
||||
<html>
|
||||
<head>
|
||||
<script>
|
||||
window.onbeforeunload = function() {
|
||||
return true;
|
||||
};
|
||||
</script>
|
||||
</head>
|
||||
<body>TEST PAGE</body>
|
||||
</html>
|
||||
`;
|
||||
const TEST_URL = BUILDER_URL + encodeURI(PAGE_MARKUP);
|
||||
|
||||
add_task(async function test_skipPermitUnload() {
|
||||
await SpecialPowers.pushPrefEnv({
|
||||
set: [["dom.require_user_interaction_for_beforeunload", false]],
|
||||
});
|
||||
|
||||
info("Create a test user context");
|
||||
const userContextId = ContextualIdentityService.create("test").userContextId;
|
||||
|
||||
// Run tests in a new window to avoid affecting the main test window.
|
||||
const win = await BrowserTestUtils.openNewBrowserWindow();
|
||||
registerCleanupFunction(async () => {
|
||||
await BrowserTestUtils.closeWindow(win);
|
||||
});
|
||||
|
||||
info("Create a tab owned by the test user context");
|
||||
const tab = await BrowserTestUtils.addTab(win.gBrowser, TEST_URL, {
|
||||
userContextId,
|
||||
});
|
||||
registerCleanupFunction(() => win.gBrowser.removeTab(tab));
|
||||
await BrowserTestUtils.browserLoaded(tab.linkedBrowser);
|
||||
|
||||
info("Call closeContainerTabs without skipPermitUnload");
|
||||
const unloadDialogPromise = PromptTestUtils.handleNextPrompt(
|
||||
tab.linkedBrowser,
|
||||
{
|
||||
modalType: Ci.nsIPrompt.MODAL_TYPE_CONTENT,
|
||||
promptType: "confirmEx",
|
||||
},
|
||||
// Click the cancel button.
|
||||
{ buttonNumClick: 1 }
|
||||
);
|
||||
|
||||
const tabCountBeforeClose = win.gBrowser.tabs.length;
|
||||
ContextualIdentityService.closeContainerTabs(userContextId);
|
||||
|
||||
info("Wait for the unload dialog");
|
||||
await unloadDialogPromise;
|
||||
is(
|
||||
win.gBrowser.tabs.length,
|
||||
tabCountBeforeClose,
|
||||
"Tab was not closed because of the before unload prompt"
|
||||
);
|
||||
|
||||
info("Call closeContainerTabs with skipPermitUnload");
|
||||
const closePromise = BrowserTestUtils.waitForTabClosing(tab);
|
||||
ContextualIdentityService.closeContainerTabs(userContextId, {
|
||||
skipPermitUnload: true,
|
||||
});
|
||||
|
||||
info("Wait for the tab to be closed");
|
||||
await closePromise;
|
||||
is(
|
||||
win.gBrowser.tabs.length,
|
||||
tabCountBeforeClose - 1,
|
||||
"Tab was closed after ignoring the before unload prompt"
|
||||
);
|
||||
});
|
Loading…
Reference in New Issue
Block a user