From 4910a51e54d5a7473554a942bf8812f98e170bd2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Mangeonjean?= Date: Tue, 25 Aug 2026 12:55:45 +0200 Subject: [PATCH 1/5] feat: support {{uuid}} in iframe alternate domains --- ...x-use-asBrowserUri-to-get-iframe-src.patch | 34 ++++++++++-- ...dd-some-parameter-to-webview-iframes.patch | 39 ++++++++++--- .../0060-feat-support-shadow-dom.patch | 6 +- ...element-creation-to-be-able-to-creat.patch | 4 +- ...ng-a-unique-subdomain-for-the-extHos.patch | 55 +++++++++++++++++++ 5 files changed, 120 insertions(+), 18 deletions(-) create mode 100644 vscode-patches/0105-feat-support-using-a-unique-subdomain-for-the-extHos.patch diff --git a/vscode-patches/0026-fix-use-asBrowserUri-to-get-iframe-src.patch b/vscode-patches/0026-fix-use-asBrowserUri-to-get-iframe-src.patch index ff079241..9dc0516a 100644 --- a/vscode-patches/0026-fix-use-asBrowserUri-to-get-iframe-src.patch +++ b/vscode-patches/0026-fix-use-asBrowserUri-to-get-iframe-src.patch @@ -4,11 +4,11 @@ Date: Mon, 11 Mar 2024 18:21:20 +0100 Subject: [PATCH] fix: use asBrowserUri to get iframe src --- - src/vs/workbench/contrib/webview/browser/webviewElement.ts | 7 ++++--- - 1 file changed, 4 insertions(+), 3 deletions(-) + .../contrib/webview/browser/webviewElement.ts | 22 +++++-------------- + 1 file changed, 6 insertions(+), 16 deletions(-) diff --git a/src/vs/workbench/contrib/webview/browser/webviewElement.ts b/src/vs/workbench/contrib/webview/browser/webviewElement.ts -index 4e073206a68..c64dffc458c 100644 +index 4e073206a68..d9b32146d27 100644 --- a/src/vs/workbench/contrib/webview/browser/webviewElement.ts +++ b/src/vs/workbench/contrib/webview/browser/webviewElement.ts @@ -13,9 +13,9 @@ import { CancellationToken, CancellationTokenSource } from '../../../../base/com @@ -22,15 +22,37 @@ index 4e073206a68..c64dffc458c 100644 import { URI } from '../../../../base/common/uri.js'; import { generateUuid } from '../../../../base/common/uuid.js'; import { localize } from '../../../../nls.js'; -@@ -467,8 +467,9 @@ export class WebviewElement extends Disposable implements IWebviewElement, Webvi +@@ -467,8 +467,11 @@ export class WebviewElement extends Disposable implements IWebviewElement, Webvi const queryString = new URLSearchParams(params).toString(); this.perfMark('init/set-src'); - const fileName = 'index.html'; - this.element!.setAttribute('src', `${this.webviewContentEndpoint(encodedWebviewOrigin)}/${fileName}?${queryString}`); + -+ const relativeIframeSrc = FileAccess.asBrowserUri(`vs/workbench/contrib/webview/browser/pre/index.html`); -+ this.element!.setAttribute('src', `${relativeIframeSrc.toString(true)}?${queryString}`); ++ const relativeIframeSrc = FileAccess.asBrowserUri(`vs/workbench/contrib/webview/browser/pre/index.html`) ++ .toString(true) ++ .replace('{{uuid}}', encodedWebviewOrigin); ++ this.element!.setAttribute('src', `${relativeIframeSrc}?${queryString}`); } public mountTo(element: HTMLElement, targetWindow: CodeWindow) { +@@ -563,19 +566,6 @@ export class WebviewElement extends Disposable implements IWebviewElement, Webvi + } + } + +- protected webviewContentEndpoint(encodedWebviewOrigin: string): string { +- const webviewExternalEndpoint = this._environmentService.webviewExternalEndpoint; +- if (!webviewExternalEndpoint) { +- throw new Error(`'webviewExternalEndpoint' has not been configured. Webviews will not work!`); +- } +- +- const endpoint = webviewExternalEndpoint.replace('{{uuid}}', encodedWebviewOrigin); +- if (endpoint[endpoint.length - 1] === '/') { +- return endpoint.slice(0, endpoint.length - 1); +- } +- return endpoint; +- } +- + private doPostMessage(channel: string, data?: any, transferable: Transferable[] = []): boolean { + if (this.element && this._messagePort) { + this._messagePort.postMessage({ channel, args: data }, transferable); diff --git a/vscode-patches/0027-feat-add-some-parameter-to-webview-iframes.patch b/vscode-patches/0027-feat-add-some-parameter-to-webview-iframes.patch index 07b8ea90..4c9e5dea 100644 --- a/vscode-patches/0027-feat-add-some-parameter-to-webview-iframes.patch +++ b/vscode-patches/0027-feat-add-some-parameter-to-webview-iframes.patch @@ -4,9 +4,9 @@ Date: Mon, 11 Mar 2024 18:21:40 +0100 Subject: [PATCH] feat: add some parameter to webview iframes --- - src/vs/workbench/contrib/webview/browser/pre/index.html | 6 ++++-- - src/vs/workbench/contrib/webview/browser/webviewElement.ts | 3 +++ - 2 files changed, 7 insertions(+), 2 deletions(-) + .../contrib/webview/browser/pre/index.html | 6 ++++-- + .../contrib/webview/browser/webviewElement.ts | 15 +++++++++++---- + 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/src/vs/workbench/contrib/webview/browser/pre/index.html b/src/vs/workbench/contrib/webview/browser/pre/index.html index 1b722167644..39088a04919 100644 @@ -40,16 +40,41 @@ index 1b722167644..39088a04919 100644 newFrame.style.cssText = 'display: block; margin: 0; overflow: hidden; position: absolute; width: 100%; height: 100%; visibility: hidden'; document.body.appendChild(newFrame); diff --git a/src/vs/workbench/contrib/webview/browser/webviewElement.ts b/src/vs/workbench/contrib/webview/browser/webviewElement.ts -index c64dffc458c..69e5c9244b2 100644 +index d9b32146d27..4e7b69bd139 100644 --- a/src/vs/workbench/contrib/webview/browser/webviewElement.ts +++ b/src/vs/workbench/contrib/webview/browser/webviewElement.ts -@@ -462,6 +462,9 @@ export class WebviewElement extends Disposable implements IWebviewElement, Webvi +@@ -15,7 +15,7 @@ import { Lazy } from '../../../../base/common/lazy.js'; + import { Disposable, IDisposable, toDisposable } from '../../../../base/common/lifecycle.js'; + import { observableValue } from '../../../../base/common/observable.js'; + import { listenStream } from '../../../../base/common/stream.js'; +-import { COI, FileAccess } from '../../../../base/common/network.js'; ++import { AppResourcePath, COI, FileAccess } from '../../../../base/common/network.js'; + import { URI } from '../../../../base/common/uri.js'; + import { generateUuid } from '../../../../base/common/uuid.js'; + import { localize } from '../../../../nls.js'; +@@ -462,15 +462,22 @@ export class WebviewElement extends Disposable implements IWebviewElement, Webvi params.purpose = options.purpose; } -+ params.serviceWorkerUri = FileAccess.asBrowserUri('vs/workbench/contrib/webview/browser/pre/service-worker.js').toString(true); -+ params.fakeHtmlUri = FileAccess.asBrowserUri('vs/workbench/contrib/webview/browser/pre/fake.html').toString(true); ++ const asBrowserUri = (uri: AppResourcePath) => { ++ return FileAccess.asBrowserUri(uri) ++ .toString(true) ++ .replace('{{uuid}}', encodedWebviewOrigin); ++ }; ++ ++ params.serviceWorkerUri = asBrowserUri('vs/workbench/contrib/webview/browser/pre/service-worker.js'); ++ params.fakeHtmlUri = asBrowserUri('vs/workbench/contrib/webview/browser/pre/fake.html'); + COI.addSearchParam(params, true, true); const queryString = new URLSearchParams(params).toString(); + + this.perfMark('init/set-src'); + +- const relativeIframeSrc = FileAccess.asBrowserUri(`vs/workbench/contrib/webview/browser/pre/index.html`) +- .toString(true) +- .replace('{{uuid}}', encodedWebviewOrigin); ++ const relativeIframeSrc = asBrowserUri(`vs/workbench/contrib/webview/browser/pre/index.html`); + this.element!.setAttribute('src', `${relativeIframeSrc}?${queryString}`); + } + diff --git a/vscode-patches/0060-feat-support-shadow-dom.patch b/vscode-patches/0060-feat-support-shadow-dom.patch index 912ce011..86852244 100644 --- a/vscode-patches/0060-feat-support-shadow-dom.patch +++ b/vscode-patches/0060-feat-support-shadow-dom.patch @@ -1364,7 +1364,7 @@ index 9a745727415..32b87509ab3 100644 const listener = this._register(Event.once(this._terminalService.onDidChangeConnectionState)(() => { // Only focus the terminal if the activeElement has not changed since focus() was called diff --git a/src/vs/workbench/contrib/webview/browser/webviewElement.ts b/src/vs/workbench/contrib/webview/browser/webviewElement.ts -index 69e5c9244b2..40a109760c3 100644 +index 4e7b69bd139..5455eea1f88 100644 --- a/src/vs/workbench/contrib/webview/browser/webviewElement.ts +++ b/src/vs/workbench/contrib/webview/browser/webviewElement.ts @@ -4,7 +4,7 @@ @@ -1386,7 +1386,7 @@ index 69e5c9244b2..40a109760c3 100644 // looks like https://github.com/microsoft/vscode/issues/132641 // where the focus is actually not in the `