about summary refs log tree commit diff stats
path: root/src/pages
diff options
context:
space:
mode:
authorManeraKai <manerakai@protonmail.com>2024-08-25 21:31:24 +0300
committerManeraKai <manerakai@protonmail.com>2024-08-25 21:31:24 +0300
commitdfa6c8e570e3030c382ad045156a0b12fd3ba368 (patch)
treee3f62643d499d087b3925987c2df660db9f780d3 /src/pages
parentMade redlib as the default frontend for reddit https://codeberg.org/LibRedire... (diff)
downloadlibredirect-dfa6c8e570e3030c382ad045156a0b12fd3ba368.zip
Fixing and improving redirect core
Diffstat (limited to 'src/pages')
-rw-r--r--src/pages/background/background.js97
-rw-r--r--src/pages/messages/no_instance.html2
-rw-r--r--src/pages/popup_src/Buttons.svelte8
-rw-r--r--src/pages/popup_src/components/Switch.svelte2
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()
       })}
   >