From 866777686c3920831281746665daf72091a38d19 Mon Sep 17 00:00:00 2001 From: Kevin F Date: Sun, 20 Feb 2022 00:50:15 -0600 Subject: [PATCH] Finished popup approach --- background.js | 74 +++++++++++++----------------------------- manifest.json | 11 ++++++- settings/button.html | 2 +- settings/keybuffer2.js | 63 ++++++++++++++++++----------------- 4 files changed, 67 insertions(+), 83 deletions(-) diff --git a/background.js b/background.js index 60a74eb..a68cf5f 100644 --- a/background.js +++ b/background.js @@ -20,9 +20,7 @@ let lastActive = null const defaultHosts = ""; let appCode = function (){ - let keyBuffer = "" - let elementToSendBuffer = null - let bufferTimeout = setTimeout(function(){}, 1) + let lastActive = document.createElement("p") let popupEnabled = false let popupGetter = browser.storage.sync.get("keyboardprivacyprompt") popupGetter.then(function(val){ @@ -201,65 +199,37 @@ let appCode = function (){ whitelist.then(shouldRunKeyboardPrivacy, noKeyboardPrivacySettings) + document.addEventListener('focus', function(e){ + let active = document.activeElement; + if (active.tagName == "INPUT" || active.tagName == "TEXTAREA") { + lastActive = active + } + }) + browser.runtime.onMessage.addListener(request => { + let active = document.activeElement - console.log(request.keys); - if (request.keys == "GetSet"){ - keyBuffer = elementToSendBuffer.value - return Promise.resolve({response: elementToSendBuffer.value}); + if (request.getCurrent){ + if (active.tagName != "INPUT" && active.tagName != "TEXTAREA") { + if (lastActive.tagName != "INPUT" && lastActive.tagName != "TEXTAREA"){ + console.debug("no current active or last active") + return Promise.resolve({response: false}); + } + return Promise.resolve({response: lastActive.value}); + } + return Promise.resolve({response: active.value}); } + if (active.tagName != "INPUT" && active.tagName != "TEXTAREA"){ - clearTimeout(bufferTimeout) - - if (request.keys == "Backspace"){ - keyBuffer = keyBuffer.slice(0, -1) - } - else if (request.keys == "Tab"){ - keyBuffer += "\t" - } - else if(request.keys.length > 4){ - // pass + lastActive.value = request.keys } else{ - keyBuffer += request.keys; + document.activeElement.value = request.keys + lastActive = document.activeElement } - if (request.isEmpty){ - keyBuffer = "" - sendBuffer() - } - bufferTimeout = setTimeout(function(){sendBuffer()}, 100) return Promise.resolve({response: "ack"}); }); - function sendBuffer(){ - - if (elementToSendBuffer == null){ - bufferTimeout = setTimeout(function(){sendBuffer()}, 100) - return - } - console.debug("sending buffer to " + elementToSendBuffer) - - elementToSendBuffer.value = keyBuffer - - } - - function setSendEl(e){ - let activeEl = document.activeElement - if (activeEl.tagName != "INPUT" && activeEl.tagName != "TEXTAREA"){ - keyBuffer = "" - return - } - - console.debug("active el is " + activeEl.tagName) - elementToSendBuffer = activeEl - keyBuffer = activeEl.value - } - - - document.addEventListener('focus', setSendEl) - document.addEventListener('click', setSendEl) - - } const dummyStr = '' diff --git a/manifest.json b/manifest.json index 320a150..f2e61ee 100644 --- a/manifest.json +++ b/manifest.json @@ -2,7 +2,7 @@ "manifest_version": 2, "name": "Private Keyboard", - "version": "1.9", + "version": "2.0", "description": "Protect against keyboard biometrics", @@ -32,6 +32,15 @@ "default_popup": "settings/button.html" }, + "commands": { + "_execute_browser_action": { + "suggested_key": { + "default": "Ctrl+1" + } + } + }, + + "browser_specific_settings": { "gecko": { diff --git a/settings/button.html b/settings/button.html index c1c996d..f97d171 100644 --- a/settings/button.html +++ b/settings/button.html @@ -13,6 +13,6 @@

Refresh the page to apply


- + \ No newline at end of file diff --git a/settings/keybuffer2.js b/settings/keybuffer2.js index 3836d23..78e0abd 100644 --- a/settings/keybuffer2.js +++ b/settings/keybuffer2.js @@ -5,14 +5,11 @@ function onError(error) { } function doSendMsg(msg, tabs) { - let empty = false; - if (document.getElementById('keyBuffer').value.length == 0){ - empty = true; - } + for (let tab of tabs) { browser.tabs.sendMessage( tab.id, - {keys: msg, isEmpty: empty} + {keys: msg, getCurrent: false} ).then(response => { console.log("Message from the content script:"); console.log(response.response); @@ -20,26 +17,6 @@ function onError(error) { } } -function getCurrent(){ - - browser.tabs.query({ - currentWindow: true - }).then(function(tabs){ - for (let tab of tabs) { - browser.tabs.sendMessage( - tab.id, - {keys: "GetSet", isEmpty: false} - ).then(response => { - console.log("Message from the content script:"); - console.log(response.response); - - document.getElementById('keyBuffer').value = response.response - - }).catch(onError); - } - }).catch(onError); -} - let sender = async function(e){ @@ -58,14 +35,42 @@ let sender = async function(e){ } let sendMessageToTabs = function(tabs){ - doSendMsg(e.key, tabs) + doSendMsg(document.getElementById('keyBuffer').value, tabs) } browser.tabs.query({ - currentWindow: true + currentWindow: true, + active: true }).then(sendMessageToTabs).catch(onError); } -setTimeout(function(){getCurrent()}, 10) + +function getCurrent(){ + browser.tabs.query({ + currentWindow: true, + active: true +}).then(function(tabs){ + + for (let tab of tabs) { + browser.tabs.sendMessage( + tab.id, + {keys: "", getCurrent: true} + ).then(response => { + console.debug(response) + if (response.response === undefined || response.response === false){ + //document.getElementById('keyBuffer').value = "No element in focus. Focus an element and reopen this." + return + } + document.getElementById('keyBuffer').value = response.response + }).catch(onError); + } + +}).catch(onError); +} + +getCurrent() + +document.getElementById("keyBuffer").focus() + document.getElementById('keyBuffer').onkeydown = sender -//document.getElementById('keyBuffer').onpaste = sender \ No newline at end of file +document.getElementById('keyBuffer').onpaste = sender \ No newline at end of file