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
61 lines
1.6 KiB
JavaScript
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 }
|
|
);
|