Title: [184616] trunk
Revision
184616
Author
wei...@apple.com
Date
2015-05-19 22:41:13 -0700 (Tue, 19 May 2015)

Log Message

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.

Modified Paths

Added Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (184615 => 184616)


--- trunk/LayoutTests/ChangeLog	2015-05-20 05:28:02 UTC (rev 184615)
+++ trunk/LayoutTests/ChangeLog	2015-05-20 05:41:13 UTC (rev 184616)
@@ -1,3 +1,15 @@
+2015-05-17  Sam Weinig  <s...@webkit.org>
+
+        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.
+
 2015-05-19  Joseph Pecoraro  <pecor...@apple.com>
 
         Web Inspector: Improve Preview for NodeList / array like collections

Modified: trunk/LayoutTests/fast/dom/event-handler-attributes-expected.txt (184615 => 184616)


--- 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)
@@ -103,6 +103,8 @@
 PASS testScriptAttribute(document, "beforecut") is "document"
 PASS testScriptAttribute(document, "beforepaste") is "document"
 PASS testScriptAttribute(document, "blur") is "document"
+PASS testScriptAttribute(document, "canplay") is "document"
+PASS testScriptAttribute(document, "canplaythrough") is "document"
 PASS testScriptAttribute(document, "change") is "document"
 PASS testScriptAttribute(document, "click") is "document"
 PASS testScriptAttribute(document, "contextmenu") is "document"
@@ -116,6 +118,9 @@
 PASS testScriptAttribute(document, "dragover") is "document"
 PASS testScriptAttribute(document, "dragstart") is "document"
 PASS testScriptAttribute(document, "drop") is "document"
+PASS testScriptAttribute(document, "durationchange") is "document"
+PASS testScriptAttribute(document, "emptied") is "document"
+PASS testScriptAttribute(document, "ended") is "document"
 PASS testScriptAttribute(document, "error") is "document"
 PASS testScriptAttribute(document, "focus") is "document"
 PASS testScriptAttribute(document, "input") is "document"
@@ -124,6 +129,9 @@
 PASS testScriptAttribute(document, "keypress") is "document"
 PASS testScriptAttribute(document, "keyup") is "document"
 PASS testScriptAttribute(document, "load") is "document"
+PASS testScriptAttribute(document, "loadeddata") is "document"
+PASS testScriptAttribute(document, "loadedmetadata") is "document"
+PASS testScriptAttribute(document, "loadstart") is "document"
 PASS testScriptAttribute(document, "mousedown") is "document"
 PASS testScriptAttribute(document, "mouseenter") is "document"
 PASS testScriptAttribute(document, "mouseleave") is "document"
@@ -133,14 +141,26 @@
 PASS testScriptAttribute(document, "mouseup") is "document"
 PASS testScriptAttribute(document, "mousewheel") is "document"
 PASS testScriptAttribute(document, "paste") is "document"
+PASS testScriptAttribute(document, "pause") is "document"
+PASS testScriptAttribute(document, "play") is "document"
+PASS testScriptAttribute(document, "playing") is "document"
+PASS testScriptAttribute(document, "progress") is "document"
+PASS testScriptAttribute(document, "ratechange") is "document"
 PASS testScriptAttribute(document, "readystatechange") is "document"
 PASS testScriptAttribute(document, "reset") is "document"
 PASS testScriptAttribute(document, "scroll") is "document"
 PASS testScriptAttribute(document, "search") is "document"
+PASS testScriptAttribute(document, "seeked") is "document"
+PASS testScriptAttribute(document, "seeking") is "document"
 PASS testScriptAttribute(document, "select") is "document"
 PASS testScriptAttribute(document, "selectionchange") is "document"
 PASS testScriptAttribute(document, "selectstart") is "document"
+PASS testScriptAttribute(document, "stalled") is "document"
 PASS testScriptAttribute(document, "submit") is "document"
+PASS testScriptAttribute(document, "suspend") is "document"
+PASS testScriptAttribute(document, "timeupdate") is "document"
+PASS testScriptAttribute(document, "volumechange") is "document"
+PASS testScriptAttribute(document, "waiting") is "document"
 PASS testScriptAttribute(document, "wheel") is "document"
 
 Event names we expect not to be able to set on the document
@@ -150,40 +170,20 @@
 PASS testScriptAttribute(document, "animationstart") is "none"
 PASS testScriptAttribute(document, "beforeload") is "none"
 PASS testScriptAttribute(document, "beforeunload") is "none"
-PASS testScriptAttribute(document, "canplay") is "none"
-PASS testScriptAttribute(document, "canplaythrough") is "none"
-PASS testScriptAttribute(document, "durationchange") is "none"
-PASS testScriptAttribute(document, "emptied") is "none"
-PASS testScriptAttribute(document, "ended") is "none"
 PASS testScriptAttribute(document, "focusin") is "none"
 PASS testScriptAttribute(document, "focusout") is "none"
 PASS testScriptAttribute(document, "hashchange") is "none"
-PASS testScriptAttribute(document, "loadeddata") is "none"
-PASS testScriptAttribute(document, "loadedmetadata") is "none"
-PASS testScriptAttribute(document, "loadstart") is "none"
 PASS testScriptAttribute(document, "message") is "none"
 PASS testScriptAttribute(document, "noneventname") is "none"
 PASS testScriptAttribute(document, "offline") is "none"
 PASS testScriptAttribute(document, "online") is "none"
 PASS testScriptAttribute(document, "pagehide") is "none"
 PASS testScriptAttribute(document, "pageshow") is "none"
-PASS testScriptAttribute(document, "pause") is "none"
-PASS testScriptAttribute(document, "play") is "none"
-PASS testScriptAttribute(document, "playing") is "none"
 PASS testScriptAttribute(document, "popstate") is "none"
-PASS testScriptAttribute(document, "progress") is "none"
-PASS testScriptAttribute(document, "ratechange") is "none"
 PASS testScriptAttribute(document, "resize") is "none"
-PASS testScriptAttribute(document, "seeked") is "none"
-PASS testScriptAttribute(document, "seeking") is "none"
-PASS testScriptAttribute(document, "stalled") is "none"
 PASS testScriptAttribute(document, "storage") is "none"
-PASS testScriptAttribute(document, "suspend") is "none"
-PASS testScriptAttribute(document, "timeupdate") is "none"
 PASS testScriptAttribute(document, "transitionend") is "none"
 PASS testScriptAttribute(document, "unload") is "none"
-PASS testScriptAttribute(document, "volumechange") is "none"
-PASS testScriptAttribute(document, "waiting") is "none"
 PASS testScriptAttribute(document, "webkitanimationend") is "none"
 PASS testScriptAttribute(document, "webkitanimationiteration") is "none"
 PASS testScriptAttribute(document, "webkitanimationstart") is "none"

Modified: trunk/LayoutTests/fast/dom/event-handler-attributes.html (184615 => 184616)


--- 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)
@@ -12,12 +12,8 @@
     "webkittransitionend": "webkitTransitionEnd",
 };
 
-const windowEvents = [
+const eventsInGlobalEventHandlers = [
     "abort",
-    "animationend",
-    "animationiteration",
-    "animationstart",
-    "beforeunload",
     "blur",
     "canplay",
     "canplaythrough",
@@ -37,7 +33,6 @@
     "ended",
     "error",
     "focus",
-    "hashchange",
     "input",
     "invalid",
     "keydown",
@@ -47,7 +42,6 @@
     "loadeddata",
     "loadedmetadata",
     "loadstart",
-    "message",
     "mousedown",
     "mouseenter",
     "mouseleave",
@@ -56,162 +50,78 @@
     "mouseover",
     "mouseup",
     "mousewheel",
-    "offline",
-    "online",
-    "pagehide",
-    "pageshow",
     "pause",
     "play",
     "playing",
-    "popstate",
     "progress",
     "ratechange",
     "reset",
-    "resize",
     "scroll",
-    "search",
     "seeked",
     "seeking",
     "select",
     "stalled",
-    "storage",
     "submit",
     "suspend",
     "timeupdate",
-    "transitionend",
-    "unload",
     "volumechange",
     "waiting",
-    "webkitanimationend",
-    "webkitanimationiteration",
-    "webkitanimationstart",
-    "webkittransitionend",
-    "wheel",
+    "search",
+    "wheel"
 ];
 
-const documentEvents = [
-    "abort",
+const eventsInWindowEventHandlers = [
+    "beforeunload",
+    "hashchange",
+    "message",
+    "offline",
+    "online",
+    "pagehide",
+    "pageshow",
+    "popstate",
+    "storage",
+    "unload",
+];
+
+const elementAndDocumentEvents = [
     "beforecopy",
     "beforecut",
     "beforepaste",
-    "blur",
-    "change",
-    "click",
-    "contextmenu",
     "copy",
     "cut",
-    "dblclick",
-    "drag",
-    "dragend",
-    "dragenter",
-    "dragleave",
-    "dragover",
-    "dragstart",
-    "drop",
-    "error",
-    "focus",
-    "input",
-    "invalid",
-    "keydown",
-    "keypress",
-    "keyup",
-    "load",
-    "mousedown",
-    "mouseenter",
-    "mouseleave",
-    "mousemove",
-    "mouseout",
-    "mouseover",
-    "mouseup",
-    "mousewheel",
     "paste",
-    "readystatechange",
-    "reset",
-    "scroll",
-    "search",
-    "select",
-    "selectionchange",
     "selectstart",
-    "submit",
-    "wheel",
 ];
 
-const elementEvents = [
-    "abort",
+const elementAndWindowEvents = [
     "animationend",
     "animationiteration",
     "animationstart",
-    "beforecopy",
-    "beforecut",
-    "beforeload",
-    "beforepaste",
-    "blur",
-    "canplay",
-    "canplaythrough",
-    "change",
-    "click",
-    "contextmenu",
-    "copy",
-    "cut",
-    "dblclick",
-    "drag",
-    "dragend",
-    "dragenter",
-    "dragleave",
-    "dragover",
-    "dragstart",
-    "drop",
-    "durationchange",
-    "emptied",
-    "ended",
-    "error",
-    "focus",
-    "focusin",
-    "focusout",
-    "input",
-    "invalid",
-    "keydown",
-    "keypress",
-    "keyup",
-    "load",
-    "loadeddata",
-    "loadedmetadata",
-    "loadstart",
-    "mousedown",
-    "mouseenter",
-    "mouseleave",
-    "mousemove",
-    "mouseout",
-    "mouseover",
-    "mouseup",
-    "mousewheel",
-    "paste",
-    "pause",
-    "play",
-    "playing",
-    "progress",
-    "ratechange",
-    "reset",
-    "scroll",
-    "search",
-    "seeked",
-    "seeking",
-    "select",
-    "selectstart",
-    "stalled",
-    "submit",
-    "suspend",
-    "timeupdate",
     "transitionend",
-    "volumechange",
-    "waiting",
     "webkitanimationend",
     "webkitanimationiteration",
     "webkitanimationstart",
-    "webkittransitionend",
-    "wheel",
+    "webkittransitionend"
 ];
 
+const uniqueWindowEvents = [
+    "resize"
+];
+
+const uniqueDocumentEvents = [
+    "selectionchange",
+    "readystatechange"
+];
+
+const uniqueElementEvents = [
+    "beforeload"
+];
+
+const elementBodyAndFrameSetEvents = [
+    "focusin",
+    "focusout"
+];
+
 const bodyElementWindowForwardedEvents = [
     "beforeunload",
     "blur",
@@ -336,6 +246,10 @@
     });
 }
 
+const windowEvents = arrayUnion(eventsInGlobalEventHandlers, eventsInWindowEventHandlers, elementAndWindowEvents, uniqueWindowEvents);
+const documentEvents = arrayUnion(eventsInGlobalEventHandlers, elementAndDocumentEvents, uniqueDocumentEvents);
+const elementEvents = arrayUnion(eventsInGlobalEventHandlers, elementAndDocumentEvents, elementAndWindowEvents, elementBodyAndFrameSetEvents, uniqueElementEvents);
+
 const allEventNames = arrayUnion(windowEvents, documentEvents, elementEvents, bodyElementWindowForwardedEvents, bodyElementDocumentForwardedEvents, nonEventNames);
 
 var sectionOpen = false;

Modified: trunk/Source/WebCore/CMakeLists.txt (184615 => 184616)


--- 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)
@@ -400,6 +400,7 @@
     dom/EventException.idl
     dom/EventTarget.idl
     dom/FocusEvent.idl
+    dom/GlobalEventHandlers.idl
     dom/HashChangeEvent.idl
     dom/KeyboardEvent.idl
     dom/MessageChannel.idl
@@ -630,6 +631,7 @@
     page/UserMessageHandlersNamespace.idl
     page/UserMessageHandler.idl
     page/WindowBase64.idl
+    page/WindowEventHandlers.idl
     page/WindowTimers.idl
     page/WorkerNavigator.idl
 

Modified: trunk/Source/WebCore/ChangeLog (184615 => 184616)


--- 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)
@@ -1,3 +1,60 @@
+2015-05-17  Sam Weinig  <s...@webkit.org>
+
+        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.
+
 2015-05-19  Antti Koivisto  <an...@apple.com>
 
         Crash under WebCore::invalidateStyleRecursively

Modified: trunk/Source/WebCore/DerivedSources.make (184615 => 184616)


--- 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)
@@ -284,6 +284,7 @@
     $(WebCore)/dom/EventListener.idl \
     $(WebCore)/dom/EventTarget.idl \
     $(WebCore)/dom/FocusEvent.idl \
+    $(WebCore)/dom/GlobalEventHandlers.idl \
     $(WebCore)/dom/HashChangeEvent.idl \
     $(WebCore)/dom/KeyboardEvent.idl \
     $(WebCore)/dom/MessageChannel.idl \
@@ -502,6 +503,7 @@
     $(WebCore)/page/UserMessageHandlersNamespace.idl \
     $(WebCore)/page/UserMessageHandler.idl \
     $(WebCore)/page/WindowBase64.idl \
+    $(WebCore)/page/WindowEventHandlers.idl \
     $(WebCore)/page/WindowTimers.idl \
     $(WebCore)/page/WorkerNavigator.idl \
     $(WebCore)/plugins/DOMMimeType.idl \

Modified: trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj (184615 => 184616)


--- 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)
@@ -9798,6 +9798,8 @@
 		7C3B79701908757B00B47A2D /* UserMessageHandler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UserMessageHandler.h; sourceTree = "<group>"; };
 		7C3E510818DF8F3500C112F7 /* HTMLConverter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HTMLConverter.h; sourceTree = "<group>"; };
 		7C3E510918DF8F3500C112F7 /* HTMLConverter.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = HTMLConverter.mm; sourceTree = "<group>"; };
+		7C4189AB1B07C170000FA757 /* GlobalEventHandlers.idl */ = {isa = PBXFileReference; lastKnownFileType = text; path = GlobalEventHandlers.idl; sourceTree = "<group>"; };
+		7C4189AC1B07CBF2000FA757 /* WindowEventHandlers.idl */ = {isa = PBXFileReference; lastKnownFileType = text; path = WindowEventHandlers.idl; sourceTree = "<group>"; };
 		7C48A6CE191C9D6500026674 /* WebKitNamespace.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WebKitNamespace.cpp; sourceTree = "<group>"; };
 		7C48A6CF191C9D6500026674 /* WebKitNamespace.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebKitNamespace.h; sourceTree = "<group>"; };
 		7C48A6D2191C9D8E00026674 /* WebKitNamespace.idl */ = {isa = PBXFileReference; lastKnownFileType = text; path = WebKitNamespace.idl; sourceTree = "<group>"; };
@@ -16918,6 +16920,7 @@
 				1403B99609EB13AF00797C7F /* DOMWindow.cpp */,
 				1403B99509EB13AF00797C7F /* DOMWindow.h */,
 				1403B90C09EB124500797C7F /* DOMWindow.idl */,
+				7C4189AC1B07CBF2000FA757 /* WindowEventHandlers.idl */,
 				517FBA17151AA71B00B57959 /* DOMWindowExtension.cpp */,
 				517FBA18151AA71B00B57959 /* DOMWindowExtension.h */,
 				97D2AD0114B823A60093DF32 /* DOMWindowProperty.cpp */,
@@ -23094,6 +23097,7 @@
 				A853123C11D0471B00D4D077 /* FragmentScriptingPermission.h */,
 				0720B09E14D3323500642955 /* GenericEventQueue.cpp */,
 				0720B09F14D3323500642955 /* GenericEventQueue.h */,
+				7C4189AB1B07C170000FA757 /* GlobalEventHandlers.idl */,
 				2442BBF81194C9D300D49469 /* HashChangeEvent.h */,
 				8482B7441198C32E00BFB005 /* HashChangeEvent.idl */,
 				45BAC2AF1360BBAB005DA258 /* IconURL.h */,

Modified: trunk/Source/WebCore/bindings/js/JSEventListener.cpp (184615 => 184616)


--- 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)
@@ -217,6 +217,16 @@
     element.document().setWindowAttributeEventListener(eventType, createEventListenerForEventHandlerAttribute(state, value, *wrapper.globalObject()));
 }
 
+JSC::JSValue windowEventHandlerAttribute(DOMWindow& window, const AtomicString& eventType)
+{
+    return eventHandlerAttribute(window, eventType);
+}
+
+void setWindowEventHandlerAttribute(JSC::ExecState& state, JSC::JSObject& wrapper, DOMWindow& window, const AtomicString& eventType, JSC::JSValue value)
+{
+    setEventHandlerAttribute(state, wrapper, window, eventType, value);
+}
+
 JSC::JSValue documentEventHandlerAttribute(HTMLElement& element, const AtomicString& eventType)
 {
     auto& document = element.document();
@@ -232,4 +242,14 @@
     document.setAttributeEventListener(eventType, createEventListenerForEventHandlerAttribute(state, value, *documentWrapper));
 }
 
+JSC::JSValue documentEventHandlerAttribute(Document& document, const AtomicString& eventType)
+{
+    return eventHandlerAttribute(document, eventType);
+}
+
+void setDocumentEventHandlerAttribute(JSC::ExecState& state, JSC::JSObject& wrapper, Document& document, const AtomicString& eventType, JSC::JSValue value)
+{
+    setEventHandlerAttribute(state, wrapper, document, eventType, value);
+}
+
 } // namespace WebCore

Modified: trunk/Source/WebCore/bindings/js/JSEventListener.h (184615 => 184616)


--- 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)
@@ -29,6 +29,7 @@
 
 namespace WebCore {
 
+class DOMWindow;
 class EventTarget;
 class HTMLElement;
 class JSDOMGlobalObject;
@@ -84,10 +85,14 @@
 // Like the functions above, but for attributes that forward event handlers to the window object rather than setting them on the target.
 JSC::JSValue windowEventHandlerAttribute(HTMLElement&, const AtomicString& eventType);
 void setWindowEventHandlerAttribute(JSC::ExecState&, JSC::JSObject&, HTMLElement&, const AtomicString& eventType, JSC::JSValue);
+JSC::JSValue windowEventHandlerAttribute(DOMWindow&, const AtomicString& eventType);
+void setWindowEventHandlerAttribute(JSC::ExecState&, JSC::JSObject&, DOMWindow&, const AtomicString& eventType, JSC::JSValue);
 
 // Like the functions above, but for attributes that forward event handlers to the document rather than setting them on the target.
 JSC::JSValue documentEventHandlerAttribute(HTMLElement&, const AtomicString& eventType);
 void setDocumentEventHandlerAttribute(JSC::ExecState&, JSC::JSObject&, HTMLElement&, const AtomicString& eventType, JSC::JSValue);
+JSC::JSValue documentEventHandlerAttribute(Document&, const AtomicString& eventType);
+void setDocumentEventHandlerAttribute(JSC::ExecState&, JSC::JSObject&, Document&, const AtomicString& eventType, JSC::JSValue);
 
 Ref<JSEventListener> createJSEventListenerForAdd(JSC::ExecState&, JSC::JSObject& listener, JSC::JSObject& wrapper);
 Ref<JSEventListener> createJSEventListenerForRemove(JSC::ExecState&, JSC::JSObject& listener, JSC::JSObject& wrapper);

Modified: trunk/Source/WebCore/dom/Document.idl (184615 => 184616)


--- 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)
@@ -239,74 +239,6 @@
     [Conditional=FONT_LOAD_EVENTS] readonly attribute FontLoader fonts;
 #endif
 
-    [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;
-
 #if defined(ENABLE_IOS_TOUCH_EVENTS) && ENABLE_IOS_TOUCH_EVENTS
 #include <WebKitAdditions/DocumentIOS.idl>
 #elif defined(ENABLE_TOUCH_EVENTS) && ENABLE_TOUCH_EVENTS
@@ -339,7 +271,32 @@
 
     // http://dev.w3.org/csswg/cssom-view/#dom-document-scrollingelement
     readonly attribute Element scrollingElement;
+
+
+    // 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;
 };
 
 Document implements ParentNode;
 Document implements NonElementParentNode;
+Document implements GlobalEventHandlers;

Modified: trunk/Source/WebCore/dom/Element.idl (184615 => 184616)


--- 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)
@@ -153,119 +153,46 @@
     [Conditional=CSS_REGIONS] readonly attribute DOMString webkitRegionOverset;
     [Conditional=CSS_REGIONS] sequence<Range> webkitGetRegionFlowRanges();
 
-    // 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.
 
-    [NotEnumerable] attribute EventHandler onabort;
-    [NotEnumerable] attribute EventHandler onanimationend;
-    [NotEnumerable] attribute EventHandler onanimationiteration;
-    [NotEnumerable] attribute EventHandler onanimationstart;
+    // 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 onbeforeload;
     [NotEnumerable] attribute EventHandler onbeforepaste;
-    [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 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 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;
     [NotEnumerable] attribute EventHandler onpaste;
-    [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;
     [NotEnumerable] attribute EventHandler onselectstart;
-    [NotEnumerable] attribute EventHandler onstalled;
-    [NotEnumerable] attribute EventHandler onsubmit;
-    [NotEnumerable] attribute EventHandler onsuspend;
-    [NotEnumerable] attribute EventHandler ontimeupdate;
+    [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;
     [NotEnumerable] attribute EventHandler ontransitionend;
-    [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;
+    [NotEnumerable, Conditional=IOS_GESTURE_EVENTS] attribute EventHandler ongesturechange;
+    [NotEnumerable, Conditional=IOS_GESTURE_EVENTS] attribute EventHandler ongestureend;
+    [NotEnumerable, Conditional=IOS_GESTURE_EVENTS] attribute EventHandler ongesturestart;
 
-    // Some sites use the existence of event handler properties for feature detection,
-    // so they actually need to be conditional, not just non-enumerable.
+    // Unique to Element, HTMLBodyElement and HTMLFrameSetElement
+    [NotEnumerable] attribute EventHandler onfocusin;
+    [NotEnumerable] attribute EventHandler onfocusout;
 
-    [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;
-
+    // Unique to Element
+    [NotEnumerable] attribute EventHandler onbeforeload;
     [NotEnumerable, Conditional=ENCRYPTED_MEDIA] attribute EventHandler onwebkitkeyadded;
     [NotEnumerable, Conditional=ENCRYPTED_MEDIA] attribute EventHandler onwebkitkeyerror;
     [NotEnumerable, Conditional=ENCRYPTED_MEDIA] attribute EventHandler onwebkitkeymessage;
-
     [NotEnumerable, Conditional=ENCRYPTED_MEDIA|ENCRYPTED_MEDIA_V2] attribute EventHandler onwebkitneedkey;
-
-    [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;
-
     [NotEnumerable, Conditional=VIDEO_PRESENTATION_MODE] attribute EventHandler onwebkitpresentationmodechanged;
-
     [NotEnumerable, Conditional=WIRELESS_PLAYBACK_TARGET] attribute EventHandler onwebkitcurrentplaybacktargetiswirelesschanged;
     [NotEnumerable, Conditional=WIRELESS_PLAYBACK_TARGET] attribute EventHandler onwebkitplaybacktargetavailabilitychanged;
 };
@@ -273,3 +200,4 @@
 Element implements ChildNode;
 Element implements ParentNode;
 Element implements NonDocumentTypeChildNode;
+Element implements GlobalEventHandlers;

Added: trunk/Source/WebCore/dom/GlobalEventHandlers.idl (0 => 184616)


--- trunk/Source/WebCore/dom/GlobalEventHandlers.idl	                        (rev 0)
+++ trunk/Source/WebCore/dom/GlobalEventHandlers.idl	2015-05-20 05:41:13 UTC (rev 184616)
@@ -0,0 +1,115 @@
+/*
+ * 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;
+};

Modified: trunk/Source/WebCore/html/HTMLBodyElement.idl (184615 => 184616)


--- 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)
@@ -26,37 +26,26 @@
     [Reflect] attribute DOMString text;
     [Reflect] attribute DOMString vLink;
 
-    [NotEnumerable, WindowEventHandler] attribute EventHandler onbeforeunload;
     [NotEnumerable, WindowEventHandler] attribute EventHandler onblur;
     [NotEnumerable, WindowEventHandler] attribute EventHandler onerror;
     [NotEnumerable, WindowEventHandler] attribute EventHandler onfocus;
     [NotEnumerable, WindowEventHandler] attribute EventHandler onfocusin;
     [NotEnumerable, WindowEventHandler] attribute EventHandler onfocusout;
-    [NotEnumerable, WindowEventHandler] attribute EventHandler onhashchange;
     [NotEnumerable, WindowEventHandler] attribute EventHandler onload;
-    [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 onresize;
     [NotEnumerable, WindowEventHandler] attribute EventHandler onscroll;
-    [NotEnumerable, WindowEventHandler] attribute EventHandler onstorage;
-    [NotEnumerable, WindowEventHandler] attribute EventHandler onunload;
 
     [NotEnumerable, WindowEventHandler, Conditional=MOUSE_FORCE_EVENTS] attribute EventHandler onwebkitmouseforcechanged;
     [NotEnumerable, WindowEventHandler, Conditional=MOUSE_FORCE_EVENTS] attribute EventHandler onwebkitmouseforcedown;
     [NotEnumerable, WindowEventHandler, Conditional=MOUSE_FORCE_EVENTS] attribute EventHandler onwebkitmouseforcewillbegin;
     [NotEnumerable, WindowEventHandler, Conditional=MOUSE_FORCE_EVENTS] attribute EventHandler onwebkitmouseforceup;
-
-    [NotEnumerable, WindowEventHandler, Conditional=ORIENTATION_EVENTS] attribute EventHandler onorientationchange;
-
     [NotEnumerable, WindowEventHandler, Conditional=WILL_REVEAL_EDGE_EVENTS] attribute EventHandler onwebkitwillrevealbottom;
     [NotEnumerable, WindowEventHandler, Conditional=WILL_REVEAL_EDGE_EVENTS] attribute EventHandler onwebkitwillrevealleft;
     [NotEnumerable, WindowEventHandler, Conditional=WILL_REVEAL_EDGE_EVENTS] attribute EventHandler onwebkitwillrevealright;
     [NotEnumerable, WindowEventHandler, Conditional=WILL_REVEAL_EDGE_EVENTS] attribute EventHandler onwebkitwillrevealtop;
 
+    // Unique to Document and HTMLBodyElement
     [NotEnumerable, DocumentEventHandler] attribute EventHandler onselectionchange;
 };
 
+HTMLBodyElement implements WindowEventHandlers;

Modified: trunk/Source/WebCore/html/HTMLFrameSetElement.idl (184615 => 184616)


--- 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)
@@ -24,30 +24,19 @@
     [Reflect] attribute DOMString cols;
     [Reflect] attribute DOMString rows;
 
-    [NotEnumerable, WindowEventHandler] attribute EventHandler onbeforeunload;
     [NotEnumerable, WindowEventHandler] attribute EventHandler onblur;
     [NotEnumerable, WindowEventHandler] attribute EventHandler onerror;
     [NotEnumerable, WindowEventHandler] attribute EventHandler onfocus;
     [NotEnumerable, WindowEventHandler] attribute EventHandler onfocusin;
     [NotEnumerable, WindowEventHandler] attribute EventHandler onfocusout;
-    [NotEnumerable, WindowEventHandler] attribute EventHandler onhashchange;
     [NotEnumerable, WindowEventHandler] attribute EventHandler onload;
-    [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 onresize;
     [NotEnumerable, WindowEventHandler] attribute EventHandler onscroll;
-    [NotEnumerable, WindowEventHandler] attribute EventHandler onstorage;
-    [NotEnumerable, WindowEventHandler] attribute EventHandler onunload;
 
-    [NotEnumerable, WindowEventHandler, Conditional=ORIENTATION_EVENTS] attribute EventHandler onorientationchange;
-
     [NotEnumerable, WindowEventHandler, Conditional=WILL_REVEAL_EDGE_EVENTS] attribute EventHandler onwebkitwillrevealbottom;
     [NotEnumerable, WindowEventHandler, Conditional=WILL_REVEAL_EDGE_EVENTS] attribute EventHandler onwebkitwillrevealleft;
     [NotEnumerable, WindowEventHandler, Conditional=WILL_REVEAL_EDGE_EVENTS] attribute EventHandler onwebkitwillrevealright;
     [NotEnumerable, WindowEventHandler, Conditional=WILL_REVEAL_EDGE_EVENTS] attribute EventHandler onwebkitwillrevealtop;
 };
 
+HTMLFrameSetElement implements WindowEventHandlers;

Modified: trunk/Source/WebCore/page/DOMWindow.idl (184615 => 184616)


--- 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)
@@ -186,110 +186,6 @@
 
     [Replaceable] readonly attribute DOMWindowCSS CSS;
 
-    [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;
-
     // EventTarget interface
     [Custom] void addEventListener(DOMString type, EventListener listener, optional boolean useCapture);
     [Custom] void removeEventListener(DOMString type, EventListener listener, optional boolean useCapture);
@@ -320,7 +216,34 @@
     [Conditional=INDEXED_DATABASE] attribute IDBRequestConstructor webkitIDBRequest;
     [Conditional=INDEXED_DATABASE] attribute IDBTransactionConstructor webkitIDBTransaction;
 #endif // defined(LANGUAGE_JAVASCRIPT)
+
+
+    // 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;
 };
 
-DOMWindow implements WindowTimers;
+DOMWindow implements GlobalEventHandlers;
 DOMWindow implements WindowBase64;
+DOMWindow implements WindowEventHandlers;
+DOMWindow implements WindowTimers;

Added: trunk/Source/WebCore/page/WindowEventHandlers.idl (0 => 184616)


--- trunk/Source/WebCore/page/WindowEventHandlers.idl	                        (rev 0)
+++ trunk/Source/WebCore/page/WindowEventHandlers.idl	2015-05-20 05:41:13 UTC (rev 184616)
@@ -0,0 +1,52 @@
+/*
+ * 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;
+};
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to