Skip to content

Instantly share code, notes, and snippets.

@dotproto
Created October 23, 2024 11:25
Show Gist options
  • Save dotproto/aafece6f0fa65d8f5e907ab0d6207dd9 to your computer and use it in GitHub Desktop.
Save dotproto/aafece6f0fa65d8f5e907ab0d6207dd9 to your computer and use it in GitHub Desktop.
mdn/content#36097 report attempt
  1. Save the files from this gist in a local directory.
  2. Load that directory in Firefox as a temporary extension.
  3. Visit https://example.com and open developer tools.
  4. Click the "Open port" button and note the logged messages.
  5. Click the "Send message" button and note the logged messages.
  6. Wait ~30 seconds. Observe that a "Port disconnected!" message is logged.
  7. Wait another 30 seconds as described in the issue (#36097).
  8. Click "Open port" again.

Result: Could not reproduce the issue. The backgroudn starts up, recieves the connection request, and opens a port as expected.

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<script src="bg.js"></script>
</head>
</html>
globalThis.browser ??= chrome;
browser.runtime.onConnect.addListener(port => {
console.log("Port connected");
port.onMessage.addListener((msg) => {
console.log("Port message", msg);
port.postMessage(msg);
});
port.onDisconnect.addListener((p) => {
console.log("Port disconnected");
if (p.error) {
console.error("Port disconnection error", p.error.message);
}
});
});
globalThis.browser ??= chrome;
console.log("content script loaded");
let port = null;
const openPortButton = document.createElement("button");
openPortButton.innerText = "Open port";
openPortButton.addEventListener("click", () => {
console.log("Opening port...")
if (port) {
return alert("Port already open!");
}
port = browser.runtime.connect();
port.onDisconnect.addListener((p) => {
if (p.error) {
return console.error("Port disconnect error", p.error);
}
console.log("Port disconnected!");
port = null;
});
port.onMessage.addListener((message) => {
console.log("port rec <-", message);
});
console.log("Port opened");
});
document.body.append(openPortButton);
const closePortButton = document.createElement("button");
closePortButton.innerText = "Close port";
closePortButton.addEventListener("click", () => {
console.log("Closing port...");
if (!port) {
alert("No open port!");
console.log("Port close abandoned");
return;
}
port.disconnect();
port = null;
console.log("Port closed");
});
document.body.append(closePortButton);
const sendMessageButton = document.createElement("button");
sendMessageButton.innerText = "Send message";
sendMessageButton.addEventListener("click", () => {
console.log("Sending message...");
if (!port) {
alert("No open port!");
console.log("Send message abandoned");
return;
}
console.log("port snd -> echo");
port.postMessage("echo");
});
document.body.append(sendMessageButton);
{
"name": "runtime.connect test",
"version": "1.0",
"manifest_version": 3,
"background": {
"page": "bg.html",
"service_worker": "bg.js"
},
"content_scripts": [{
"matches": ["<all_urls>"],
"js": ["content.js"]
}]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment