From a83f1ff6fb04b2f011357794b2bf565ca6e7d0c6 Mon Sep 17 00:00:00 2001 From: Rodolfo Miranda Date: Wed, 20 Dec 2023 17:25:14 -0300 Subject: [PATCH] message passing --- example-web/my-app/src/App.js | 2 +- src/pages/background/index.ts | 48 +++++++++++++++++---- src/pages/content/index.tsx | 79 +++++++++++++++++------------------ src/pages/popup/Popup.tsx | 4 +- 4 files changed, 82 insertions(+), 51 deletions(-) diff --git a/example-web/my-app/src/App.js b/example-web/my-app/src/App.js index eb3e2ebe..32ce6856 100644 --- a/example-web/my-app/src/App.js +++ b/example-web/my-app/src/App.js @@ -6,7 +6,7 @@ function App() { function clickMe() { window.postMessage( - {type : "FROM_PAGE", text : "Hello from the webpage!"}, "*"); + {type : "getVersion"}, "*"); } diff --git a/src/pages/background/index.ts b/src/pages/background/index.ts index 69b8fa02..d6080b6e 100644 --- a/src/pages/background/index.ts +++ b/src/pages/background/index.ts @@ -1,13 +1,43 @@ +import { randomPasscode, SignifyClient, Tier, ready } from 'signify-ts' +const url = "https://keria-dev.rootsid.cloud/admin" +const boot_url = "https://keria-dev.rootsid.cloud" console.log('Background script loaded'); -chrome.runtime.onConnect.addListener(function(port) { - console.log("Connection with content script established") - console.assert(port.name === "signify"); - port.onMessage.addListener(function(msg, sender) { - console.log("Message received from content script: ",msg); - port.postMessage({signature: "ABCD"}); - - }); - }); +// Handle messages +chrome.runtime.onMessage.addListener( + async function (message, sender, sendResponse) { + if (sender.tab) { + // Handle mesages from content script + console.log("Message received from content script at " + sender.tab.url + ": " + message.type) + if (message.type) { + switch (message.type) { + case "getVersion": + const manifestData = chrome.runtime.getManifest() + sendResponse(manifestData.version); + break; + case "isUnlocked": + const [tab] = await chrome.tabs.query({active: true, lastFocusedWindow: true}); + const response = chrome.tabs.sendMessage(tab.id!, {type: "for_content_script"}); + // sendResponse(true); + break; + case "hasLogin": + sendResponse({ login: "AID 123" }); + break; + case "authenticate": + sendResponse({ signature: "ABCD" }); + break; + default: + break; + } + } + + } else if (sender.origin === "chrome-extension://" + chrome.runtime.id && + sender.url === "chrome-extension://" + chrome.runtime.id + "/src/pages/popup/index.html") { + // handle messages from Popup + console.log("Message received from browser extension pupup: " + message) + sendResponse({ resp: "received" }); + } + } +); diff --git a/src/pages/content/index.tsx b/src/pages/content/index.tsx index dfc0b374..6c2841c3 100644 --- a/src/pages/content/index.tsx +++ b/src/pages/content/index.tsx @@ -1,51 +1,50 @@ import { createRoot } from 'react-dom/client'; import './style.css' -const div = document.createElement('div'); -div.id = '__root'; -document.body.appendChild(div); -const rootContainer = document.querySelector('#__root'); -if (!rootContainer) throw new Error("Can't find Options root element"); -const root = createRoot(rootContainer); -root.render( -
- content script injected -
-); - -try { - console.log('content script injected'); -} catch (e) { - console.error(e); -} - -var port = chrome.runtime.connect({name: "signify"}); - -port.onMessage.addListener(function(msg) { - console.log("received message from background script: "+msg.signature) - alert('signature received from extension: '+msg.signature); - -}); - -window.addEventListener("message", (event) => { - // We only accept messages from ourselves +// Handle messages from web page +window.addEventListener("message", async (event) => { + // Accept messages only from same window if (event.source !== window) { return; } - - if (event.data.type && (event.data.type === "FROM_PAGE")) { - console.log("Content script received from web page: " + event.data.text); - document.body.innerHTML += 'Select AID

'; - var dialog = document.querySelector("dialog") + console.log("Content script received from web page: " + event.data.type); + if (event.data.type) { + switch (event.data.type) { + case "getVersion": + const manifest = chrome.runtime.getManifest() + chrome.runtime.sendMessage({type: "isUnlocked"}); + alert('Signify extension installed with version: '+manifest.version) + break; + case "isUnlocked": + break; - dialog.querySelector("button").addEventListener("click", function() { - port.postMessage(event.data.text); - dialog.close() - }) - dialog.showModal() - - dialog.showModal() + } + } }, false); +// Handle messages from background script +chrome.runtime.onMessage.addListener( + function (message, sender, sendResponse) { + console.log(sender) + if (sender.origin === "chrome-extension://" + chrome.runtime.id ) { + // handle messages from Popup + console.log("Message received from browser extension pupup: " + message) + // sendResponse({ resp: "received" }); + } + } +); + + // OPEN A DIALOG IN WEB PAGE + // document.body.innerHTML += 'Select AID

'; + // var dialog = document.querySelector("dialog") + + // dialog.querySelector("button").addEventListener("click", function() { + // port.postMessage(event.data.text); + // dialog.close() + // }) + // dialog.showModal() + + // dialog.showModal() + diff --git a/src/pages/popup/Popup.tsx b/src/pages/popup/Popup.tsx index 85a4fee8..167a5e26 100644 --- a/src/pages/popup/Popup.tsx +++ b/src/pages/popup/Popup.tsx @@ -16,9 +16,11 @@ export default function Popup(): JSX.Element { } , []) - const generatePasscode = () => { + const generatePasscode = async () => { let p = randomPasscode() setPasscode(p) + const response = await chrome.runtime.sendMessage({greeting: "bye"}); + console.log(response) } const newClient = (passcode: string) => {