From e5ab50cebd0a21ba6f96eafd54c766c8eca39879 Mon Sep 17 00:00:00 2001 From: TC Date: Sun, 27 Jun 2021 20:46:46 +0200 Subject: [PATCH] Override content security policy to allow FFmpeg worker --- index.js | 47 ++++++++++++++++++++++++++++++++++++++++++++--- package.json | 1 + yarn.lock | 17 ++++++++++++++++- 3 files changed, 61 insertions(+), 4 deletions(-) diff --git a/index.js b/index.js index c70b155d..dfb6d288 100644 --- a/index.js +++ b/index.js @@ -2,6 +2,7 @@ const path = require("path"); const electron = require("electron"); +const enhanceWebRequest = require("electron-better-web-request").default; const is = require("electron-is"); const unhandled = require("electron-unhandled"); const { autoUpdater } = require("electron-updater"); @@ -143,17 +144,19 @@ function createMainWindow() { }); } }); - + win.webContents.on("render-process-gone", (event, webContents, details) => { showUnresponsiveDialog(win, details); }); - + win.once("ready-to-show", () => { if (config.get("options.appVisible")) { win.show(); } }); + removeContentSecurityPolicy(); + return win; } @@ -373,7 +376,45 @@ function showUnresponsiveDialog(win, details) { app.quit(); break; default: - break; + break; } }); } + +function removeContentSecurityPolicy( + session = electron.session.defaultSession +) { + // Allows defining multiple "onHeadersReceived" listeners + // by enhancing the session. + // Some plugins (e.g. adblocker) also define a "onHeadersReceived" listener + enhanceWebRequest(session); + + // Custom listener to tweak the content security policy + session.webRequest.onHeadersReceived(function (details, callback) { + if ( + !details.responseHeaders["content-security-policy-report-only"] && + !details.responseHeaders["content-security-policy"] + ) + return callback({ cancel: false }); + delete details.responseHeaders["content-security-policy-report-only"]; + delete details.responseHeaders["content-security-policy"]; + callback({ cancel: false, responseHeaders: details.responseHeaders }); + }); + + // When multiple listeners are defined, apply them all + session.webRequest.setResolver("onHeadersReceived", (listeners) => { + const response = listeners.reduce( + async (accumulator, listener) => { + if (accumulator.cancel) { + return accumulator; + } + + const result = await listener.apply(); + return { ...accumulator, ...result }; + }, + { cancel: false } + ); + + return response; + }); +} diff --git a/package.json b/package.json index 3d33b254..ffd82cb5 100644 --- a/package.json +++ b/package.json @@ -72,6 +72,7 @@ "chokidar": "^3.5.1", "custom-electron-titlebar": "^3.2.7", "discord-rpc": "^3.2.0", + "electron-better-web-request": "^1.0.1", "electron-debug": "^3.2.0", "electron-is": "^3.0.0", "electron-localshortcut": "^3.2.1", diff --git a/yarn.lock b/yarn.lock index d54eb817..f3cfc119 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3264,6 +3264,14 @@ ejs@^3.1.6: dependencies: jake "^10.6.1" +electron-better-web-request@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/electron-better-web-request/-/electron-better-web-request-1.0.1.tgz#9c7ccf88499cc8b17f9bffd3f33a01fc1e70282a" + integrity sha512-euwLeL82k6fbVODfH5Uz9c4BN047/XyYKfsZcaFhdWfqx05JPu2J0xE7nciJ/1Bb0sTClU1FDLW5H2zQWBB5Gw== + dependencies: + url-match-patterns "^0.2.0" + uuid "^3.3.2" + electron-builder@^22.10.5: version "22.10.5" resolved "https://registry.yarnpkg.com/electron-builder/-/electron-builder-22.10.5.tgz#03b156b93e6012609027c3aaa69201a3ad21e454" @@ -6222,7 +6230,7 @@ lodash.zip@^4.2.0: resolved "https://registry.yarnpkg.com/lodash.zip/-/lodash.zip-4.2.0.tgz#ec6662e4896408ed4ab6c542a3990b72cc080020" integrity sha1-7GZi5IlkCO1KtsVCo5kLcswIACA= -lodash@^4.13.1, lodash@^4.17.10, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21: +lodash@^4.13.1, lodash@^4.17.10, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.3.0: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== @@ -8859,6 +8867,13 @@ urix@^0.1.0: resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= +url-match-patterns@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/url-match-patterns/-/url-match-patterns-0.2.0.tgz#a688f68b0aff990c6df3c99ec208a8d410f1cb8c" + integrity sha1-poj2iwr/mQxt88mewgio1BDxy4w= + dependencies: + lodash "^4.3.0" + url-parse-lax@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-3.0.0.tgz#16b5cafc07dbe3676c1b1999177823d6503acb0c"