From 07d8bb10d9b37759be900631d602ebb5043fdd7c Mon Sep 17 00:00:00 2001 From: Matthew Jee Date: Thu, 29 Aug 2024 10:48:14 -0700 Subject: [PATCH] Firefox support that doesn't work Results don't seem to be observable from the test --- .../firefox/juggler/protocol/PageHandler.js | 8 ++++++++ .../firefox/juggler/protocol/Protocol.js | 13 ++++++++++++- .../playwright-core/src/server/firefox/ffPage.ts | 2 +- tests/page/page-force-gc.spec.ts | 2 -- 4 files changed, 21 insertions(+), 4 deletions(-) diff --git a/browser_patches/firefox/juggler/protocol/PageHandler.js b/browser_patches/firefox/juggler/protocol/PageHandler.js index 8fa9a06361..573df5a14c 100644 --- a/browser_patches/firefox/juggler/protocol/PageHandler.js +++ b/browser_patches/firefox/juggler/protocol/PageHandler.js @@ -256,6 +256,14 @@ class PageHandler { return await this._contentPage.send('disposeObject', options); } + async ['Heap.collectGarbage']() { + await new Promise((resolve) => { + Cu.schedulePreciseGC(() => { + resolve(); + }); + }); + } + async ['Network.getResponseBody']({requestId}) { return this._pageNetwork.getResponseBody(requestId); } diff --git a/browser_patches/firefox/juggler/protocol/Protocol.js b/browser_patches/firefox/juggler/protocol/Protocol.js index 6c9b700f05..2b7ad56d6a 100644 --- a/browser_patches/firefox/juggler/protocol/Protocol.js +++ b/browser_patches/firefox/juggler/protocol/Protocol.js @@ -487,6 +487,17 @@ const Browser = { }, }; +const Heap = { + targets: ['page'], + types: {}, + events: {}, + methods: { + 'collectGarbage': { + params: {}, + }, + }, +}; + const Network = { targets: ['page'], types: networkTypes, @@ -1002,7 +1013,7 @@ const Accessibility = { } this.protocol = { - domains: {Browser, Page, Runtime, Network, Accessibility}, + domains: {Browser, Heap, Page, Runtime, Network, Accessibility}, }; this.checkScheme = checkScheme; this.EXPORTED_SYMBOLS = ['protocol', 'checkScheme']; diff --git a/packages/playwright-core/src/server/firefox/ffPage.ts b/packages/playwright-core/src/server/firefox/ffPage.ts index 7f6fb44559..03a27954dd 100644 --- a/packages/playwright-core/src/server/firefox/ffPage.ts +++ b/packages/playwright-core/src/server/firefox/ffPage.ts @@ -401,7 +401,7 @@ export class FFPage implements PageDelegate { } async forceGarbageCollection(): Promise { - // Not supported in Firefox. + await this._session.send('Heap.collectGarbage'); } async addInitScript(initScript: InitScript, worldName?: string): Promise { diff --git a/tests/page/page-force-gc.spec.ts b/tests/page/page-force-gc.spec.ts index c4330fe205..92a0b370bd 100644 --- a/tests/page/page-force-gc.spec.ts +++ b/tests/page/page-force-gc.spec.ts @@ -17,8 +17,6 @@ import { test as it, expect } from './pageTest'; it('should work', async function({ page, browserName }) { - it.skip(browserName === 'firefox', 'forceGarbageCollection is supported only in Chromium and WebKit'); - await page.evaluate(() => { globalThis.thing = {}; globalThis.something = new WeakRef(globalThis.thing);