Files
sousa-gecko/devtools/client/responsive/test/browser/browser_tab_discard.js
T
Julian Descottes 2bbd2ad928 Bug 2008708 - [devtools] Destroy RDM before Tab is discarded r=tabbrowser-reviewers,devtools-reviewers,ochameau,nsharpley
At the moment, if RDM is opened when a browser/tab is discarded, it will remain in a buggy state, and can no longer be disabled on this tab.

Add a new custom event emitted before the tab is discarded so that RDM can cleanly close the RDM ui.

A test is added to check the new close codepath.

Differential Revision: https://phabricator.services.mozilla.com/D279126
2026-01-15 18:54:51 +00:00

61 lines
1.6 KiB
JavaScript

/* Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/ */
"use strict";
// Verify RDM closes synchronously when tabs are discarded.
const TEST_URL = "https://example.com/";
addRDMTask(
null,
async function () {
const tab = await addTab(TEST_URL);
const { ui } = await openRDM(tab);
await waitForDeviceAndViewportState(ui);
const clientClosed = waitForClientClose(ui);
closeRDM(tab, {
reason: "TabBrowserDiscarded",
});
// This flag is set at the end of `ResponsiveUI.destroy`. If it is true
// without waiting for `closeRDM` above, then we must have closed
// synchronously.
is(ui.destroyed, true, "RDM closed synchronously");
await clientClosed;
await removeTab(tab);
},
{ onlyPrefAndTask: true }
);
addRDMTask(
null,
async function () {
const tab = await addTab(TEST_URL);
const { ui } = await openRDM(tab);
await waitForDeviceAndViewportState(ui);
const clientClosed = waitForClientClose(ui);
// If the tab is selected, it is not allowed to be discarded.
info("Create another tab to deselect the tab to discard");
const tab2 = await addTab(TEST_URL);
info("Discard the initial tab");
gBrowser.discardBrowser(tab);
// This flag is set at the end of `ResponsiveUI.destroy`. If it is true without
// waiting for `closeRDM` itself and only removing the tab, then we must have closed
// synchronously in response to tab closing.
is(ui.destroyed, true, "RDM closed synchronously");
await clientClosed;
await removeTab(tab);
await removeTab(tab2);
},
{ onlyPrefAndTask: true }
);