From be200b813dac3a9734adcfb80c0d782103c468a5 Mon Sep 17 00:00:00 2001 From: rebornix Date: Mon, 3 Apr 2023 17:28:16 -0700 Subject: [PATCH 1/2] Reload webview on trust state change, no cache for output data. --- .../view/renderers/backLayerWebView.ts | 8 +-- .../browser/view/renderers/webviewMessages.ts | 5 -- .../browser/view/renderers/webviewPreloads.ts | 50 ++----------------- 3 files changed, 7 insertions(+), 56 deletions(-) diff --git a/src/vs/workbench/contrib/notebook/browser/view/renderers/backLayerWebView.ts b/src/vs/workbench/contrib/notebook/browser/view/renderers/backLayerWebView.ts index ed02a196a8bc3..a68b50bbf94ee 100644 --- a/src/vs/workbench/contrib/notebook/browser/view/renderers/backLayerWebView.ts +++ b/src/vs/workbench/contrib/notebook/browser/view/renderers/backLayerWebView.ts @@ -199,10 +199,10 @@ export class BackLayerWebView extends Themable { } this._register(workspaceTrustManagementService.onDidChangeTrust(e => { - this._sendMessageToWebview({ - type: 'updateWorkspaceTrust', - isTrusted: e, - }); + const baseUrl = this.asWebviewUri(this.getNotebookBaseUri(), undefined); + const htmlContent = this.generateContent(baseUrl.toString()); + this.webview?.setHtml(htmlContent); + this.webview?.reload(); })); this._register(TokenizationRegistry.onDidChange(() => { diff --git a/src/vs/workbench/contrib/notebook/browser/view/renderers/webviewMessages.ts b/src/vs/workbench/contrib/notebook/browser/view/renderers/webviewMessages.ts index 405ab9162ec13..8f91b711469db 100644 --- a/src/vs/workbench/contrib/notebook/browser/view/renderers/webviewMessages.ts +++ b/src/vs/workbench/contrib/notebook/browser/view/renderers/webviewMessages.ts @@ -378,10 +378,6 @@ export interface INotebookOptionsMessage { readonly renderOptions: RenderOptions; } -export interface INotebookUpdateWorkspaceTrust { - readonly type: 'updateWorkspaceTrust'; - readonly isTrusted: boolean; -} export interface ITokenizedCodeBlockMessage { readonly type: 'tokenizedCodeBlock'; readonly codeBlockId: string; @@ -529,7 +525,6 @@ export type ToWebviewMessage = IClearMessage | IInitializeMarkupCells | INotebookStylesMessage | INotebookOptionsMessage | - INotebookUpdateWorkspaceTrust | ITokenizedCodeBlockMessage | ITokenizedStylesChangedMessage | IFindMessage | diff --git a/src/vs/workbench/contrib/notebook/browser/view/renderers/webviewPreloads.ts b/src/vs/workbench/contrib/notebook/browser/view/renderers/webviewPreloads.ts index eede3d34ff954..c188aa78327ae 100644 --- a/src/vs/workbench/contrib/notebook/browser/view/renderers/webviewPreloads.ts +++ b/src/vs/workbench/contrib/notebook/browser/view/renderers/webviewPreloads.ts @@ -90,7 +90,7 @@ async function webviewPreloads(ctx: PreloadContext) { const textDecoder = new TextDecoder(); let currentOptions = ctx.options; - let isWorkspaceTrusted = ctx.isWorkspaceTrusted; + const isWorkspaceTrusted = ctx.isWorkspaceTrusted; let currentRenderOptions = ctx.renderOptions; const settingChange: EmitterLike = createEmitter(); @@ -1397,11 +1397,6 @@ async function webviewPreloads(ctx: PreloadContext) { currentRenderOptions = event.data.renderOptions; settingChange.fire(currentRenderOptions); break; - case 'updateWorkspaceTrust': { - isWorkspaceTrusted = event.data.isTrusted; - viewModel.rerender(); - break; - } case 'tokenizedCodeBlock': { const { codeBlockId, html } = event.data; MarkdownCodeBlock.highlightCodeBlock(codeBlockId, html); @@ -1870,11 +1865,6 @@ async function webviewPreloads(ctx: PreloadContext) { this._outputCells.clear(); } - public rerender() { - this.rerenderMarkupCells(); - this.renderOutputCells(); - } - private async createMarkupCell(init: webviewMessages.IMarkupCellInitialization, top: number, visible: boolean): Promise { const existing = this._markupCells.get(init.cellId); if (existing) { @@ -1929,12 +1919,6 @@ async function webviewPreloads(ctx: PreloadContext) { cell?.unhide(); } - private rerenderMarkupCells() { - for (const cell of this._markupCells.values()) { - cell.rerender(); - } - } - private getExpectedMarkupCell(id: string): MarkupCell | undefined { const cell = this._markupCells.get(id); if (!cell) { @@ -1966,12 +1950,6 @@ async function webviewPreloads(ctx: PreloadContext) { } } - private renderOutputCells() { - for (const outputCell of this._outputCells.values()) { - outputCell.rerender(); - } - } - public async renderOutputCell(data: webviewMessages.ICreationRequestMessage, signal: AbortSignal): Promise { const preloadErrors = await Promise.all( data.requiredPreloads.map(p => kernelPreloads.waitFor(p.uri).then(() => undefined, err => err)) @@ -2266,10 +2244,6 @@ async function webviewPreloads(ctx: PreloadContext) { this.updateMarkupDimensions(); } - public rerender() { - this.updateContentAndRender(this._content.value, this._content.metadata); - } - public remove() { this.element.remove(); } @@ -2378,12 +2352,6 @@ async function webviewPreloads(ctx: PreloadContext) { this.outputElements.get(outputId)?.updateContentAndRender(content); } - public rerender() { - for (const outputElement of this.outputElements.values()) { - outputElement.rerender(); - } - } - public updateOutputHeight(outputId: string, height: number) { this.outputElements.get(outputId)?.updateHeight(height); } @@ -2458,10 +2426,6 @@ async function webviewPreloads(ctx: PreloadContext) { return this._outputNode; } - public rerender() { - this._outputNode?.rerender(); - } - public updateContentAndRender(content: webviewMessages.ICreationContent) { this._outputNode?.updateAndRerender(content); } @@ -2490,7 +2454,6 @@ async function webviewPreloads(ctx: PreloadContext) { class OutputElement { public readonly element: HTMLElement; private _content?: { - readonly content: webviewMessages.ICreationContent; readonly preferredRendererId: string | undefined; readonly preloadErrors: ReadonlyArray; }; @@ -2528,7 +2491,7 @@ async function webviewPreloads(ctx: PreloadContext) { this.renderTaskAbort?.abort(); this.renderTaskAbort = undefined; - this._content = { content, preferredRendererId, preloadErrors }; + this._content = { preferredRendererId, preloadErrors }; if (content.type === 0 /* RenderOutputType.Html */) { const trustedHtml = ttPolicy?.createHTML(content.htmlContent) ?? content.htmlContent; this.element.innerHTML = trustedHtml as string; @@ -2586,16 +2549,9 @@ async function webviewPreloads(ctx: PreloadContext) { } } - public rerender() { - if (this._content) { - this.render(this._content.content, this._content.preferredRendererId, this._content.preloadErrors); - } - } - public updateAndRerender(content: webviewMessages.ICreationContent) { if (this._content) { - this._content = { content, preferredRendererId: this._content.preferredRendererId, preloadErrors: this._content.preloadErrors }; - this.rerender(); + this.render(content, this._content.preferredRendererId, this._content.preloadErrors); } } } From a0822ba965bc1a0219f5d5c9e28fbf00a58866f3 Mon Sep 17 00:00:00 2001 From: rebornix Date: Tue, 4 Apr 2023 11:14:14 -0700 Subject: [PATCH 2/2] Avoid dup reload --- .../contrib/notebook/browser/view/renderers/backLayerWebView.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/vs/workbench/contrib/notebook/browser/view/renderers/backLayerWebView.ts b/src/vs/workbench/contrib/notebook/browser/view/renderers/backLayerWebView.ts index a68b50bbf94ee..940fb0ebb10b9 100644 --- a/src/vs/workbench/contrib/notebook/browser/view/renderers/backLayerWebView.ts +++ b/src/vs/workbench/contrib/notebook/browser/view/renderers/backLayerWebView.ts @@ -202,7 +202,6 @@ export class BackLayerWebView extends Themable { const baseUrl = this.asWebviewUri(this.getNotebookBaseUri(), undefined); const htmlContent = this.generateContent(baseUrl.toString()); this.webview?.setHtml(htmlContent); - this.webview?.reload(); })); this._register(TokenizationRegistry.onDidChange(() => {