Skip to content

Commit a02f827

Browse files
committed
fix: don't drain view disposables on render, only on re-resolve
_resetReadyState() is called from both resolveWebviewView() and render(). The previous commit drained _viewDisposables inside _resetReadyState(), which destroyed message/visibility/config listeners on every render() call. In ArtemisWebviewProvider, render() fires on every sidebar view switch, killing all communication after the first navigation. Move _drainViewDisposables() to resolveWebviewView() only, where new listeners are registered immediately after.
1 parent 3c3c5e7 commit a02f827

3 files changed

Lines changed: 3 additions & 2 deletions

File tree

extension/src/extension/provider/artemisWebviewProvider.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -164,6 +164,7 @@ export class ArtemisWebviewProvider extends BaseWebviewProvider implements vscod
164164
context: vscode.WebviewViewResolveContext,
165165
_token: vscode.CancellationToken,
166166
) {
167+
this._drainViewDisposables();
167168
this._view = webviewView;
168169

169170
this._resetReadyState();

extension/src/extension/provider/baseWebviewProvider.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ export abstract class BaseWebviewProvider {
6161
}
6262

6363
/** Dispose only the per-view-resolution disposables. */
64-
private _drainViewDisposables(): void {
64+
protected _drainViewDisposables(): void {
6565
while (this._viewDisposables.length > 0) {
6666
const d = this._viewDisposables.pop();
6767
d?.dispose();
@@ -82,7 +82,6 @@ export abstract class BaseWebviewProvider {
8282
protected _resetReadyState(): void {
8383
this._webviewReady = false;
8484
this._pendingMessages = [];
85-
this._drainViewDisposables();
8685
}
8786

8887
/** Hard cap on pending messages to prevent unbounded growth. */

extension/src/extension/provider/chatWebviewProvider.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -189,6 +189,7 @@ export class ChatWebviewProvider extends BaseWebviewProvider implements vscode.W
189189
_token: vscode.CancellationToken,
190190
) {
191191
logger.debug('Iris Chat webview being resolved/loaded', LogCategory.VIEW);
192+
this._drainViewDisposables();
192193
this._view = webviewView;
193194
this._resetReadyState();
194195

0 commit comments

Comments
 (0)