From 99503fb5463266805dd965dc20255a22f13862f2 Mon Sep 17 00:00:00 2001 From: Joe Previte Date: Tue, 3 Aug 2021 14:54:16 -0700 Subject: [PATCH] fix(lib/vscode): patch authority in asWebviewUri We do this because resources in webviews don't load properly when the port is used in the resource uri. We're not sure why this is happening but adding this fix to get webviews working like before. --- lib/vscode/src/vs/workbench/api/common/shared/webview.ts | 5 ++++- .../workbench/contrib/webview/browser/pre/service-worker.js | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/lib/vscode/src/vs/workbench/api/common/shared/webview.ts b/lib/vscode/src/vs/workbench/api/common/shared/webview.ts index 9c78a6bf..c0449b6f 100644 --- a/lib/vscode/src/vs/workbench/api/common/shared/webview.ts +++ b/lib/vscode/src/vs/workbench/api/common/shared/webview.ts @@ -55,9 +55,12 @@ export function asWebviewUri( }); } + // NOTE@coder: Add the port separately because if the port is in the domain the + // URL will be invalid and the browser will not request it. + const authorityUrl = new URL(`${resource.scheme}://${resource.authority}`); return URI.from({ scheme: Schemas.https, - authority: `${resource.scheme}+${resource.authority}.${webviewRootResourceAuthority}`, + authority: `${resource.scheme}+${authorityUrl.hostname}.${webviewRootResourceAuthority}${authorityUrl.port ? (':' + authorityUrl.port) : ''}`, path: resource.path, fragment: resource.fragment, query: resource.query, diff --git a/lib/vscode/src/vs/workbench/contrib/webview/browser/pre/service-worker.js b/lib/vscode/src/vs/workbench/contrib/webview/browser/pre/service-worker.js index 8ff9e914..3a66e7e6 100644 --- a/lib/vscode/src/vs/workbench/contrib/webview/browser/pre/service-worker.js +++ b/lib/vscode/src/vs/workbench/contrib/webview/browser/pre/service-worker.js @@ -256,7 +256,7 @@ async function processResourceRequest(event, requestUrl) { const firstHostSegment = requestUrl.hostname.slice(0, requestUrl.hostname.length - (resourceBaseAuthority.length + 1)); const scheme = firstHostSegment.split('+', 1)[0]; - const authority = firstHostSegment.slice(scheme.length + 1); // may be empty + const authority = firstHostSegment.slice(scheme.length + 1) + requestUrl.port ? (':' + requestUrl.port) : ''; // may be empty for (const parentClient of parentClients) { parentClient.postMessage({