Don't overwrite existing ports on connect
This commit is contained in:
parent
26757c0b2d
commit
bbc4247893
@ -12,7 +12,7 @@ class CommsServer {
|
|||||||
var ths = this;
|
var ths = this;
|
||||||
|
|
||||||
if (BrowserDetect.firefox) {
|
if (BrowserDetect.firefox) {
|
||||||
browser.runtime.onConnect.addListener(p => ths.onConnect(p));
|
browser.runtime.onConnect.addListener(p => this.onConnect(p));
|
||||||
browser.runtime.onMessage.addListener((m, sender) => ths.processReceivedMessage_nonpersistent(m, sender));
|
browser.runtime.onMessage.addListener((m, sender) => ths.processReceivedMessage_nonpersistent(m, sender));
|
||||||
} else {
|
} else {
|
||||||
chrome.runtime.onConnect.addListener(p => ths.onConnect(p));
|
chrome.runtime.onConnect.addListener(p => ths.onConnect(p));
|
||||||
@ -166,9 +166,11 @@ class CommsServer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
sendToAll(message){
|
sendToAll(message){
|
||||||
for(var p of this.ports){
|
for(const tab of this.ports){
|
||||||
for(var frame in p){
|
for(const frame in tab){
|
||||||
p[frame].postMessage(message);
|
for (const port in tab[frame]) {
|
||||||
|
tab[frame][port].postMessage(message);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -186,6 +188,12 @@ class CommsServer {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async sendToContentScripts(message, tab, frame) {
|
||||||
|
for (const port in this.ports[tab][frame]) {
|
||||||
|
this.ports[tab][frame][port].postMessage(message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
async sendToFrame(message, tab, frame) {
|
async sendToFrame(message, tab, frame) {
|
||||||
this.logger.log('info', 'comms', `%c[CommsServer::sendToFrame] attempting to send message to tab ${tab}, frame ${frame}`, "background: #dda; color: #11D", message);
|
this.logger.log('info', 'comms', `%c[CommsServer::sendToFrame] attempting to send message to tab ${tab}, frame ${frame}`, "background: #dda; color: #11D", message);
|
||||||
|
|
||||||
@ -204,7 +212,7 @@ class CommsServer {
|
|||||||
this.logger.log('info', 'comms', `%c[CommsServer::sendToFrame] attempting to send message to tab ${tab}, frame ${frame}`, "background: #dda; color: #11D", message);
|
this.logger.log('info', 'comms', `%c[CommsServer::sendToFrame] attempting to send message to tab ${tab}, frame ${frame}`, "background: #dda; color: #11D", message);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
this.ports[tab][frame].postMessage(message);
|
this.sendToContentScripts(message, tab, frame);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
this.logger.log('error', 'comms', `%c[CommsServer::sendToFrame] Sending message failed. Reason:`, "background: #dda; color: #11D", e);
|
this.logger.log('error', 'comms', `%c[CommsServer::sendToFrame] Sending message failed. Reason:`, "background: #dda; color: #11D", e);
|
||||||
}
|
}
|
||||||
@ -213,21 +221,20 @@ class CommsServer {
|
|||||||
async sendToActive(message) {
|
async sendToActive(message) {
|
||||||
this.logger.log('info', 'comms', "%c[CommsServer::sendToActive] trying to send a message to active tab. Message:", "background: #dda; color: #11D", message);
|
this.logger.log('info', 'comms', "%c[CommsServer::sendToActive] trying to send a message to active tab. Message:", "background: #dda; color: #11D", message);
|
||||||
|
|
||||||
var tabs = await this._getActiveTab();
|
const tabs = await this._getActiveTab();
|
||||||
|
|
||||||
this.logger.log('info', 'comms', "[CommsServer::_sendToActive] currently active tab(s)?", tabs);
|
this.logger.log('info', 'comms', "[CommsServer::_sendToActive] currently active tab(s)?", tabs);
|
||||||
for (var key in this.ports[tabs[0].id]) {
|
for (const frame in this.ports[tabs[0].id]) {
|
||||||
this.logger.log('info', 'comms', "key?", key, this.ports[tabs[0].id]);
|
this.logger.log('info', 'comms', "key?", frame, this.ports[tabs[0].id]);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (var key in this.ports[tabs[0].id]) {
|
for (const frame in this.ports[tabs[0].id]) {
|
||||||
this.ports[tabs[0].id][key].postMessage(message);
|
this.sendToContentScripts(message, tabs[0].id, frame);
|
||||||
|
this.ports[tabs[0].id][frame].postMessage(message);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
onConnect(port){
|
onConnect(port){
|
||||||
var ths = this;
|
|
||||||
|
|
||||||
// poseben primer | special case
|
// poseben primer | special case
|
||||||
if (port.name === 'popup-port') {
|
if (port.name === 'popup-port') {
|
||||||
this.popupPort = port;
|
this.popupPort = port;
|
||||||
@ -237,15 +244,22 @@ class CommsServer {
|
|||||||
|
|
||||||
var tabId = port.sender.tab.id;
|
var tabId = port.sender.tab.id;
|
||||||
var frameId = port.sender.frameId;
|
var frameId = port.sender.frameId;
|
||||||
if(! this.ports[tabId]){
|
if (! this.ports[tabId]){
|
||||||
this.ports[tabId] = {};
|
this.ports[tabId] = {};
|
||||||
}
|
}
|
||||||
this.ports[tabId][frameId] = port;
|
if (! this.ports[tabId][frameId]) {
|
||||||
this.ports[tabId][frameId].onMessage.addListener( (m,p) => ths.processReceivedMessage(m, p));
|
this.ports[tabId][frameId] = {};
|
||||||
this.ports[tabId][frameId].onDisconnect.addListener( (p) => {
|
}
|
||||||
delete ths.ports[p.sender.tab.id][p.sender.frameId];
|
this.ports[tabId][frameId][port.name] = port;
|
||||||
if(Object.keys(ths.ports[p.sender.tab.id]).length === 0){
|
this.ports[tabId][frameId][port.name].onMessage.addListener( (m,p) => ths.processReceivedMessage(m, p));
|
||||||
ths.ports[tabId] = undefined;
|
|
||||||
|
this.ports[tabId][frameId][port.name].onDisconnect.addListener( (p) => {
|
||||||
|
delete this.ports[p.sender.tab.id][p.sender.frameId][port.name];
|
||||||
|
if (Object.keys(this.ports[tabId][frameId].length === 0)) {
|
||||||
|
delete this.ports[tabId][frameId];
|
||||||
|
if(Object.keys(this.ports[p.sender.tab.id]).length === 0) {
|
||||||
|
delete this.ports[tabId];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user