|
1 <?xml version="1.0"?> |
|
2 <?xml-stylesheet href="chrome://global/skin" type="text/css"?> |
|
3 |
|
4 <window title="Popup Prevent Default Tests" |
|
5 xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"> |
|
6 |
|
7 <!-- |
|
8 This tests checks that preventDefault can be called on a popupshowing |
|
9 event or popuphiding event to prevent the default behaviour. |
|
10 --> |
|
11 |
|
12 <script> |
|
13 |
|
14 var gBlockShowing = true; |
|
15 var gBlockHiding = true; |
|
16 var gShownNotAllowed = true; |
|
17 var gHiddenNotAllowed = true; |
|
18 |
|
19 var fm = Components.classes["@mozilla.org/focus-manager;1"]. |
|
20 getService(Components.interfaces.nsIFocusManager); |
|
21 |
|
22 var is = function(l, r, v) { window.opener.wrappedJSObject.SimpleTest.is(l, r, v); } |
|
23 var isnot = function(l, r, v) { window.opener.wrappedJSObject.SimpleTest.isnot(l, r, v); } |
|
24 |
|
25 function runTest() |
|
26 { |
|
27 var menu = document.getElementById("menu"); |
|
28 |
|
29 is(fm.activeWindow, window, "active window at start"); |
|
30 is(fm.focusedWindow, window, "focused window at start"); |
|
31 |
|
32 is(window.windowState, window.STATE_NORMAL, "window is normal"); |
|
33 // the minimizing test sometimes fails on Linux so don't test it there |
|
34 if (navigator.platform.indexOf("Lin") == 0) { |
|
35 menu.open = true; |
|
36 return; |
|
37 } |
|
38 window.minimize(); |
|
39 is(window.windowState, window.STATE_MINIMIZED, "window is minimized"); |
|
40 |
|
41 isnot(fm.activeWindow, window, "active window after minimize"); |
|
42 isnot(fm.focusedWindow, window, "focused window after minimize"); |
|
43 |
|
44 menu.open = true; |
|
45 |
|
46 setTimeout(runTestAfterMinimize, 0); |
|
47 } |
|
48 |
|
49 function runTestAfterMinimize() |
|
50 { |
|
51 var menu = document.getElementById("menu"); |
|
52 is(menu.firstChild.state, "closed", "popup not opened when window minimized"); |
|
53 |
|
54 window.restore(); |
|
55 is(window.windowState, window.STATE_NORMAL, "window is restored"); |
|
56 |
|
57 is(fm.activeWindow, window, "active window after restore"); |
|
58 is(fm.focusedWindow, window, "focused window after restore"); |
|
59 |
|
60 menu.open = true; |
|
61 } |
|
62 |
|
63 function popupShowing(event) |
|
64 { |
|
65 if (gBlockShowing) { |
|
66 event.preventDefault(); |
|
67 gBlockShowing = false; |
|
68 setTimeout(function() { |
|
69 gShownNotAllowed = false; |
|
70 document.getElementById("menu").open = true; |
|
71 }, 3000, true); |
|
72 } |
|
73 } |
|
74 |
|
75 function popupShown() |
|
76 { |
|
77 window.opener.wrappedJSObject.SimpleTest.ok(!gShownNotAllowed, "popupshowing preventDefault"); |
|
78 document.getElementById("menu").open = false; |
|
79 } |
|
80 |
|
81 function popupHiding(event) |
|
82 { |
|
83 if (gBlockHiding) { |
|
84 event.preventDefault(); |
|
85 gBlockHiding = false; |
|
86 setTimeout(function() { |
|
87 gHiddenNotAllowed = false; |
|
88 document.getElementById("menu").open = false; |
|
89 }, 3000, true); |
|
90 } |
|
91 } |
|
92 |
|
93 function popupHidden() |
|
94 { |
|
95 window.opener.wrappedJSObject.SimpleTest.ok(!gHiddenNotAllowed, "popuphiding preventDefault"); |
|
96 window.opener.wrappedJSObject.SimpleTest.finish(); |
|
97 window.close(); |
|
98 } |
|
99 |
|
100 window.opener.wrappedJSObject.SimpleTest.waitForFocus(runTest, window); |
|
101 </script> |
|
102 |
|
103 <button id="menu" type="menu" label="Menu"> |
|
104 <menupopup onpopupshowing="popupShowing(event);" |
|
105 onpopupshown="popupShown();" |
|
106 onpopuphiding="popupHiding(event);" |
|
107 onpopuphidden="popupHidden();"> |
|
108 <menuitem label="Item"/> |
|
109 </menupopup> |
|
110 </button> |
|
111 |
|
112 |
|
113 </window> |