mirror of
https://github.com/movie-web/extension.git
synced 2025-09-13 13:33:25 +00:00
firefox support (kinda with manual permission set)
This commit is contained in:
@@ -2,6 +2,7 @@ import type { PlasmoMessaging } from '@plasmohq/messaging';
|
|||||||
|
|
||||||
import type { BaseRequest } from '~types/request';
|
import type { BaseRequest } from '~types/request';
|
||||||
import type { BaseResponse } from '~types/response';
|
import type { BaseResponse } from '~types/response';
|
||||||
|
import { isChrome } from '~utils/extension';
|
||||||
import { assertDomainWhitelist } from '~utils/storage';
|
import { assertDomainWhitelist } from '~utils/storage';
|
||||||
|
|
||||||
interface Request extends BaseRequest {
|
interface Request extends BaseRequest {
|
||||||
@@ -25,19 +26,21 @@ const mapHeadersToDeclarativeNetRequestHeaders = (
|
|||||||
const handler: PlasmoMessaging.MessageHandler<Request, BaseResponse> = async (req, res) => {
|
const handler: PlasmoMessaging.MessageHandler<Request, BaseResponse> = async (req, res) => {
|
||||||
try {
|
try {
|
||||||
await assertDomainWhitelist(req.sender.tab.url);
|
await assertDomainWhitelist(req.sender.tab.url);
|
||||||
|
console.log(req.body);
|
||||||
if (chrome) {
|
let rules: any;
|
||||||
|
if (isChrome()) {
|
||||||
await chrome.declarativeNetRequest.updateDynamicRules({
|
await chrome.declarativeNetRequest.updateDynamicRules({
|
||||||
removeRuleIds: [req.body.ruleId],
|
removeRuleIds: [req.body.ruleId],
|
||||||
addRules: [
|
addRules: [
|
||||||
{
|
{
|
||||||
id: req.body.ruleId,
|
id: req.body.ruleId,
|
||||||
condition: {
|
condition: {
|
||||||
requestDomains: req.body.targetDomains,
|
// TODO: Fix this idk why it doesn't work from fetcher requests
|
||||||
|
// requestDomains: req.body.targetDomains,
|
||||||
},
|
},
|
||||||
action: {
|
action: {
|
||||||
type: chrome.declarativeNetRequest.RuleActionType.MODIFY_HEADERS,
|
type: chrome.declarativeNetRequest.RuleActionType.MODIFY_HEADERS,
|
||||||
...(req.body.requestHeaders
|
...(req.body.requestHeaders && Object.keys(req.body.requestHeaders).length > 0
|
||||||
? {
|
? {
|
||||||
requestHeaders: mapHeadersToDeclarativeNetRequestHeaders(
|
requestHeaders: mapHeadersToDeclarativeNetRequestHeaders(
|
||||||
req.body.requestHeaders,
|
req.body.requestHeaders,
|
||||||
@@ -70,19 +73,20 @@ const handler: PlasmoMessaging.MessageHandler<Request, BaseResponse> = async (re
|
|||||||
},
|
},
|
||||||
],
|
],
|
||||||
});
|
});
|
||||||
|
rules = await chrome.declarativeNetRequest.getDynamicRules();
|
||||||
if (chrome.runtime.lastError?.message) throw new Error(chrome.runtime.lastError.message);
|
if (chrome.runtime.lastError?.message) throw new Error(chrome.runtime.lastError.message);
|
||||||
} else {
|
} else {
|
||||||
browser.declarativeNetRequest.updateDynamicRules({
|
await browser.declarativeNetRequest.updateDynamicRules({
|
||||||
removeRuleIds: [req.body.ruleId],
|
removeRuleIds: [req.body.ruleId],
|
||||||
addRules: [
|
addRules: [
|
||||||
{
|
{
|
||||||
id: req.body.ruleId,
|
id: req.body.ruleId,
|
||||||
condition: {
|
condition: {
|
||||||
requestDomains: req.body.targetDomains,
|
// requestDomains: req.body.targetDomains,
|
||||||
},
|
},
|
||||||
action: {
|
action: {
|
||||||
type: 'modifyHeaders',
|
type: 'modifyHeaders',
|
||||||
...(req.body.requestHeaders
|
...(req.body.requestHeaders && Object.keys(req.body.requestHeaders).length > 0
|
||||||
? {
|
? {
|
||||||
requestHeaders: mapHeadersToDeclarativeNetRequestHeaders(req.body.requestHeaders, 'set'),
|
requestHeaders: mapHeadersToDeclarativeNetRequestHeaders(req.body.requestHeaders, 'set'),
|
||||||
}
|
}
|
||||||
@@ -109,11 +113,15 @@ const handler: PlasmoMessaging.MessageHandler<Request, BaseResponse> = async (re
|
|||||||
},
|
},
|
||||||
],
|
],
|
||||||
});
|
});
|
||||||
|
rules = await browser.declarativeNetRequest.getDynamicRules();
|
||||||
if (browser.runtime.lastError?.message) throw new Error(browser.runtime.lastError.message);
|
if (browser.runtime.lastError?.message) throw new Error(browser.runtime.lastError.message);
|
||||||
}
|
}
|
||||||
|
|
||||||
res.send({
|
res.send({
|
||||||
success: true,
|
success: true,
|
||||||
|
// @ts-expect-error TODO: remove this when debugging is done :D
|
||||||
|
body: req.body,
|
||||||
|
rules,
|
||||||
});
|
});
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
res.send({
|
res.send({
|
||||||
|
3
src/utils/extension.ts
Normal file
3
src/utils/extension.ts
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
export const isChrome = () => {
|
||||||
|
return chrome.runtime.getURL('').startsWith('chrome-extension://');
|
||||||
|
};
|
@@ -1,3 +1,5 @@
|
|||||||
|
import { isChrome } from './extension';
|
||||||
|
|
||||||
export function queryCurrentDomain(cb: (domain: string | null) => void) {
|
export function queryCurrentDomain(cb: (domain: string | null) => void) {
|
||||||
const handle = (tabUrl: string | null) => {
|
const handle = (tabUrl: string | null) => {
|
||||||
if (!tabUrl) cb(null);
|
if (!tabUrl) cb(null);
|
||||||
@@ -5,12 +7,12 @@ export function queryCurrentDomain(cb: (domain: string | null) => void) {
|
|||||||
};
|
};
|
||||||
const ops = { active: true, currentWindow: true } as const;
|
const ops = { active: true, currentWindow: true } as const;
|
||||||
|
|
||||||
if (chrome) chrome.tabs.query(ops).then((tabs) => handle(tabs[0]?.url));
|
if (isChrome()) chrome.tabs.query(ops).then((tabs) => handle(tabs[0]?.url));
|
||||||
else browser.tabs.query(ops).then((tabs) => handle(tabs[0]?.url));
|
else browser.tabs.query(ops).then((tabs) => handle(tabs[0]?.url));
|
||||||
}
|
}
|
||||||
|
|
||||||
export function listenToTabChanges(cb: () => void) {
|
export function listenToTabChanges(cb: () => void) {
|
||||||
if (chrome) {
|
if (isChrome()) {
|
||||||
chrome.tabs.onActivated.addListener(cb);
|
chrome.tabs.onActivated.addListener(cb);
|
||||||
chrome.tabs.onUpdated.addListener(cb);
|
chrome.tabs.onUpdated.addListener(cb);
|
||||||
} else if (browser) {
|
} else if (browser) {
|
||||||
@@ -20,7 +22,7 @@ export function listenToTabChanges(cb: () => void) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export function stopListenToTabChanges(cb: () => void) {
|
export function stopListenToTabChanges(cb: () => void) {
|
||||||
if (chrome) {
|
if (isChrome()) {
|
||||||
chrome.tabs.onActivated.removeListener(cb);
|
chrome.tabs.onActivated.removeListener(cb);
|
||||||
chrome.tabs.onUpdated.removeListener(cb);
|
chrome.tabs.onUpdated.removeListener(cb);
|
||||||
} else if (browser) {
|
} else if (browser) {
|
||||||
|
Reference in New Issue
Block a user