2022-07-26 23:28:50 +02:00
|
|
|
"use strict"
|
|
|
|
|
|
|
|
import generalHelper from "../../assets/javascripts/general.js"
|
|
|
|
import utils from "../../assets/javascripts/utils.js"
|
2022-10-04 20:10:07 +02:00
|
|
|
import servicesHelper from "../../assets/javascripts/services.js"
|
2022-08-08 10:47:25 +02:00
|
|
|
|
2022-07-26 23:28:50 +02:00
|
|
|
window.browser = window.browser || window.chrome
|
|
|
|
|
2023-01-06 22:24:25 +01:00
|
|
|
browser.runtime.onInstalled.addListener(async details => {
|
2022-10-18 20:53:17 +02:00
|
|
|
if (details.previousVersion != browser.runtime.getManifest().version) {
|
|
|
|
// ^Used to prevent this running when debugging with auto-reload
|
2023-01-21 12:29:10 +01:00
|
|
|
if (details.reason == "install") {
|
|
|
|
if (!(await utils.getOptions())) {
|
|
|
|
await servicesHelper.initDefaults()
|
|
|
|
}
|
2023-02-08 07:52:06 +01:00
|
|
|
browser.runtime.openOptionsPage()
|
2023-01-21 12:29:10 +01:00
|
|
|
}
|
|
|
|
else if (details.reason == "update") {
|
2023-02-08 13:51:07 +01:00
|
|
|
if (details.previousVersion == '2.5.2') {
|
2023-01-23 10:54:45 +01:00
|
|
|
await servicesHelper.upgradeOptions()
|
2023-02-05 19:42:19 +01:00
|
|
|
} else {
|
|
|
|
await servicesHelper.processUpdate()
|
2023-01-23 10:54:45 +01:00
|
|
|
}
|
2023-01-06 22:24:25 +01:00
|
|
|
}
|
2022-10-08 17:33:39 +02:00
|
|
|
}
|
2022-07-26 23:28:50 +02:00
|
|
|
})
|
|
|
|
|
2022-10-08 17:33:39 +02:00
|
|
|
let tabIdRedirects = {}
|
2023-01-07 10:33:38 +01:00
|
|
|
|
2022-10-08 17:33:39 +02:00
|
|
|
// true == Always redirect, false == Never redirect, null/undefined == follow options for services
|
2020-02-24 04:19:56 +01:00
|
|
|
browser.webRequest.onBeforeRequest.addListener(
|
2022-07-26 23:28:50 +02:00
|
|
|
details => {
|
|
|
|
const url = new URL(details.url)
|
|
|
|
if (new RegExp(/^chrome-extension:\/{2}.*\/instances\/.*.json$/).test(url.href) && details.type == "xmlhttprequest") return
|
|
|
|
let initiator
|
|
|
|
try {
|
|
|
|
if (details.originUrl) initiator = new URL(details.originUrl)
|
|
|
|
else if (details.initiator) initiator = new URL(details.initiator)
|
|
|
|
} catch {
|
|
|
|
return null
|
|
|
|
}
|
2022-10-08 17:33:39 +02:00
|
|
|
if (tabIdRedirects[details.tabId] == false) return null
|
2023-01-07 10:33:38 +01:00
|
|
|
let newUrl = servicesHelper.redirect(url, details.type, initiator, tabIdRedirects[details.tabId], details.tabId)
|
2022-07-26 23:28:50 +02:00
|
|
|
|
|
|
|
if (details.frameAncestors && details.frameAncestors.length > 0 && generalHelper.isException(new URL(details.frameAncestors[0].url))) newUrl = null
|
|
|
|
|
2023-01-22 18:44:36 +01:00
|
|
|
if (generalHelper.isException(url)) {
|
|
|
|
if (details.type == "main_frame")
|
|
|
|
newUrl = "BYPASSTAB"
|
|
|
|
else
|
|
|
|
return null
|
|
|
|
}
|
2022-07-26 23:28:50 +02:00
|
|
|
|
|
|
|
if (newUrl) {
|
|
|
|
if (newUrl === "CANCEL") {
|
|
|
|
console.log(`Canceled ${url}`)
|
|
|
|
return { cancel: true }
|
|
|
|
}
|
2022-10-08 17:33:39 +02:00
|
|
|
if (newUrl === "BYPASSTAB") {
|
|
|
|
console.log(`Bypassed ${details.tabId} ${url}`)
|
|
|
|
if (tabIdRedirects[details.tabId] != false) tabIdRedirects[details.tabId] = false
|
|
|
|
return null
|
|
|
|
}
|
2022-07-26 23:28:50 +02:00
|
|
|
console.info("Redirecting", url.href, "=>", newUrl)
|
|
|
|
return { redirectUrl: newUrl }
|
|
|
|
}
|
|
|
|
return null
|
|
|
|
},
|
|
|
|
{ urls: ["<all_urls>"] },
|
|
|
|
["blocking"]
|
|
|
|
)
|
2020-04-09 11:37:56 +02:00
|
|
|
|
2022-07-26 23:28:50 +02:00
|
|
|
browser.tabs.onRemoved.addListener(tabId => {
|
2022-10-08 17:33:39 +02:00
|
|
|
if (tabIdRedirects[tabId] != undefined) {
|
|
|
|
delete tabIdRedirects[tabId]
|
|
|
|
console.log("Removed tab " + tabId + " from tabIdRedirects")
|
2022-07-26 23:28:50 +02:00
|
|
|
}
|
|
|
|
})
|
2022-02-26 13:38:13 +01:00
|
|
|
|
2023-01-22 18:44:36 +01:00
|
|
|
browser.commands.onCommand.addListener(async command => {
|
2023-02-08 09:28:57 +01:00
|
|
|
browser.tabs.query({ active: true, currentWindow: true }, async tabs => {
|
|
|
|
const url = new URL(tabs[0].url)
|
|
|
|
if (command == "switchInstance") {
|
|
|
|
const newUrl = await servicesHelper.switchInstance(url)
|
|
|
|
if (newUrl) browser.tabs.update({ url: newUrl })
|
|
|
|
}
|
|
|
|
else if (command == "copyRaw") {
|
|
|
|
servicesHelper.copyRaw(url)
|
|
|
|
}
|
|
|
|
})
|
2022-07-26 23:28:50 +02:00
|
|
|
})
|
2022-03-18 23:19:46 +01:00
|
|
|
|
2022-04-14 01:53:47 +02:00
|
|
|
browser.contextMenus.create({
|
2022-07-26 23:28:50 +02:00
|
|
|
id: "settings",
|
2023-02-02 18:29:48 +01:00
|
|
|
title: browser.i18n.getMessage("settings"),
|
2022-07-26 23:28:50 +02:00
|
|
|
contexts: ["browser_action"],
|
|
|
|
})
|
2022-03-18 23:19:46 +01:00
|
|
|
|
2022-04-14 01:53:47 +02:00
|
|
|
browser.contextMenus.create({
|
2022-07-26 23:28:50 +02:00
|
|
|
id: "switchInstance",
|
|
|
|
title: browser.i18n.getMessage("switchInstance"),
|
|
|
|
contexts: ["browser_action"],
|
|
|
|
})
|
2022-03-18 23:19:46 +01:00
|
|
|
|
2022-05-21 00:46:47 +02:00
|
|
|
browser.contextMenus.create({
|
2023-02-08 09:28:57 +01:00
|
|
|
id: "copyReverse",
|
|
|
|
title: 'Copy reverse',
|
|
|
|
contexts: ["browser_action"],
|
|
|
|
})
|
|
|
|
|
|
|
|
browser.contextMenus.create({
|
|
|
|
id: "redirectTab",
|
|
|
|
title: 'Redirect',
|
2022-07-26 23:28:50 +02:00
|
|
|
contexts: ["browser_action"],
|
|
|
|
})
|
2022-05-21 00:46:47 +02:00
|
|
|
|
2023-01-22 18:44:36 +01:00
|
|
|
browser.contextMenus.create({
|
2023-02-08 13:51:07 +01:00
|
|
|
id: "reverseTab",
|
2023-02-08 09:28:57 +01:00
|
|
|
title: 'Reverse redirect',
|
2023-01-22 18:44:36 +01:00
|
|
|
contexts: ["browser_action"],
|
|
|
|
})
|
|
|
|
|
2022-10-08 18:48:24 +02:00
|
|
|
browser.contextMenus.create({
|
|
|
|
id: "redirectLink",
|
2023-02-08 09:28:57 +01:00
|
|
|
title: 'Redirect',
|
2022-10-08 18:48:24 +02:00
|
|
|
contexts: ["link"],
|
|
|
|
})
|
|
|
|
|
2023-02-08 09:28:57 +01:00
|
|
|
browser.contextMenus.create({
|
|
|
|
id: "reverseLink",
|
|
|
|
title: 'Reverse redirect',
|
|
|
|
contexts: ["link"],
|
|
|
|
})
|
|
|
|
|
|
|
|
browser.contextMenus.create({
|
|
|
|
id: "copyReverseLink",
|
|
|
|
title: 'Copy Reverse',
|
|
|
|
contexts: ["link"],
|
|
|
|
})
|
|
|
|
|
2023-02-08 23:31:45 +01:00
|
|
|
browser.contextMenus.create({
|
|
|
|
id: "redirectBookmark",
|
|
|
|
title: 'Redirect',
|
|
|
|
contexts: ["bookmark"],
|
|
|
|
})
|
|
|
|
|
|
|
|
browser.contextMenus.create({
|
|
|
|
id: "reverseBookmark",
|
|
|
|
title: 'Reverse redirect',
|
|
|
|
contexts: ["bookmark"],
|
|
|
|
})
|
|
|
|
|
|
|
|
browser.contextMenus.create({
|
|
|
|
id: "copyReverseBookmark",
|
|
|
|
title: 'Copy Reverse',
|
|
|
|
contexts: ["bookmark"],
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
|
|
browser.contextMenus.onClicked.addListener(async (info) => {
|
2023-02-08 09:28:57 +01:00
|
|
|
switch (info.menuItemId) {
|
|
|
|
case 'switchInstance': {
|
|
|
|
const url = new URL(info.pageUrl)
|
|
|
|
const newUrl = await servicesHelper.switchInstance(url)
|
|
|
|
if (newUrl) {
|
|
|
|
browser.tabs.update({ url: newUrl })
|
|
|
|
}
|
|
|
|
return
|
2023-01-22 18:44:36 +01:00
|
|
|
}
|
2023-02-08 09:28:57 +01:00
|
|
|
case 'settings': {
|
2023-01-22 18:44:36 +01:00
|
|
|
browser.runtime.openOptionsPage()
|
2023-02-08 09:28:57 +01:00
|
|
|
return
|
2023-01-22 18:44:36 +01:00
|
|
|
}
|
2023-02-08 09:28:57 +01:00
|
|
|
case 'copyReverse': {
|
|
|
|
const url = new URL(info.pageUrl)
|
|
|
|
servicesHelper.copyRaw(url)
|
|
|
|
return
|
2023-01-22 18:44:36 +01:00
|
|
|
}
|
2023-02-08 13:51:07 +01:00
|
|
|
case 'reverseTab': {
|
2023-02-08 09:28:57 +01:00
|
|
|
const url = new URL(info.pageUrl)
|
|
|
|
const newUrl = await servicesHelper.reverse(url)
|
2023-01-22 18:44:36 +01:00
|
|
|
if (newUrl) {
|
2023-02-08 23:31:45 +01:00
|
|
|
browser.tabs.create({ url: newUrl }, tab => {
|
|
|
|
tabIdRedirects[tab.id] = false
|
|
|
|
})
|
2023-01-22 18:44:36 +01:00
|
|
|
}
|
2023-02-08 09:28:57 +01:00
|
|
|
return
|
|
|
|
}
|
|
|
|
case 'redirectTab': {
|
|
|
|
const url = new URL(info.pageUrl)
|
|
|
|
const newUrl = servicesHelper.redirect(url, "main_frame", null, true)
|
|
|
|
if (newUrl) {
|
2023-02-08 23:31:45 +01:00
|
|
|
browser.tabs.create({ url: newUrl }, tab => {
|
|
|
|
tabIdRedirects[tab.id] = false
|
|
|
|
})
|
2023-02-08 09:28:57 +01:00
|
|
|
}
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
case 'copyReverseLink': {
|
|
|
|
const url = new URL(info.linkUrl)
|
|
|
|
servicesHelper.copyRaw(url)
|
|
|
|
return
|
2023-01-22 18:44:36 +01:00
|
|
|
}
|
2023-02-08 09:28:57 +01:00
|
|
|
case 'redirectLink': {
|
2023-01-22 18:44:36 +01:00
|
|
|
const url = new URL(info.linkUrl)
|
|
|
|
const newUrl = servicesHelper.redirect(url, "main_frame", null, true)
|
|
|
|
if (newUrl) browser.tabs.create({ url: newUrl })
|
2023-02-08 09:28:57 +01:00
|
|
|
return
|
2022-10-08 12:37:45 +02:00
|
|
|
}
|
2023-02-08 09:28:57 +01:00
|
|
|
case 'reverseLink': {
|
|
|
|
const url = new URL(info.linkUrl)
|
|
|
|
const newUrl = await servicesHelper.reverse(url)
|
|
|
|
if (newUrl) {
|
2023-02-08 23:31:45 +01:00
|
|
|
browser.tabs.create({ url: newUrl }, tab => {
|
|
|
|
tabIdRedirects[tab.id] = false
|
|
|
|
})
|
2023-02-08 09:28:57 +01:00
|
|
|
}
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
2023-02-08 23:31:45 +01:00
|
|
|
case 'copyReverseBookmark': {
|
|
|
|
browser.bookmarks.get(info.bookmarkId, bookmarks => {
|
|
|
|
const url = new URL(bookmarks[0].url)
|
|
|
|
servicesHelper.copyRaw(url)
|
|
|
|
});
|
|
|
|
return
|
|
|
|
}
|
|
|
|
case 'redirectBookmark': {
|
|
|
|
browser.bookmarks.get(info.bookmarkId, bookmarks => {
|
|
|
|
const url = new URL(bookmarks[0].url)
|
|
|
|
const newUrl = servicesHelper.redirect(url, "main_frame", null, true)
|
|
|
|
if (newUrl) browser.tabs.create({ url: newUrl })
|
|
|
|
})
|
|
|
|
return
|
|
|
|
}
|
|
|
|
case 'reverseBookmark': {
|
|
|
|
browser.bookmarks.get(info.bookmarkId, async bookmarks => {
|
|
|
|
const url = new URL(bookmarks[0].url)
|
|
|
|
const newUrl = await servicesHelper.reverse(url)
|
|
|
|
if (newUrl) {
|
|
|
|
browser.tabs.update({ url: newUrl }, tab => {
|
|
|
|
tabIdRedirects[tab.id] = false
|
|
|
|
})
|
|
|
|
}
|
|
|
|
})
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
2023-02-08 09:28:57 +01:00
|
|
|
}
|
2022-07-26 23:28:50 +02:00
|
|
|
})
|
2022-05-27 05:20:07 +02:00
|
|
|
|
2022-10-13 17:52:16 +02:00
|
|
|
browser.webRequest.onHeadersReceived.addListener(
|
|
|
|
e => {
|
|
|
|
let response = servicesHelper.modifyContentSecurityPolicy(e)
|
|
|
|
if (!response) response = servicesHelper.modifyContentSecurityPolicy(e)
|
|
|
|
return response
|
|
|
|
},
|
|
|
|
{ urls: ["<all_urls>"] },
|
|
|
|
["blocking", "responseHeaders"]
|
2023-01-07 10:33:38 +01:00
|
|
|
)
|