Bug 1269497 - Add 'visible' support to MenuItem API;r=jdescottes draft
authorBrian Grinstead <bgrinstead@mozilla.com>
Mon, 02 May 2016 14:54:20 -0700
changeset 362668 e5344982b8ec6626882230f6f348303cf3201d12
parent 362667 9015ebea629332d283c11fdb8c525d5c1d20c8d2
child 362669 46891b760b0bcc40d1e53b3907ead93242462290
push id17008
push userbgrinstead@mozilla.com
push dateMon, 02 May 2016 21:59:43 +0000
reviewersjdescottes
bugs1269497
milestone49.0a1
Bug 1269497 - Add 'visible' support to MenuItem API;r=jdescottes MozReview-Commit-ID: 3tmhissxNYi
devtools/client/framework/menu-item.js
devtools/client/framework/menu.js
devtools/client/framework/test/browser_menu_api.js
--- a/devtools/client/framework/menu-item.js
+++ b/devtools/client/framework/menu-item.js
@@ -39,20 +39,22 @@ function MenuItem({
     accesskey = null,
     checked = false,
     click = () => {},
     disabled = false,
     label = "",
     id = null,
     submenu = null,
     type = "normal",
+    visible = true,
 } = { }) {
   this.accesskey = accesskey;
   this.checked = checked;
   this.click = click;
   this.disabled = disabled;
   this.id = id;
   this.label = label;
   this.submenu = submenu;
   this.type = type;
+  this.visible = visible;
 }
 
 module.exports = MenuItem;
--- a/devtools/client/framework/menu.js
+++ b/devtools/client/framework/menu.js
@@ -87,16 +87,20 @@ Menu.prototype.popup = function(screenX,
 
   doc.querySelector("popupset").appendChild(popup);
   popup.openPopupAtScreen(screenX, screenY, true);
 };
 
 Menu.prototype._createMenuItems = function(parent) {
   let doc = parent.ownerDocument;
   this.menuitems.forEach(item => {
+    if (!item.visible) {
+      return;
+    }
+
     if (item.submenu) {
       let menupopup = doc.createElement("menupopup");
       item.submenu._createMenuItems(menupopup);
 
       let menu = doc.createElement("menu");
       menu.appendChild(menupopup);
       menu.setAttribute("label", item.label);
       parent.appendChild(menu);
--- a/devtools/client/framework/test/browser_menu_api.js
+++ b/devtools/client/framework/test/browser_menu_api.js
@@ -66,16 +66,22 @@ function* testMenuPopup(toolbox) {
       disabled: true,
     }),
   ];
 
   for (let item of MENU_ITEMS) {
     menu.append(item);
   }
 
+  // Append an invisible MenuItem, which shouldn't show up in the DOM
+  menu.append(new MenuItem({
+    label: "Invisible",
+    visible: false,
+  }));
+
   menu.popup(0, 0, toolbox);
 
   ok(toolbox.doc.querySelector("#menu-popup"), "A popup is in the DOM");
 
   let menuSeparators = toolbox.doc.querySelectorAll("#menu-popup > menuseparator");
   is(menuSeparators.length, 1, "A separator is in the menu");
 
   let menuItems = toolbox.doc.querySelectorAll("#menu-popup > menuitem");