Bug 1398272 - Prevent onUpdated from breaking tab IDs for adopted tabs
MozReview-Commit-ID: 2tJ7noQFlXI
--- a/browser/components/extensions/ext-tabs.js
+++ b/browser/components/extensions/ext-tabs.js
@@ -198,18 +198,22 @@ class TabsUpdateFilterEventManager exten
}
if (changed.includes("sharing") && filter.properties.has("sharingState")) {
needed.push("sharingState");
}
} else if (event.type == "TabPinned") {
needed.push("pinned");
} else if (event.type == "TabUnpinned") {
needed.push("pinned");
- } else if (event.type == "TabBrowserInserted" &&
- !event.detail.insertedOnTabCreation) {
+ } else if (event.type == "TabBrowserInserted") {
+ // This may be an adopted tab. Bail early to avoid asking tabManager
+ // about the tab before we run the adoption logic in ext-browser.js.
+ if (event.detail.insertedOnTabCreation) {
+ return;
+ }
needed.push("discarded");
} else if (event.type == "TabBrowserDiscarded") {
needed.push("discarded");
} else if (event.type == "TabShow") {
needed.push("hidden");
} else if (event.type == "TabHide") {
needed.push("hidden");
}
--- a/browser/components/extensions/test/browser/browser_ext_tabs_move_window.js
+++ b/browser/components/extensions/test/browser/browser_ext_tabs_move_window.js
@@ -12,27 +12,33 @@ add_task(async function() {
"permissions": ["tabs"],
},
async background() {
let tabs = await browser.tabs.query({url: "<all_urls>"});
let destination = tabs[0];
let source = tabs[1]; // skip over about:blank in window1
+ browser.tabs.onUpdated.addListener(() => {
+ // Bug 1398272: Adding onUpdated listener broke tab IDs across windows.
+ });
+
// Assuming that this windowId does not exist.
await browser.test.assertRejects(
browser.tabs.move(source.id, {windowId: 123144576, index: 0}),
/Invalid window/,
"Should receive invalid window error");
browser.tabs.move(source.id, {windowId: destination.windowId, index: 0});
tabs = await browser.tabs.query({url: "<all_urls>"});
browser.test.assertEq(tabs[0].url, "http://example.com/");
browser.test.assertEq(tabs[0].windowId, destination.windowId);
+ browser.test.assertEq(tabs[0].id, source.id);
+
browser.test.notifyPass("tabs.move.window");
},
});
await extension.startup();
await extension.awaitFinish("tabs.move.window");
await extension.unload();