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 --- .../test/performance/browser_windowclose.js | 58 ++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 browser/base/content/test/performance/browser_windowclose.js (limited to 'browser/base/content/test/performance/browser_windowclose.js') diff --git a/browser/base/content/test/performance/browser_windowclose.js b/browser/base/content/test/performance/browser_windowclose.js new file mode 100644 index 0000000000..26eecf9539 --- /dev/null +++ b/browser/base/content/test/performance/browser_windowclose.js @@ -0,0 +1,58 @@ +"use strict"; + +/** + * WHOA THERE: We should never be adding new things to EXPECTED_REFLOWS. + * Instead of adding reflows to the list, you should be modifying your code to + * avoid the reflow. + * + * See https://firefox-source-docs.mozilla.org/performance/bestpractices.html + * for tips on how to do that. + */ +const EXPECTED_REFLOWS = [ + /** + * Nothing here! Please don't add anything new! + */ +]; + +/** + * This test ensures that there are no unexpected + * uninterruptible reflows when closing windows. When the + * window is closed, the test waits until the original window + * has activated. + */ +add_task(async function () { + // Ensure that this browser window starts focused. This seems to be + // necessary to avoid intermittent failures when running this test + // on repeat. + await new Promise(resolve => { + waitForFocus(resolve, window); + }); + + let win = await BrowserTestUtils.openNewBrowserWindow(); + await new Promise(resolve => { + waitForFocus(resolve, win); + }); + + // At the time of writing, there are no reflows on window closing. + // Mochitest will fail if we have no assertions, so we add one here + // to make sure nobody adds any new ones. + Assert.equal( + EXPECTED_REFLOWS.length, + 0, + "We shouldn't have added any new expected reflows for window close." + ); + + await withPerfObserver( + async function () { + let promiseOrigBrowserFocused = TestUtils.waitForCondition(() => { + return Services.focus.activeWindow == window; + }); + await BrowserTestUtils.closeWindow(win); + await promiseOrigBrowserFocused; + }, + { + expectedReflows: EXPECTED_REFLOWS, + }, + win + ); +}); -- cgit v1.2.3