Bug 1338312 - browser.sessions.getRecentlyClosed returns incorrect information for tabs in closed windows, r?aswan draft
authorBob Silverberg <bsilverberg@mozilla.com>
Tue, 14 Feb 2017 15:23:46 -0500
changeset 487648 eaf390edd0c1f6cf6aee030cbf88a02e6c23cec3
parent 487583 c7b015c488cfb2afbcff295a9639acd85df332f8
child 546508 37ff61aa842c944a97f211e09d0cb9ed75e6de26
push id46281
push userbmo:bob.silverberg@gmail.com
push dateTue, 21 Feb 2017 22:20:29 +0000
reviewersaswan
bugs1338312
milestone54.0a1
Bug 1338312 - browser.sessions.getRecentlyClosed returns incorrect information for tabs in closed windows, r?aswan MozReview-Commit-ID: FrUhiR9Q9aV
browser/components/extensions/ext-utils.js
browser/components/extensions/test/browser/browser_ext_sessions_getRecentlyClosed.js
--- a/browser/components/extensions/ext-utils.js
+++ b/browser/components/extensions/ext-utils.js
@@ -539,18 +539,19 @@ class Tab extends TabBase {
       highlighted: false,
       active: false,
       pinned: false,
       incognito: Boolean(tabData.state && tabData.state.isPrivate),
     };
 
     if (extension.tabManager.hasTabPermission(tabData)) {
       let entries = tabData.state ? tabData.state.entries : tabData.entries;
-      result.url = entries[0].url;
-      result.title = entries[0].title;
+      let entry = entries[entries.length - 1];
+      result.url = entry.url;
+      result.title = entry.title;
       if (tabData.image) {
         result.favIconUrl = tabData.image;
       }
     }
 
     return result;
   }
 }
--- a/browser/components/extensions/test/browser/browser_ext_sessions_getRecentlyClosed.js
+++ b/browser/components/extensions/test/browser/browser_ext_sessions_getRecentlyClosed.js
@@ -90,8 +90,41 @@ add_task(function* test_sessions_get_rec
 
   // test with filter
   extension.sendMessage("check-sessions", {maxResults: 2});
   recentlyClosed = yield extension.awaitMessage("recentlyClosed");
   checkRecentlyClosed(recentlyClosed.filter(onlyNewItemsFilter), 2, currentWindowId);
 
   yield extension.unload();
 });
+
+add_task(function* test_sessions_get_recently_closed_navigated() {
+  function background() {
+    browser.sessions.getRecentlyClosed({maxResults: 1}).then(recentlyClosed => {
+      let tab = recentlyClosed[0].window.tabs[0];
+      browser.test.assertEq("http://example.com/", tab.url,
+        "Tab in closed window has the expected url.");
+      browser.test.assertTrue(tab.title.includes("mochitest index"),
+        "Tab in closed window has the expected title.");
+      browser.test.notifyPass("getRecentlyClosed with navigation");
+    });
+  }
+
+  let extension = ExtensionTestUtils.loadExtension({
+    manifest: {
+      permissions: ["sessions", "tabs"],
+    },
+    background,
+  });
+
+  // Test with a window with navigation history.
+  let win = yield BrowserTestUtils.openNewBrowserWindow();
+  for (let url of ["about:robots", "about:mozilla", "http://example.com/"]) {
+    yield BrowserTestUtils.loadURI(win.gBrowser.selectedBrowser, url);
+    yield BrowserTestUtils.browserLoaded(win.gBrowser.selectedBrowser);
+  }
+
+  yield BrowserTestUtils.closeWindow(win);
+
+  yield extension.startup();
+  yield extension.awaitFinish();
+  yield extension.unload();
+});