Bug 1398272 - Prevent onUpdated from breaking tab IDs for adopted tabs draft
authorTomislav Jovanovic <tomica@gmail.com>
Sun, 25 Mar 2018 22:13:20 +0200
changeset 772550 5ff4782396e649413a2c0b51c1dca22bde8829da
parent 769110 2c4a055ed5d45fe9ca33ae1b450b40e31c9fb8aa
push id103950
push userbmo:tomica@gmail.com
push dateMon, 26 Mar 2018 11:57:01 +0000
bugs1398272
milestone61.0a1
Bug 1398272 - Prevent onUpdated from breaking tab IDs for adopted tabs MozReview-Commit-ID: 2tJ7noQFlXI
browser/components/extensions/ext-tabs.js
browser/components/extensions/test/browser/browser_ext_tabs_move_window.js
--- 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();