|
| 1 | +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 |
| 2 | +From: =?UTF-8?q?Lo=C3=AFc=20Mangeonjean?= <loic@coderpad.io> |
| 3 | +Date: Fri, 10 Apr 2026 19:19:44 +0200 |
| 4 | +Subject: [PATCH] fix: workaround firefox bug |
| 5 | + |
| 6 | +https://bugzilla.mozilla.org/show_bug.cgi?id=2029029 |
| 7 | +--- |
| 8 | + .../src/preview/documentRenderer.ts | 4 ++-- |
| 9 | + extensions/media-preview/src/audioPreview.ts | 2 +- |
| 10 | + extensions/media-preview/src/imagePreview/index.ts | 2 +- |
| 11 | + extensions/media-preview/src/videoPreview.ts | 2 +- |
| 12 | + extensions/mermaid-chat-features/src/chatOutputRenderer.ts | 2 +- |
| 13 | + extensions/mermaid-chat-features/src/editorManager.ts | 2 +- |
| 14 | + extensions/simple-browser/src/simpleBrowserView.ts | 4 ++-- |
| 15 | + 7 files changed, 9 insertions(+), 9 deletions(-) |
| 16 | + |
| 17 | +diff --git a/extensions/markdown-language-features/src/preview/documentRenderer.ts b/extensions/markdown-language-features/src/preview/documentRenderer.ts |
| 18 | +index f96fce9b745..872b737ebb2 100644 |
| 19 | +--- a/extensions/markdown-language-features/src/preview/documentRenderer.ts |
| 20 | ++++ b/extensions/markdown-language-features/src/preview/documentRenderer.ts |
| 21 | +@@ -186,7 +186,7 @@ export class MdDocumentRenderer { |
| 22 | + } |
| 23 | + const out: string[] = []; |
| 24 | + for (const style of config.styles) { |
| 25 | +- out.push(`<link rel="stylesheet" class="code-user-style" data-source="${escapeAttribute(style)}" href="${escapeAttribute(this.#fixHref(resourceProvider, resource, style))}" type="text/css" media="screen">`); |
| 26 | ++ out.push(`<link rel="stylesheet" class="code-user-style" data-source="${escapeAttribute(style)}" href="${escapeAttribute(this.#fixHref(resourceProvider, resource, style))}" type="text/css" media="screen" crossorigin="anonymous">`); |
| 27 | + } |
| 28 | + return out.join('\n'); |
| 29 | + } |
| 30 | +@@ -219,7 +219,7 @@ export class MdDocumentRenderer { |
| 31 | + #getStyles(resourceProvider: WebviewResourceProvider, resource: vscode.Uri, config: MarkdownPreviewConfiguration, imageInfo: readonly ImageInfo[]): string { |
| 32 | + const baseStyles: string[] = []; |
| 33 | + for (const resource of this.#contributionProvider.contributions.previewStyles) { |
| 34 | +- baseStyles.push(`<link rel="stylesheet" type="text/css" href="${escapeAttribute(resourceProvider.asWebviewUri(resource))}">`); |
| 35 | ++ baseStyles.push(`<link rel="stylesheet" type="text/css" href="${escapeAttribute(resourceProvider.asWebviewUri(resource))}" crossorigin="anonymous">`); |
| 36 | + } |
| 37 | + |
| 38 | + return `${baseStyles.join('\n')} |
| 39 | +diff --git a/extensions/media-preview/src/audioPreview.ts b/extensions/media-preview/src/audioPreview.ts |
| 40 | +index 282d579b380..e4119b60297 100644 |
| 41 | +--- a/extensions/media-preview/src/audioPreview.ts |
| 42 | ++++ b/extensions/media-preview/src/audioPreview.ts |
| 43 | +@@ -72,7 +72,7 @@ class AudioPreview extends MediaPreview { |
| 44 | + |
| 45 | + <title>Audio Preview</title> |
| 46 | + |
| 47 | +- <link rel="stylesheet" href="${escapeAttribute(this.extensionResource('media', 'audioPreview.css'))}" type="text/css" media="screen" nonce="${nonce}"> |
| 48 | ++ <link rel="stylesheet" href="${escapeAttribute(this.extensionResource('media', 'audioPreview.css'))}" type="text/css" media="screen" nonce="${nonce}" crossorigin="anonymous"> |
| 49 | + |
| 50 | + <meta http-equiv="Content-Security-Policy" content="default-src 'none'; img-src data: ${cspSource}; media-src ${cspSource}; script-src 'nonce-${nonce}'; style-src ${cspSource} 'nonce-${nonce}';"> |
| 51 | + <meta id="settings" data-settings="${escapeAttribute(JSON.stringify(settings))}"> |
| 52 | +diff --git a/extensions/media-preview/src/imagePreview/index.ts b/extensions/media-preview/src/imagePreview/index.ts |
| 53 | +index 6c2c8a73f66..60cdc96f680 100644 |
| 54 | +--- a/extensions/media-preview/src/imagePreview/index.ts |
| 55 | ++++ b/extensions/media-preview/src/imagePreview/index.ts |
| 56 | +@@ -199,7 +199,7 @@ class ImagePreview extends MediaPreview { |
| 57 | + |
| 58 | + <title>Image Preview</title> |
| 59 | + |
| 60 | +- <link rel="stylesheet" href="${escapeAttribute(this.extensionResource('media', 'imagePreview.css'))}" type="text/css" media="screen" nonce="${nonce}"> |
| 61 | ++ <link rel="stylesheet" href="${escapeAttribute(this.extensionResource('media', 'imagePreview.css'))}" type="text/css" media="screen" nonce="${nonce}" crossorigin="anonymous"> |
| 62 | + |
| 63 | + <meta http-equiv="Content-Security-Policy" content="default-src 'none'; img-src data: ${cspSource}; connect-src ${cspSource}; script-src 'nonce-${nonce}'; style-src ${cspSource} 'nonce-${nonce}';"> |
| 64 | + <meta id="image-preview-settings" data-settings="${escapeAttribute(JSON.stringify(settings))}"> |
| 65 | +diff --git a/extensions/media-preview/src/videoPreview.ts b/extensions/media-preview/src/videoPreview.ts |
| 66 | +index 1cb74c58426..796aa49bf2e 100644 |
| 67 | +--- a/extensions/media-preview/src/videoPreview.ts |
| 68 | ++++ b/extensions/media-preview/src/videoPreview.ts |
| 69 | +@@ -76,7 +76,7 @@ class VideoPreview extends MediaPreview { |
| 70 | + |
| 71 | + <title>Video Preview</title> |
| 72 | + |
| 73 | +- <link rel="stylesheet" href="${escapeAttribute(this.extensionResource('media', 'videoPreview.css'))}" type="text/css" media="screen" nonce="${nonce}"> |
| 74 | ++ <link rel="stylesheet" href="${escapeAttribute(this.extensionResource('media', 'videoPreview.css'))}" type="text/css" media="screen" nonce="${nonce}" crossorigin="anonymous"> |
| 75 | + |
| 76 | + <meta http-equiv="Content-Security-Policy" content="default-src 'none'; img-src data: ${cspSource}; media-src ${cspSource}; script-src 'nonce-${nonce}'; style-src ${cspSource} 'nonce-${nonce}';"> |
| 77 | + <meta id="settings" data-settings="${escapeAttribute(JSON.stringify(settings))}"> |
| 78 | +diff --git a/extensions/mermaid-chat-features/src/chatOutputRenderer.ts b/extensions/mermaid-chat-features/src/chatOutputRenderer.ts |
| 79 | +index c6aacbd748e..83ef9189540 100644 |
| 80 | +--- a/extensions/mermaid-chat-features/src/chatOutputRenderer.ts |
| 81 | ++++ b/extensions/mermaid-chat-features/src/chatOutputRenderer.ts |
| 82 | +@@ -73,7 +73,7 @@ class MermaidChatOutputRenderer implements vscode.ChatOutputRenderer { |
| 83 | + <meta name="viewport" content="width=device-width, initial-scale=1.0"> |
| 84 | + <title>Mermaid Diagram</title> |
| 85 | + <meta http-equiv="Content-Security-Policy" content="default-src 'none'; script-src 'nonce-${nonce}'; style-src ${webview.cspSource} 'unsafe-inline'; font-src data:;" /> |
| 86 | +- <link rel="stylesheet" type="text/css" href="${codiconsUri}"> |
| 87 | ++ <link rel="stylesheet" type="text/css" href="${codiconsUri}" crossorigin="anonymous"> |
| 88 | + |
| 89 | + <style> |
| 90 | + body { |
| 91 | +diff --git a/extensions/mermaid-chat-features/src/editorManager.ts b/extensions/mermaid-chat-features/src/editorManager.ts |
| 92 | +index 5ee5cec29da..4147709002e 100644 |
| 93 | +--- a/extensions/mermaid-chat-features/src/editorManager.ts |
| 94 | ++++ b/extensions/mermaid-chat-features/src/editorManager.ts |
| 95 | +@@ -219,7 +219,7 @@ class MermaidPreview extends Disposable { |
| 96 | + <meta name="viewport" content="width=device-width, initial-scale=1.0"> |
| 97 | + <title>Mermaid Diagram</title> |
| 98 | + <meta http-equiv="Content-Security-Policy" content="default-src 'none'; script-src 'nonce-${nonce}'; style-src ${this._webviewPanel.webview.cspSource} 'unsafe-inline'; font-src data:;" /> |
| 99 | +- <link rel="stylesheet" type="text/css" href="${codiconsUri}"> |
| 100 | ++ <link rel="stylesheet" type="text/css" href="${codiconsUri}" crossorigin="anonymous"> |
| 101 | + <style> |
| 102 | + html, body { |
| 103 | + margin: 0; |
| 104 | +diff --git a/extensions/simple-browser/src/simpleBrowserView.ts b/extensions/simple-browser/src/simpleBrowserView.ts |
| 105 | +index 56c5aff5c8a..ff123619f56 100644 |
| 106 | +--- a/extensions/simple-browser/src/simpleBrowserView.ts |
| 107 | ++++ b/extensions/simple-browser/src/simpleBrowserView.ts |
| 108 | +@@ -137,8 +137,8 @@ export class SimpleBrowserView extends Disposable { |
| 109 | + focusLockEnabled: configuration.get<boolean>('focusLockIndicator.enabled', true) |
| 110 | + }))}"> |
| 111 | + |
| 112 | +- <link rel="stylesheet" type="text/css" href="${mainCss}"> |
| 113 | +- <link rel="stylesheet" type="text/css" href="${codiconsUri}"> |
| 114 | ++ <link rel="stylesheet" type="text/css" href="${mainCss}" crossorigin="anonymous"> |
| 115 | ++ <link rel="stylesheet" type="text/css" href="${codiconsUri}" crossorigin="anonymous"> |
| 116 | + </head> |
| 117 | + <body> |
| 118 | + <header class="header"> |
0 commit comments