forked from mirrors/gecko-dev
		
	
		
			
				
	
	
		
			129 lines
		
	
	
	
		
			3.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			129 lines
		
	
	
	
		
			3.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| /* Any copyright is dedicated to the Public Domain.
 | |
|  * http://creativecommons.org/publicdomain/zero/1.0/ */
 | |
| 
 | |
| const gBaseURL =
 | |
|   "https://example.com/browser/browser/base/content/test/contextMenu/";
 | |
| 
 | |
| add_task(async function() {
 | |
|   await SpecialPowers.pushPrefEnv({
 | |
|     set: [["dom.menuitem.enabled", true]],
 | |
|   });
 | |
| 
 | |
|   let tab = await BrowserTestUtils.openNewForegroundTab(
 | |
|     gBrowser,
 | |
|     gBaseURL + "subtst_contextmenu.html"
 | |
|   );
 | |
| 
 | |
|   let contextMenu = document.getElementById("contentAreaContextMenu");
 | |
| 
 | |
|   // Get the point of the element with the page menu (test-pagemenu) and
 | |
|   // synthesize a right mouse click there.
 | |
|   let popupShownPromise = BrowserTestUtils.waitForEvent(
 | |
|     contextMenu,
 | |
|     "popupshown"
 | |
|   );
 | |
|   await BrowserTestUtils.synthesizeMouse(
 | |
|     "#test-pagemenu",
 | |
|     5,
 | |
|     5,
 | |
|     { type: "contextmenu", button: 2 },
 | |
|     tab.linkedBrowser
 | |
|   );
 | |
|   await popupShownPromise;
 | |
| 
 | |
|   checkMenu(contextMenu);
 | |
| 
 | |
|   let popupHiddenPromise = BrowserTestUtils.waitForEvent(
 | |
|     contextMenu,
 | |
|     "popuphidden"
 | |
|   );
 | |
|   contextMenu.hidePopup();
 | |
|   await popupHiddenPromise;
 | |
| 
 | |
|   BrowserTestUtils.removeTab(tab);
 | |
| });
 | |
| 
 | |
| function checkItems(menuitem, arr) {
 | |
|   for (let i = 0; i < arr.length; i += 2) {
 | |
|     let str = arr[i];
 | |
|     let details = arr[i + 1];
 | |
|     if (str == "---") {
 | |
|       is(menuitem.localName, "menuseparator", "menuseparator");
 | |
|     } else if ("children" in details) {
 | |
|       is(menuitem.localName, "menu", "submenu");
 | |
|       is(menuitem.getAttribute("label"), str, str + " label");
 | |
|       checkItems(menuitem.menupopup.firstElementChild, details.children);
 | |
|     } else {
 | |
|       is(menuitem.localName, "menuitem", str + " menuitem");
 | |
| 
 | |
|       is(menuitem.getAttribute("label"), str, str + " label");
 | |
|       is(menuitem.getAttribute("type"), details.type, str + " type");
 | |
|       is(
 | |
|         menuitem.getAttribute("image"),
 | |
|         details.icon ? gBaseURL + details.icon : "",
 | |
|         str + " icon"
 | |
|       );
 | |
| 
 | |
|       if (details.checked) {
 | |
|         is(menuitem.getAttribute("checked"), "true", str + " checked");
 | |
|       } else {
 | |
|         ok(!menuitem.hasAttribute("checked"), str + " checked");
 | |
|       }
 | |
| 
 | |
|       if (details.disabled) {
 | |
|         is(menuitem.getAttribute("disabled"), "true", str + " disabled");
 | |
|       } else {
 | |
|         ok(!menuitem.hasAttribute("disabled"), str + " disabled");
 | |
|       }
 | |
|     }
 | |
| 
 | |
|     menuitem = menuitem.nextElementSibling;
 | |
|   }
 | |
| }
 | |
| 
 | |
| function checkMenu(contextMenu) {
 | |
|   let items = [
 | |
|     "Plain item",
 | |
|     { type: "", icon: "", checked: false, disabled: false },
 | |
|     "Disabled item",
 | |
|     { type: "", icon: "", checked: false, disabled: true },
 | |
|     "Item w/ textContent",
 | |
|     { type: "", icon: "", checked: false, disabled: false },
 | |
|     "---",
 | |
|     null,
 | |
|     "Checkbox",
 | |
|     { type: "checkbox", icon: "", checked: true, disabled: false },
 | |
|     "---",
 | |
|     null,
 | |
|     "Radio1",
 | |
|     { type: "checkbox", icon: "", checked: true, disabled: false },
 | |
|     "Radio2",
 | |
|     { type: "checkbox", icon: "", checked: false, disabled: false },
 | |
|     "Radio3",
 | |
|     { type: "checkbox", icon: "", checked: false, disabled: false },
 | |
|     "---",
 | |
|     null,
 | |
|     "Item w/ icon",
 | |
|     { type: "", icon: "favicon.ico", checked: false, disabled: false },
 | |
|     "Item w/ bad icon",
 | |
|     { type: "", icon: "", checked: false, disabled: false },
 | |
|     "---",
 | |
|     null,
 | |
|     "Submenu",
 | |
|     {
 | |
|       children: [
 | |
|         "Radio1",
 | |
|         { type: "checkbox", icon: "", checked: false, disabled: false },
 | |
|         "Radio2",
 | |
|         { type: "checkbox", icon: "", checked: true, disabled: false },
 | |
|         "Radio3",
 | |
|         { type: "checkbox", icon: "", checked: false, disabled: false },
 | |
|         "---",
 | |
|         null,
 | |
|         "Checkbox",
 | |
|         { type: "checkbox", icon: "", checked: false, disabled: false },
 | |
|       ],
 | |
|     },
 | |
|   ];
 | |
|   checkItems(contextMenu.children[2], items);
 | |
| }
 | 
