<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[184616] trunk</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/184616">184616</a></dd>
<dt>Author</dt> <dd>weinig@apple.com</dd>
<dt>Date</dt> <dd>2015-05-19 22:41:13 -0700 (Tue, 19 May 2015)</dd>
</dl>

<h3>Log Message</h3>
<pre>Organize event handlers a bit
https://bugs.webkit.org/show_bug.cgi?id=145106

Reviewed by Darin Adler.

Source/WebCore:

- Add GlobalEventHandlers.idl (from https://html.spec.whatwg.org/multipage/webappapis.html#globaleventhandlers)
  and move all event handlers shared by Element, Document and DOMWindow there. Put all the standard defined
  event handlers at the top (commenting out the ones that aren't implemented yet) and the non-standard ones
  at the bottom.

  There is one change in behavior here. Previously, the media related event handlers where only exposed on
  Element and DOMWindow. The spec says they should also be on Document, so this adds support for that (this
  is tested in fast/dom/event-handler-attributes.html).

- Add WindowEventHandlers.idl (from https://html.spec.whatwg.org/multipage/webappapis.html#windoweventhandlers)
  and move all event handlers shared by DOMWindow, HTMLBodyElement and HTMLFrameSetElement there. Put all the 
  standard defined event handlers at the top (commenting out the ones that aren't implemented yet) and the 
  non-standard ones at the bottom.

- Group remaining event handlers in Element, Document, DOMWindow, HTMLBodyElement and HTMLFrameSetElement by
  their grouping, and add some FIXMEs for future cleaning.

* CMakeLists.txt:
* DerivedSources.make:
* WebCore.xcodeproj/project.pbxproj:
- Add GlobalEventHandlers.idl and WindowEventHandlers.idl.

* bindings/scripts/CodeGeneratorJS.pm:
(GenerateImplementation):
Add special cases for WindowEventHandler when used on DOMWindow and DocumentEventHandler when used on Document
so that event handlers using those extended attributes can be set on shared interfaces. This is used to allow
DOMWindow to implement WindowEventHandlers.

* dom/Document.idl:
Move event handlers to GlobalEventHandlers and have Document implement it. Group remaining event handlers.

* dom/Element.idl:
Move event handlers to GlobalEventHandlers and have Element implement it. Group remaining event handlers.

* dom/GlobalEventHandlers.idl:
Added.

* html/HTMLBodyElement.idl:
Move event handlers to WindowEventHandlers and have HTMLBodyElement implement it. Group remaining event handlers.
        
* html/HTMLFrameSetElement.idl:
Move event handlers to WindowEventHandlers and have HTMLFrameSetElement implement it. Group remaining event handlers.

* page/DOMWindow.idl:
Move event handlers to GlobalEventHandlers and WindowEventHandlers and have DOMWindow implement both of them. Group 
remaining event handlers.

* page/WindowEventHandlers.idl:
Added.

LayoutTests:

* fast/dom/event-handler-attributes-expected.txt:
* fast/dom/event-handler-attributes.html:
Update for putting media related event handlers on Document in addition to
Element and DOMWindow.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsChangeLog">trunk/LayoutTests/ChangeLog</a></li>
<li><a href="#trunkLayoutTestsfastdomeventhandlerattributesexpectedtxt">trunk/LayoutTests/fast/dom/event-handler-attributes-expected.txt</a></li>
<li><a href="#trunkLayoutTestsfastdomeventhandlerattributeshtml">trunk/LayoutTests/fast/dom/event-handler-attributes.html</a></li>
<li><a href="#trunkSourceWebCoreCMakeListstxt">trunk/Source/WebCore/CMakeLists.txt</a></li>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCoreDerivedSourcesmake">trunk/Source/WebCore/DerivedSources.make</a></li>
<li><a href="#trunkSourceWebCoreWebCorexcodeprojprojectpbxproj">trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj</a></li>
<li><a href="#trunkSourceWebCorebindingsjsJSEventListenercpp">trunk/Source/WebCore/bindings/js/JSEventListener.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsjsJSEventListenerh">trunk/Source/WebCore/bindings/js/JSEventListener.h</a></li>
<li><a href="#trunkSourceWebCoredomDocumentidl">trunk/Source/WebCore/dom/Document.idl</a></li>
<li><a href="#trunkSourceWebCoredomElementidl">trunk/Source/WebCore/dom/Element.idl</a></li>
<li><a href="#trunkSourceWebCorehtmlHTMLBodyElementidl">trunk/Source/WebCore/html/HTMLBodyElement.idl</a></li>
<li><a href="#trunkSourceWebCorehtmlHTMLFrameSetElementidl">trunk/Source/WebCore/html/HTMLFrameSetElement.idl</a></li>
<li><a href="#trunkSourceWebCorepageDOMWindowidl">trunk/Source/WebCore/page/DOMWindow.idl</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#trunkSourceWebCoredomGlobalEventHandlersidl">trunk/Source/WebCore/dom/GlobalEventHandlers.idl</a></li>
<li><a href="#trunkSourceWebCorepageWindowEventHandlersidl">trunk/Source/WebCore/page/WindowEventHandlers.idl</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkLayoutTestsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/ChangeLog (184615 => 184616)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/ChangeLog        2015-05-20 05:28:02 UTC (rev 184615)
+++ trunk/LayoutTests/ChangeLog        2015-05-20 05:41:13 UTC (rev 184616)
</span><span class="lines">@@ -1,3 +1,15 @@
</span><ins>+2015-05-17  Sam Weinig  &lt;sam@webkit.org&gt;
+
+        Organize event handlers a bit
+        https://bugs.webkit.org/show_bug.cgi?id=145106
+
+        Reviewed by Darin Adler.
+
+        * fast/dom/event-handler-attributes-expected.txt:
+        * fast/dom/event-handler-attributes.html:
+        Update for putting media related event handlers on Document in addition to
+        Element and DOMWindow.
+
</ins><span class="cx"> 2015-05-19  Joseph Pecoraro  &lt;pecoraro@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Web Inspector: Improve Preview for NodeList / array like collections
</span></span></pre></div>
<a id="trunkLayoutTestsfastdomeventhandlerattributesexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/fast/dom/event-handler-attributes-expected.txt (184615 => 184616)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/dom/event-handler-attributes-expected.txt        2015-05-20 05:28:02 UTC (rev 184615)
+++ trunk/LayoutTests/fast/dom/event-handler-attributes-expected.txt        2015-05-20 05:41:13 UTC (rev 184616)
</span><span class="lines">@@ -103,6 +103,8 @@
</span><span class="cx"> PASS testScriptAttribute(document, &quot;beforecut&quot;) is &quot;document&quot;
</span><span class="cx"> PASS testScriptAttribute(document, &quot;beforepaste&quot;) is &quot;document&quot;
</span><span class="cx"> PASS testScriptAttribute(document, &quot;blur&quot;) is &quot;document&quot;
</span><ins>+PASS testScriptAttribute(document, &quot;canplay&quot;) is &quot;document&quot;
+PASS testScriptAttribute(document, &quot;canplaythrough&quot;) is &quot;document&quot;
</ins><span class="cx"> PASS testScriptAttribute(document, &quot;change&quot;) is &quot;document&quot;
</span><span class="cx"> PASS testScriptAttribute(document, &quot;click&quot;) is &quot;document&quot;
</span><span class="cx"> PASS testScriptAttribute(document, &quot;contextmenu&quot;) is &quot;document&quot;
</span><span class="lines">@@ -116,6 +118,9 @@
</span><span class="cx"> PASS testScriptAttribute(document, &quot;dragover&quot;) is &quot;document&quot;
</span><span class="cx"> PASS testScriptAttribute(document, &quot;dragstart&quot;) is &quot;document&quot;
</span><span class="cx"> PASS testScriptAttribute(document, &quot;drop&quot;) is &quot;document&quot;
</span><ins>+PASS testScriptAttribute(document, &quot;durationchange&quot;) is &quot;document&quot;
+PASS testScriptAttribute(document, &quot;emptied&quot;) is &quot;document&quot;
+PASS testScriptAttribute(document, &quot;ended&quot;) is &quot;document&quot;
</ins><span class="cx"> PASS testScriptAttribute(document, &quot;error&quot;) is &quot;document&quot;
</span><span class="cx"> PASS testScriptAttribute(document, &quot;focus&quot;) is &quot;document&quot;
</span><span class="cx"> PASS testScriptAttribute(document, &quot;input&quot;) is &quot;document&quot;
</span><span class="lines">@@ -124,6 +129,9 @@
</span><span class="cx"> PASS testScriptAttribute(document, &quot;keypress&quot;) is &quot;document&quot;
</span><span class="cx"> PASS testScriptAttribute(document, &quot;keyup&quot;) is &quot;document&quot;
</span><span class="cx"> PASS testScriptAttribute(document, &quot;load&quot;) is &quot;document&quot;
</span><ins>+PASS testScriptAttribute(document, &quot;loadeddata&quot;) is &quot;document&quot;
+PASS testScriptAttribute(document, &quot;loadedmetadata&quot;) is &quot;document&quot;
+PASS testScriptAttribute(document, &quot;loadstart&quot;) is &quot;document&quot;
</ins><span class="cx"> PASS testScriptAttribute(document, &quot;mousedown&quot;) is &quot;document&quot;
</span><span class="cx"> PASS testScriptAttribute(document, &quot;mouseenter&quot;) is &quot;document&quot;
</span><span class="cx"> PASS testScriptAttribute(document, &quot;mouseleave&quot;) is &quot;document&quot;
</span><span class="lines">@@ -133,14 +141,26 @@
</span><span class="cx"> PASS testScriptAttribute(document, &quot;mouseup&quot;) is &quot;document&quot;
</span><span class="cx"> PASS testScriptAttribute(document, &quot;mousewheel&quot;) is &quot;document&quot;
</span><span class="cx"> PASS testScriptAttribute(document, &quot;paste&quot;) is &quot;document&quot;
</span><ins>+PASS testScriptAttribute(document, &quot;pause&quot;) is &quot;document&quot;
+PASS testScriptAttribute(document, &quot;play&quot;) is &quot;document&quot;
+PASS testScriptAttribute(document, &quot;playing&quot;) is &quot;document&quot;
+PASS testScriptAttribute(document, &quot;progress&quot;) is &quot;document&quot;
+PASS testScriptAttribute(document, &quot;ratechange&quot;) is &quot;document&quot;
</ins><span class="cx"> PASS testScriptAttribute(document, &quot;readystatechange&quot;) is &quot;document&quot;
</span><span class="cx"> PASS testScriptAttribute(document, &quot;reset&quot;) is &quot;document&quot;
</span><span class="cx"> PASS testScriptAttribute(document, &quot;scroll&quot;) is &quot;document&quot;
</span><span class="cx"> PASS testScriptAttribute(document, &quot;search&quot;) is &quot;document&quot;
</span><ins>+PASS testScriptAttribute(document, &quot;seeked&quot;) is &quot;document&quot;
+PASS testScriptAttribute(document, &quot;seeking&quot;) is &quot;document&quot;
</ins><span class="cx"> PASS testScriptAttribute(document, &quot;select&quot;) is &quot;document&quot;
</span><span class="cx"> PASS testScriptAttribute(document, &quot;selectionchange&quot;) is &quot;document&quot;
</span><span class="cx"> PASS testScriptAttribute(document, &quot;selectstart&quot;) is &quot;document&quot;
</span><ins>+PASS testScriptAttribute(document, &quot;stalled&quot;) is &quot;document&quot;
</ins><span class="cx"> PASS testScriptAttribute(document, &quot;submit&quot;) is &quot;document&quot;
</span><ins>+PASS testScriptAttribute(document, &quot;suspend&quot;) is &quot;document&quot;
+PASS testScriptAttribute(document, &quot;timeupdate&quot;) is &quot;document&quot;
+PASS testScriptAttribute(document, &quot;volumechange&quot;) is &quot;document&quot;
+PASS testScriptAttribute(document, &quot;waiting&quot;) is &quot;document&quot;
</ins><span class="cx"> PASS testScriptAttribute(document, &quot;wheel&quot;) is &quot;document&quot;
</span><span class="cx"> 
</span><span class="cx"> Event names we expect not to be able to set on the document
</span><span class="lines">@@ -150,40 +170,20 @@
</span><span class="cx"> PASS testScriptAttribute(document, &quot;animationstart&quot;) is &quot;none&quot;
</span><span class="cx"> PASS testScriptAttribute(document, &quot;beforeload&quot;) is &quot;none&quot;
</span><span class="cx"> PASS testScriptAttribute(document, &quot;beforeunload&quot;) is &quot;none&quot;
</span><del>-PASS testScriptAttribute(document, &quot;canplay&quot;) is &quot;none&quot;
-PASS testScriptAttribute(document, &quot;canplaythrough&quot;) is &quot;none&quot;
-PASS testScriptAttribute(document, &quot;durationchange&quot;) is &quot;none&quot;
-PASS testScriptAttribute(document, &quot;emptied&quot;) is &quot;none&quot;
-PASS testScriptAttribute(document, &quot;ended&quot;) is &quot;none&quot;
</del><span class="cx"> PASS testScriptAttribute(document, &quot;focusin&quot;) is &quot;none&quot;
</span><span class="cx"> PASS testScriptAttribute(document, &quot;focusout&quot;) is &quot;none&quot;
</span><span class="cx"> PASS testScriptAttribute(document, &quot;hashchange&quot;) is &quot;none&quot;
</span><del>-PASS testScriptAttribute(document, &quot;loadeddata&quot;) is &quot;none&quot;
-PASS testScriptAttribute(document, &quot;loadedmetadata&quot;) is &quot;none&quot;
-PASS testScriptAttribute(document, &quot;loadstart&quot;) is &quot;none&quot;
</del><span class="cx"> PASS testScriptAttribute(document, &quot;message&quot;) is &quot;none&quot;
</span><span class="cx"> PASS testScriptAttribute(document, &quot;noneventname&quot;) is &quot;none&quot;
</span><span class="cx"> PASS testScriptAttribute(document, &quot;offline&quot;) is &quot;none&quot;
</span><span class="cx"> PASS testScriptAttribute(document, &quot;online&quot;) is &quot;none&quot;
</span><span class="cx"> PASS testScriptAttribute(document, &quot;pagehide&quot;) is &quot;none&quot;
</span><span class="cx"> PASS testScriptAttribute(document, &quot;pageshow&quot;) is &quot;none&quot;
</span><del>-PASS testScriptAttribute(document, &quot;pause&quot;) is &quot;none&quot;
-PASS testScriptAttribute(document, &quot;play&quot;) is &quot;none&quot;
-PASS testScriptAttribute(document, &quot;playing&quot;) is &quot;none&quot;
</del><span class="cx"> PASS testScriptAttribute(document, &quot;popstate&quot;) is &quot;none&quot;
</span><del>-PASS testScriptAttribute(document, &quot;progress&quot;) is &quot;none&quot;
-PASS testScriptAttribute(document, &quot;ratechange&quot;) is &quot;none&quot;
</del><span class="cx"> PASS testScriptAttribute(document, &quot;resize&quot;) is &quot;none&quot;
</span><del>-PASS testScriptAttribute(document, &quot;seeked&quot;) is &quot;none&quot;
-PASS testScriptAttribute(document, &quot;seeking&quot;) is &quot;none&quot;
-PASS testScriptAttribute(document, &quot;stalled&quot;) is &quot;none&quot;
</del><span class="cx"> PASS testScriptAttribute(document, &quot;storage&quot;) is &quot;none&quot;
</span><del>-PASS testScriptAttribute(document, &quot;suspend&quot;) is &quot;none&quot;
-PASS testScriptAttribute(document, &quot;timeupdate&quot;) is &quot;none&quot;
</del><span class="cx"> PASS testScriptAttribute(document, &quot;transitionend&quot;) is &quot;none&quot;
</span><span class="cx"> PASS testScriptAttribute(document, &quot;unload&quot;) is &quot;none&quot;
</span><del>-PASS testScriptAttribute(document, &quot;volumechange&quot;) is &quot;none&quot;
-PASS testScriptAttribute(document, &quot;waiting&quot;) is &quot;none&quot;
</del><span class="cx"> PASS testScriptAttribute(document, &quot;webkitanimationend&quot;) is &quot;none&quot;
</span><span class="cx"> PASS testScriptAttribute(document, &quot;webkitanimationiteration&quot;) is &quot;none&quot;
</span><span class="cx"> PASS testScriptAttribute(document, &quot;webkitanimationstart&quot;) is &quot;none&quot;
</span></span></pre></div>
<a id="trunkLayoutTestsfastdomeventhandlerattributeshtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/fast/dom/event-handler-attributes.html (184615 => 184616)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/dom/event-handler-attributes.html        2015-05-20 05:28:02 UTC (rev 184615)
+++ trunk/LayoutTests/fast/dom/event-handler-attributes.html        2015-05-20 05:41:13 UTC (rev 184616)
</span><span class="lines">@@ -12,12 +12,8 @@
</span><span class="cx">     &quot;webkittransitionend&quot;: &quot;webkitTransitionEnd&quot;,
</span><span class="cx"> };
</span><span class="cx"> 
</span><del>-const windowEvents = [
</del><ins>+const eventsInGlobalEventHandlers = [
</ins><span class="cx">     &quot;abort&quot;,
</span><del>-    &quot;animationend&quot;,
-    &quot;animationiteration&quot;,
-    &quot;animationstart&quot;,
-    &quot;beforeunload&quot;,
</del><span class="cx">     &quot;blur&quot;,
</span><span class="cx">     &quot;canplay&quot;,
</span><span class="cx">     &quot;canplaythrough&quot;,
</span><span class="lines">@@ -37,7 +33,6 @@
</span><span class="cx">     &quot;ended&quot;,
</span><span class="cx">     &quot;error&quot;,
</span><span class="cx">     &quot;focus&quot;,
</span><del>-    &quot;hashchange&quot;,
</del><span class="cx">     &quot;input&quot;,
</span><span class="cx">     &quot;invalid&quot;,
</span><span class="cx">     &quot;keydown&quot;,
</span><span class="lines">@@ -47,7 +42,6 @@
</span><span class="cx">     &quot;loadeddata&quot;,
</span><span class="cx">     &quot;loadedmetadata&quot;,
</span><span class="cx">     &quot;loadstart&quot;,
</span><del>-    &quot;message&quot;,
</del><span class="cx">     &quot;mousedown&quot;,
</span><span class="cx">     &quot;mouseenter&quot;,
</span><span class="cx">     &quot;mouseleave&quot;,
</span><span class="lines">@@ -56,162 +50,78 @@
</span><span class="cx">     &quot;mouseover&quot;,
</span><span class="cx">     &quot;mouseup&quot;,
</span><span class="cx">     &quot;mousewheel&quot;,
</span><del>-    &quot;offline&quot;,
-    &quot;online&quot;,
-    &quot;pagehide&quot;,
-    &quot;pageshow&quot;,
</del><span class="cx">     &quot;pause&quot;,
</span><span class="cx">     &quot;play&quot;,
</span><span class="cx">     &quot;playing&quot;,
</span><del>-    &quot;popstate&quot;,
</del><span class="cx">     &quot;progress&quot;,
</span><span class="cx">     &quot;ratechange&quot;,
</span><span class="cx">     &quot;reset&quot;,
</span><del>-    &quot;resize&quot;,
</del><span class="cx">     &quot;scroll&quot;,
</span><del>-    &quot;search&quot;,
</del><span class="cx">     &quot;seeked&quot;,
</span><span class="cx">     &quot;seeking&quot;,
</span><span class="cx">     &quot;select&quot;,
</span><span class="cx">     &quot;stalled&quot;,
</span><del>-    &quot;storage&quot;,
</del><span class="cx">     &quot;submit&quot;,
</span><span class="cx">     &quot;suspend&quot;,
</span><span class="cx">     &quot;timeupdate&quot;,
</span><del>-    &quot;transitionend&quot;,
-    &quot;unload&quot;,
</del><span class="cx">     &quot;volumechange&quot;,
</span><span class="cx">     &quot;waiting&quot;,
</span><del>-    &quot;webkitanimationend&quot;,
-    &quot;webkitanimationiteration&quot;,
-    &quot;webkitanimationstart&quot;,
-    &quot;webkittransitionend&quot;,
-    &quot;wheel&quot;,
</del><ins>+    &quot;search&quot;,
+    &quot;wheel&quot;
</ins><span class="cx"> ];
</span><span class="cx"> 
</span><del>-const documentEvents = [
-    &quot;abort&quot;,
</del><ins>+const eventsInWindowEventHandlers = [
+    &quot;beforeunload&quot;,
+    &quot;hashchange&quot;,
+    &quot;message&quot;,
+    &quot;offline&quot;,
+    &quot;online&quot;,
+    &quot;pagehide&quot;,
+    &quot;pageshow&quot;,
+    &quot;popstate&quot;,
+    &quot;storage&quot;,
+    &quot;unload&quot;,
+];
+
+const elementAndDocumentEvents = [
</ins><span class="cx">     &quot;beforecopy&quot;,
</span><span class="cx">     &quot;beforecut&quot;,
</span><span class="cx">     &quot;beforepaste&quot;,
</span><del>-    &quot;blur&quot;,
-    &quot;change&quot;,
-    &quot;click&quot;,
-    &quot;contextmenu&quot;,
</del><span class="cx">     &quot;copy&quot;,
</span><span class="cx">     &quot;cut&quot;,
</span><del>-    &quot;dblclick&quot;,
-    &quot;drag&quot;,
-    &quot;dragend&quot;,
-    &quot;dragenter&quot;,
-    &quot;dragleave&quot;,
-    &quot;dragover&quot;,
-    &quot;dragstart&quot;,
-    &quot;drop&quot;,
-    &quot;error&quot;,
-    &quot;focus&quot;,
-    &quot;input&quot;,
-    &quot;invalid&quot;,
-    &quot;keydown&quot;,
-    &quot;keypress&quot;,
-    &quot;keyup&quot;,
-    &quot;load&quot;,
-    &quot;mousedown&quot;,
-    &quot;mouseenter&quot;,
-    &quot;mouseleave&quot;,
-    &quot;mousemove&quot;,
-    &quot;mouseout&quot;,
-    &quot;mouseover&quot;,
-    &quot;mouseup&quot;,
-    &quot;mousewheel&quot;,
</del><span class="cx">     &quot;paste&quot;,
</span><del>-    &quot;readystatechange&quot;,
-    &quot;reset&quot;,
-    &quot;scroll&quot;,
-    &quot;search&quot;,
-    &quot;select&quot;,
-    &quot;selectionchange&quot;,
</del><span class="cx">     &quot;selectstart&quot;,
</span><del>-    &quot;submit&quot;,
-    &quot;wheel&quot;,
</del><span class="cx"> ];
</span><span class="cx"> 
</span><del>-const elementEvents = [
-    &quot;abort&quot;,
</del><ins>+const elementAndWindowEvents = [
</ins><span class="cx">     &quot;animationend&quot;,
</span><span class="cx">     &quot;animationiteration&quot;,
</span><span class="cx">     &quot;animationstart&quot;,
</span><del>-    &quot;beforecopy&quot;,
-    &quot;beforecut&quot;,
-    &quot;beforeload&quot;,
-    &quot;beforepaste&quot;,
-    &quot;blur&quot;,
-    &quot;canplay&quot;,
-    &quot;canplaythrough&quot;,
-    &quot;change&quot;,
-    &quot;click&quot;,
-    &quot;contextmenu&quot;,
-    &quot;copy&quot;,
-    &quot;cut&quot;,
-    &quot;dblclick&quot;,
-    &quot;drag&quot;,
-    &quot;dragend&quot;,
-    &quot;dragenter&quot;,
-    &quot;dragleave&quot;,
-    &quot;dragover&quot;,
-    &quot;dragstart&quot;,
-    &quot;drop&quot;,
-    &quot;durationchange&quot;,
-    &quot;emptied&quot;,
-    &quot;ended&quot;,
-    &quot;error&quot;,
-    &quot;focus&quot;,
-    &quot;focusin&quot;,
-    &quot;focusout&quot;,
-    &quot;input&quot;,
-    &quot;invalid&quot;,
-    &quot;keydown&quot;,
-    &quot;keypress&quot;,
-    &quot;keyup&quot;,
-    &quot;load&quot;,
-    &quot;loadeddata&quot;,
-    &quot;loadedmetadata&quot;,
-    &quot;loadstart&quot;,
-    &quot;mousedown&quot;,
-    &quot;mouseenter&quot;,
-    &quot;mouseleave&quot;,
-    &quot;mousemove&quot;,
-    &quot;mouseout&quot;,
-    &quot;mouseover&quot;,
-    &quot;mouseup&quot;,
-    &quot;mousewheel&quot;,
-    &quot;paste&quot;,
-    &quot;pause&quot;,
-    &quot;play&quot;,
-    &quot;playing&quot;,
-    &quot;progress&quot;,
-    &quot;ratechange&quot;,
-    &quot;reset&quot;,
-    &quot;scroll&quot;,
-    &quot;search&quot;,
-    &quot;seeked&quot;,
-    &quot;seeking&quot;,
-    &quot;select&quot;,
-    &quot;selectstart&quot;,
-    &quot;stalled&quot;,
-    &quot;submit&quot;,
-    &quot;suspend&quot;,
-    &quot;timeupdate&quot;,
</del><span class="cx">     &quot;transitionend&quot;,
</span><del>-    &quot;volumechange&quot;,
-    &quot;waiting&quot;,
</del><span class="cx">     &quot;webkitanimationend&quot;,
</span><span class="cx">     &quot;webkitanimationiteration&quot;,
</span><span class="cx">     &quot;webkitanimationstart&quot;,
</span><del>-    &quot;webkittransitionend&quot;,
-    &quot;wheel&quot;,
</del><ins>+    &quot;webkittransitionend&quot;
</ins><span class="cx"> ];
</span><span class="cx"> 
</span><ins>+const uniqueWindowEvents = [
+    &quot;resize&quot;
+];
+
+const uniqueDocumentEvents = [
+    &quot;selectionchange&quot;,
+    &quot;readystatechange&quot;
+];
+
+const uniqueElementEvents = [
+    &quot;beforeload&quot;
+];
+
+const elementBodyAndFrameSetEvents = [
+    &quot;focusin&quot;,
+    &quot;focusout&quot;
+];
+
</ins><span class="cx"> const bodyElementWindowForwardedEvents = [
</span><span class="cx">     &quot;beforeunload&quot;,
</span><span class="cx">     &quot;blur&quot;,
</span><span class="lines">@@ -336,6 +246,10 @@
</span><span class="cx">     });
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+const windowEvents = arrayUnion(eventsInGlobalEventHandlers, eventsInWindowEventHandlers, elementAndWindowEvents, uniqueWindowEvents);
+const documentEvents = arrayUnion(eventsInGlobalEventHandlers, elementAndDocumentEvents, uniqueDocumentEvents);
+const elementEvents = arrayUnion(eventsInGlobalEventHandlers, elementAndDocumentEvents, elementAndWindowEvents, elementBodyAndFrameSetEvents, uniqueElementEvents);
+
</ins><span class="cx"> const allEventNames = arrayUnion(windowEvents, documentEvents, elementEvents, bodyElementWindowForwardedEvents, bodyElementDocumentForwardedEvents, nonEventNames);
</span><span class="cx"> 
</span><span class="cx"> var sectionOpen = false;
</span></span></pre></div>
<a id="trunkSourceWebCoreCMakeListstxt"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/CMakeLists.txt (184615 => 184616)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/CMakeLists.txt        2015-05-20 05:28:02 UTC (rev 184615)
+++ trunk/Source/WebCore/CMakeLists.txt        2015-05-20 05:41:13 UTC (rev 184616)
</span><span class="lines">@@ -400,6 +400,7 @@
</span><span class="cx">     dom/EventException.idl
</span><span class="cx">     dom/EventTarget.idl
</span><span class="cx">     dom/FocusEvent.idl
</span><ins>+    dom/GlobalEventHandlers.idl
</ins><span class="cx">     dom/HashChangeEvent.idl
</span><span class="cx">     dom/KeyboardEvent.idl
</span><span class="cx">     dom/MessageChannel.idl
</span><span class="lines">@@ -630,6 +631,7 @@
</span><span class="cx">     page/UserMessageHandlersNamespace.idl
</span><span class="cx">     page/UserMessageHandler.idl
</span><span class="cx">     page/WindowBase64.idl
</span><ins>+    page/WindowEventHandlers.idl
</ins><span class="cx">     page/WindowTimers.idl
</span><span class="cx">     page/WorkerNavigator.idl
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (184615 => 184616)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2015-05-20 05:28:02 UTC (rev 184615)
+++ trunk/Source/WebCore/ChangeLog        2015-05-20 05:41:13 UTC (rev 184616)
</span><span class="lines">@@ -1,3 +1,60 @@
</span><ins>+2015-05-17  Sam Weinig  &lt;sam@webkit.org&gt;
+
+        Organize event handlers a bit
+        https://bugs.webkit.org/show_bug.cgi?id=145106
+
+        Reviewed by Darin Adler.
+
+        - Add GlobalEventHandlers.idl (from https://html.spec.whatwg.org/multipage/webappapis.html#globaleventhandlers)
+          and move all event handlers shared by Element, Document and DOMWindow there. Put all the standard defined
+          event handlers at the top (commenting out the ones that aren't implemented yet) and the non-standard ones
+          at the bottom.
+
+          There is one change in behavior here. Previously, the media related event handlers where only exposed on
+          Element and DOMWindow. The spec says they should also be on Document, so this adds support for that (this
+          is tested in fast/dom/event-handler-attributes.html).
+
+        - Add WindowEventHandlers.idl (from https://html.spec.whatwg.org/multipage/webappapis.html#windoweventhandlers)
+          and move all event handlers shared by DOMWindow, HTMLBodyElement and HTMLFrameSetElement there. Put all the 
+          standard defined event handlers at the top (commenting out the ones that aren't implemented yet) and the 
+          non-standard ones at the bottom.
+
+        - Group remaining event handlers in Element, Document, DOMWindow, HTMLBodyElement and HTMLFrameSetElement by
+          their grouping, and add some FIXMEs for future cleaning.
+
+        * CMakeLists.txt:
+        * DerivedSources.make:
+        * WebCore.xcodeproj/project.pbxproj:
+        - Add GlobalEventHandlers.idl and WindowEventHandlers.idl.
+
+        * bindings/scripts/CodeGeneratorJS.pm:
+        (GenerateImplementation):
+        Add special cases for WindowEventHandler when used on DOMWindow and DocumentEventHandler when used on Document
+        so that event handlers using those extended attributes can be set on shared interfaces. This is used to allow
+        DOMWindow to implement WindowEventHandlers.
+
+        * dom/Document.idl:
+        Move event handlers to GlobalEventHandlers and have Document implement it. Group remaining event handlers.
+
+        * dom/Element.idl:
+        Move event handlers to GlobalEventHandlers and have Element implement it. Group remaining event handlers.
+
+        * dom/GlobalEventHandlers.idl:
+        Added.
+
+        * html/HTMLBodyElement.idl:
+        Move event handlers to WindowEventHandlers and have HTMLBodyElement implement it. Group remaining event handlers.
+        
+        * html/HTMLFrameSetElement.idl:
+        Move event handlers to WindowEventHandlers and have HTMLFrameSetElement implement it. Group remaining event handlers.
+
+        * page/DOMWindow.idl:
+        Move event handlers to GlobalEventHandlers and WindowEventHandlers and have DOMWindow implement both of them. Group 
+        remaining event handlers.
+
+        * page/WindowEventHandlers.idl:
+        Added.
+
</ins><span class="cx"> 2015-05-19  Antti Koivisto  &lt;antti@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Crash under WebCore::invalidateStyleRecursively
</span></span></pre></div>
<a id="trunkSourceWebCoreDerivedSourcesmake"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/DerivedSources.make (184615 => 184616)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/DerivedSources.make        2015-05-20 05:28:02 UTC (rev 184615)
+++ trunk/Source/WebCore/DerivedSources.make        2015-05-20 05:41:13 UTC (rev 184616)
</span><span class="lines">@@ -284,6 +284,7 @@
</span><span class="cx">     $(WebCore)/dom/EventListener.idl \
</span><span class="cx">     $(WebCore)/dom/EventTarget.idl \
</span><span class="cx">     $(WebCore)/dom/FocusEvent.idl \
</span><ins>+    $(WebCore)/dom/GlobalEventHandlers.idl \
</ins><span class="cx">     $(WebCore)/dom/HashChangeEvent.idl \
</span><span class="cx">     $(WebCore)/dom/KeyboardEvent.idl \
</span><span class="cx">     $(WebCore)/dom/MessageChannel.idl \
</span><span class="lines">@@ -502,6 +503,7 @@
</span><span class="cx">     $(WebCore)/page/UserMessageHandlersNamespace.idl \
</span><span class="cx">     $(WebCore)/page/UserMessageHandler.idl \
</span><span class="cx">     $(WebCore)/page/WindowBase64.idl \
</span><ins>+    $(WebCore)/page/WindowEventHandlers.idl \
</ins><span class="cx">     $(WebCore)/page/WindowTimers.idl \
</span><span class="cx">     $(WebCore)/page/WorkerNavigator.idl \
</span><span class="cx">     $(WebCore)/plugins/DOMMimeType.idl \
</span></span></pre></div>
<a id="trunkSourceWebCoreWebCorexcodeprojprojectpbxproj"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj (184615 => 184616)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj        2015-05-20 05:28:02 UTC (rev 184615)
+++ trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj        2015-05-20 05:41:13 UTC (rev 184616)
</span><span class="lines">@@ -9798,6 +9798,8 @@
</span><span class="cx">                 7C3B79701908757B00B47A2D /* UserMessageHandler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UserMessageHandler.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 7C3E510818DF8F3500C112F7 /* HTMLConverter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HTMLConverter.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 7C3E510918DF8F3500C112F7 /* HTMLConverter.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = HTMLConverter.mm; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><ins>+                7C4189AB1B07C170000FA757 /* GlobalEventHandlers.idl */ = {isa = PBXFileReference; lastKnownFileType = text; path = GlobalEventHandlers.idl; sourceTree = &quot;&lt;group&gt;&quot;; };
+                7C4189AC1B07CBF2000FA757 /* WindowEventHandlers.idl */ = {isa = PBXFileReference; lastKnownFileType = text; path = WindowEventHandlers.idl; sourceTree = &quot;&lt;group&gt;&quot;; };
</ins><span class="cx">                 7C48A6CE191C9D6500026674 /* WebKitNamespace.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WebKitNamespace.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 7C48A6CF191C9D6500026674 /* WebKitNamespace.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebKitNamespace.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 7C48A6D2191C9D8E00026674 /* WebKitNamespace.idl */ = {isa = PBXFileReference; lastKnownFileType = text; path = WebKitNamespace.idl; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="lines">@@ -16918,6 +16920,7 @@
</span><span class="cx">                                 1403B99609EB13AF00797C7F /* DOMWindow.cpp */,
</span><span class="cx">                                 1403B99509EB13AF00797C7F /* DOMWindow.h */,
</span><span class="cx">                                 1403B90C09EB124500797C7F /* DOMWindow.idl */,
</span><ins>+                                7C4189AC1B07CBF2000FA757 /* WindowEventHandlers.idl */,
</ins><span class="cx">                                 517FBA17151AA71B00B57959 /* DOMWindowExtension.cpp */,
</span><span class="cx">                                 517FBA18151AA71B00B57959 /* DOMWindowExtension.h */,
</span><span class="cx">                                 97D2AD0114B823A60093DF32 /* DOMWindowProperty.cpp */,
</span><span class="lines">@@ -23094,6 +23097,7 @@
</span><span class="cx">                                 A853123C11D0471B00D4D077 /* FragmentScriptingPermission.h */,
</span><span class="cx">                                 0720B09E14D3323500642955 /* GenericEventQueue.cpp */,
</span><span class="cx">                                 0720B09F14D3323500642955 /* GenericEventQueue.h */,
</span><ins>+                                7C4189AB1B07C170000FA757 /* GlobalEventHandlers.idl */,
</ins><span class="cx">                                 2442BBF81194C9D300D49469 /* HashChangeEvent.h */,
</span><span class="cx">                                 8482B7441198C32E00BFB005 /* HashChangeEvent.idl */,
</span><span class="cx">                                 45BAC2AF1360BBAB005DA258 /* IconURL.h */,
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsjsJSEventListenercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/js/JSEventListener.cpp (184615 => 184616)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/js/JSEventListener.cpp        2015-05-20 05:28:02 UTC (rev 184615)
+++ trunk/Source/WebCore/bindings/js/JSEventListener.cpp        2015-05-20 05:41:13 UTC (rev 184616)
</span><span class="lines">@@ -217,6 +217,16 @@
</span><span class="cx">     element.document().setWindowAttributeEventListener(eventType, createEventListenerForEventHandlerAttribute(state, value, *wrapper.globalObject()));
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+JSC::JSValue windowEventHandlerAttribute(DOMWindow&amp; window, const AtomicString&amp; eventType)
+{
+    return eventHandlerAttribute(window, eventType);
+}
+
+void setWindowEventHandlerAttribute(JSC::ExecState&amp; state, JSC::JSObject&amp; wrapper, DOMWindow&amp; window, const AtomicString&amp; eventType, JSC::JSValue value)
+{
+    setEventHandlerAttribute(state, wrapper, window, eventType, value);
+}
+
</ins><span class="cx"> JSC::JSValue documentEventHandlerAttribute(HTMLElement&amp; element, const AtomicString&amp; eventType)
</span><span class="cx"> {
</span><span class="cx">     auto&amp; document = element.document();
</span><span class="lines">@@ -232,4 +242,14 @@
</span><span class="cx">     document.setAttributeEventListener(eventType, createEventListenerForEventHandlerAttribute(state, value, *documentWrapper));
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+JSC::JSValue documentEventHandlerAttribute(Document&amp; document, const AtomicString&amp; eventType)
+{
+    return eventHandlerAttribute(document, eventType);
+}
+
+void setDocumentEventHandlerAttribute(JSC::ExecState&amp; state, JSC::JSObject&amp; wrapper, Document&amp; document, const AtomicString&amp; eventType, JSC::JSValue value)
+{
+    setEventHandlerAttribute(state, wrapper, document, eventType, value);
+}
+
</ins><span class="cx"> } // namespace WebCore
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsjsJSEventListenerh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/js/JSEventListener.h (184615 => 184616)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/js/JSEventListener.h        2015-05-20 05:28:02 UTC (rev 184615)
+++ trunk/Source/WebCore/bindings/js/JSEventListener.h        2015-05-20 05:41:13 UTC (rev 184616)
</span><span class="lines">@@ -29,6 +29,7 @@
</span><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><ins>+class DOMWindow;
</ins><span class="cx"> class EventTarget;
</span><span class="cx"> class HTMLElement;
</span><span class="cx"> class JSDOMGlobalObject;
</span><span class="lines">@@ -84,10 +85,14 @@
</span><span class="cx"> // Like the functions above, but for attributes that forward event handlers to the window object rather than setting them on the target.
</span><span class="cx"> JSC::JSValue windowEventHandlerAttribute(HTMLElement&amp;, const AtomicString&amp; eventType);
</span><span class="cx"> void setWindowEventHandlerAttribute(JSC::ExecState&amp;, JSC::JSObject&amp;, HTMLElement&amp;, const AtomicString&amp; eventType, JSC::JSValue);
</span><ins>+JSC::JSValue windowEventHandlerAttribute(DOMWindow&amp;, const AtomicString&amp; eventType);
+void setWindowEventHandlerAttribute(JSC::ExecState&amp;, JSC::JSObject&amp;, DOMWindow&amp;, const AtomicString&amp; eventType, JSC::JSValue);
</ins><span class="cx"> 
</span><span class="cx"> // Like the functions above, but for attributes that forward event handlers to the document rather than setting them on the target.
</span><span class="cx"> JSC::JSValue documentEventHandlerAttribute(HTMLElement&amp;, const AtomicString&amp; eventType);
</span><span class="cx"> void setDocumentEventHandlerAttribute(JSC::ExecState&amp;, JSC::JSObject&amp;, HTMLElement&amp;, const AtomicString&amp; eventType, JSC::JSValue);
</span><ins>+JSC::JSValue documentEventHandlerAttribute(Document&amp;, const AtomicString&amp; eventType);
+void setDocumentEventHandlerAttribute(JSC::ExecState&amp;, JSC::JSObject&amp;, Document&amp;, const AtomicString&amp; eventType, JSC::JSValue);
</ins><span class="cx"> 
</span><span class="cx"> Ref&lt;JSEventListener&gt; createJSEventListenerForAdd(JSC::ExecState&amp;, JSC::JSObject&amp; listener, JSC::JSObject&amp; wrapper);
</span><span class="cx"> Ref&lt;JSEventListener&gt; createJSEventListenerForRemove(JSC::ExecState&amp;, JSC::JSObject&amp; listener, JSC::JSObject&amp; wrapper);
</span></span></pre></div>
<a id="trunkSourceWebCoredomDocumentidl"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/dom/Document.idl (184615 => 184616)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/dom/Document.idl        2015-05-20 05:28:02 UTC (rev 184615)
+++ trunk/Source/WebCore/dom/Document.idl        2015-05-20 05:41:13 UTC (rev 184616)
</span><span class="lines">@@ -239,74 +239,6 @@
</span><span class="cx">     [Conditional=FONT_LOAD_EVENTS] readonly attribute FontLoader fonts;
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><del>-    [NotEnumerable] attribute EventHandler onabort;
-    [NotEnumerable] attribute EventHandler onbeforecopy;
-    [NotEnumerable] attribute EventHandler onbeforecut;
-    [NotEnumerable] attribute EventHandler onbeforepaste;
-    [NotEnumerable] attribute EventHandler onblur;
-    [NotEnumerable] attribute EventHandler onchange;
-    [NotEnumerable] attribute EventHandler onclick;
-    [NotEnumerable] attribute EventHandler oncontextmenu;
-    [NotEnumerable] attribute EventHandler oncopy;
-    [NotEnumerable] attribute EventHandler oncut;
-    [NotEnumerable] attribute EventHandler ondblclick;
-    [NotEnumerable] attribute EventHandler ondrag;
-    [NotEnumerable] attribute EventHandler ondragend;
-    [NotEnumerable] attribute EventHandler ondragenter;
-    [NotEnumerable] attribute EventHandler ondragleave;
-    [NotEnumerable] attribute EventHandler ondragover;
-    [NotEnumerable] attribute EventHandler ondragstart;
-    [NotEnumerable] attribute EventHandler ondrop;
-    [NotEnumerable] attribute EventHandler onerror;
-    [NotEnumerable] attribute EventHandler onfocus;
-    [NotEnumerable] attribute EventHandler oninput;
-    [NotEnumerable] attribute EventHandler oninvalid;
-    [NotEnumerable] attribute EventHandler onkeydown;
-    [NotEnumerable] attribute EventHandler onkeypress;
-    [NotEnumerable] attribute EventHandler onkeyup;
-    [NotEnumerable] attribute EventHandler onload;
-    [NotEnumerable] attribute EventHandler onmousedown;
-    [NotEnumerable] attribute EventHandler onmouseenter;
-    [NotEnumerable] attribute EventHandler onmouseleave;
-    [NotEnumerable] attribute EventHandler onmousemove;
-    [NotEnumerable] attribute EventHandler onmouseout;
-    [NotEnumerable] attribute EventHandler onmouseover;
-    [NotEnumerable] attribute EventHandler onmouseup;
-    [NotEnumerable] attribute EventHandler onmousewheel;
-    [NotEnumerable] attribute EventHandler onpaste;
-    [NotEnumerable] attribute EventHandler onreadystatechange;
-    [NotEnumerable] attribute EventHandler onreset;
-    [NotEnumerable] attribute EventHandler onscroll;
-    [NotEnumerable] attribute EventHandler onsearch;
-    [NotEnumerable] attribute EventHandler onselect;
-    [NotEnumerable] attribute EventHandler onselectionchange;
-    [NotEnumerable] attribute EventHandler onselectstart;
-    [NotEnumerable] attribute EventHandler onsubmit;
-    [NotEnumerable] attribute EventHandler onwheel;
-
-    [NotEnumerable, Conditional=CSP_NEXT] attribute EventHandler onsecuritypolicyviolation;
-
-    [NotEnumerable, Conditional=TOUCH_EVENTS] attribute EventHandler ontouchcancel;
-    [NotEnumerable, Conditional=TOUCH_EVENTS] attribute EventHandler ontouchend;
-    [NotEnumerable, Conditional=TOUCH_EVENTS] attribute EventHandler ontouchmove;
-    [NotEnumerable, Conditional=TOUCH_EVENTS] attribute EventHandler ontouchstart;
-
-    [NotEnumerable, Conditional=WILL_REVEAL_EDGE_EVENTS] attribute EventHandler onwebkitwillrevealbottom;
-    [NotEnumerable, Conditional=WILL_REVEAL_EDGE_EVENTS] attribute EventHandler onwebkitwillrevealleft;
-    [NotEnumerable, Conditional=WILL_REVEAL_EDGE_EVENTS] attribute EventHandler onwebkitwillrevealright;
-    [NotEnumerable, Conditional=WILL_REVEAL_EDGE_EVENTS] attribute EventHandler onwebkitwillrevealtop;
-
-    [NotEnumerable, Conditional=MOUSE_FORCE_EVENTS] attribute EventHandler onwebkitmouseforcechanged;
-    [NotEnumerable, Conditional=MOUSE_FORCE_EVENTS] attribute EventHandler onwebkitmouseforcedown;
-    [NotEnumerable, Conditional=MOUSE_FORCE_EVENTS] attribute EventHandler onwebkitmouseforceup;
-    [NotEnumerable, Conditional=MOUSE_FORCE_EVENTS] attribute EventHandler onwebkitmouseforcewillbegin;
-
-    [NotEnumerable, Conditional=FULLSCREEN_API] attribute EventHandler onwebkitfullscreenchange;
-    [NotEnumerable, Conditional=FULLSCREEN_API] attribute EventHandler onwebkitfullscreenerror;
-
-    [NotEnumerable, Conditional=POINTER_LOCK] attribute EventHandler onpointerlockchange;
-    [NotEnumerable, Conditional=POINTER_LOCK] attribute EventHandler onpointerlockerror;
-
</del><span class="cx"> #if defined(ENABLE_IOS_TOUCH_EVENTS) &amp;&amp; ENABLE_IOS_TOUCH_EVENTS
</span><span class="cx"> #include &lt;WebKitAdditions/DocumentIOS.idl&gt;
</span><span class="cx"> #elif defined(ENABLE_TOUCH_EVENTS) &amp;&amp; ENABLE_TOUCH_EVENTS
</span><span class="lines">@@ -339,7 +271,32 @@
</span><span class="cx"> 
</span><span class="cx">     // http://dev.w3.org/csswg/cssom-view/#dom-document-scrollingelement
</span><span class="cx">     readonly attribute Element scrollingElement;
</span><ins>+
+
+    // Event Handlers
+
+    // Unique to Element and Document
+    // FIXME: Should these be exposed on Window as well (and therefore moved to GlobalEventHandlers.idl)?
+    [NotEnumerable] attribute EventHandler onbeforecopy;
+    [NotEnumerable] attribute EventHandler onbeforecut;
+    [NotEnumerable] attribute EventHandler onbeforepaste;
+    [NotEnumerable] attribute EventHandler oncopy;
+    [NotEnumerable] attribute EventHandler oncut;
+    [NotEnumerable] attribute EventHandler onpaste;
+    [NotEnumerable] attribute EventHandler onselectstart;
+    [NotEnumerable, Conditional=FULLSCREEN_API] attribute EventHandler onwebkitfullscreenchange;
+    [NotEnumerable, Conditional=FULLSCREEN_API] attribute EventHandler onwebkitfullscreenerror;
+
+    // Unique to Document and HTMLBodyElement
+    [NotEnumerable] attribute EventHandler onselectionchange;
+
+    // Unique to Document
+    [NotEnumerable] attribute EventHandler onreadystatechange;
+    [NotEnumerable, Conditional=CSP_NEXT] attribute EventHandler onsecuritypolicyviolation;
+    [NotEnumerable, Conditional=POINTER_LOCK] attribute EventHandler onpointerlockchange;
+    [NotEnumerable, Conditional=POINTER_LOCK] attribute EventHandler onpointerlockerror;
</ins><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> Document implements ParentNode;
</span><span class="cx"> Document implements NonElementParentNode;
</span><ins>+Document implements GlobalEventHandlers;
</ins></span></pre></div>
<a id="trunkSourceWebCoredomElementidl"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/dom/Element.idl (184615 => 184616)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/dom/Element.idl        2015-05-20 05:28:02 UTC (rev 184615)
+++ trunk/Source/WebCore/dom/Element.idl        2015-05-20 05:41:13 UTC (rev 184616)
</span><span class="lines">@@ -153,119 +153,46 @@
</span><span class="cx">     [Conditional=CSS_REGIONS] readonly attribute DOMString webkitRegionOverset;
</span><span class="cx">     [Conditional=CSS_REGIONS] sequence&lt;Range&gt; webkitGetRegionFlowRanges();
</span><span class="cx"> 
</span><del>-    // FIXME: These should be on HTMLElement and SVGElement, not on Element.
-    // But we don't want to copy and paste this entire list; we can leave on Element
-    // for the moment since it doesn't do much real harm.
</del><span class="cx"> 
</span><del>-    [NotEnumerable] attribute EventHandler onabort;
-    [NotEnumerable] attribute EventHandler onanimationend;
-    [NotEnumerable] attribute EventHandler onanimationiteration;
-    [NotEnumerable] attribute EventHandler onanimationstart;
</del><ins>+    // Event Handlers
+
+    // Unique to Element and Document
+    // FIXME: Should these be exposed on Window as well (and therefore moved to GlobalEventHandlers.idl)?
</ins><span class="cx">     [NotEnumerable] attribute EventHandler onbeforecopy;
</span><span class="cx">     [NotEnumerable] attribute EventHandler onbeforecut;
</span><del>-    [NotEnumerable] attribute EventHandler onbeforeload;
</del><span class="cx">     [NotEnumerable] attribute EventHandler onbeforepaste;
</span><del>-    [NotEnumerable] attribute EventHandler onblur;
-    [NotEnumerable] attribute EventHandler oncanplay;
-    [NotEnumerable] attribute EventHandler oncanplaythrough;
-    [NotEnumerable] attribute EventHandler onchange;
-    [NotEnumerable] attribute EventHandler onclick;
-    [NotEnumerable] attribute EventHandler oncontextmenu;
</del><span class="cx">     [NotEnumerable] attribute EventHandler oncopy;
</span><span class="cx">     [NotEnumerable] attribute EventHandler oncut;
</span><del>-    [NotEnumerable] attribute EventHandler ondblclick;
-    [NotEnumerable] attribute EventHandler ondrag;
-    [NotEnumerable] attribute EventHandler ondragend;
-    [NotEnumerable] attribute EventHandler ondragenter;
-    [NotEnumerable] attribute EventHandler ondragleave;
-    [NotEnumerable] attribute EventHandler ondragover;
-    [NotEnumerable] attribute EventHandler ondragstart;
-    [NotEnumerable] attribute EventHandler ondrop;
-    [NotEnumerable] attribute EventHandler ondurationchange;
-    [NotEnumerable] attribute EventHandler onemptied;
-    [NotEnumerable] attribute EventHandler onended;
-    [NotEnumerable] attribute EventHandler onerror;
-    [NotEnumerable] attribute EventHandler onfocus;
-    [NotEnumerable] attribute EventHandler onfocusin;
-    [NotEnumerable] attribute EventHandler onfocusout;
-    [NotEnumerable] attribute EventHandler ongesturechange;
-    [NotEnumerable] attribute EventHandler ongestureend;
-    [NotEnumerable] attribute EventHandler ongesturestart;
-    [NotEnumerable] attribute EventHandler oninput;
-    [NotEnumerable] attribute EventHandler oninvalid;
-    [NotEnumerable] attribute EventHandler onkeydown;
-    [NotEnumerable] attribute EventHandler onkeypress;
-    [NotEnumerable] attribute EventHandler onkeyup;
-    [NotEnumerable] attribute EventHandler onload;
-    [NotEnumerable] attribute EventHandler onloadeddata;
-    [NotEnumerable] attribute EventHandler onloadedmetadata;
-    [NotEnumerable] attribute EventHandler onloadstart;
-    [NotEnumerable] attribute EventHandler onmousedown;
-    [NotEnumerable] attribute EventHandler onmouseenter;
-    [NotEnumerable] attribute EventHandler onmouseleave;
-    [NotEnumerable] attribute EventHandler onmousemove;
-    [NotEnumerable] attribute EventHandler onmouseout;
-    [NotEnumerable] attribute EventHandler onmouseover;
-    [NotEnumerable] attribute EventHandler onmouseup;
-    [NotEnumerable] attribute EventHandler onmousewheel;
</del><span class="cx">     [NotEnumerable] attribute EventHandler onpaste;
</span><del>-    [NotEnumerable] attribute EventHandler onpause;
-    [NotEnumerable] attribute EventHandler onplay;
-    [NotEnumerable] attribute EventHandler onplaying;
-    [NotEnumerable] attribute EventHandler onprogress;
-    [NotEnumerable] attribute EventHandler onratechange;
-    [NotEnumerable] attribute EventHandler onreset;
-    [NotEnumerable] attribute EventHandler onscroll;
-    [NotEnumerable] attribute EventHandler onsearch;
-    [NotEnumerable] attribute EventHandler onseeked;
-    [NotEnumerable] attribute EventHandler onseeking;
-    [NotEnumerable] attribute EventHandler onselect;
</del><span class="cx">     [NotEnumerable] attribute EventHandler onselectstart;
</span><del>-    [NotEnumerable] attribute EventHandler onstalled;
-    [NotEnumerable] attribute EventHandler onsubmit;
-    [NotEnumerable] attribute EventHandler onsuspend;
-    [NotEnumerable] attribute EventHandler ontimeupdate;
</del><ins>+    [NotEnumerable, Conditional=FULLSCREEN_API] attribute EventHandler onwebkitfullscreenchange;
+    [NotEnumerable, Conditional=FULLSCREEN_API] attribute EventHandler onwebkitfullscreenerror;
+
+    // Unique to Element and DOMWindow
+    // FIXME: Should these be exposed on Document as well (and therefore moved to GlobalEventHandlers.idl)?
+    [NotEnumerable] attribute EventHandler onanimationend;
+    [NotEnumerable] attribute EventHandler onanimationiteration;
+    [NotEnumerable] attribute EventHandler onanimationstart;
</ins><span class="cx">     [NotEnumerable] attribute EventHandler ontransitionend;
</span><del>-    [NotEnumerable] attribute EventHandler onvolumechange;
-    [NotEnumerable] attribute EventHandler onwaiting;
</del><span class="cx">     [NotEnumerable] attribute EventHandler onwebkitanimationend;
</span><span class="cx">     [NotEnumerable] attribute EventHandler onwebkitanimationiteration;
</span><span class="cx">     [NotEnumerable] attribute EventHandler onwebkitanimationstart;
</span><span class="cx">     [NotEnumerable] attribute EventHandler onwebkittransitionend;
</span><del>-    [NotEnumerable] attribute EventHandler onwheel;
</del><ins>+    [NotEnumerable, Conditional=IOS_GESTURE_EVENTS] attribute EventHandler ongesturechange;
+    [NotEnumerable, Conditional=IOS_GESTURE_EVENTS] attribute EventHandler ongestureend;
+    [NotEnumerable, Conditional=IOS_GESTURE_EVENTS] attribute EventHandler ongesturestart;
</ins><span class="cx"> 
</span><del>-    // Some sites use the existence of event handler properties for feature detection,
-    // so they actually need to be conditional, not just non-enumerable.
</del><ins>+    // Unique to Element, HTMLBodyElement and HTMLFrameSetElement
+    [NotEnumerable] attribute EventHandler onfocusin;
+    [NotEnumerable] attribute EventHandler onfocusout;
</ins><span class="cx"> 
</span><del>-    [NotEnumerable, Conditional=TOUCH_EVENTS] attribute EventHandler ontouchcancel;
-    [NotEnumerable, Conditional=TOUCH_EVENTS] attribute EventHandler ontouchend;
-    [NotEnumerable, Conditional=TOUCH_EVENTS] attribute EventHandler ontouchmove;
-    [NotEnumerable, Conditional=TOUCH_EVENTS] attribute EventHandler ontouchstart;
-
-    [NotEnumerable, Conditional=WILL_REVEAL_EDGE_EVENTS] attribute EventHandler onwebkitwillrevealbottom;
-    [NotEnumerable, Conditional=WILL_REVEAL_EDGE_EVENTS] attribute EventHandler onwebkitwillrevealleft;
-    [NotEnumerable, Conditional=WILL_REVEAL_EDGE_EVENTS] attribute EventHandler onwebkitwillrevealright;
-    [NotEnumerable, Conditional=WILL_REVEAL_EDGE_EVENTS] attribute EventHandler onwebkitwillrevealtop;
-
-    [NotEnumerable, Conditional=MOUSE_FORCE_EVENTS] attribute EventHandler onwebkitmouseforcechanged;
-    [NotEnumerable, Conditional=MOUSE_FORCE_EVENTS] attribute EventHandler onwebkitmouseforcedown;
-    [NotEnumerable, Conditional=MOUSE_FORCE_EVENTS] attribute EventHandler onwebkitmouseforcewillbegin;
-    [NotEnumerable, Conditional=MOUSE_FORCE_EVENTS] attribute EventHandler onwebkitmouseforceup;
-
</del><ins>+    // Unique to Element
+    [NotEnumerable] attribute EventHandler onbeforeload;
</ins><span class="cx">     [NotEnumerable, Conditional=ENCRYPTED_MEDIA] attribute EventHandler onwebkitkeyadded;
</span><span class="cx">     [NotEnumerable, Conditional=ENCRYPTED_MEDIA] attribute EventHandler onwebkitkeyerror;
</span><span class="cx">     [NotEnumerable, Conditional=ENCRYPTED_MEDIA] attribute EventHandler onwebkitkeymessage;
</span><del>-
</del><span class="cx">     [NotEnumerable, Conditional=ENCRYPTED_MEDIA|ENCRYPTED_MEDIA_V2] attribute EventHandler onwebkitneedkey;
</span><del>-
-    [NotEnumerable, Conditional=FULLSCREEN_API] attribute EventHandler onwebkitfullscreenchange;
-    [NotEnumerable, Conditional=FULLSCREEN_API] attribute EventHandler onwebkitfullscreenerror;
-
-    [NotEnumerable, Conditional=REQUEST_AUTOCOMPLETE] attribute EventHandler onautocomplete;
-    [NotEnumerable, Conditional=REQUEST_AUTOCOMPLETE] attribute EventHandler onautocompleteerror;
-
</del><span class="cx">     [NotEnumerable, Conditional=VIDEO_PRESENTATION_MODE] attribute EventHandler onwebkitpresentationmodechanged;
</span><del>-
</del><span class="cx">     [NotEnumerable, Conditional=WIRELESS_PLAYBACK_TARGET] attribute EventHandler onwebkitcurrentplaybacktargetiswirelesschanged;
</span><span class="cx">     [NotEnumerable, Conditional=WIRELESS_PLAYBACK_TARGET] attribute EventHandler onwebkitplaybacktargetavailabilitychanged;
</span><span class="cx"> };
</span><span class="lines">@@ -273,3 +200,4 @@
</span><span class="cx"> Element implements ChildNode;
</span><span class="cx"> Element implements ParentNode;
</span><span class="cx"> Element implements NonDocumentTypeChildNode;
</span><ins>+Element implements GlobalEventHandlers;
</ins></span></pre></div>
<a id="trunkSourceWebCoredomGlobalEventHandlersidl"></a>
<div class="addfile"><h4>Added: trunk/Source/WebCore/dom/GlobalEventHandlers.idl (0 => 184616)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/dom/GlobalEventHandlers.idl                                (rev 0)
+++ trunk/Source/WebCore/dom/GlobalEventHandlers.idl        2015-05-20 05:41:13 UTC (rev 184616)
</span><span class="lines">@@ -0,0 +1,115 @@
</span><ins>+/*
+ * Copyright (C) 2015 Apple Inc. All Rights Reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+// https://html.spec.whatwg.org/multipage/webappapis.html#globaleventhandlers
+[
+    NoInterfaceObject,
+] interface GlobalEventHandlers {
+    // Commented out event handlers are defined by the HTML5 specification but
+    // are not yet implemented.
+
+    [NotEnumerable] attribute EventHandler onabort;
+    [NotEnumerable, Conditional=REQUEST_AUTOCOMPLETE] attribute EventHandler onautocomplete;
+    [NotEnumerable, Conditional=REQUEST_AUTOCOMPLETE] attribute EventHandler onautocompleteerror;
+    [NotEnumerable] attribute EventHandler onblur;
+    // [NotEnumerable] attribute EventHandler oncancel;
+    [NotEnumerable] attribute EventHandler oncanplay;
+    [NotEnumerable] attribute EventHandler oncanplaythrough;
+    [NotEnumerable] attribute EventHandler onchange;
+    [NotEnumerable] attribute EventHandler onclick;
+    // [NotEnumerable] attribute EventHandler onclose;
+    [NotEnumerable] attribute EventHandler oncontextmenu;
+    // [NotEnumerable] attribute EventHandler oncuechange;
+    [NotEnumerable] attribute EventHandler ondblclick;
+    [NotEnumerable] attribute EventHandler ondrag;
+    [NotEnumerable] attribute EventHandler ondragend;
+    [NotEnumerable] attribute EventHandler ondragenter;
+    // [NotEnumerable] attribute EventHandler ondragexit;
+    [NotEnumerable] attribute EventHandler ondragleave;
+    [NotEnumerable] attribute EventHandler ondragover;
+    [NotEnumerable] attribute EventHandler ondragstart;
+    [NotEnumerable] attribute EventHandler ondrop;
+    [NotEnumerable] attribute EventHandler ondurationchange;
+    [NotEnumerable] attribute EventHandler onemptied;
+    [NotEnumerable] attribute EventHandler onended;
+    [NotEnumerable] attribute EventHandler onerror;
+    [NotEnumerable] attribute EventHandler onfocus;
+    [NotEnumerable] attribute EventHandler oninput;
+    [NotEnumerable] attribute EventHandler oninvalid;
+    [NotEnumerable] attribute EventHandler onkeydown;
+    [NotEnumerable] attribute EventHandler onkeypress;
+    [NotEnumerable] attribute EventHandler onkeyup;
+    [NotEnumerable] attribute EventHandler onload;
+    [NotEnumerable] attribute EventHandler onloadeddata;
+    [NotEnumerable] attribute EventHandler onloadedmetadata;
+    [NotEnumerable] attribute EventHandler onloadstart;
+    [NotEnumerable] attribute EventHandler onmousedown;
+    [NotEnumerable] attribute EventHandler onmouseenter;
+    [NotEnumerable] attribute EventHandler onmouseleave;
+    [NotEnumerable] attribute EventHandler onmousemove;
+    [NotEnumerable] attribute EventHandler onmouseout;
+    [NotEnumerable] attribute EventHandler onmouseover;
+    [NotEnumerable] attribute EventHandler onmouseup;
+    [NotEnumerable] attribute EventHandler onmousewheel;
+    [NotEnumerable] attribute EventHandler onpause;
+    [NotEnumerable] attribute EventHandler onplay;
+    [NotEnumerable] attribute EventHandler onplaying;
+    [NotEnumerable] attribute EventHandler onprogress;
+    [NotEnumerable] attribute EventHandler onratechange;
+    [NotEnumerable] attribute EventHandler onreset;
+    // [NotEnumerable] attribute EventHandler onresize;
+    [NotEnumerable] attribute EventHandler onscroll;
+    [NotEnumerable] attribute EventHandler onseeked;
+    [NotEnumerable] attribute EventHandler onseeking;
+    [NotEnumerable] attribute EventHandler onselect;
+    // [NotEnumerable] attribute EventHandler onshow;
+    // [NotEnumerable] attribute EventHandler onsort;
+    [NotEnumerable] attribute EventHandler onstalled;
+    [NotEnumerable] attribute EventHandler onsubmit;
+    [NotEnumerable] attribute EventHandler onsuspend;
+    [NotEnumerable] attribute EventHandler ontimeupdate;
+    // [NotEnumerable] attribute EventHandler ontoggle;
+    [NotEnumerable] attribute EventHandler onvolumechange;
+    [NotEnumerable] attribute EventHandler onwaiting;
+
+
+    // Additions that are not yet part of the standard.
+
+    [NotEnumerable] attribute EventHandler onsearch;
+    [NotEnumerable] attribute EventHandler onwheel;
+    [NotEnumerable, Conditional=TOUCH_EVENTS] attribute EventHandler ontouchcancel;
+    [NotEnumerable, Conditional=TOUCH_EVENTS] attribute EventHandler ontouchend;
+    [NotEnumerable, Conditional=TOUCH_EVENTS] attribute EventHandler ontouchmove;
+    [NotEnumerable, Conditional=TOUCH_EVENTS] attribute EventHandler ontouchstart;
+    [NotEnumerable, Conditional=MOUSE_FORCE_EVENTS] attribute EventHandler onwebkitmouseforcechanged;
+    [NotEnumerable, Conditional=MOUSE_FORCE_EVENTS] attribute EventHandler onwebkitmouseforcedown;
+    [NotEnumerable, Conditional=MOUSE_FORCE_EVENTS] attribute EventHandler onwebkitmouseforcewillbegin;
+    [NotEnumerable, Conditional=MOUSE_FORCE_EVENTS] attribute EventHandler onwebkitmouseforceup;
+    [NotEnumerable, Conditional=WILL_REVEAL_EDGE_EVENTS] attribute EventHandler onwebkitwillrevealbottom;
+    [NotEnumerable, Conditional=WILL_REVEAL_EDGE_EVENTS] attribute EventHandler onwebkitwillrevealleft;
+    [NotEnumerable, Conditional=WILL_REVEAL_EDGE_EVENTS] attribute EventHandler onwebkitwillrevealright;
+    [NotEnumerable, Conditional=WILL_REVEAL_EDGE_EVENTS] attribute EventHandler onwebkitwillrevealtop;
+};
</ins></span></pre></div>
<a id="trunkSourceWebCorehtmlHTMLBodyElementidl"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/HTMLBodyElement.idl (184615 => 184616)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/HTMLBodyElement.idl        2015-05-20 05:28:02 UTC (rev 184615)
+++ trunk/Source/WebCore/html/HTMLBodyElement.idl        2015-05-20 05:41:13 UTC (rev 184616)
</span><span class="lines">@@ -26,37 +26,26 @@
</span><span class="cx">     [Reflect] attribute DOMString text;
</span><span class="cx">     [Reflect] attribute DOMString vLink;
</span><span class="cx"> 
</span><del>-    [NotEnumerable, WindowEventHandler] attribute EventHandler onbeforeunload;
</del><span class="cx">     [NotEnumerable, WindowEventHandler] attribute EventHandler onblur;
</span><span class="cx">     [NotEnumerable, WindowEventHandler] attribute EventHandler onerror;
</span><span class="cx">     [NotEnumerable, WindowEventHandler] attribute EventHandler onfocus;
</span><span class="cx">     [NotEnumerable, WindowEventHandler] attribute EventHandler onfocusin;
</span><span class="cx">     [NotEnumerable, WindowEventHandler] attribute EventHandler onfocusout;
</span><del>-    [NotEnumerable, WindowEventHandler] attribute EventHandler onhashchange;
</del><span class="cx">     [NotEnumerable, WindowEventHandler] attribute EventHandler onload;
</span><del>-    [NotEnumerable, WindowEventHandler] attribute EventHandler onmessage;
-    [NotEnumerable, WindowEventHandler] attribute EventHandler onoffline;
-    [NotEnumerable, WindowEventHandler] attribute EventHandler ononline;
-    [NotEnumerable, WindowEventHandler] attribute EventHandler onpagehide;
-    [NotEnumerable, WindowEventHandler] attribute EventHandler onpageshow;
-    [NotEnumerable, WindowEventHandler] attribute EventHandler onpopstate;
</del><span class="cx">     [NotEnumerable, WindowEventHandler] attribute EventHandler onresize;
</span><span class="cx">     [NotEnumerable, WindowEventHandler] attribute EventHandler onscroll;
</span><del>-    [NotEnumerable, WindowEventHandler] attribute EventHandler onstorage;
-    [NotEnumerable, WindowEventHandler] attribute EventHandler onunload;
</del><span class="cx"> 
</span><span class="cx">     [NotEnumerable, WindowEventHandler, Conditional=MOUSE_FORCE_EVENTS] attribute EventHandler onwebkitmouseforcechanged;
</span><span class="cx">     [NotEnumerable, WindowEventHandler, Conditional=MOUSE_FORCE_EVENTS] attribute EventHandler onwebkitmouseforcedown;
</span><span class="cx">     [NotEnumerable, WindowEventHandler, Conditional=MOUSE_FORCE_EVENTS] attribute EventHandler onwebkitmouseforcewillbegin;
</span><span class="cx">     [NotEnumerable, WindowEventHandler, Conditional=MOUSE_FORCE_EVENTS] attribute EventHandler onwebkitmouseforceup;
</span><del>-
-    [NotEnumerable, WindowEventHandler, Conditional=ORIENTATION_EVENTS] attribute EventHandler onorientationchange;
-
</del><span class="cx">     [NotEnumerable, WindowEventHandler, Conditional=WILL_REVEAL_EDGE_EVENTS] attribute EventHandler onwebkitwillrevealbottom;
</span><span class="cx">     [NotEnumerable, WindowEventHandler, Conditional=WILL_REVEAL_EDGE_EVENTS] attribute EventHandler onwebkitwillrevealleft;
</span><span class="cx">     [NotEnumerable, WindowEventHandler, Conditional=WILL_REVEAL_EDGE_EVENTS] attribute EventHandler onwebkitwillrevealright;
</span><span class="cx">     [NotEnumerable, WindowEventHandler, Conditional=WILL_REVEAL_EDGE_EVENTS] attribute EventHandler onwebkitwillrevealtop;
</span><span class="cx"> 
</span><ins>+    // Unique to Document and HTMLBodyElement
</ins><span class="cx">     [NotEnumerable, DocumentEventHandler] attribute EventHandler onselectionchange;
</span><span class="cx"> };
</span><span class="cx"> 
</span><ins>+HTMLBodyElement implements WindowEventHandlers;
</ins></span></pre></div>
<a id="trunkSourceWebCorehtmlHTMLFrameSetElementidl"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/HTMLFrameSetElement.idl (184615 => 184616)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/HTMLFrameSetElement.idl        2015-05-20 05:28:02 UTC (rev 184615)
+++ trunk/Source/WebCore/html/HTMLFrameSetElement.idl        2015-05-20 05:41:13 UTC (rev 184616)
</span><span class="lines">@@ -24,30 +24,19 @@
</span><span class="cx">     [Reflect] attribute DOMString cols;
</span><span class="cx">     [Reflect] attribute DOMString rows;
</span><span class="cx"> 
</span><del>-    [NotEnumerable, WindowEventHandler] attribute EventHandler onbeforeunload;
</del><span class="cx">     [NotEnumerable, WindowEventHandler] attribute EventHandler onblur;
</span><span class="cx">     [NotEnumerable, WindowEventHandler] attribute EventHandler onerror;
</span><span class="cx">     [NotEnumerable, WindowEventHandler] attribute EventHandler onfocus;
</span><span class="cx">     [NotEnumerable, WindowEventHandler] attribute EventHandler onfocusin;
</span><span class="cx">     [NotEnumerable, WindowEventHandler] attribute EventHandler onfocusout;
</span><del>-    [NotEnumerable, WindowEventHandler] attribute EventHandler onhashchange;
</del><span class="cx">     [NotEnumerable, WindowEventHandler] attribute EventHandler onload;
</span><del>-    [NotEnumerable, WindowEventHandler] attribute EventHandler onmessage;
-    [NotEnumerable, WindowEventHandler] attribute EventHandler onoffline;
-    [NotEnumerable, WindowEventHandler] attribute EventHandler ononline;
-    [NotEnumerable, WindowEventHandler] attribute EventHandler onpagehide;
-    [NotEnumerable, WindowEventHandler] attribute EventHandler onpageshow;
-    [NotEnumerable, WindowEventHandler] attribute EventHandler onpopstate;
</del><span class="cx">     [NotEnumerable, WindowEventHandler] attribute EventHandler onresize;
</span><span class="cx">     [NotEnumerable, WindowEventHandler] attribute EventHandler onscroll;
</span><del>-    [NotEnumerable, WindowEventHandler] attribute EventHandler onstorage;
-    [NotEnumerable, WindowEventHandler] attribute EventHandler onunload;
</del><span class="cx"> 
</span><del>-    [NotEnumerable, WindowEventHandler, Conditional=ORIENTATION_EVENTS] attribute EventHandler onorientationchange;
-
</del><span class="cx">     [NotEnumerable, WindowEventHandler, Conditional=WILL_REVEAL_EDGE_EVENTS] attribute EventHandler onwebkitwillrevealbottom;
</span><span class="cx">     [NotEnumerable, WindowEventHandler, Conditional=WILL_REVEAL_EDGE_EVENTS] attribute EventHandler onwebkitwillrevealleft;
</span><span class="cx">     [NotEnumerable, WindowEventHandler, Conditional=WILL_REVEAL_EDGE_EVENTS] attribute EventHandler onwebkitwillrevealright;
</span><span class="cx">     [NotEnumerable, WindowEventHandler, Conditional=WILL_REVEAL_EDGE_EVENTS] attribute EventHandler onwebkitwillrevealtop;
</span><span class="cx"> };
</span><span class="cx"> 
</span><ins>+HTMLFrameSetElement implements WindowEventHandlers;
</ins></span></pre></div>
<a id="trunkSourceWebCorepageDOMWindowidl"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/page/DOMWindow.idl (184615 => 184616)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/DOMWindow.idl        2015-05-20 05:28:02 UTC (rev 184615)
+++ trunk/Source/WebCore/page/DOMWindow.idl        2015-05-20 05:41:13 UTC (rev 184616)
</span><span class="lines">@@ -186,110 +186,6 @@
</span><span class="cx"> 
</span><span class="cx">     [Replaceable] readonly attribute DOMWindowCSS CSS;
</span><span class="cx"> 
</span><del>-    [NotEnumerable] attribute EventHandler onabort;
-    [NotEnumerable] attribute EventHandler onanimationend;
-    [NotEnumerable] attribute EventHandler onanimationiteration;
-    [NotEnumerable] attribute EventHandler onanimationstart;
-    [NotEnumerable] attribute EventHandler onbeforeunload;
-    [NotEnumerable] attribute EventHandler onblur;
-    [NotEnumerable] attribute EventHandler oncanplay;
-    [NotEnumerable] attribute EventHandler oncanplaythrough;
-    [NotEnumerable] attribute EventHandler onchange;
-    [NotEnumerable] attribute EventHandler onclick;
-    [NotEnumerable] attribute EventHandler oncontextmenu;
-    [NotEnumerable] attribute EventHandler ondblclick;
-    [NotEnumerable] attribute EventHandler ondrag;
-    [NotEnumerable] attribute EventHandler ondragend;
-    [NotEnumerable] attribute EventHandler ondragenter;
-    [NotEnumerable] attribute EventHandler ondragleave;
-    [NotEnumerable] attribute EventHandler ondragover;
-    [NotEnumerable] attribute EventHandler ondragstart;
-    [NotEnumerable] attribute EventHandler ondrop;
-    [NotEnumerable] attribute EventHandler ondurationchange;
-    [NotEnumerable] attribute EventHandler onemptied;
-    [NotEnumerable] attribute EventHandler onended;
-    [NotEnumerable] attribute EventHandler onerror;
-    [NotEnumerable] attribute EventHandler onfocus;
-    [NotEnumerable] attribute EventHandler onhashchange;
-    [NotEnumerable] attribute EventHandler oninput;
-    [NotEnumerable] attribute EventHandler oninvalid;
-    [NotEnumerable] attribute EventHandler onkeydown;
-    [NotEnumerable] attribute EventHandler onkeypress;
-    [NotEnumerable] attribute EventHandler onkeyup;
-    [NotEnumerable] attribute EventHandler onload;
-    [NotEnumerable] attribute EventHandler onloadeddata;
-    [NotEnumerable] attribute EventHandler onloadedmetadata;
-    [NotEnumerable] attribute EventHandler onloadstart;
-    [NotEnumerable] attribute EventHandler onmessage;
-    [NotEnumerable] attribute EventHandler onmousedown;
-    [NotEnumerable] attribute EventHandler onmouseenter;
-    [NotEnumerable] attribute EventHandler onmouseleave;
-    [NotEnumerable] attribute EventHandler onmousemove;
-    [NotEnumerable] attribute EventHandler onmouseout;
-    [NotEnumerable] attribute EventHandler onmouseover;
-    [NotEnumerable] attribute EventHandler onmouseup;
-    [NotEnumerable] attribute EventHandler onmousewheel;
-    [NotEnumerable] attribute EventHandler onoffline;
-    [NotEnumerable] attribute EventHandler ononline;
-    [NotEnumerable] attribute EventHandler onpagehide;
-    [NotEnumerable] attribute EventHandler onpageshow;
-    [NotEnumerable] attribute EventHandler onpause;
-    [NotEnumerable] attribute EventHandler onplay;
-    [NotEnumerable] attribute EventHandler onplaying;
-    [NotEnumerable] attribute EventHandler onpopstate;
-    [NotEnumerable] attribute EventHandler onprogress;
-    [NotEnumerable] attribute EventHandler onratechange;
-    [NotEnumerable] attribute EventHandler onreset;
-    [NotEnumerable] attribute EventHandler onresize;
-    [NotEnumerable] attribute EventHandler onscroll;
-    [NotEnumerable] attribute EventHandler onsearch;
-    [NotEnumerable] attribute EventHandler onseeked;
-    [NotEnumerable] attribute EventHandler onseeking;
-    [NotEnumerable] attribute EventHandler onselect;
-    [NotEnumerable] attribute EventHandler onstalled;
-    [NotEnumerable] attribute EventHandler onstorage;
-    [NotEnumerable] attribute EventHandler onsubmit;
-    [NotEnumerable] attribute EventHandler onsuspend;
-    [NotEnumerable] attribute EventHandler ontimeupdate;
-    [NotEnumerable] attribute EventHandler ontransitionend;
-    [NotEnumerable] attribute EventHandler onunload;
-    [NotEnumerable] attribute EventHandler onvolumechange;
-    [NotEnumerable] attribute EventHandler onwaiting;
-    [NotEnumerable] attribute EventHandler onwebkitanimationend;
-    [NotEnumerable] attribute EventHandler onwebkitanimationiteration;
-    [NotEnumerable] attribute EventHandler onwebkitanimationstart;
-    [NotEnumerable] attribute EventHandler onwebkittransitionend;
-    [NotEnumerable] attribute EventHandler onwheel;
-
-    // Some sites use the existence of event handler properties for feature detection,
-    // so they actually need to be conditional, not just non-enumerable.
-
-    [NotEnumerable, Conditional=DEVICE_ORIENTATION] attribute EventHandler ondevicemotion;
-    [NotEnumerable, Conditional=DEVICE_ORIENTATION] attribute EventHandler ondeviceorientation;
-
-    [NotEnumerable, Conditional=TOUCH_EVENTS] attribute EventHandler ontouchcancel;
-    [NotEnumerable, Conditional=TOUCH_EVENTS] attribute EventHandler ontouchend;
-    [NotEnumerable, Conditional=TOUCH_EVENTS] attribute EventHandler ontouchmove;
-    [NotEnumerable, Conditional=TOUCH_EVENTS] attribute EventHandler ontouchstart;
-
-    [NotEnumerable, Conditional=IOS_GESTURE_EVENTS] attribute EventHandler ongesturechange;
-    [NotEnumerable, Conditional=IOS_GESTURE_EVENTS] attribute EventHandler ongestureend;
-    [NotEnumerable, Conditional=IOS_GESTURE_EVENTS] attribute EventHandler ongesturestart;
-
-    [NotEnumerable, Conditional=ORIENTATION_EVENTS] attribute EventHandler onorientationchange;
-
-    [NotEnumerable, Conditional=PROXIMITY_EVENTS] attribute EventHandler onwebkitdeviceproximity;
-
-    [NotEnumerable, Conditional=WILL_REVEAL_EDGE_EVENTS] attribute EventHandler onwebkitwillrevealbottom;
-    [NotEnumerable, Conditional=WILL_REVEAL_EDGE_EVENTS] attribute EventHandler onwebkitwillrevealleft;
-    [NotEnumerable, Conditional=WILL_REVEAL_EDGE_EVENTS] attribute EventHandler onwebkitwillrevealright;
-    [NotEnumerable, Conditional=WILL_REVEAL_EDGE_EVENTS] attribute EventHandler onwebkitwillrevealtop;
-
-    [NotEnumerable, Conditional=MOUSE_FORCE_EVENTS] attribute EventHandler onwebkitmouseforcechanged;
-    [NotEnumerable, Conditional=MOUSE_FORCE_EVENTS] attribute EventHandler onwebkitmouseforcedown;
-    [NotEnumerable, Conditional=MOUSE_FORCE_EVENTS] attribute EventHandler onwebkitmouseforceup;
-    [NotEnumerable, Conditional=MOUSE_FORCE_EVENTS] attribute EventHandler onwebkitmouseforcewillbegin;
-
</del><span class="cx">     // EventTarget interface
</span><span class="cx">     [Custom] void addEventListener(DOMString type, EventListener listener, optional boolean useCapture);
</span><span class="cx">     [Custom] void removeEventListener(DOMString type, EventListener listener, optional boolean useCapture);
</span><span class="lines">@@ -320,7 +216,34 @@
</span><span class="cx">     [Conditional=INDEXED_DATABASE] attribute IDBRequestConstructor webkitIDBRequest;
</span><span class="cx">     [Conditional=INDEXED_DATABASE] attribute IDBTransactionConstructor webkitIDBTransaction;
</span><span class="cx"> #endif // defined(LANGUAGE_JAVASCRIPT)
</span><ins>+
+
+    // Event Handlers
+
+    // FIXME: This should be in GlobalEventHandlers.idl according to HTML5 - https://html.spec.whatwg.org/multipage/webappapis.html#globaleventhandlers
+    [NotEnumerable] attribute EventHandler onresize;
+
+    // Unique to Element and DOMWindow
+    // FIXME: Should these be exposed on Document as well (and therefore moved to GlobalEventHandlers.idl)?
+    [NotEnumerable] attribute EventHandler onanimationend;
+    [NotEnumerable] attribute EventHandler onanimationiteration;
+    [NotEnumerable] attribute EventHandler onanimationstart;
+    [NotEnumerable] attribute EventHandler ontransitionend;
+    [NotEnumerable] attribute EventHandler onwebkitanimationend;
+    [NotEnumerable] attribute EventHandler onwebkitanimationiteration;
+    [NotEnumerable] attribute EventHandler onwebkitanimationstart;
+    [NotEnumerable] attribute EventHandler onwebkittransitionend;
+    [NotEnumerable, Conditional=IOS_GESTURE_EVENTS] attribute EventHandler ongesturechange;
+    [NotEnumerable, Conditional=IOS_GESTURE_EVENTS] attribute EventHandler ongestureend;
+    [NotEnumerable, Conditional=IOS_GESTURE_EVENTS] attribute EventHandler ongesturestart;
+
+    // Unique to DOMWindow
+    [NotEnumerable, Conditional=DEVICE_ORIENTATION] attribute EventHandler ondevicemotion;
+    [NotEnumerable, Conditional=DEVICE_ORIENTATION] attribute EventHandler ondeviceorientation;
+    [NotEnumerable, Conditional=PROXIMITY_EVENTS] attribute EventHandler onwebkitdeviceproximity;
</ins><span class="cx"> };
</span><span class="cx"> 
</span><del>-DOMWindow implements WindowTimers;
</del><ins>+DOMWindow implements GlobalEventHandlers;
</ins><span class="cx"> DOMWindow implements WindowBase64;
</span><ins>+DOMWindow implements WindowEventHandlers;
+DOMWindow implements WindowTimers;
</ins></span></pre></div>
<a id="trunkSourceWebCorepageWindowEventHandlersidl"></a>
<div class="addfile"><h4>Added: trunk/Source/WebCore/page/WindowEventHandlers.idl (0 => 184616)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/WindowEventHandlers.idl                                (rev 0)
+++ trunk/Source/WebCore/page/WindowEventHandlers.idl        2015-05-20 05:41:13 UTC (rev 184616)
</span><span class="lines">@@ -0,0 +1,52 @@
</span><ins>+/*
+ * Copyright (C) 2015 Apple Inc. All Rights Reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+// https://html.spec.whatwg.org/multipage/webappapis.html#windoweventhandlers
+[
+    NoInterfaceObject,
+] interface WindowEventHandlers {
+    // Commented out event handlers are defined by the HTML5 specification but
+    // are not yet implemented.
+
+    // [NotEnumerable, WindowEventHandler] attribute EventHandler onafterprint;.
+    // [NotEnumerable, WindowEventHandler] attribute EventHandler onbeforeprint;.
+    [NotEnumerable, WindowEventHandler] attribute EventHandler onbeforeunload;
+    [NotEnumerable, WindowEventHandler] attribute EventHandler onhashchange;
+    // [NotEnumerable, WindowEventHandler] attribute EventHandler onlanguagechange;.
+    [NotEnumerable, WindowEventHandler] attribute EventHandler onmessage;
+    [NotEnumerable, WindowEventHandler] attribute EventHandler onoffline;
+    [NotEnumerable, WindowEventHandler] attribute EventHandler ononline;
+    [NotEnumerable, WindowEventHandler] attribute EventHandler onpagehide;
+    [NotEnumerable, WindowEventHandler] attribute EventHandler onpageshow;
+    [NotEnumerable, WindowEventHandler] attribute EventHandler onpopstate;
+    [NotEnumerable, WindowEventHandler] attribute EventHandler onstorage;
+    [NotEnumerable, WindowEventHandler] attribute EventHandler onunload;
+
+
+    // Additions that are not yet part of the standard.
+
+    [NotEnumerable, WindowEventHandler, Conditional=ORIENTATION_EVENTS] attribute EventHandler onorientationchange;
+};
</ins></span></pre>
</div>
</div>

</body>
</html>