@@ -6,6 +6,7 @@ Subject: [PATCH] feat: centralize element creation, to be able to create them
66
77---
88 src/vs/base/browser/dom.ts | 38 +++++++---
9+ src/vs/base/browser/domSanitize.ts | 15 ++--
910 src/vs/base/browser/domStylesheets.ts | 4 +-
1011 src/vs/base/browser/formattedTextRenderer.ts | 14 ++--
1112 src/vs/base/browser/markdownRenderer.ts | 2 +-
@@ -185,7 +186,7 @@ Subject: [PATCH] feat: centralize element creation, to be able to create them
185186 .../browser/walkThroughPart.ts | 6 +-
186187 .../browser/webWorkerExtensionHost.ts | 2 +-
187188 .../host/browser/browserHostService.ts | 6 +-
188- 180 files changed, 604 insertions(+), 538 deletions(-)
189+ 181 files changed, 613 insertions(+), 544 deletions(-)
189190
190191diff --git a/src/vs/base/browser/dom.ts b/src/vs/base/browser/dom.ts
191192index 4a327189baa..8536885086c 100644
@@ -284,6 +285,65 @@ index 4a327189baa..8536885086c 100644
284285 if (ref) {
285286 ref(this._element);
286287 }
288+ diff --git a/src/vs/base/browser/domSanitize.ts b/src/vs/base/browser/domSanitize.ts
289+ index 9b88e3c0dfa..fe5c564dfc6 100644
290+ --- a/src/vs/base/browser/domSanitize.ts
291+ +++ b/src/vs/base/browser/domSanitize.ts
292+ @@ -7,6 +7,9 @@ import { Schemas } from '../common/network.js';
293+ import { reset } from './dom.js';
294+ // eslint-disable-next-line no-restricted-imports
295+ import dompurify from './dompurify/dompurify.js';
296+ + import { mainWindow } from './window.js';
297+ +
298+ + const mainWindowDompurify = dompurify(mainWindow);
299+
300+ /**
301+ * List of safe, non-input html tags.
302+ @@ -139,7 +142,7 @@ function validateLink(value: string, allowedProtocols: AllowedLinksConfig): bool
303+ * attributes are valid.
304+ */
305+ function hookDomPurifyHrefAndSrcSanitizer(allowedLinkProtocols: AllowedLinksConfig, allowedMediaProtocols: AllowedLinksConfig) {
306+ - dompurify.addHook('afterSanitizeAttributes', (node) => {
307+ + mainWindowDompurify.addHook('afterSanitizeAttributes', (node) => {
308+ // check all href/src attributes for validity
309+ for (const attr of ['href', 'src']) {
310+ if (node.hasAttribute(attr)) {
311+ @@ -301,11 +304,11 @@ function doSanitizeHtml(untrusted: string, config: DomSanitizerConfig | undefine
312+ });
313+
314+ if (config?.replaceWithPlaintext) {
315+ - dompurify.addHook('uponSanitizeElement', replaceWithPlainTextHook);
316+ + mainWindowDompurify.addHook('uponSanitizeElement', replaceWithPlainTextHook);
317+ }
318+
319+ if (allowedAttrPredicates.size) {
320+ - dompurify.addHook('uponSanitizeAttribute', (node, e) => {
321+ + mainWindowDompurify.addHook('uponSanitizeAttribute', (node, e) => {
322+ const predicate = allowedAttrPredicates.get(e.attrName);
323+ if (predicate) {
324+ const result = predicate.shouldKeep(node, e);
325+ @@ -322,18 +325,18 @@ function doSanitizeHtml(untrusted: string, config: DomSanitizerConfig | undefine
326+ }
327+
328+ if (outputType === 'dom') {
329+ - return dompurify.sanitize(untrusted, {
330+ + return mainWindowDompurify.sanitize(untrusted, {
331+ ...resolvedConfig,
332+ RETURN_DOM_FRAGMENT: true
333+ });
334+ } else {
335+ - return dompurify.sanitize(untrusted, {
336+ + return mainWindowDompurify.sanitize(untrusted, {
337+ ...resolvedConfig,
338+ RETURN_TRUSTED_TYPE: true
339+ });
340+ }
341+ } finally {
342+ - dompurify.removeAllHooks();
343+ + mainWindowDompurify.removeAllHooks();
344+ }
345+ }
346+
287347diff --git a/src/vs/base/browser/domStylesheets.ts b/src/vs/base/browser/domStylesheets.ts
288348index 106c74fcb5d..d5caf0b3e24 100644
289349--- a/src/vs/base/browser/domStylesheets.ts
0 commit comments