aboutsummaryrefslogtreecommitdiff
path: root/browser/background.js
diff options
context:
space:
mode:
Diffstat (limited to 'browser/background.js')
-rw-r--r--browser/background.js32
1 files changed, 32 insertions, 0 deletions
diff --git a/browser/background.js b/browser/background.js
new file mode 100644
index 0000000..7fc4a82
--- /dev/null
+++ b/browser/background.js
@@ -0,0 +1,32 @@
+/**
+ * @template T
+ * @param {T[]} arr
+ * @param {(v: T) => boolean} predicate
+ */
+function removeFirst(arr, predicate) {
+ const idx = arr.findIndex(predicate);
+ if (idx !== -1) arr.splice(idx, 1);
+}
+
+chrome.webRequest.onHeadersReceived.addListener(
+ ({ responseHeaders, type, url }) => {
+ if (!responseHeaders) return;
+
+ if (type === "main_frame") {
+ // In main frame requests, the CSP needs to be removed to enable fetching of custom css
+ // as desired by the user
+ removeFirst(responseHeaders, h => h.name.toLowerCase() === "content-security-policy");
+ } else if (type === "stylesheet" && url.startsWith("https://raw.githubusercontent.com")) {
+ // Most users will load css from GitHub, but GitHub doesn't set the correct content type,
+ // so we fix it here
+ removeFirst(responseHeaders, h => h.name.toLowerCase() === "content-type");
+ responseHeaders.push({
+ name: "Content-Type",
+ value: "text/css"
+ });
+ }
+ return { responseHeaders };
+ },
+ { urls: ["https://raw.githubusercontent.com/*", "*://*.discord.com/*"], types: ["main_frame", "stylesheet"] },
+ ["blocking", "responseHeaders"]
+);