From 7803d43bcaa796123e1a46bc95ae06eb8b1cf9a3 Mon Sep 17 00:00:00 2001 From: Kyle Cutler Date: Fri, 3 Apr 2026 10:08:07 -0700 Subject: [PATCH] Fix error noise on browser tab close --- .../contrib/browserView/common/browserEditorInput.ts | 10 +--------- .../browserView/electron-browser/browserEditor.ts | 6 ++++++ 2 files changed, 7 insertions(+), 9 deletions(-) diff --git a/src/vs/workbench/contrib/browserView/common/browserEditorInput.ts b/src/vs/workbench/contrib/browserView/common/browserEditorInput.ts index 7652b7a7f49ab..c2b236ddcaa55 100644 --- a/src/vs/workbench/contrib/browserView/common/browserEditorInput.ts +++ b/src/vs/workbench/contrib/browserView/common/browserEditorInput.ts @@ -157,10 +157,6 @@ export class BrowserEditorInput extends EditorInput { } override get resource(): URI { - if (this._resourceBeforeDisposal) { - return this._resourceBeforeDisposal; - } - return BrowserViewUri.forId(this._id); } @@ -288,16 +284,12 @@ export class BrowserEditorInput extends EditorInput { }; } - // When closing the editor, toUntyped() is called after dispose(). - // So we save a snapshot of the resource so we can still use it after the model is disposed. - private _resourceBeforeDisposal: URI | undefined; override dispose(): void { + super.dispose(); // Emit `onWillDispose` event first, then clean up the model. if (this._model) { - this._resourceBeforeDisposal = this.resource; this._model.dispose(); this._model = undefined; } - super.dispose(); } serialize(): IBrowserEditorInputData { diff --git a/src/vs/workbench/contrib/browserView/electron-browser/browserEditor.ts b/src/vs/workbench/contrib/browserView/electron-browser/browserEditor.ts index 1e60e58fcd77c..be979c398020a 100644 --- a/src/vs/workbench/contrib/browserView/electron-browser/browserEditor.ts +++ b/src/vs/workbench/contrib/browserView/electron-browser/browserEditor.ts @@ -554,6 +554,12 @@ export class BrowserEditor extends EditorPane { }); this.setBackgroundImage(this._model.screenshot); + // When closing a tab, the model gets disposed before the editor input is cleared. + // So we make sure we don't keep a reference to the disposed model. + this._inputDisposables.add(this._model.onWillDispose(() => { + this._model = undefined; + })); + // Start / stop screenshots when the model visibility changes this._inputDisposables.add(this._model.onDidChangeVisibility(() => this.doScreenshot()));