diff options
Diffstat (limited to 'src/pages')
-rw-r--r-- | src/pages/background/background.js | 97 | ||||
-rw-r--r-- | src/pages/messages/no_instance.html | 2 | ||||
-rw-r--r-- | src/pages/popup_src/Buttons.svelte | 8 | ||||
-rw-r--r-- | src/pages/popup_src/components/Switch.svelte | 2 |
4 files changed, 51 insertions, 58 deletions
diff --git a/src/pages/background/background.js b/src/pages/background/background.js index 16ca38d7..f41cb55e 100644 --- a/src/pages/background/background.js +++ b/src/pages/background/background.js @@ -19,58 +19,71 @@ browser.runtime.onInstalled.addListener(async details => { } }) +// true to redirect, false to bypass let tabIdRedirects = {} // true == Always redirect, false == Never redirect, null/undefined == follow options for services browser.webRequest.onBeforeRequest.addListener( details => { + const old_href = details.url const url = new URL(details.url) - const old_href = url.href if (new RegExp(/^chrome-extension:\/{2}.*\/instances\/.*.json$/).test(url.href) && details.type == "xmlhttprequest") - return - let originUrl - try { - if (details.originUrl) originUrl = new URL(details.originUrl) - } catch { return null - } - let documentUrl - try { if (details.documentUrl) documentUrl = new URL(details.documentUrl) } - catch (error) { return null } + + // if url is previously bypassed if (tabIdRedirects[details.tabId] == false) return null - let newUrl = servicesHelper.redirect(url, details.type, originUrl, documentUrl, tabIdRedirects[details.tabId], details.incognito) + // Bypass embeds from excepted urls if ( details.frameAncestors && - details.frameAncestors.length > 0 && + details.frameAncestors.length >= 1 && servicesHelper.isException(new URL(details.frameAncestors[0].url)) ) - newUrl = null + return null if (servicesHelper.isException(url)) { - if (details.type == "main_frame") newUrl = "BYPASSTAB" - else return null + if (details.type == "main_frame") { + console.log(`Bypassing ${details.tabId} ${url}`) + tabIdRedirects[details.tabId] = false + } + return null + } + + let originUrl + let documentUrl + try { + if (details.originUrl) originUrl = new URL(details.originUrl) + if (details.documentUrl) documentUrl = new URL(details.documentUrl) + } catch { + return null } + const newUrl = servicesHelper.redirect( + url, + details.type, + originUrl, + documentUrl, + details.incognito, + tabIdRedirects[details.tabId] + ) + if (!newUrl) { - const match = url.href.match(/^https?:\/{2}.*\.libredirect\.invalid.*/) + const match = url.href.match(/^https?:\/{2}(.*\.)?libredirect\.invalid.*/) if (match) { - browser.tabs.update({ - url: browser.runtime.getURL(`/pages/messages/no_instance.html`), - }) + browser.tabs.update({ url: browser.runtime.getURL(`/pages/messages/no_instance.html`) }) } } + if (newUrl === "CANCEL") { + console.log(`Cancelling ${url}`) + return { cancel: true } + } + if (newUrl === "BYPASSTAB") { + console.log(`Bypassing ${details.tabId} ${url}`) + tabIdRedirects[details.tabId] = false + return null + } if (newUrl) { - if (newUrl === "CANCEL") { - console.log(`Canceled ${url}`) - return { cancel: true } - } - if (newUrl === "BYPASSTAB") { - console.log(`Bypassed ${details.tabId} ${url}`) - if (tabIdRedirects[details.tabId] != false) tabIdRedirects[details.tabId] = false - return null - } console.log("Redirecting", old_href, "=>", newUrl) return { redirectUrl: newUrl } } @@ -105,7 +118,7 @@ browser.runtime.getPlatformInfo(r => { browser.tabs.query({ active: true, currentWindow: true }, async tabs => { if (tabs[0].url) { const url = new URL(tabs[0].url) - const newUrl = servicesHelper.redirect(url, "main_frame", null, null, true) + const newUrl = servicesHelper.redirect(url, "main_frame", null, null, false, true) if (newUrl) { browser.tabs.update(tabs[0].id, { url: newUrl }, () => { tabIdRedirects[tabs[0].id] = true @@ -211,7 +224,7 @@ browser.runtime.getPlatformInfo(r => { browser.tabs.query({ active: true, currentWindow: true }, async tabs => { if (tabs[0].url) { const url = new URL(tabs[0].url) - const newUrl = servicesHelper.redirect(url, "main_frame", null, null, true) + const newUrl = servicesHelper.redirect(url, "main_frame", null, null, false, true) if (newUrl) { browser.tabs.update(tabs[0].id, { url: newUrl }, () => { tabIdRedirects[tabs[0].id] = true @@ -228,7 +241,7 @@ browser.runtime.getPlatformInfo(r => { case "redirectLink": case "redirectLinkInNewTab": { const url = new URL(info.linkUrl) - const newUrl = servicesHelper.redirect(url, "main_frame", null, null, true) + const newUrl = servicesHelper.redirect(url, "main_frame", null, null, false, true) if (newUrl) { if (info.menuItemId == "redirectLink") browser.tabs.update({ url: newUrl }) else browser.tabs.create({ url: newUrl }) @@ -276,7 +289,7 @@ browser.runtime.getPlatformInfo(r => { case "redirectBookmarkInNewTab": browser.bookmarks.get(info.bookmarkId, bookmarks => { const url = new URL(bookmarks[0].url) - const newUrl = servicesHelper.redirect(url, "main_frame", null, null, true) + const newUrl = servicesHelper.redirect(url, "main_frame", null, null, false, true) if (newUrl) { if (info.menuItemId == "redirectBookmark") browser.tabs.update({ url: newUrl }) else browser.tabs.create({ url: newUrl }) @@ -316,23 +329,3 @@ browser.runtime.getPlatformInfo(r => { }) } }) - -browser.runtime.onMessage.addListener((request, sender, sendResponse) => { - if (request == "reverseTab") { - browser.tabs.query({ active: true, currentWindow: true }, async tabs => { - if (tabs[0].url) { - const url = new URL(tabs[0].url) - const newUrl = await servicesHelper.reverse(url) - if (newUrl) browser.tabs.update(tabs[0].id, { url: newUrl }, () => (tabIdRedirects[tabs[0].id] = false)) - } - }) - } else if (request == "redirectTab") { - browser.tabs.query({ active: true, currentWindow: true }, async tabs => { - if (tabs[0].url) { - const url = new URL(tabs[0].url) - const newUrl = servicesHelper.redirect(url, "main_frame", null, null, true) - if (newUrl) browser.tabs.update(tabs[0].id, { url: newUrl }, () => (tabIdRedirects[tabs[0].id] = true)) - } - }) - } -}) diff --git a/src/pages/messages/no_instance.html b/src/pages/messages/no_instance.html index 358ff506..55e5fac7 100644 --- a/src/pages/messages/no_instance.html +++ b/src/pages/messages/no_instance.html @@ -18,7 +18,7 @@ <body> <div id="body"> - <h1>You have no instance selected for this frontend</h1> + <h1>LibRedirect: You have no instance selected for this frontend</h1> </div> </body> </html> diff --git a/src/pages/popup_src/Buttons.svelte b/src/pages/popup_src/Buttons.svelte index e53a64b7..c0644ff7 100644 --- a/src/pages/popup_src/Buttons.svelte +++ b/src/pages/popup_src/Buttons.svelte @@ -33,7 +33,7 @@ url = new URL(tabs[0].url) servicesHelper.switchInstance(url).then(r => (switchInstance = r)) servicesHelper.reverse(url).then(r => (redirectToOriginal = r)) - servicesHelper.redirectAsync(url, "main_frame", null, true).then(r => (redirect = r)) + servicesHelper.redirectAsync(url, "main_frame", null, null, false, true).then(r => (redirect = r)) servicesHelper.computeService(url).then(r => (currentService = r)) } }) @@ -44,7 +44,7 @@ <Row class="interactive" on:click={() => { - browser.runtime.sendMessage("redirectTab", () => { + browser.tabs.update({ url: redirect }, () => { window.close() }) }} @@ -58,7 +58,7 @@ <Row class="interactive" on:click={async () => - browser.tabs.update({ url: await servicesHelper.switchInstance(url) }, () => { + browser.tabs.update({ url: switchInstance }, () => { window.close() })} > @@ -75,7 +75,7 @@ <Row class="interactive" on:click={() => - browser.runtime.sendMessage("reverseTab", () => { + browser.tabs.update({ url: redirectToOriginal }, () => { window.close() })} > diff --git a/src/pages/popup_src/components/Switch.svelte b/src/pages/popup_src/components/Switch.svelte index f76e74be..98f765b7 100644 --- a/src/pages/popup_src/components/Switch.svelte +++ b/src/pages/popup_src/components/Switch.svelte @@ -30,7 +30,7 @@ class="interactive margin margin_{document.body.dir}" on:keydown={null} on:click={() => - browser.tabs.create({ url: browser.runtime.getURL(_config.services[serviceKey].url) }, () => { + browser.tabs.create({ url: _config.services[serviceKey].url }, () => { window.close() })} > |