1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/toolkit/content/tests/chrome/test_menuitem_blink.xul Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,106 @@ 1.4 +<?xml version="1.0"?> 1.5 +<?xml-stylesheet href="chrome://global/skin" type="text/css"?> 1.6 +<?xml-stylesheet href="chrome://mochikit/content/tests/SimpleTest/test.css" type="text/css"?> 1.7 + 1.8 +<window title="Blinking Context Menu Item Tests" 1.9 + xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"> 1.10 + 1.11 + <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script> 1.12 + <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/EventUtils.js"></script> 1.13 + 1.14 + <menulist id="menulist"> 1.15 + <menupopup id="menupopup"> 1.16 + <menuitem label="Menu Item" id="menuitem"/> 1.17 + </menupopup> 1.18 + </menulist> 1.19 +<script class="testbody" type="application/javascript"> 1.20 +<![CDATA[ 1.21 + 1.22 +SimpleTest.waitForExplicitFinish(); 1.23 +SimpleTest.waitForFocus(startTest); 1.24 + 1.25 +function startTest() { 1.26 + if (!/Mac/.test(navigator.platform)) { 1.27 + ok(true, "Nothing to test on non-Mac."); 1.28 + SimpleTest.finish(); 1.29 + return; 1.30 + } 1.31 + // Destroy frame while removing the _moz-menuactive attribute. 1.32 + test_crash("REMOVAL", test2); 1.33 +} 1.34 + 1.35 +function test2() { 1.36 + // Destroy frame while adding the _moz-menuactive attribute. 1.37 + test_crash("ADDITION", test3); 1.38 +} 1.39 + 1.40 +function test3() { 1.41 + // Don't mess with the frame, just test whether we've blinked. 1.42 + test_crash("", SimpleTest.finish); 1.43 +} 1.44 + 1.45 +function test_crash(when, andThen) { 1.46 + var menupopup = document.getElementById("menupopup"); 1.47 + var menuitem = document.getElementById("menuitem"); 1.48 + var attrChanges = { "REMOVAL": 0, "ADDITION": 0 }; 1.49 + var storedEvent = null; 1.50 + menupopup.addEventListener("popupshown", function () { 1.51 + menupopup.removeEventListener("popupshown", arguments.callee, false); 1.52 + menuitem.addEventListener("mouseup", function (e) { 1.53 + menuitem.removeEventListener("mouseup", arguments.callee, true); 1.54 + menuitem.addEventListener("DOMAttrModified", function (e) { 1.55 + if (e.attrName == "_moz-menuactive") { 1.56 + if (!attrChanges[e.attrChange]) 1.57 + attrChanges[e.attrChange] = 1; 1.58 + else 1.59 + attrChanges[e.attrChange]++; 1.60 + storedEvent = e; 1.61 + if (e.attrChange == e[when]) { 1.62 + menuitem.hidden = true; 1.63 + menuitem.getBoundingClientRect(); 1.64 + ok(true, "Didn't crash on _moz-menuactive " + when.toLowerCase() + " during blinking") 1.65 + menuitem.hidden = false; 1.66 + menuitem.removeEventListener("DOMAttrModified", arguments.callee, false); 1.67 + SimpleTest.executeSoon(function () { 1.68 + menupopup.hidePopup(); 1.69 + }); 1.70 + } 1.71 + } 1.72 + }, false); 1.73 + }, true); 1.74 + menupopup.addEventListener("popuphidden", function() { 1.75 + menupopup.removeEventListener("popuphidden", arguments.callee, false); 1.76 + if (!when) { 1.77 + // Test whether we've blinked at all. 1.78 + var shouldBlink = navigator.platform.match(/Mac/); 1.79 + var expectedNumRemoval = shouldBlink ? 2 : 1; 1.80 + var expectedNumAddition = shouldBlink ? 1 : 0; 1.81 + ok(storedEvent, "got DOMAttrModified events after clicking menuitem") 1.82 + is(attrChanges[storedEvent.REMOVAL], expectedNumRemoval, "blinking unset attributes correctly"); 1.83 + is(attrChanges[storedEvent.ADDITION], expectedNumAddition, "blinking set attributes correctly"); 1.84 + } 1.85 + SimpleTest.executeSoon(andThen); 1.86 + }, false); 1.87 + synthesizeMouse(menuitem, 10, 5, { type : "mousemove" }); 1.88 + synthesizeMouse(menuitem, 10, 5, { type : "mousemove" }); 1.89 + synthesizeMouse(menuitem, 10, 5, { type : "mousedown" }); 1.90 + SimpleTest.executeSoon(function () { 1.91 + synthesizeMouse(menuitem, 10, 5, { type : "mouseup" }); 1.92 + }); 1.93 + }, false); 1.94 + document.getElementById("menulist").open = true; 1.95 +} 1.96 + 1.97 +]]> 1.98 +</script> 1.99 + 1.100 +<body xmlns="http://www.w3.org/1999/xhtml"> 1.101 +<p id="display"> 1.102 +</p> 1.103 +<div id="content" style="display: none"> 1.104 +</div> 1.105 +<pre id="test"> 1.106 +</pre> 1.107 +</body> 1.108 + 1.109 +</window>