Bug 1407737 - Don't persist sidebar state unless if the last window is being closed. r=mikedeboer draft
authorBrian Grinstead <bgrinstead@mozilla.com>
Wed, 18 Oct 2017 08:32:41 -0700
changeset 682617 414412a0f01566b84f28d12df4985369d2a8110b
parent 682254 a29052590fc6538b89641e690d11731ca8e78120
child 736386 d622535e606081fa7e397f97fb0b25756b44bc9a
push id85095
push userbgrinstead@mozilla.com
push dateWed, 18 Oct 2017 15:32:49 +0000
reviewersmikedeboer
bugs1407737
milestone58.0a1
Bug 1407737 - Don't persist sidebar state unless if the last window is being closed. r=mikedeboer MozReview-Commit-ID: 7wBtCZDG1V3
browser/base/content/browser-sidebar.js
browser/base/content/test/sidebar/browser_sidebar_adopt.js
--- a/browser/base/content/browser-sidebar.js
+++ b/browser/base/content/browser-sidebar.js
@@ -62,17 +62,16 @@ var SidebarUI = {
       this.toggleSwitcherPanel();
     });
   },
 
   uninit() {
     // If this is the last browser window, persist various values that should be
     // remembered for after a restart / reopening a browser window.
     let enumerator = Services.wm.getEnumerator("navigator:browser");
-    enumerator.getNext();
     if (!enumerator.hasMoreElements()) {
       document.persist("sidebar-box", "sidebarcommand");
 
       let xulStore = Cc["@mozilla.org/xul/xulstore;1"].getService(Ci.nsIXULStore);
       if (this._box.hasAttribute("positionend")) {
         document.persist("sidebar-box", "positionend");
       } else {
         xulStore.removeValue(document.documentURI, "sidebar-box", "positionend");
--- a/browser/base/content/test/sidebar/browser_sidebar_adopt.js
+++ b/browser/base/content/test/sidebar/browser_sidebar_adopt.js
@@ -8,30 +8,46 @@
 registerCleanupFunction(() => {
   SidebarUI.hide();
 });
 
 function failIfSidebarFocusedFires() {
   ok(false, "This event shouldn't have fired");
 }
 
-add_task(async function() {
+add_task(async function testAdoptedTwoWindows() {
+  // First open a new window, show the sidebar in that window, and close it.
+  // Then, open another new window and confirm that the sidebar is closed since it is
+  // being adopted from the main window which doesn't have a shown sidebar. See Bug 1407737.
+  info("Ensure that sidebar state is adopted only from the opener");
+
+  let win1 = await BrowserTestUtils.openNewBrowserWindow({opener: window});
+  await win1.SidebarUI.show("viewBookmarksSidebar");
+  await BrowserTestUtils.closeWindow(win1);
+
+  let win2 = await BrowserTestUtils.openNewBrowserWindow({opener: window});
+  ok(!win2.document.getElementById("sidebar-button").hasAttribute("checked"), "Sidebar button isn't checked");
+  ok(!win2.SidebarUI.isOpen, "Sidebar is closed");
+  await BrowserTestUtils.closeWindow(win2);
+});
+
+add_task(async function testEventsReceivedInMainWindow() {
   info("Opening the sidebar and expecting both SidebarShown and SidebarFocused events");
 
   let initialShown = BrowserTestUtils.waitForEvent(window, "SidebarShown");
   let initialFocus = BrowserTestUtils.waitForEvent(window, "SidebarFocused");
 
   await SidebarUI.show("viewBookmarksSidebar");
   await initialShown;
   await initialFocus;
 
   ok(true, "SidebarShown and SidebarFocused events fired on a new window");
 });
 
-add_task(async function() {
+add_task(async function testEventReceivedInNewWindow() {
   info("Opening a new window and expecting the SidebarFocused event to not fire");
 
   let promiseNewWindow = BrowserTestUtils.waitForNewWindow(false);
   BrowserTestUtils.openNewBrowserWindow({opener: window});
   let win = await promiseNewWindow;
 
   let adoptedShown = BrowserTestUtils.waitForEvent(win, "SidebarShown");
   win.addEventListener("SidebarFocused", failIfSidebarFocusedFires);