diff --git a/src/vs/code/electron-main/window.ts b/src/vs/code/electron-main/window.ts index 357229c46a54cb1066c360d76be480a76e4dd7ec..4827c3b7777b9855d4e204f700a0e38b1e6ff278 100644 --- a/src/vs/code/electron-main/window.ts +++ b/src/vs/code/electron-main/window.ts @@ -424,11 +424,11 @@ export class CodeWindow extends Disposable implements ICodeWindow { this.dispose(); }); - // Prevent loading of svgs - this._win.webContents.session.webRequest.onBeforeRequest(null!, (details, callback) => { - if (details.url.indexOf('.svg') > 0) { + // Prevent loading of remote svgs + this._win.webContents.session.webRequest.onBeforeRequest((details, callback) => { + if (details.url.endsWith('.svg')) { const uri = URI.parse(details.url); - if (uri && !uri.scheme.match(/file/i) && uri.path.endsWith('.svg')) { + if (uri && uri.scheme.toLowerCase() !== 'file') { return callback({ cancel: true }); } } @@ -436,12 +436,24 @@ export class CodeWindow extends Disposable implements ICodeWindow { return callback({}); }); - this._win.webContents.session.webRequest.onHeadersReceived(null!, (details, callback) => { + this._win.webContents.session.webRequest.onHeadersReceived((details, callback) => { const responseHeaders = details.responseHeaders as Record; - const contentType = (responseHeaders['content-type'] || responseHeaders['Content-Type']); - if (contentType && Array.isArray(contentType) && contentType.some(x => x.toLowerCase().indexOf('image/svg') >= 0)) { - return callback({ cancel: true }); + + if (contentType && Array.isArray(contentType)) { + // https://github.com/microsoft/vscode/issues/97564 + // ensure local svg files have Content-Type image/svg+xml + if (details.url.endsWith('.svg')) { + const uri = URI.parse(details.url); + if (uri && uri.scheme.toLowerCase() === 'file') { + responseHeaders['Content-Type'] = ['image/svg+xml']; + return callback({ cancel: false, responseHeaders }); + } + } + + if (contentType.some(x => x.toLowerCase().includes('image/svg'))) { + return callback({ cancel: true }); + } } return callback({ cancel: false });