From 20be4181a2c24298ed0258de73bf9624c6e483ed Mon Sep 17 00:00:00 2001 From: "microsoft-playwright-automation[bot]" <203992400+microsoft-playwright-automation[bot]@users.noreply.github.com> Date: Wed, 16 Sep 2026 13:57:31 +0000 Subject: [PATCH] feat(firefox): roll to r1548 --- .../firefox/juggler/NetworkObserver.js | 12 +++++++++++ .../firefox/juggler/content/Runtime.js | 21 +++++++++---------- packages/playwright-core/browsers.json | 2 +- 3 files changed, 23 insertions(+), 12 deletions(-) diff --git a/browser_patches/firefox/juggler/NetworkObserver.js b/browser_patches/firefox/juggler/NetworkObserver.js index b472f65a83cd1..bc4428b996d24 100644 --- a/browser_patches/firefox/juggler/NetworkObserver.js +++ b/browser_patches/firefox/juggler/NetworkObserver.js @@ -185,6 +185,8 @@ class NetworkRequest { if (this.redirectedFromId) { // Redirects are not interceptable. this._sendOnRequest(false); + // Everything we need from the previous request has been inherited above. + redirectedFrom._releaseReferences(); } } @@ -447,6 +449,16 @@ class NetworkRequest { } delete this._responseBodyChunks; + this._releaseReferences(); + } + + // Firefox may keep this object alive long after the request has finished + // through callbacks or delegates, and we don't want to retain the page/window/context. + _releaseReferences() { + this.httpChannel = undefined; + this._originalListener = undefined; + this._pageNetwork = undefined; + this._interceptedChannel = undefined; } _shouldIntercept() { diff --git a/browser_patches/firefox/juggler/content/Runtime.js b/browser_patches/firefox/juggler/content/Runtime.js index ec5c9487a76af..7793bb9bb952f 100644 --- a/browser_patches/firefox/juggler/content/Runtime.js +++ b/browser_patches/firefox/juggler/content/Runtime.js @@ -553,18 +553,17 @@ class ExecutionContext { getObjectProperties(objectId) { if (!this._remoteObjects.has(objectId)) - throw new Error('Cannot find object with id = ' + arg.objectId); + throw new Error('Cannot find object with id = ' + objectId); const result = []; - for (let obj = this._remoteObjects.get(objectId); obj; obj = obj.proto) { - for (const propertyName of obj.getOwnPropertyNames()) { - const descriptor = obj.getOwnPropertyDescriptor(propertyName); - if (!descriptor.enumerable) - continue; - result.push({ - name: propertyName, - value: this._createRemoteObject(descriptor.value), - }); - } + const obj = this._remoteObjects.get(objectId); + for (const propertyName of obj.getOwnPropertyNames()) { + const descriptor = obj.getOwnPropertyDescriptor(propertyName); + if (!descriptor.enumerable) + continue; + result.push({ + name: propertyName, + value: this._createRemoteObject(descriptor.value), + }); } return result; } diff --git a/packages/playwright-core/browsers.json b/packages/playwright-core/browsers.json index af9e96047b801..d8df150a1c7a4 100644 --- a/packages/playwright-core/browsers.json +++ b/packages/playwright-core/browsers.json @@ -17,7 +17,7 @@ }, { "name": "firefox", - "revision": "1546", + "revision": "1548", "installByDefault": true, "browserVersion": "155.0", "title": "Firefox"