diff --git a/package.json b/package.json index 4d6afce..600ce48 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "doqment", - "version": "0.9.1", + "version": "0.9.2", "description": "Mozilla's HTML5 PDF Viewer with Reader-mode add-on.", "homepage": "https://github.com/shivaprsd/doqment", "repository": "github:shivaprsd/doqment", diff --git a/src/manifest-v2.json b/src/manifest-v2.json index cf34dc9..8a9412a 100644 --- a/src/manifest-v2.json +++ b/src/manifest-v2.json @@ -1,6 +1,6 @@ { "manifest_version": 2, - "version": "0.9.1", + "version": "0.9.2", "name": "doqment PDF Reader", "short_name": "doqment", diff --git a/src/manifest-v3.json b/src/manifest-v3.json index 2b6ddeb..ff4a102 100644 --- a/src/manifest-v3.json +++ b/src/manifest-v3.json @@ -1,6 +1,6 @@ { "manifest_version": 3, - "version": "0.9.1", + "version": "0.9.2", "minimum_chrome_version": "116", "name": "doqment PDF Reader", diff --git a/src/pdfjs b/src/pdfjs index fa93fab..e59479a 160000 --- a/src/pdfjs +++ b/src/pdfjs @@ -1 +1 @@ -Subproject commit fa93faba4c10cb0a09887b02b0fee8b3e163e8af +Subproject commit e59479ac00c11fe096039f2f4c093c933ef72ce3 diff --git a/src/scripts/doqment.js b/src/scripts/doqment.js index 3d8773e..329aa20 100644 --- a/src/scripts/doqment.js +++ b/src/scripts/doqment.js @@ -93,6 +93,7 @@ const Doqment = { window.alert(details.message); app.loadingBar?.hide(); app.close(); + chrome.runtime.sendMessage({ action: "removeViewer" }); }, /* Smart zoom */ diff --git a/src/scripts/mv3/service-worker.js b/src/scripts/mv3/service-worker.js index 273fa1c..a94969b 100644 --- a/src/scripts/mv3/service-worker.js +++ b/src/scripts/mv3/service-worker.js @@ -55,20 +55,25 @@ async function handleClick(info, tab) { /* if doqment is the default, open in the built-in viewer instead */ async function openLink(url, openerTabId) { const permit = { origins: [url] }; - let viewerUrl; - if (!url.startsWith(baseUrl) && await chrome.permissions.request(permit)) { - viewerUrl = getViewerURL(baseUrl, url); + const allowed = await chrome.permissions.request(permit).catch(r => {}); + if (allowed === false) { + return; } + const isViewerUrl = url.startsWith(baseUrl); const scripts = await chrome.scripting.getRegisteredContentScripts(); /* We cannot check this earlier because `permissions.request()` * has to be called immediately after user action where needed */ if (scripts.length > 0) { + if (isViewerUrl) { + url = new URL(url).searchParams.get("file"); + } url = new URL(url); url.searchParams.set("doqment", "ignore"); chrome.tabs.create({ url: url.toString(), openerTabId }); - } else if (viewerUrl) { + } else { const newTab = await chrome.tabs.create({ url, openerTabId }); - loadViewer(viewerUrl, newTab.id); + if (allowed) + loadViewer(getViewerURL(baseUrl, url), newTab.id); } } @@ -106,13 +111,17 @@ function toggleAutoOpen(enable, menuId) { } function respond(request, sender, sendResponse) { + const tabId = sender.tab.id; if (request.action === "loadViewer") { const viewerUrl = getViewerURL(baseUrl, request.body); if (sender.frameId === 0) { - loadViewer(viewerUrl, sender.tab.id); + loadViewer(viewerUrl, tabId); } else { sendResponse({ url: viewerUrl }); } + } else if (request.action === "removeViewer") { + const func = () => document.getElementById("doqmentViewer").remove(); + chrome.scripting.executeScript({ target: {tabId}, func }); } } @@ -179,18 +188,14 @@ async function newViewer(tab) { return chrome.extension.isAllowedFileSchemeAccess(); }; const url = tab.url; - let viewerUrl; + let viewerUrl = splashUrl; if (new URL(url).protocol === "file:" && !await hasFilesAccess()) { viewerUrl = messageUrl; } else if (await isPdfTab(tab.id)) { - viewerUrl = getViewerURL(baseUrl, url); - } - - if (viewerUrl) { - loadViewer(viewerUrl, tab.id); - } else { - chrome.tabs.create({ url: splashUrl, index: tab.index + 1 }); + loadViewer(getViewerURL(baseUrl, url), tab.id); + return; } + chrome.tabs.create({ url: viewerUrl, index: tab.index + 1 }); } /* Load viewer in a full page frame in the given tab */ @@ -199,6 +204,7 @@ function loadViewer(viewerUrl, tabId) { const frame = document.createElement("iframe"); frame.src = src; frame.id = "doqmentViewer"; + frame.setAttribute("allow", "fullscreen"); document.body.prepend(frame); }; chrome.scripting.executeScript({