From a31c516fa53a347a14ecbddef342edc61b30b4f8 Mon Sep 17 00:00:00 2001 From: Leendert de Borst Date: Thu, 20 Feb 2025 11:04:28 +0100 Subject: [PATCH] Accessibility refactor (#541) --- browser-extensions/chrome/contentScript.ts | 11 +++--- .../chrome/src/app/pages/CredentialsList.tsx | 35 ++++++++++--------- .../chrome/src/background/ContextMenu.ts | 24 +++++++------ 3 files changed, 40 insertions(+), 30 deletions(-) diff --git a/browser-extensions/chrome/contentScript.ts b/browser-extensions/chrome/contentScript.ts index 6b45a8cb5..4a14b2972 100644 --- a/browser-extensions/chrome/contentScript.ts +++ b/browser-extensions/chrome/contentScript.ts @@ -37,11 +37,12 @@ window.addEventListener('popstate', () => { }); /** - * Listen for messages from the background script. + * Listen for messages from the background script context menu + * to open the AliasVault popup on a specific element. */ -window.addEventListener('message', (event) => { - if (event.data.type === 'OPEN_ALIASVAULT_POPUP') { - const elementIdentifier = event.data.elementIdentifier; +chrome.runtime.onMessage.addListener((message, sender, sendResponse) => { + if (message.type === 'OPEN_ALIASVAULT_POPUP') { + const elementIdentifier = message.elementIdentifier; if (elementIdentifier) { const target = document.getElementById(elementIdentifier) || document.getElementsByName(elementIdentifier)[0]; @@ -51,4 +52,6 @@ window.addEventListener('message', (event) => { } } } + // Must return true if response is sent asynchronously + return true; }); \ No newline at end of file diff --git a/browser-extensions/chrome/src/app/pages/CredentialsList.tsx b/browser-extensions/chrome/src/app/pages/CredentialsList.tsx index ec1f2ecfb..898994268 100644 --- a/browser-extensions/chrome/src/app/pages/CredentialsList.tsx +++ b/browser-extensions/chrome/src/app/pages/CredentialsList.tsx @@ -165,22 +165,25 @@ const CredentialsList: React.FC = () => { ) : ( diff --git a/browser-extensions/chrome/src/background/ContextMenu.ts b/browser-extensions/chrome/src/background/ContextMenu.ts index 1fa55cb70..d8eee20c0 100644 --- a/browser-extensions/chrome/src/background/ContextMenu.ts +++ b/browser-extensions/chrome/src/background/ContextMenu.ts @@ -56,9 +56,19 @@ export function handleContextMenuClick(info: chrome.contextMenus.OnClickData, ta } if (info.menuItemId === "aliasvault-activate-form" && tab?.id) { + // First get the active element's identifier chrome.scripting.executeScript({ target: { tabId: tab.id }, - func: activateAliasVaultForm, + func: getActiveElementIdentifier, + }, (results) => { + const elementIdentifier = results[0]?.result; + if (elementIdentifier) { + // Then send message to content script + chrome.tabs.sendMessage(tab.id, { + type: 'OPEN_ALIASVAULT_POPUP', + elementIdentifier + }); + } }); } } @@ -96,16 +106,10 @@ function copyPasswordToClipboard(generatedPassword: string) : void { /** * Activate AliasVault for the active input element. */ -function activateAliasVaultForm() : void { +function getActiveElementIdentifier() : string { const target = document.activeElement; if (target instanceof HTMLInputElement) { - // Get the element's identifier (id or name) - const elementIdentifier = target.id || target.name || ''; - if (elementIdentifier) { - window.postMessage({ - type: 'OPEN_ALIASVAULT_POPUP', - elementIdentifier - }, '*'); - } + return target.id || target.name || ''; } + return ''; } \ No newline at end of file