From 853da77824293ddcdd784a993e36acfafb3b994a Mon Sep 17 00:00:00 2001 From: Bill Erickson Date: Fri, 1 Apr 2022 12:37:06 -0400 Subject: [PATCH] LP1967532 Experimenting with port reconnection on failure Signed-off-by: Bill Erickson --- extension/app/content.js | 64 ++++++++++++++++++++++++++++++------------------ 1 file changed, 40 insertions(+), 24 deletions(-) diff --git a/extension/app/content.js b/extension/app/content.js index d19d4f9651..b6215a2f4b 100644 --- a/extension/app/content.js +++ b/extension/app/content.js @@ -30,37 +30,53 @@ if (document.documentElement) { console.warn("No document.documentElement exist, Hatch cannot open"); } -/** - * Open a port to our extension. - */ -var port = chrome.runtime.connect(); +var port; -/** - * Relay all messages received from the extension back to the tab - */ -port.onMessage.addListener(function(message) { - window.postMessage(message, location.origin); -}); +function setup() { + console.debug("Content script setting up a new connection"); + /** + * Open a port to our extension. + */ + port = chrome.runtime.connect(); -/** - * Receive messages from the browser tab and relay them to the - * Hatch extension script. - */ -window.addEventListener("message", function(event) { + port.onDisconnect.addListener(function(event) { + console.log('Extension port disconnected..', event); + }); + + /** + * Relay all messages received from the extension back to the tab + */ + port.onMessage.addListener(function(message) { + window.postMessage(message, location.origin); + }); - // We only accept messages from ourselves - if (event.source != window) return; - var message = event.data; + /** + * Receive messages from the browser tab and relay them to the + * Hatch extension script. + */ + window.addEventListener("message", function(event) { - // Ignore broadcast messages. We only care about messages - // received from our browser tab/page. - if (message.from != 'page') return; + // We only accept messages from ourselves + if (event.source != window) return; - // standard Hatch-bound message; relay to extension. - port.postMessage(message); + var message = event.data; -}, false); + // Ignore broadcast messages. We only care about messages + // received from our browser tab/page. + if (message.from != 'page') return; + + // standard Hatch-bound message; relay to extension. + try { + port.postMessage(message); + } catch (e) { + console.error("Port communication failed. Reconnecting", e); + setTimeout(setup); + } + + }, false); +} +setup(); -- 2.11.0