diff options
-rw-r--r-- | browser/background.js | 32 | ||||
-rw-r--r-- | browser/manifestv2.json | 6 | ||||
-rw-r--r-- | scripts/build/buildWeb.mjs | 6 | ||||
-rw-r--r-- | src/components/VencordSettings/ThemesTab.tsx | 25 | ||||
-rw-r--r-- | src/components/VencordSettings/VencordTab.tsx | 15 | ||||
-rw-r--r-- | src/plugins/_core/supportHelper.tsx | 19 | ||||
-rw-r--r-- | src/utils/constants.ts | 2 |
7 files changed, 53 insertions, 52 deletions
diff --git a/browser/background.js b/browser/background.js new file mode 100644 index 0000000..1f2d5ec --- /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"] +); diff --git a/browser/manifestv2.json b/browser/manifestv2.json index a6feada..3cac945 100644 --- a/browser/manifestv2.json +++ b/browser/manifestv2.json @@ -26,7 +26,11 @@ } ], - "web_accessible_resources": ["dist/*", "third-party/*"], + "background": { + "scripts": ["background.js"] + }, + + "web_accessible_resources": ["dist/Vencord.js", "dist/Vencord.css"], "browser_specific_settings": { "gecko": { diff --git a/scripts/build/buildWeb.mjs b/scripts/build/buildWeb.mjs index e4eeb53..02e4da0 100644 --- a/scripts/build/buildWeb.mjs +++ b/scripts/build/buildWeb.mjs @@ -145,11 +145,11 @@ async function loadDir(dir, basePath = "") { /** * @type {(target: string, files: string[]) => Promise<void>} */ -async function buildExtension(target, files, noMonaco = false) { +async function buildExtension(target, files) { const entries = { "dist/Vencord.js": await readFile("dist/extension.js"), "dist/Vencord.css": await readFile("dist/extension.css"), - ...(noMonaco ? {} : await loadDir("dist/monaco")), + ...await loadDir("dist/monaco"), ...Object.fromEntries(await Promise.all(RnNoiseFiles.map(async file => [`third-party/rnnoise/${file.replace(/^dist\//, "")}`, await readFile(`node_modules/@sapphi-red/web-noise-suppressor/${file}`)] ))), @@ -195,7 +195,7 @@ const appendCssRuntime = readFile("dist/Vencord.user.css", "utf-8").then(content await Promise.all([ appendCssRuntime, buildExtension("chromium-unpacked", ["modifyResponseHeaders.json", "content.js", "manifest.json", "icon.png"]), - buildExtension("firefox-unpacked", ["content.js", "manifestv2.json", "icon.png"], true), + buildExtension("firefox-unpacked", ["background.js", "content.js", "manifestv2.json", "icon.png"]), ]); Zip.sync.zip("dist/chromium-unpacked").compress().save("dist/extension.zip"); diff --git a/src/components/VencordSettings/ThemesTab.tsx b/src/components/VencordSettings/ThemesTab.tsx index 573f3b9..f19cdcb 100644 --- a/src/components/VencordSettings/ThemesTab.tsx +++ b/src/components/VencordSettings/ThemesTab.tsx @@ -18,11 +18,9 @@ import { useSettings } from "@api/Settings"; import { classNameFactory } from "@api/Styles"; -import { ErrorCard } from "@components/ErrorCard"; import { Flex } from "@components/Flex"; import { DeleteIcon } from "@components/Icons"; import { Link } from "@components/Link"; -import { IsFirefox } from "@utils/constants"; import { Margins } from "@utils/margins"; import { classes } from "@utils/misc"; import { showItemInFolder } from "@utils/native"; @@ -251,14 +249,12 @@ function ThemesTab() { > Load missing Themes </Button> - {!IsFirefox && ( - <Button - onClick={() => VencordNative.quickCss.openEditor()} - size={Button.Sizes.SMALL} - > - Edit QuickCSS - </Button> - )} + <Button + onClick={() => VencordNative.quickCss.openEditor()} + size={Button.Sizes.SMALL} + > + Edit QuickCSS + </Button> </> </Card> @@ -320,15 +316,6 @@ function ThemesTab() { return ( <SettingsTab title="Themes"> - {IsFirefox && ( - <ErrorCard> - <Forms.FormTitle tag="h5">Warning</Forms.FormTitle> - <Forms.FormText> - You are using Firefox. Expect the vast majority of themes to not work. - If this is a problem, use a chromium browser or Discord Desktop / Vesktop. - </Forms.FormText> - </ErrorCard> - )} <TabBar type="top" look="brand" diff --git a/src/components/VencordSettings/VencordTab.tsx b/src/components/VencordSettings/VencordTab.tsx index 520e4da..a8e9ea5 100644 --- a/src/components/VencordSettings/VencordTab.tsx +++ b/src/components/VencordSettings/VencordTab.tsx @@ -21,7 +21,6 @@ import { Settings, useSettings } from "@api/Settings"; import { classNameFactory } from "@api/Styles"; import DonateButton from "@components/DonateButton"; import { ErrorCard } from "@components/ErrorCard"; -import { IsFirefox } from "@utils/constants"; import { Margins } from "@utils/margins"; import { identity } from "@utils/misc"; import { relaunch, showItemInFolder } from "@utils/native"; @@ -110,14 +109,12 @@ function VencordSettings() { Restart Client </Button> )} - {!IsFirefox && ( - <Button - onClick={() => VencordNative.quickCss.openEditor()} - size={Button.Sizes.SMALL} - disabled={settingsDir === "Loading..."}> - Open QuickCSS File - </Button> - )} + <Button + onClick={() => VencordNative.quickCss.openEditor()} + size={Button.Sizes.SMALL} + disabled={settingsDir === "Loading..."}> + Open QuickCSS File + </Button> {!IS_WEB && ( <Button onClick={() => showItemInFolder(settingsDir)} diff --git a/src/plugins/_core/supportHelper.tsx b/src/plugins/_core/supportHelper.tsx index 2e86869..674be8e 100644 --- a/src/plugins/_core/supportHelper.tsx +++ b/src/plugins/_core/supportHelper.tsx @@ -17,7 +17,7 @@ */ import { DataStore } from "@api/index"; -import { Devs, IsFirefox, SUPPORT_CHANNEL_ID } from "@utils/constants"; +import { Devs, SUPPORT_CHANNEL_ID } from "@utils/constants"; import { isPluginDev } from "@utils/misc"; import { makeCodeblock } from "@utils/text"; import definePlugin from "@utils/types"; @@ -30,7 +30,6 @@ import plugins from "~plugins"; import settings from "./settings"; const REMEMBER_DISMISS_KEY = "Vencord-SupportHelper-Dismiss"; -const FIREFOX_DISMISS_KEY = "Vencord-Firefox-Warning-Dismiss"; const AllowedChannelIds = [ SUPPORT_CHANNEL_ID, @@ -116,22 +115,6 @@ ${makeCodeblock(enabledPlugins.join(", ") + "\n\n" + enabledApiPlugins.join(", " onConfirm: rememberDismiss }); } - - if (IsFirefox) { - const rememberDismiss = () => DataStore.set(FIREFOX_DISMISS_KEY, true); - - Alerts.show({ - title: "Hold on!", - body: <div> - <Forms.FormText>You are using Firefox.</Forms.FormText> - <Forms.FormText>Due to Firefox's stupid extension guidelines, most themes and many plugins will not function correctly.</Forms.FormText> - <Forms.FormText>Do not report bugs. Do not ask for help with broken plugins.</Forms.FormText> - <Forms.FormText>Instead, use a chromium browser, Discord Desktop, or Vesktop.</Forms.FormText> - </div>, - onCancel: rememberDismiss, - onConfirm: rememberDismiss - }); - } } } }); diff --git a/src/utils/constants.ts b/src/utils/constants.ts index e80298d..6395ddf 100644 --- a/src/utils/constants.ts +++ b/src/utils/constants.ts @@ -389,5 +389,3 @@ export const DevsById = /* #__PURE__*/ (() => .map(([_, v]) => [v.id, v] as const) )) )() as Record<string, Dev>; - -export const IsFirefox = IS_EXTENSION && navigator.userAgent.toLowerCase().includes("firefox"); |