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 popupWinId;
let popupOpenerTabId; let popupOpenerTabId;
let popupOpenerFrameId; let popupOpenerFrameId;
@@ -397,7 +396,6 @@ async function openPopup (tabId, frameId) {
}); });
// Store popup details for message forwarding // Store popup details for message forwarding
popupTabId = popup.tabs[0].id;
popupWinId = popup.id; popupWinId = popup.id;
popupOpenerTabId = tabId; popupOpenerTabId = tabId;
popupOpenerFrameId = frameId; popupOpenerFrameId = frameId;
@@ -427,7 +425,6 @@ browser.windows.onRemoved.addListener(id => {
subject: "shim:popupClosed" subject: "shim:popupClosed"
}); });
popupTabId = null;
popupWinId = null; popupWinId = null;
popupOpenerTabId = 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) => { messageRouter.register("main", async (message, sender) => {
const tabId = sender && sender.tab.id; const tabId = sender && sender.tab.id;
@@ -487,16 +497,6 @@ messageRouter.register("shim", (message, sender) => {
, { frameId: popupOpenerFrameId }) , { 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 => { messageRouter.register("mirrorCast", message => {
browser.tabs.sendMessage(mirrorCastTabId, message browser.tabs.sendMessage(mirrorCastTabId, message
, { frameId: mirrorCastFrameId }); , { frameId: mirrorCastFrameId });

View File

@@ -43,29 +43,37 @@ class App extends Component {
} }
componentDidMount () { componentDidMount () {
browser.runtime.sendMessage({ this.port = browser.runtime.connect({
name: "popup"
});
this.port.postMessage({
subject: "shim:popupReady" subject: "shim:popupReady"
}); });
browser.runtime.onMessage.addListener(message => { this.port.onMessage.addListener(message => {
switch (message.subject) { switch (message.subject) {
case "popup:populate": case "popup:populate": {
this.setState({ this.setState({
receivers: message.data.receivers receivers: message.data.receivers
, selectedMedia: message.data.selectedMedia , selectedMedia: message.data.selectedMedia
}); }, () => {
// Get height of content without window decoration
winHeight = document.body.clientHeight + frameHeight;
winHeight = document.body.clientHeight + frameHeight; // Adjust height to fit content
browser.windows.update(this.win.id, {
browser.windows.update(this.win.id, { height: winHeight
height: winHeight });
}); });
break; break;
}
case "popup:close": case "popup:close": {
window.close(); window.close();
break; break;
}
} }
}); });
} }
@@ -75,7 +83,7 @@ class App extends Component {
isLoading: true isLoading: true
}); });
browser.runtime.sendMessage({ this.port.postMessage({
subject: "shim:selectReceiver" subject: "shim:selectReceiver"
, data: { , data: {
receiver receiver