mirror of
https://github.com/hensm/fx_cast.git
synced 2026-06-12 18:39:58 +00:00
Add messageRouter
This commit is contained in:
@@ -1,5 +1,7 @@
|
|||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
|
import messageRouter from "./messageRouter";
|
||||||
|
|
||||||
const _ = browser.i18n.getMessage;
|
const _ = browser.i18n.getMessage;
|
||||||
|
|
||||||
|
|
||||||
@@ -20,7 +22,6 @@ const SENDER_SCRIPT_FRAMEWORK_URL =
|
|||||||
*/
|
*/
|
||||||
browser.webRequest.onBeforeRequest.addListener(
|
browser.webRequest.onBeforeRequest.addListener(
|
||||||
async details => {
|
async details => {
|
||||||
console.log(details);
|
|
||||||
switch (details.url) {
|
switch (details.url) {
|
||||||
case SENDER_SCRIPT_URL:
|
case SENDER_SCRIPT_URL:
|
||||||
// Content/Page script bridge
|
// Content/Page script bridge
|
||||||
@@ -141,11 +142,9 @@ function initBridge (tabId, frameId) {
|
|||||||
|
|
||||||
port.onMessage.addListener(message => {
|
port.onMessage.addListener(message => {
|
||||||
// Forward shim: messages
|
// Forward shim: messages
|
||||||
|
// TODO: Integrate into messageRouter
|
||||||
if (message.subject.startsWith("shim:")) {
|
if (message.subject.startsWith("shim:")) {
|
||||||
browser.tabs.sendMessage(tabId, message, {
|
browser.tabs.sendMessage(tabId, message, { frameId });
|
||||||
frameId
|
|
||||||
});
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -205,38 +204,12 @@ async function openPopup (tabId) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// Extension messages
|
messageRouter.register("main", async (message, sender) => {
|
||||||
browser.runtime.onMessage.addListener(async (message, sender, respond) => {
|
|
||||||
const tabId = sender.tab.id;
|
const tabId = sender.tab.id;
|
||||||
const { frameId } = sender.tab;
|
|
||||||
|
|
||||||
// Forward bridge: messages
|
|
||||||
if (message.subject.startsWith("bridge:")) {
|
|
||||||
bridgeMap.get(tabId).postMessage(message);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Forward shim: messages
|
|
||||||
if (message.subject.startsWith("shim:")) {
|
|
||||||
browser.tabs.sendMessage(popupOpenerTabId, message, { frameId });
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Forward popup messages
|
|
||||||
if (message.subject.startsWith("popup:")) {
|
|
||||||
if (popupTabId) {
|
|
||||||
try {
|
|
||||||
browser.tabs.sendMessage(popupTabId, message);
|
|
||||||
} catch (err) {
|
|
||||||
// Popup is closed
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
switch (message.subject) {
|
switch (message.subject) {
|
||||||
case "main:initialize":
|
case "main:initialize":
|
||||||
initBridge(tabId);
|
initBridge(tabId, sender.tab.frameId);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "main:openPopup": {
|
case "main:openPopup": {
|
||||||
@@ -245,3 +218,26 @@ browser.runtime.onMessage.addListener(async (message, sender, respond) => {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
messageRouter.register("bridge", (message, sender) => {
|
||||||
|
bridgeMap.get(sender.tab.id).postMessage(message);
|
||||||
|
});
|
||||||
|
|
||||||
|
messageRouter.register("shim", (message, sender) => {
|
||||||
|
browser.tabs.sendMessage(popupOpenerTabId, message
|
||||||
|
, { frameId: sender.tab.frameId });
|
||||||
|
});
|
||||||
|
|
||||||
|
messageRouter.register("popup", (message, sender) => {
|
||||||
|
if (!popupTabId) return;
|
||||||
|
|
||||||
|
try {
|
||||||
|
browser.tabs.sendMessage(popupTabId, message);
|
||||||
|
} catch (err) {
|
||||||
|
// Popup is closed
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
browser.runtime.onMessage.addListener((message, sender) => {
|
||||||
|
messageRouter.handleMessage(message, sender);
|
||||||
|
});
|
||||||
|
|||||||
25
ext/src/messageRouter.js
Normal file
25
ext/src/messageRouter.js
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
"use strict";
|
||||||
|
|
||||||
|
const routeMap = new Map();
|
||||||
|
|
||||||
|
|
||||||
|
function register (routeName, senderCallback) {
|
||||||
|
routeMap.set(routeName, senderCallback);
|
||||||
|
}
|
||||||
|
|
||||||
|
function deregister (routeName) {
|
||||||
|
routeMap.delete(routeName);
|
||||||
|
}
|
||||||
|
|
||||||
|
function handleMessage (message, sender) {
|
||||||
|
const destination = message.subject.split(":")[0];
|
||||||
|
if (routeMap.has(destination)) {
|
||||||
|
routeMap.get(destination)(message, sender);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default {
|
||||||
|
register
|
||||||
|
, deregister
|
||||||
|
, handleMessage
|
||||||
|
}
|
||||||
@@ -17,6 +17,7 @@ module.exports = {
|
|||||||
, "contentSetup" : `${include_path}/contentSetup.js`
|
, "contentSetup" : `${include_path}/contentSetup.js`
|
||||||
, "mediaCast" : `${include_path}/mediaCast.js`
|
, "mediaCast" : `${include_path}/mediaCast.js`
|
||||||
, "mirroringCast" : `${include_path}/mirroringCast.js`
|
, "mirroringCast" : `${include_path}/mirroringCast.js`
|
||||||
|
, "messageRouter" : `${include_path}/messageRouter.js`
|
||||||
}
|
}
|
||||||
, output: {
|
, output: {
|
||||||
filename: "[name].js"
|
filename: "[name].js"
|
||||||
|
|||||||
Reference in New Issue
Block a user