From 6bf0a5cb5034a7e684dcc3500e841785237ce2dd Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 7 Apr 2024 19:32:43 +0200 Subject: Adding upstream version 1:115.7.0. Signed-off-by: Daniel Baumann --- .../content/test/general/browser_tab_dragdrop2.js | 65 ++++++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 browser/base/content/test/general/browser_tab_dragdrop2.js (limited to 'browser/base/content/test/general/browser_tab_dragdrop2.js') diff --git a/browser/base/content/test/general/browser_tab_dragdrop2.js b/browser/base/content/test/general/browser_tab_dragdrop2.js new file mode 100644 index 0000000000..9c589922f5 --- /dev/null +++ b/browser/base/content/test/general/browser_tab_dragdrop2.js @@ -0,0 +1,65 @@ +"use strict"; + +const ROOT = getRootDirectory(gTestPath); +const URI = ROOT + "browser_tab_dragdrop2_frame1.xhtml"; + +// Load the test page (which runs some child popup tests) in a new window. +// After the tests were run, tear off the tab into a new window and run popup +// tests a second time. We don't care about tests results, exceptions and +// crashes will be caught. +add_task(async function () { + // Open a new window. + let args = "chrome,all,dialog=no"; + let win = window.openDialog( + AppConstants.BROWSER_CHROME_URL, + "_blank", + args, + URI + ); + + // Wait until the tests were run. + await promiseTestsDone(win); + ok(true, "tests succeeded"); + + // Create a second tab so that we can move the original one out. + BrowserTestUtils.addTab(win.gBrowser, "about:blank", { skipAnimation: true }); + + // Tear off the original tab. + let browser = win.gBrowser.selectedBrowser; + let tabClosed = BrowserTestUtils.waitForEvent(browser, "pagehide", true); + let win2 = win.gBrowser.replaceTabWithWindow(win.gBrowser.tabs[0]); + + // Add a 'TestsDone' event listener to ensure that the docShells is properly + // swapped to the new window instead of the page being loaded again. If this + // works fine we should *NOT* see a TestsDone event. + let onTestsDone = () => ok(false, "shouldn't run tests when tearing off"); + win2.addEventListener("TestsDone", onTestsDone); + + // Wait until the original tab is gone and the new window is ready. + await Promise.all([tabClosed, promiseDelayedStartupFinished(win2)]); + + // Remove the 'TestsDone' event listener as now + // we're kicking off a new test run manually. + win2.removeEventListener("TestsDone", onTestsDone); + + // Run tests once again. + let promise = promiseTestsDone(win2); + let browser2 = win2.gBrowser.selectedBrowser; + await SpecialPowers.spawn(browser2, [], async () => { + content.test_panels(); + }); + await promise; + ok(true, "tests succeeded a second time"); + + // Cleanup. + await promiseWindowClosed(win2); + await promiseWindowClosed(win); +}); + +function promiseTestsDone(win) { + return BrowserTestUtils.waitForEvent(win, "TestsDone"); +} + +function promiseDelayedStartupFinished(win) { + return new Promise(resolve => whenDelayedStartupFinished(win, resolve)); +} -- cgit v1.2.3