mirror of
https://github.com/hensm/fx_cast.git
synced 2026-06-10 09:39:58 +00:00
Re-work whitelist feature to allow per-site UA configuration
This commit is contained in:
@@ -137,11 +137,11 @@ async function onMenuClicked(
|
||||
);
|
||||
}
|
||||
|
||||
const whitelist = await options.get("userAgentWhitelist");
|
||||
if (!whitelist.includes(pattern)) {
|
||||
const whitelist = await options.get("siteWhitelist");
|
||||
if (!whitelist.find(item => item.pattern === pattern)) {
|
||||
// Add to whitelist and update options
|
||||
whitelist.push(pattern);
|
||||
await options.set("userAgentWhitelist", whitelist);
|
||||
whitelist.push({ pattern });
|
||||
await options.set("siteWhitelist", whitelist);
|
||||
}
|
||||
|
||||
return;
|
||||
|
||||
@@ -22,6 +22,11 @@ type OnBeforeRequestDetails = Parameters<
|
||||
frameAncestors?: Array<{ url: string; frameId: number }>;
|
||||
};
|
||||
|
||||
export interface WhitelistItemData {
|
||||
pattern: string;
|
||||
isUserAgentDisabled?: boolean;
|
||||
}
|
||||
|
||||
const originUrlCache: string[] = [];
|
||||
|
||||
let platform: string;
|
||||
@@ -47,18 +52,18 @@ export async function initWhitelist() {
|
||||
}
|
||||
|
||||
// Register on first run
|
||||
await registerUserAgentWhitelist();
|
||||
await registerSiteWhitelist();
|
||||
|
||||
// Re-register when options change
|
||||
options.addEventListener("changed", ev => {
|
||||
const alteredOpts = ev.detail;
|
||||
|
||||
if (
|
||||
alteredOpts.includes("userAgentWhitelist") ||
|
||||
alteredOpts.includes("userAgentWhitelistEnabled")
|
||||
alteredOpts.includes("siteWhitelist") ||
|
||||
alteredOpts.includes("siteWhitelistEnabled")
|
||||
) {
|
||||
unregisterUserAgentWhitelist();
|
||||
registerUserAgentWhitelist();
|
||||
unregisterSiteWhitelist();
|
||||
registerSiteWhitelist();
|
||||
}
|
||||
});
|
||||
}
|
||||
@@ -189,9 +194,8 @@ async function onBeforeCastSDKRequest(details: OnBeforeRequestDetails) {
|
||||
};
|
||||
}
|
||||
|
||||
async function registerUserAgentWhitelist() {
|
||||
const { userAgentWhitelist, userAgentWhitelistEnabled } =
|
||||
await options.getAll();
|
||||
async function registerSiteWhitelist() {
|
||||
const { siteWhitelist, siteWhitelistEnabled } = await options.getAll();
|
||||
|
||||
browser.webRequest.onBeforeRequest.addListener(
|
||||
onBeforeCastSDKRequest,
|
||||
@@ -199,13 +203,18 @@ async function registerUserAgentWhitelist() {
|
||||
["blocking"]
|
||||
);
|
||||
|
||||
if (!userAgentWhitelistEnabled || !userAgentWhitelist.length) {
|
||||
if (!siteWhitelistEnabled || !siteWhitelist.length) {
|
||||
return;
|
||||
}
|
||||
|
||||
browser.webRequest.onBeforeSendHeaders.addListener(
|
||||
onWhitelistedBeforeSendHeaders,
|
||||
{ urls: userAgentWhitelist },
|
||||
{
|
||||
// Filter for items with UA enabled
|
||||
urls: siteWhitelist.flatMap(item =>
|
||||
!item.isUserAgentDisabled ? [item.pattern] : []
|
||||
)
|
||||
},
|
||||
["blocking", "requestHeaders"]
|
||||
);
|
||||
|
||||
@@ -216,7 +225,7 @@ async function registerUserAgentWhitelist() {
|
||||
);
|
||||
}
|
||||
|
||||
function unregisterUserAgentWhitelist() {
|
||||
function unregisterSiteWhitelist() {
|
||||
originUrlCache.length = 0;
|
||||
|
||||
browser.webRequest.onBeforeSendHeaders.removeListener(
|
||||
|
||||
Reference in New Issue
Block a user