Bug 1443189 - Places subviews are not updated while they are open. r=Gijs
MozReview-Commit-ID: 5WHDqKsHjDJ
--- 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;
+});