Use connection-based messaging for popup

This commit is contained in:
hensm
2019-01-24 12:51:55 +00:00
parent 8c8ae827bf
commit 2bdd518d5e
2 changed files with 31 additions and 23 deletions

View File

@@ -363,7 +363,6 @@ function initBridge (tabId, frameId) {
}
let popupTabId;
let popupWinId;
let popupOpenerTabId;
let popupOpenerFrameId;
@@ -397,7 +396,6 @@ async function openPopup (tabId, frameId) {
});
// Store popup details for message forwarding
popupTabId = popup.tabs[0].id;
popupWinId = popup.id;
popupOpenerTabId = tabId;
popupOpenerFrameId = frameId;
@@ -427,7 +425,6 @@ browser.windows.onRemoved.addListener(id => {
subject: "shim:popupClosed"
});
popupTabId = null;
popupWinId = null;
popupOpenerTabId = null;
@@ -435,6 +432,19 @@ browser.windows.onRemoved.addListener(id => {
});
/**
* Extension scripts make a connection to the background script
* with a destination name to be registered as message route.
*/
browser.runtime.onConnect.addListener(port => {
messageRouter.register(port.name, message => {
port.postMessage(message);
});
port.onMessage.addListener(message => {
messageRouter.handleMessage(message);
})
});
messageRouter.register("main", async (message, sender) => {
const tabId = sender && sender.tab.id;
@@ -487,16 +497,6 @@ messageRouter.register("shim", (message, sender) => {
, { frameId: popupOpenerFrameId })
});
messageRouter.register("popup", (message, sender) => {
if (!popupTabId) return;
try {
browser.tabs.sendMessage(popupTabId, message);
} catch (err) {
// Popup is closed
}
});
messageRouter.register("mirrorCast", message => {
browser.tabs.sendMessage(mirrorCastTabId, message
, { frameId: mirrorCastFrameId });