From 72fe124e30caaf4048349a6d208f9f610c533d95 Mon Sep 17 00:00:00 2001 From: Asher Date: Thu, 15 Aug 2019 15:08:17 -0500 Subject: [PATCH] Fix loading resources in webviews Fixes #901. --- scripts/vscode.patch | 35 +++++++++++++++++++++++++++-------- 1 file changed, 27 insertions(+), 8 deletions(-) diff --git a/scripts/vscode.patch b/scripts/vscode.patch index 8be77375..4d112859 100644 --- a/scripts/vscode.patch +++ b/scripts/vscode.patch @@ -1033,7 +1033,7 @@ index 0d2d53003b..03489411bb 100644 group: '5_update', command: { diff --git a/src/vs/workbench/contrib/webview/browser/pre/index.html b/src/vs/workbench/contrib/webview/browser/pre/index.html -index ac53ce590e..2ce2b9d9f2 100644 +index ac53ce590e..69dbbd859c 100644 --- a/src/vs/workbench/contrib/webview/browser/pre/index.html +++ b/src/vs/workbench/contrib/webview/browser/pre/index.html @@ -4,7 +4,7 @@ @@ -1041,17 +1041,36 @@ index ac53ce590e..2ce2b9d9f2 100644 -+ content="default-src 'none'; script-src 'self'; frame-src 'self'; style-src 'self' 'unsafe-inline'; worker-src 'self'; img-src https: data:;" /> ++ content="default-src 'none'; script-src 'self' 'unsafe-inline'; frame-src 'self'; style-src 'self' 'unsafe-inline'; worker-src 'self'; img-src https: data:; font-src 'self';" /> -@@ -16,4 +16,4 @@ - - +diff --git a/src/vs/workbench/contrib/webview/browser/pre/main.js b/src/vs/workbench/contrib/webview/browser/pre/main.js +index 63585fc25c..f49b63e024 100644 +--- a/src/vs/workbench/contrib/webview/browser/pre/main.js ++++ b/src/vs/workbench/contrib/webview/browser/pre/main.js +@@ -256,7 +256,7 @@ + */ + function toContentHtml(data) { + const options = data.options; +- const text = data.contents; ++ const text = data.contents.replace(/vscode-resource:/g, "'self'"); + const newDocument = new DOMParser().parseFromString(text, 'text/html'); -- -\ No newline at end of file -+ + newDocument.querySelectorAll('a').forEach(a => { +@@ -265,6 +265,12 @@ + } + }); + ++ // REVIEW: Why is it required for scripts to be loaded at the end? ++ // Without this the document in the iframe appears to simply truncate. ++ newDocument.querySelectorAll('script').forEach(script => { ++ newDocument.body.appendChild(script); ++ }); ++ + // apply default script + if (options.allowScripts) { + const defaultScript = newDocument.createElement('script'); diff --git a/src/vs/workbench/services/environment/browser/environmentService.ts b/src/vs/workbench/services/environment/browser/environmentService.ts index 73e8b7c1d1..653d88e4f4 100644 --- a/src/vs/workbench/services/environment/browser/environmentService.ts