From 5206cbe847c3f9ef22f02e636e8585da0a29a27b Mon Sep 17 00:00:00 2001 From: Richard Neomy Date: Mon, 5 Sep 2022 01:33:23 -0400 Subject: [PATCH] fixes #288 --- v3/data/inject/meta.js | 2 +- v3/data/inject/watch.js | 10 ++++- v3/manifest.json | 13 ++++--- v3/manifest.json.v3.json | 80 -------------------------------------- v3/v2.html | 7 ---- v3/v2.js | 70 --------------------------------- v3/worker/core/startup.mjs | 2 +- v3/worker/core/utils.mjs | 2 +- v3/worker/modes/number.mjs | 8 ++-- 9 files changed, 24 insertions(+), 170 deletions(-) delete mode 100644 v3/manifest.json.v3.json delete mode 100644 v3/v2.html delete mode 100644 v3/v2.js diff --git a/v3/data/inject/meta.js b/v3/data/inject/meta.js index d657a13..fdf73ec 100644 --- a/v3/data/inject/meta.js +++ b/v3/data/inject/meta.js @@ -1,7 +1,7 @@ { const top = window.top === window; (top ? { - 'time': performance.timing.domLoading, + 'time': window.lastVisit || performance.timing.domLoading, 'audible': Boolean(document.pictureInPictureElement), 'permission': typeof Notification !== 'undefined' ? Notification.permission === 'granted' : false, 'ready': document.readyState === 'complete' || document.readyState === 'loaded', diff --git a/v3/data/inject/watch.js b/v3/data/inject/watch.js index 57c4c66..28cdb4d 100644 --- a/v3/data/inject/watch.js +++ b/v3/data/inject/watch.js @@ -1,5 +1,7 @@ +/* this watches if there are any unsaved forms on the page */ + window.isReceivingFormInput = false; -window.addEventListener('keydown', e => { +addEventListener('keydown', e => { const {keyCode, target, path} = e; // check target if (keyCode >= 48 && keyCode <= 90 && target.tagName) { @@ -27,3 +29,9 @@ window.addEventListener('keydown', e => { } } }, true); + +/* */ +addEventListener('visibilitychange', () => { + window.lastVisit = Date.now(); + console.log(window.lastVisit); +}); diff --git a/v3/manifest.json b/v3/manifest.json index b89a59b..d607539 100644 --- a/v3/manifest.json +++ b/v3/manifest.json @@ -1,5 +1,5 @@ { - "manifest_version": 2, + "manifest_version": 3, "version": "0.6.1", "name": "Auto Tab Discard", "description": "__MSG_app_description__", @@ -19,15 +19,17 @@ "permissions": [ "idle", "storage", - "tabs", "contextMenus", "notifications", "alarms", + "scripting" + ], + "host_permissions": [ "*://*/*" ], "background": { - "persistent": false, - "page": "v2.html" + "service_worker": "worker/core.mjs", + "type": "module" }, "content_scripts": [{ "match_about_blank": true, @@ -38,7 +40,7 @@ "run_at": "document_start", "all_frames": true }], - "browser_action": { + "action": { "default_popup": "data/popup/index.html" }, "options_ui": { @@ -47,6 +49,7 @@ }, "homepage_url": "https://add0n.com/tab-discard.html", "commands": { + "_execute_action": {}, "discard-tab": { "description": "__MSG_cmd_discard_tab__" }, diff --git a/v3/manifest.json.v3.json b/v3/manifest.json.v3.json deleted file mode 100644 index c3329ab..0000000 --- a/v3/manifest.json.v3.json +++ /dev/null @@ -1,80 +0,0 @@ -{ - "manifest_version": 3, - "minimum_chrome_version": "95", - "version": "0.6.0", - "name": "Auto Tab Discard", - "description": "__MSG_app_description__", - "default_locale": "en", - "icons": { - "16": "data/icons/16.png", - "32": "data/icons/32.png", - "48": "data/icons/48.png", - "64": "data/icons/64.png", - "128": "data/icons/128.png", - "256": "data/icons/256.png", - "512": "data/icons/512.png" - }, - "storage": { - "managed_schema": "schema.json" - }, - "permissions": [ - "idle", - "storage", - "tabs", - "scripting", - "contextMenus", - "notifications", - "alarms" - ], - "host_permissions": [ - "*://*/*" - ], - "background": { - "service_worker": "worker/core.mjs", - "type": "module" - }, - "content_scripts": [{ - "match_about_blank": true, - "matches": [""], - "js": [ - "data/inject/watch.js" - ], - "run_at": "document_start", - "all_frames": true - }], - "action": { - "default_popup": "data/popup/index.html" - }, - "options_ui": { - "page": "data/options/index.html", - "open_in_tab": true - }, - "homepage_url": "https://add0n.com/tab-discard.html", - "commands": { - "_execute_action": {}, - "discard-tab": { - "description": "__MSG_cmd_discard_tab__" - }, - "discard-tree": { - "description": "__MSG_cmd_discard_tree__" - }, - "discard-window": { - "description": "__MSG_cmd_discard_window__" - }, - "discard-other-windows": { - "description": "__MSG_cmd_discard_other_windows__" - }, - "discard-tabs": { - "description": "__MSG_cmd_discard_tabs__" - }, - "move-previous": { - "description": "__MSG_cmd_move_previous__" - }, - "move-next": { - "description": "__MSG_cmd_move_next__" - }, - "close": { - "description": "__MSG_cmd_close__" - } - } -} diff --git a/v3/v2.html b/v3/v2.html deleted file mode 100644 index 2004740..0000000 --- a/v3/v2.html +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/v3/v2.js b/v3/v2.js deleted file mode 100644 index 9dc98d5..0000000 --- a/v3/v2.js +++ /dev/null @@ -1,70 +0,0 @@ -// v2 -chrome.action = chrome.action || chrome.browserAction; - -chrome.storage.cache = {}; -chrome.storage.session = chrome.storage.session || { - get(ps, c) { - const r = {}; - for (const [key, value] of Object.entries(ps)) { - r[key] = chrome.storage.cache[key] || value; - } - c(r); - }, - set(ps) { - for (const [key, value] of Object.entries(ps)) { - chrome.storage.cache[key] = value; - } - }, - remove(key) { - delete chrome.storage.cache[key]; - } -}; - -chrome.scripting = chrome.scripting || { - executeScript({target, files, func, world, args = []}) { - const props = {}; - - if (files) { - props.file = files[0]; - } - if (func) { - const s = btoa(encodeURIComponent(JSON.stringify(args))); - props.code = `{ - const f = ${func.toString()}; - const context = '${world}'; - - - if (context !== 'MAIN') { - f(...JSON.parse(decodeURIComponent(atob('${s}')))); - } - else { - const s = document.createElement('script'); - s.textContent = '(' + f.toString() + ')(...JSON.parse(decodeURIComponent(atob("${s}"))))'; - document.body.append(s); - s.remove(); - } - }`; - } - if (target.allFrames) { - props.allFrames = true; - props.matchAboutBlank = true; - } - - return new Promise((resolve, reject) => chrome.tabs.executeScript(target.tabId, props, r => { - const lastError = chrome.runtime.lastError; - if (lastError) { - reject(lastError); - } - else { - resolve(r.map(result => ({result}))); - } - })); - } -}; - -chrome.contextMenus.create = new Proxy(chrome.contextMenus.create, { - apply(target, self, [properties]) { - properties.contexts = properties.contexts.map(s => s === 'action' ? 'browser_action' : s); - Reflect.apply(target, self, [properties]); - } -}); diff --git a/v3/worker/core/startup.mjs b/v3/worker/core/startup.mjs index 7158890..c9d6694 100644 --- a/v3/worker/core/startup.mjs +++ b/v3/worker/core/startup.mjs @@ -23,4 +23,4 @@ const starters = { chrome.runtime.onInstalled.addListener(once); } -export {starters} +export {starters}; diff --git a/v3/worker/core/utils.mjs b/v3/worker/core/utils.mjs index cb38eaf..3806470 100644 --- a/v3/worker/core/utils.mjs +++ b/v3/worker/core/utils.mjs @@ -9,7 +9,7 @@ const notify = e => chrome.notifications.create({ message: e.message || e }); -const query = options => new Promise(resolve => chrome.tabs.query(options, resolve)); +const query = options => chrome.tabs.query(options); const match = (list, hostname, href) => { if (list.filter(s => s.startsWith('re:') === false).indexOf(hostname) !== -1) { diff --git a/v3/worker/modes/number.mjs b/v3/worker/modes/number.mjs index 8941adb..b8c2557 100644 --- a/v3/worker/modes/number.mjs +++ b/v3/worker/modes/number.mjs @@ -98,15 +98,15 @@ number.check = async (filterTabsFrom, ops = {}) => { } let tbs = await query(options); const icon = (tb, title) => { - chrome.browserAction.setTitle({ + chrome.action.setTitle({ tabId: tb.id, title }, () => chrome.runtime.lastError); - chrome.browserAction.setIcon({ + chrome.action.setIcon({ tabId: tb.id, path: { - '16': 'data/icons/disabled/16.png', - '32': 'data/icons/disabled/32.png' + '16': '/data/icons/disabled/16.png', + '32': '/data/icons/disabled/32.png' } }); };