Bug 1443189 - Places subviews are not updated while they are open. r=Gijs draft
authorPaolo Amadini <paolo.mozmail@amadzone.org>
Wed, 07 Mar 2018 15:35:01 +0000
changeset 764279 9c75d233e5b0e628a46cc710c95f0a85e94dd548
parent 764278 af5fa4cbcf26422e4bb0693920c13db600b0ae84
push id101718
push userpaolo.mozmail@amadzone.org
push dateWed, 07 Mar 2018 15:39:04 +0000
reviewersGijs
bugs1443189
milestone60.0a1
Bug 1443189 - Places subviews are not updated while they are open. r=Gijs MozReview-Commit-ID: 5WHDqKsHjDJ
browser/components/places/content/browserPlacesViews.js
browser/components/places/tests/browser/browser.ini
browser/components/places/tests/browser/browser_panelview_bookmarks_delete.js
--- a/browser/components/places/content/browserPlacesViews.js
+++ b/browser/components/places/content/browserPlacesViews.js
@@ -2248,16 +2248,20 @@ this.PlacesPanelview = class extends Pla
     } else {
       panelview.removeAttribute("emptyplacesresult");
       try {
         panelview.removeChild(panelview._emptyMenuitem);
       } catch (ex) {}
     }
   }
 
+  _isPopupOpen() {
+    return PanelView.forNode(this._viewElt).active;
+  }
+
   _onPopupHidden(event) {
     let panelview = event.originalTarget;
     let placesNode = panelview._placesNode;
     // Avoid handling ViewHiding of inner views
     if (placesNode && PlacesUIUtils.getViewForNode(panelview) == this) {
       // UI performance: folder queries are cheap, keep the resultnode open
       // so we don't rebuild its contents whenever the popup is reopened.
       // Though, we want to always close feed containers so their expiration
--- a/browser/components/places/tests/browser/browser.ini
+++ b/browser/components/places/tests/browser/browser.ini
@@ -89,16 +89,17 @@ skip-if = (os == 'win' && ccov) # Bug 14
 [browser_library_openFlatContainer.js]
 skip-if = (os == 'win' && ccov) # Bug 1423667
 [browser_library_panel_leak.js]
 skip-if = (os == 'win' && ccov) # Bug 1423667
 [browser_library_search.js]
 skip-if = (os == 'win' && ccov) # Bug 1423667
 [browser_library_views_liveupdate.js]
 [browser_markPageAsFollowedLink.js]
+[browser_panelview_bookmarks_delete.js]
 [browser_paste_bookmarks.js]
 skip-if = (os == 'win' && ccov) # Bug 1423667
 subsuite = clipboard
 [browser_paste_into_tags.js]
 skip-if = (os == 'win' && ccov) # Bug 1423667
 [browser_remove_bookmarks.js]
 skip-if = (os == 'win' && ccov) # Bug 1423667
 subsuite = clipboard
new file mode 100644
--- /dev/null
+++ b/browser/components/places/tests/browser/browser_panelview_bookmarks_delete.js
@@ -0,0 +1,58 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/publicdomain/zero/1.0/ */
+
+"use strict";
+
+const TEST_URL = "https://www.example.com/";
+
+/**
+ * Checks that the Bookmarks subview is updated after deleting an item.
+ */
+add_task(async function test_panelview_bookmarks_delete() {
+  await PlacesUtils.bookmarks.insert({
+    parentGuid: PlacesUtils.bookmarks.unfiledGuid,
+    url: TEST_URL,
+    title: TEST_URL,
+  });
+
+  await PanelUI.show();
+
+  let libraryView = document.getElementById("appMenu-libraryView");
+  let promise = BrowserTestUtils.waitForEvent(libraryView, "ViewShown");
+  document.getElementById("appMenu-library-button").click();
+  await promise;
+
+  let bookmarksView = document.getElementById("PanelUI-bookmarks");
+  promise = BrowserTestUtils.waitForEvent(bookmarksView, "ViewShown");
+  document.getElementById("appMenu-library-bookmarks-button").click();
+  await promise;
+
+  let list = document.getElementById("panelMenu_bookmarksMenu");
+  let listItem = [...list.childNodes].find(node => node.label == TEST_URL);
+
+  let placesContext = document.getElementById("placesContext");
+  promise = BrowserTestUtils.waitForEvent(placesContext, "popupshown");
+  EventUtils.synthesizeMouseAtCenter(listItem, {
+    button: 2,
+    type: "contextmenu"
+  });
+  await promise;
+
+  promise = new Promise(resolve => {
+    let observer = new MutationObserver(mutations => {
+      if (listItem.parentNode == null) {
+        Assert.ok(true, "The bookmarks list item was removed.");
+        observer.disconnect();
+        resolve();
+      }
+    });
+    observer.observe(list, { childList: true });
+  });
+  let placesContextDelete = document.getElementById("placesContext_delete");
+  EventUtils.synthesizeMouseAtCenter(placesContextDelete, {});
+  await promise;
+
+  promise = BrowserTestUtils.waitForEvent(PanelUI.panel, "popuphidden");
+  PanelUI.hide();
+  await promise;
+});