REGRESSION (r181358 and r181507): Lots of sites think that we support touch events...
[WebKit-https.git] / LayoutTests / fast / dom / event-handler-attributes.html
1 <!DOCTYPE html>
2 <html>
3 <body>
4 <script src="../../resources/js-test-pre.js"></script>
5 <script>
6 description("Test which event listeners are set up by event handler attributes (the ones with names like onclick).");
7
8 const unusualEventNames = {
9     "webkitanimationend": "webkitAnimationEnd",
10     "webkitanimationiteration": "webkitAnimationIteration",
11     "webkitanimationstart": "webkitAnimationStart",
12     "webkittransitionend": "webkitTransitionEnd",
13 };
14
15 const windowEvents = [
16     "abort",
17     "animationend",
18     "animationiteration",
19     "animationstart",
20     "beforeunload",
21     "blur",
22     "canplay",
23     "canplaythrough",
24     "change",
25     "click",
26     "contextmenu",
27     "dblclick",
28     "drag",
29     "dragend",
30     "dragenter",
31     "dragleave",
32     "dragover",
33     "dragstart",
34     "drop",
35     "durationchange",
36     "emptied",
37     "ended",
38     "error",
39     "focus",
40     "hashchange",
41     "input",
42     "invalid",
43     "keydown",
44     "keypress",
45     "keyup",
46     "load",
47     "loadeddata",
48     "loadedmetadata",
49     "loadstart",
50     "message",
51     "mousedown",
52     "mouseenter",
53     "mouseleave",
54     "mousemove",
55     "mouseout",
56     "mouseover",
57     "mouseup",
58     "mousewheel",
59     "offline",
60     "online",
61     "pagehide",
62     "pageshow",
63     "pause",
64     "play",
65     "playing",
66     "popstate",
67     "progress",
68     "ratechange",
69     "reset",
70     "resize",
71     "scroll",
72     "search",
73     "seeked",
74     "seeking",
75     "select",
76     "stalled",
77     "storage",
78     "submit",
79     "suspend",
80     "timeupdate",
81     "transitionend",
82     "unload",
83     "volumechange",
84     "waiting",
85     "webkitanimationend",
86     "webkitanimationiteration",
87     "webkitanimationstart",
88     "webkittransitionend",
89     "wheel",
90 ];
91
92 const documentEvents = [
93     "abort",
94     "beforecopy",
95     "beforecut",
96     "beforepaste",
97     "blur",
98     "change",
99     "click",
100     "contextmenu",
101     "copy",
102     "cut",
103     "dblclick",
104     "drag",
105     "dragend",
106     "dragenter",
107     "dragleave",
108     "dragover",
109     "dragstart",
110     "drop",
111     "error",
112     "focus",
113     "input",
114     "invalid",
115     "keydown",
116     "keypress",
117     "keyup",
118     "load",
119     "mousedown",
120     "mouseenter",
121     "mouseleave",
122     "mousemove",
123     "mouseout",
124     "mouseover",
125     "mouseup",
126     "mousewheel",
127     "paste",
128     "readystatechange",
129     "reset",
130     "scroll",
131     "search",
132     "select",
133     "selectionchange",
134     "selectstart",
135     "submit",
136     "wheel",
137 ];
138
139 const elementEvents = [
140     "abort",
141     "animationend",
142     "animationiteration",
143     "animationstart",
144     "beforecopy",
145     "beforecut",
146     "beforeload",
147     "beforepaste",
148     "blur",
149     "canplay",
150     "canplaythrough",
151     "change",
152     "click",
153     "contextmenu",
154     "copy",
155     "cut",
156     "dblclick",
157     "drag",
158     "dragend",
159     "dragenter",
160     "dragleave",
161     "dragover",
162     "dragstart",
163     "drop",
164     "durationchange",
165     "emptied",
166     "ended",
167     "error",
168     "focus",
169     "focusin",
170     "focusout",
171     "input",
172     "invalid",
173     "keydown",
174     "keypress",
175     "keyup",
176     "load",
177     "loadeddata",
178     "loadedmetadata",
179     "loadstart",
180     "mousedown",
181     "mouseenter",
182     "mouseleave",
183     "mousemove",
184     "mouseout",
185     "mouseover",
186     "mouseup",
187     "mousewheel",
188     "paste",
189     "pause",
190     "play",
191     "playing",
192     "progress",
193     "ratechange",
194     "reset",
195     "scroll",
196     "search",
197     "seeked",
198     "seeking",
199     "select",
200     "selectstart",
201     "stalled",
202     "submit",
203     "suspend",
204     "timeupdate",
205     "transitionend",
206     "volumechange",
207     "waiting",
208     "webkitanimationend",
209     "webkitanimationiteration",
210     "webkitanimationstart",
211     "webkittransitionend",
212     "wheel",
213 ];
214
215 const bodyElementWindowForwardedEvents = [
216     "beforeunload",
217     "blur",
218     "error",
219     "focus",
220     "focusin",
221     "focusout",
222     "hashchange",
223     "load",
224     "message",
225     "offline",
226     "online",
227     "pagehide",
228     "pageshow",
229     "popstate",
230     "resize",
231     "storage",
232     "unload",
233 ];
234
235 const bodyElementDocumentForwardedEvents = [
236     "selectionchange",
237 ];
238
239 const nonEventNames = [
240     "noneventname",
241 ];
242
243 var magicNumber = 2;
244 var sideEffect;
245
246 function testHandler(object, install, remove, eventName)
247 {
248     const capturedMagicNumber = ++magicNumber;
249     install(capturedMagicNumber);
250
251     if (unusualEventNames[eventName])
252         eventName = unusualEventNames[eventName];
253
254     sideEffect = capturedMagicNumber - 1;
255     if (object !== window && object !== document)
256         object.dispatchEvent(new Event(eventName));
257     const handlerOnTarget = sideEffect === capturedMagicNumber;
258     sideEffect = capturedMagicNumber - 1;
259     window.dispatchEvent(new Event(eventName));
260     const handlerOnWindow = sideEffect === capturedMagicNumber;
261     sideEffect = capturedMagicNumber - 1;
262     document.dispatchEvent(new Event(eventName));
263     const handlerOnDocument = sideEffect === capturedMagicNumber;
264
265     remove();
266
267     sideEffect = capturedMagicNumber - 1;
268
269     object.dispatchEvent(new Event(eventName));
270     window.dispatchEvent(new Event(eventName));
271     document.dispatchEvent(new Event(eventName));
272
273     const misfire = sideEffect === capturedMagicNumber;
274
275     var result;
276
277     if (!handlerOnTarget && !handlerOnWindow && !handlerOnDocument)
278         result = "none";
279     else
280         result = ((handlerOnTarget ? ", target" : "") + (handlerOnWindow ? ", window" : "") + (handlerOnDocument ? ", document" : "")).substring(2);
281
282     if (misfire)
283         result += ", remove failed";
284
285     return result;
286 }
287
288 function testScriptAttribute(object, eventName)
289 {
290     const attributeName = "on" + eventName;
291     return testHandler(object, function(capturedMagicNumber) {
292         object[attributeName] = function() { sideEffect = capturedMagicNumber };
293     }, function() {
294         object[attributeName] = null;
295     }, eventName);
296 }
297
298 function testContentAttribute(element, eventName)
299 {
300     const attributeName = "on" + eventName;
301     return testHandler(element, function(capturedMagicNumber) {
302         element.setAttribute(attributeName, "sideEffect = " + capturedMagicNumber);
303     }, function() {
304         element.removeAttribute(attributeName);
305     }, eventName);
306 }
307
308 function testElementAttribute(object, eventName)
309 {
310     const scriptAttributeResult = testScriptAttribute(object, eventName);
311     const contentAttributeResult = testContentAttribute(object, eventName);
312     if (scriptAttributeResult === contentAttributeResult)
313         return scriptAttributeResult;
314     return "script: " + scriptAttributeResult + "; content: " + contentAttributeResult;
315 }
316
317 function sortUnique(array)
318 {
319     return array.sort().filter(function(item, i) {
320         return i === 0 || item !== array[i - 1];
321     });
322 }
323
324 function arrayUnion()
325 {
326     var combined = [];
327     for (var i = 0; i < arguments.length; ++i)
328         combined = combined.concat(arguments[i]);
329     return sortUnique(combined);
330 }
331
332 function arrayDifference(a, b)
333 {
334     return a.filter(function(item) {
335         return b.indexOf(item) < 0;
336     });
337 }
338
339 const allEventNames = arrayUnion(windowEvents, documentEvents, elementEvents, bodyElementWindowForwardedEvents, bodyElementDocumentForwardedEvents, nonEventNames);
340
341 var sectionOpen = false;
342
343 function endSection()
344 {
345     if (sectionOpen) {
346         debug("");
347         sectionOpen = false;
348     }
349 }
350
351 function section(title)
352 {
353     endSection();
354     debug(title);
355     debug("");
356     sectionOpen = true;
357 }
358
359 function testArray(array, prefix, expected, sectionName)
360 {
361     section(sectionName);
362     for (var i = 0; i < array.length; ++i) {
363         shouldBeEqualToString(prefix + ", \"" + array[i] + "\")", expected);
364     }
365 }
366
367 const nonHTMLElement = document.createElementNS("foo", "foo");
368 const element = document.documentElement;
369 const bodyElement = document.body;
370 const audioElement = document.createElement("video");
371 const framesetElement = document.createElement("frameset");
372 const inputElement = document.createElement("input");
373 const videoElement = document.createElement("video");
374 const rectElement = document.createElementNS("http://www.w3.org/2000/svg", "rect");
375
376 testArray(windowEvents, "testScriptAttribute(window", "window", "Event names we expect to be able to set on the window object");
377 testArray(arrayDifference(allEventNames, windowEvents), "testScriptAttribute(window", "none", "Event names we expect not to be able to set on the window object");
378
379 testArray(documentEvents, "testScriptAttribute(document", "document", "Event names we expect to be able to set on the document");
380 testArray(arrayDifference(allEventNames, documentEvents), "testScriptAttribute(document", "none", "Event names we expect not to be able to set on the document");
381
382 testArray(elementEvents, "testElementAttribute(element", "target", "Event names we expect to be able to set on an element (tested on the &lt;html> element)");
383 testArray(arrayDifference(allEventNames, elementEvents), "testElementAttribute(element", "none", "Event names we expect not to be able to set on an element (tested on the &lt;html> element)");
384
385 testArray(elementEvents, "testElementAttribute(inputElement", "target", "Event names we expect to be able to set on an element (tested on the &lt;input> element)");
386 testArray(arrayDifference(allEventNames, elementEvents), "testElementAttribute(inputElement", "none", "Event names we expect not to be able to set on an element (tested on the &lt;input> element)");
387
388 testArray(elementEvents, "testElementAttribute(audioElement", "target", "Event names we expect to be able to set on an element (tested on the &lt;audio> element)");
389 testArray(arrayDifference(allEventNames, elementEvents), "testElementAttribute(audioElement", "none", "Event names we expect not to be able to set on an element (tested on the &lt;audio> element)");
390
391 testArray(elementEvents, "testElementAttribute(videoElement", "target", "Event names we expect to be able to set on an element (tested on the &lt;video> element)");
392 testArray(arrayDifference(allEventNames, elementEvents), "testElementAttribute(videoElement", "none", "Event names we expect not to be able to set on an element (tested on the &lt;video> element)");
393
394 testArray(bodyElementWindowForwardedEvents, "testElementAttribute(bodyElement", "window", "Event names we expect to be forwarded from &lt;body> element to window object)");
395 testArray(bodyElementDocumentForwardedEvents, "testElementAttribute(bodyElement", "document", "Event names we expect to be forwarded from &lt;body> element to document)");
396 testArray(arrayDifference(elementEvents, arrayUnion(bodyElementWindowForwardedEvents, bodyElementDocumentForwardedEvents)), "testElementAttribute(bodyElement", "target", "Non-forwarded event names on &lt;body> element");
397 testArray(arrayDifference(allEventNames, arrayUnion(elementEvents, bodyElementWindowForwardedEvents, bodyElementDocumentForwardedEvents)), "testElementAttribute(bodyElement", "none", "Event names we expect to not be able to set on &lt;body> element");
398
399 testArray(bodyElementWindowForwardedEvents, "testElementAttribute(framesetElement", "window", "Event names we expect to be forwarded from &lt;frameset> element to window object)");
400 testArray(bodyElementDocumentForwardedEvents, "testElementAttribute(framesetElement", "document", "Event names we expect to be forwarded from &lt;frameset> element to document)");
401 testArray(arrayDifference(elementEvents, arrayUnion(bodyElementWindowForwardedEvents, bodyElementDocumentForwardedEvents)), "testElementAttribute(framesetElement", "target", "Non-forwarded event names on &lt;frameset> element");
402 testArray(arrayDifference(allEventNames, arrayUnion(elementEvents, bodyElementWindowForwardedEvents, bodyElementDocumentForwardedEvents)), "testElementAttribute(framesetElement", "none", "Event names we expect to not be able to set on &lt;frameset> element");
403
404 testArray(elementEvents, "testElementAttribute(rectElement", "target", "Event names we expect to be able to set on an element (tested on the SVG &lt;rect> element)");
405 testArray(arrayDifference(allEventNames, elementEvents), "testElementAttribute(rectElement", "none", "Event names we expect not to be able to set on an element (tested on the SVG &lt;rect> element)");
406
407 testArray(allEventNames, "testElementAttribute(nonHTMLElement", "none", "Event names on a non-HTML element");
408
409 endSection();
410
411 /*
412
413 ----------------
414
415 To make the results of this test platform independent, there is no testing here for conditional events.
416 An alternative would be to always make these event handler attributes work even if the feature
417 that sends the events is turned off. See list here of IDL files that include these conditional events.
418
419 html/HTMLBodyElement.idl:    [Conditional=ORIENTATION_EVENTS, NotEnumerable, JSWindowEventListener] attribute EventListener onorientationchange;
420
421 html/HTMLFrameSetElement.idl:    [Conditional=ORIENTATION_EVENTS, NotEnumerable, JSWindowEventListener] attribute EventListener onorientationchange;
422
423 ----------------
424
425 It would be good to extend this test to cover more objects.
426 See list below of IDL files that indicate objects have these attributes as of the writing of this test.
427
428 Modules/battery/BatteryManager.idl:    attribute EventListener onchargingchange;
429 Modules/battery/BatteryManager.idl:    attribute EventListener onchargingtimechange;
430 Modules/battery/BatteryManager.idl:    attribute EventListener ondischargingtimechange;
431 Modules/battery/BatteryManager.idl:    attribute EventListener onlevelchange;
432
433 Modules/encryptedmedia/MediaKeySession.idl:    attribute EventListener onwebkitkeyadded;
434 Modules/encryptedmedia/MediaKeySession.idl:    attribute EventListener onwebkitkeyerror;
435 Modules/encryptedmedia/MediaKeySession.idl:    attribute EventListener onwebkitkeymessage;
436
437 Modules/indexeddb/IDBDatabase.idl:    attribute EventListener onabort;
438 Modules/indexeddb/IDBDatabase.idl:    attribute EventListener onerror;
439 Modules/indexeddb/IDBDatabase.idl:    attribute EventListener onversionchange;
440
441 Modules/indexeddb/IDBOpenDBRequest.idl:    attribute EventListener onblocked;
442 Modules/indexeddb/IDBOpenDBRequest.idl:    attribute EventListener onupgradeneeded;
443
444 Modules/indexeddb/IDBRequest.idl:    attribute EventListener onsuccess;
445 Modules/indexeddb/IDBRequest.idl:    attribute EventListener onerror;
446
447 Modules/indexeddb/IDBTransaction.idl:    attribute EventListener onabort;
448 Modules/indexeddb/IDBTransaction.idl:    attribute EventListener oncomplete;
449 Modules/indexeddb/IDBTransaction.idl:    attribute EventListener onerror;
450
451 Modules/mediastream/MediaStream.idl:    attribute EventListener onactive;
452 Modules/mediastream/MediaStream.idl:    attribute EventListener oninactive;
453 Modules/mediastream/MediaStream.idl:    attribute EventListener onaddtrack;
454 Modules/mediastream/MediaStream.idl:    attribute EventListener onremovetrack;
455 Modules/mediastream/MediaStreamTrack.idl:    attribute EventListener onmute;
456 Modules/mediastream/MediaStreamTrack.idl:    attribute EventListener onunmute;
457 Modules/mediastream/MediaStreamTrack.idl:    attribute EventListener onstarted;
458 Modules/mediastream/MediaStreamTrack.idl:    attribute EventListener onended;
459 Modules/mediastream/MediaStreamTrack.idl:    attribute EventListener onoverconstrained;
460 Modules/mediastream/RTCDTMFSender.idl:    attribute EventListener ontonechange;
461 Modules/mediastream/RTCDataChannel.idl:    attribute EventListener onopen;
462 Modules/mediastream/RTCDataChannel.idl:    attribute EventListener onerror;
463 Modules/mediastream/RTCDataChannel.idl:    attribute EventListener onclose;
464 Modules/mediastream/RTCDataChannel.idl:    attribute EventListener onmessage;
465 Modules/mediastream/RTCPeerConnection.idl:    attribute EventListener onnegotiationneeded;
466 Modules/mediastream/RTCPeerConnection.idl:    attribute EventListener onicecandidate;
467 Modules/mediastream/RTCPeerConnection.idl:    attribute EventListener onsignalingstatechange;
468 Modules/mediastream/RTCPeerConnection.idl:    attribute EventListener onaddstream;
469 Modules/mediastream/RTCPeerConnection.idl:    attribute EventListener onremovestream;
470 Modules/mediastream/RTCPeerConnection.idl:    attribute EventListener oniceconnectionstatechange;
471 Modules/mediastream/RTCPeerConnection.idl:    attribute EventListener ondatachannel;
472
473 Modules/notifications/Notification.idl:    attribute EventListener onshow;
474 Modules/notifications/Notification.idl:    attribute EventListener ondisplay;
475 Modules/notifications/Notification.idl:    attribute EventListener onerror;
476 Modules/notifications/Notification.idl:    attribute EventListener onclose;
477 Modules/notifications/Notification.idl:    attribute EventListener onclick;
478
479 Modules/speech/SpeechSynthesisUtterance.idl:    attribute EventListener onstart;
480 Modules/speech/SpeechSynthesisUtterance.idl:    attribute EventListener onend;
481 Modules/speech/SpeechSynthesisUtterance.idl:    attribute EventListener onerror;
482 Modules/speech/SpeechSynthesisUtterance.idl:    attribute EventListener onpause;
483 Modules/speech/SpeechSynthesisUtterance.idl:    attribute EventListener onresume;
484 Modules/speech/SpeechSynthesisUtterance.idl:    attribute EventListener onmark;
485 Modules/speech/SpeechSynthesisUtterance.idl:    attribute EventListener onboundary;
486
487 Modules/webaudio/AudioBufferSourceNode.idl:    attribute EventListener onended;
488 Modules/webaudio/AudioContext.idl:    attribute EventListener oncomplete;
489 Modules/webaudio/OscillatorNode.idl:    attribute EventListener onended;
490 Modules/webaudio/ScriptProcessorNode.idl:    attribute EventListener onaudioprocess;
491
492 Modules/websockets/WebSocket.idl:    attribute EventListener onopen;
493 Modules/websockets/WebSocket.idl:    attribute EventListener onmessage;
494 Modules/websockets/WebSocket.idl:    attribute EventListener onerror;
495 Modules/websockets/WebSocket.idl:    attribute EventListener onclose;
496
497 css/FontLoader.idl:    attribute EventListener onloading;
498 css/FontLoader.idl:    attribute EventListener onloadingdone;
499 css/FontLoader.idl:    attribute EventListener onloadstart;
500 css/FontLoader.idl:    attribute EventListener onload;
501 css/FontLoader.idl:    attribute EventListener onerror;
502
503 dom/MessagePort.idl:    attribute EventListener onmessage;
504
505 fileapi/FileReader.idl:    attribute EventListener onloadstart;
506 fileapi/FileReader.idl:    attribute EventListener onprogress;
507 fileapi/FileReader.idl:    attribute EventListener onload;
508 fileapi/FileReader.idl:    attribute EventListener onabort;
509 fileapi/FileReader.idl:    attribute EventListener onerror;
510 fileapi/FileReader.idl:    attribute EventListener onloadend;
511
512 html/track/AudioTrackList.idl:    attribute EventListener onchange;
513 html/track/AudioTrackList.idl:    attribute EventListener onaddtrack;
514 html/track/AudioTrackList.idl:    attribute EventListener onremovetrack;
515
516 html/track/TextTrack.idl:             attribute EventListener oncuechange;
517 html/track/TextTrackCue.idl:    attribute EventListener onenter;
518
519 html/track/TextTrackCue.idl:    attribute EventListener onexit;
520 html/track/TextTrackList.idl:    attribute EventListener onaddtrack;
521 html/track/TextTrackList.idl:    attribute EventListener onchange;
522 html/track/TextTrackList.idl:    attribute EventListener onremovetrack;
523
524 html/track/VideoTrackList.idl:    attribute EventListener onchange;
525 html/track/VideoTrackList.idl:    attribute EventListener onaddtrack;
526 html/track/VideoTrackList.idl:    attribute EventListener onremovetrack;
527
528 loader/appcache/DOMApplicationCache.idl:    attribute EventListener onchecking;
529 loader/appcache/DOMApplicationCache.idl:    attribute EventListener onerror;
530 loader/appcache/DOMApplicationCache.idl:    attribute EventListener onnoupdate;
531 loader/appcache/DOMApplicationCache.idl:    attribute EventListener ondownloading;
532 loader/appcache/DOMApplicationCache.idl:    attribute EventListener onprogress;
533 loader/appcache/DOMApplicationCache.idl:    attribute EventListener onupdateready;
534 loader/appcache/DOMApplicationCache.idl:    attribute EventListener oncached;
535 loader/appcache/DOMApplicationCache.idl:    attribute EventListener onobsolete;
536
537 page/DOMWindow.idl:    [NotEnumerable, Conditional=DEVICE_ORIENTATION] attribute EventHandler ondevicemotion;
538 page/DOMWindow.idl:    [NotEnumerable, Conditional=DEVICE_ORIENTATION] attribute EventHandler ondeviceorientation;
539 page/DOMWindow.idl:    [NotEnumerable, Conditional=TOUCH_EVENTS] attribute EventHandler ontouchcancel;
540 page/DOMWindow.idl:    [NotEnumerable, Conditional=TOUCH_EVENTS] attribute EventHandler ontouchend;
541 page/DOMWindow.idl:    [NotEnumerable, Conditional=TOUCH_EVENTS] attribute EventHandler ontouchmove;
542 page/DOMWindow.idl:    [NotEnumerable, Conditional=TOUCH_EVENTS] attribute EventHandler ontouchstart;
543 page/DOMWindow.idl:    [NotEnumerable, Conditional=IOS_GESTURE_EVENTS] attribute EventHandler ongesturechange;
544 page/DOMWindow.idl:    [NotEnumerable, Conditional=IOS_GESTURE_EVENTS] attribute EventHandler ongestureend;
545 page/DOMWindow.idl:    [NotEnumerable, Conditional=IOS_GESTURE_EVENTS] attribute EventHandler ongesturestart;
546 page/DOMWindow.idl:    [NotEnumerable, Conditional=ORIENTATION_EVENTS] attribute EventHandler onorientationchange;
547 page/DOMWindow.idl:    [NotEnumerable, Conditional=PROXIMITY_EVENTS] attribute EventHandler onwebkitdeviceproximity;
548 page/DOMWindow.idl:    [NotEnumerable, Conditional=WILL_REVEAL_EDGE_EVENTS] attribute EventHandler onwebkitwillrevealbottom;
549 page/DOMWindow.idl:    [NotEnumerable, Conditional=WILL_REVEAL_EDGE_EVENTS] attribute EventHandler onwebkitwillrevealleft;
550 page/DOMWindow.idl:    [NotEnumerable, Conditional=WILL_REVEAL_EDGE_EVENTS] attribute EventHandler onwebkitwillrevealright;
551 page/DOMWindow.idl:    [NotEnumerable, Conditional=WILL_REVEAL_EDGE_EVENTS] attribute EventHandler onwebkitwillrevealtop;
552 page/DOMWindow.idl:    [NotEnumerable, Conditional=MOUSE_FORCE_EVENTS] attribute EventHandler onwebkitmouseforcecancelled;
553 page/DOMWindow.idl:    [NotEnumerable, Conditional=MOUSE_FORCE_EVENTS] attribute EventHandler onwebkitmouseforcechanged;
554 page/DOMWindow.idl:    [NotEnumerable, Conditional=MOUSE_FORCE_EVENTS] attribute EventHandler onwebkitmouseforceclick;
555 page/DOMWindow.idl:    [NotEnumerable, Conditional=MOUSE_FORCE_EVENTS] attribute EventHandler onwebkitmouseforcedown;
556 page/DOMWindow.idl:    [NotEnumerable, Conditional=MOUSE_FORCE_EVENTS] attribute EventHandler onwebkitmouseforceup;
557 page/DOMWindow.idl:    [NotEnumerable, Conditional=MOUSE_FORCE_EVENTS] attribute EventHandler onwebkitmouseforcewillbegin;
558  
559 dom/Document.idl:    [NotEnumerable, Conditional=CSP_NEXT] attribute EventHandler onsecuritypolicyviolation;
560 dom/Document.idl:    [NotEnumerable, Conditional=TOUCH_EVENTS] attribute EventHandler ontouchcancel;
561 dom/Document.idl:    [NotEnumerable, Conditional=TOUCH_EVENTS] attribute EventHandler ontouchend;
562 dom/Document.idl:    [NotEnumerable, Conditional=TOUCH_EVENTS] attribute EventHandler ontouchmove;
563 dom/Document.idl:    [NotEnumerable, Conditional=TOUCH_EVENTS] attribute EventHandler ontouchstart;
564 dom/Document.idl:    [NotEnumerable, Conditional=WILL_REVEAL_EDGE_EVENTS] attribute EventHandler onwebkitwillrevealbottom;
565 dom/Document.idl:    [NotEnumerable, Conditional=WILL_REVEAL_EDGE_EVENTS] attribute EventHandler onwebkitwillrevealleft;
566 dom/Document.idl:    [NotEnumerable, Conditional=WILL_REVEAL_EDGE_EVENTS] attribute EventHandler onwebkitwillrevealright;
567 dom/Document.idl:    [NotEnumerable, Conditional=WILL_REVEAL_EDGE_EVENTS] attribute EventHandler onwebkitwillrevealtop;
568 dom/Document.idl:    [NotEnumerable, Conditional=MOUSE_FORCE_EVENTS] attribute EventHandler onwebkitmouseforcecancelled;
569 dom/Document.idl:    [NotEnumerable, Conditional=MOUSE_FORCE_EVENTS] attribute EventHandler onwebkitmouseforcechanged;
570 dom/Document.idl:    [NotEnumerable, Conditional=MOUSE_FORCE_EVENTS] attribute EventHandler onwebkitmouseforceclick;
571 dom/Document.idl:    [NotEnumerable, Conditional=MOUSE_FORCE_EVENTS] attribute EventHandler onwebkitmouseforcedown;
572 dom/Document.idl:    [NotEnumerable, Conditional=MOUSE_FORCE_EVENTS] attribute EventHandler onwebkitmouseforceup;
573 dom/Document.idl:    [NotEnumerable, Conditional=MOUSE_FORCE_EVENTS] attribute EventHandler onwebkitmouseforcewillbegin;
574 dom/Document.idl:    [NotEnumerable, Conditional=FULLSCREEN_API] attribute EventHandler onwebkitfullscreenchange;
575 dom/Document.idl:    [NotEnumerable, Conditional=FULLSCREEN_API] attribute EventHandler onwebkitfullscreenerror;
576 dom/Document.idl:    [NotEnumerable, Conditional=POINTER_LOCK] attribute EventHandler onpointerlockchange;
577 dom/Document.idl:    [NotEnumerable, Conditional=POINTER_LOCK] attribute EventHandler onpointerlockerror;
578  
579 dom/Element.idl:    [NotEnumerable, Conditional=TOUCH_EVENTS] attribute EventHandler ontouchcancel;
580 dom/Element.idl:    [NotEnumerable, Conditional=TOUCH_EVENTS] attribute EventHandler ontouchend;
581 dom/Element.idl:    [NotEnumerable, Conditional=TOUCH_EVENTS] attribute EventHandler ontouchmove;
582 dom/Element.idl:    [NotEnumerable, Conditional=TOUCH_EVENTS] attribute EventHandler ontouchstart;
583 dom/Element.idl:    [NotEnumerable, Conditional=WILL_REVEAL_EDGE_EVENTS] attribute EventHandler onwebkitwillrevealbottom;
584 dom/Element.idl:    [NotEnumerable, Conditional=WILL_REVEAL_EDGE_EVENTS] attribute EventHandler onwebkitwillrevealleft;
585 dom/Element.idl:    [NotEnumerable, Conditional=WILL_REVEAL_EDGE_EVENTS] attribute EventHandler onwebkitwillrevealright;
586 dom/Element.idl:    [NotEnumerable, Conditional=WILL_REVEAL_EDGE_EVENTS] attribute EventHandler onwebkitwillrevealtop;
587 dom/Element.idl:    [NotEnumerable, Conditional=MOUSE_FORCE_EVENTS] attribute EventHandler onwebkitmouseforcecancelled;
588 dom/Element.idl:    [NotEnumerable, Conditional=MOUSE_FORCE_EVENTS] attribute EventHandler onwebkitmouseforcechanged;
589 dom/Element.idl:    [NotEnumerable, Conditional=MOUSE_FORCE_EVENTS] attribute EventHandler onwebkitmouseforceclick;
590 dom/Element.idl:    [NotEnumerable, Conditional=MOUSE_FORCE_EVENTS] attribute EventHandler onwebkitmouseforcedown;
591 dom/Element.idl:    [NotEnumerable, Conditional=MOUSE_FORCE_EVENTS] attribute EventHandler onwebkitmouseforcewillbegin;
592 dom/Element.idl:    [NotEnumerable, Conditional=MOUSE_FORCE_EVENTS] attribute EventHandler onwebkitmouseforceup;
593 dom/Element.idl:    [NotEnumerable, Conditional=ENCRYPTED_MEDIA] attribute EventHandler onwebkitkeyadded;
594 dom/Element.idl:    [NotEnumerable, Conditional=ENCRYPTED_MEDIA] attribute EventHandler onwebkitkeyerror;
595 dom/Element.idl:    [NotEnumerable, Conditional=ENCRYPTED_MEDIA] attribute EventHandler onwebkitkeymessage;
596 dom/Element.idl:    [NotEnumerable, Conditional=ENCRYPTED_MEDIA|ENCRYPTED_MEDIA_V2] attribute EventHandler onwebkitneedkey;
597 dom/Element.idl:    [NotEnumerable, Conditional=FULLSCREEN_API] attribute EventHandler onwebkitfullscreenchange;
598 dom/Element.idl:    [NotEnumerable, Conditional=FULLSCREEN_API] attribute EventHandler onwebkitfullscreenerror;
599 dom/Element.idl:    [NotEnumerable, Conditional=REQUEST_AUTOCOMPLETE] attribute EventHandler onautocomplete;
600 dom/Element.idl:    [NotEnumerable, Conditional=REQUEST_AUTOCOMPLETE] attribute EventHandler onautocompleteerror;
601 dom/Element.idl:    [NotEnumerable, Conditional=VIDEO_PRESENTATION_MODE] attribute EventHandler onwebkitpresentationmodechanged;
602 dom/Element.idl:    [NotEnumerable, Conditional=WIRELESS_PLAYBACK_TARGET] attribute EventHandler onwebkitcurrentplaybacktargetiswirelesschanged;
603 dom/Element.idl:    [NotEnumerable, Conditional=WIRELESS_PLAYBACK_TARGET] attribute EventHandler onwebkitplaybacktargetavailabilitychanged;
604
605 page/EventSource.idl:    attribute EventListener onopen;
606 page/EventSource.idl:    attribute EventListener onmessage;
607 page/EventSource.idl:    attribute EventListener onerror;
608
609 page/Performance.idl:    attribute EventListener onwebkitresourcetimingbufferfull;
610
611 workers/AbstractWorker.idl:    attribute EventListener onerror;
612
613 workers/DedicatedWorkerGlobalScope.idl:             attribute EventListener onmessage;
614
615 workers/Worker.idl:    attribute EventListener onmessage;
616
617 workers/WorkerGlobalScope.idl:    attribute EventListener onerror;
618 workers/WorkerGlobalScope.idl:    attribute EventListener onoffline;
619 workers/WorkerGlobalScope.idl:    attribute EventListener ononline;
620
621 xml/XMLHttpRequest.idl:    attribute EventListener onabort;
622 xml/XMLHttpRequest.idl:    attribute EventListener onerror;
623 xml/XMLHttpRequest.idl:    attribute EventListener onload;
624 xml/XMLHttpRequest.idl:    attribute EventListener onloadend;
625 xml/XMLHttpRequest.idl:    attribute EventListener onloadstart;
626 xml/XMLHttpRequest.idl:    attribute EventListener onprogress;
627 xml/XMLHttpRequest.idl:    [Conditional=XHR_TIMEOUT] attribute EventListener ontimeout;
628 xml/XMLHttpRequest.idl:    attribute EventListener onreadystatechange;
629
630 xml/XMLHttpRequestUpload.idl:    attribute EventListener onabort;
631 xml/XMLHttpRequestUpload.idl:    attribute EventListener onerror;
632 xml/XMLHttpRequestUpload.idl:    attribute EventListener onload;
633 xml/XMLHttpRequestUpload.idl:    attribute EventListener onloadend;
634 xml/XMLHttpRequestUpload.idl:    attribute EventListener onloadstart;
635 xml/XMLHttpRequestUpload.idl:    attribute EventListener onprogress;
636
637 ----------------
638
639 */
640
641 </script>
642 <script src="../../resources/js-test-post.js"></script>
643 </body>
644 </html>