diff --git a/apps/extension/src/listeners/message-prax-request.ts b/apps/extension/src/listeners/message-prax-request.ts index 19d23e1d..352b15ee 100644 --- a/apps/extension/src/listeners/message-prax-request.ts +++ b/apps/extension/src/listeners/message-prax-request.ts @@ -15,7 +15,9 @@ chrome.runtime.onMessage.addListener( // user made a choice if (status === UserChoice.Approved) { respond(PraxConnection.Init); - void chrome.tabs.sendMessage(sender.tab!.id!, PraxConnection.Init); + void chrome.tabs.sendMessage(sender.tab!.id!, PraxConnection.Init, { + documentId: sender.documentId, // Ensures tab has not redirected to another url + }); } else { respond(PraxConnection.Denied); } diff --git a/apps/extension/src/listeners/tabs-updated-prax-init.ts b/apps/extension/src/listeners/tabs-updated-prax-init.ts index 5e7d02fb..e11924dc 100644 --- a/apps/extension/src/listeners/tabs-updated-prax-init.ts +++ b/apps/extension/src/listeners/tabs-updated-prax-init.ts @@ -3,14 +3,26 @@ import { PraxConnection } from '../message/prax'; // trigger injected-connection-port to init when a known page is loaded. chrome.tabs.onUpdated.addListener( - (tabId, { status, discarded }, { url }) => + (tabId, { status, discarded, url: changeInfoUrl }, { url: tabUrl }) => { + // Unfortunately, no context for tab + // void chrome.runtime.getContexts({}).then(console.log); + + const url = changeInfoUrl ?? tabUrl; + const documentUrls = [tabUrl, changeInfoUrl].filter(id => id) as string[]; + void chrome.runtime.getContexts({}).then(console.log); + const getContext = chrome.runtime + .getContexts({ tabIds: [tabId], documentUrls }) + .then(contexts => contexts.filter(({ frameId }) => !frameId)[0]); void (async () => { + const documentId = (await getContext)?.documentId; if ( + documentId && status === 'complete' && !discarded && url?.startsWith('https://') && (await originAlreadyApproved(url)) ) - void chrome.tabs.sendMessage(tabId, PraxConnection.Init); - })(), + void chrome.runtime.sendMessage(PraxConnection.Init, { tabId, documentId }); + })(); + }, );