LP1954301 Extension differentiates tabs with same ID user/berick/lp1954301-ext-tab-message-order-v2
authorBill Erickson <berickxx@gmail.com>
Thu, 9 Dec 2021 16:20:37 +0000 (11:20 -0500)
committerBill Erickson <berickxx@gmail.com>
Fri, 10 Dec 2021 18:09:07 +0000 (13:09 -0500)
Apply a unique name to each browser tab port on connect.  This resolves
a scenario where Chrome would send a tab connect message followed
immediately by a tab disconnect message using the same tab ID, causing
the newly connected tab to be discarded.  With a unique name, each
connection is handled differently.

Signed-off-by: Bill Erickson <berickxx@gmail.com>
extension/app/extension.js

index a46a2d3..3d8dc93 100644 (file)
@@ -69,6 +69,8 @@ function onDisconnected(port) {
 function onNativeMessage(message) {
     var tabId = message.clientid;
 
+    console.debug("Hatch responded to request on tab " + tabId);
+
     if (tabId && browserPorts[tabId]) {
         message.from = 'extension';
         browserPorts[tabId].postMessage(message);
@@ -79,13 +81,20 @@ function onNativeMessage(message) {
 }
 
 
+
 /**
  * Called when our content script opens connection to this extension.
  */
 chrome.runtime.onConnect.addListener(function(port) {
-    var tabId = port.sender.tab.id;
+
+    // Apply a unique name to each newly connected port.  This name
+    // will persist for the life of the port object.  Use a Number here
+    // because our Java back-end is expecting a Long (numeric) value.
+    let tabId = port.name =
+        Math.floor(Math.random() * Number.MAX_SAFE_INTEGER - 1);
 
     browserPorts[tabId] = port;
+
     console.debug('new port connected with id ' + tabId);
 
     port.onMessage.addListener(function(msg) {