Some event handler fixes
authordarin@apple.com <darin@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 11 Mar 2015 02:21:20 +0000 (02:21 +0000)
committerdarin@apple.com <darin@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 11 Mar 2015 02:21:20 +0000 (02:21 +0000)
https://bugs.webkit.org/show_bug.cgi?id=142474

Reviewed by Anders Carlsson.

Source/JavaScriptCore:

* inspector/InjectedScriptManager.cpp:
(Inspector::InjectedScriptManager::createInjectedScript): Call clearException.
I spotted the fact it was missing by auditing all the calls to JSC::call.

Source/WebCore:

* bindings/scripts/CodeGenerator.pm:
(GenerateConditionalStringFromAttributeValue): Improved the algorithm here to
handle combinations of & and | in conditional expressions; that's coming up when
combining conditionals for includes in NavigatorContentUtils.idl.

* bindings/scripts/CodeGeneratorJS.pm:
(AddToImplIncludes): Removed the rudimentary attempt to split and merge
conditionals involving | here; instead we rely on the rules in the
GenerateConditionalStringFromAttributeValue to handle this.
(GenerateImplementation): Passed new "conditional" argument to JSValueToNative.
(GenerateParametersCheck): Pass "conditional" argument to AddToImplIncludes and
JSValueToNative.
(JSValueToNative): Changed to take "conditional" as an argument, since getting
it from the signature won't work for a method parameter.
(WriteData): Merge duplicates based on the result of the
GenerateConditionalStringFromAttributeValue function rather than on the values
passed into that function, since that function converts conditionals into a
canonical form and can make two strings equal that don't start out that way.

* bindings/scripts/CodeGeneratorObjC.pm:
(SkipAttribute): Added code to guarantee we won't make Objective-C bindings
for event handlers. We will rename EventListener to EventHandler in a
subsequent patch.

* bindings/scripts/test/JS/JSTestInterface.cpp: Updated for a progression caused
by the better logic for conditional includes.

* bindings/scripts/test/JS/JSTestObj.cpp: Updated for change to the test below.
* bindings/scripts/test/TestObj.idl: Added test of an event handler attribute.

* dom/Document.idl: Removed unneeded language #if around event handler
attributes. Removed all the commented out event handler attributes.
Sorted event handler attributes into a single section rather than separating
"standard" from "extensions". Sorted the conditional event handler attributes
into paragraphs at the bottom. We will probably make them all unconditional
in a subsequent patch.

* dom/Element.idl: Removed unneeded language #if around event handler
attributes. Removed all the commented out event handler attributes.
Moved event handler attributes here from all derived element classes to
match the approach from the HTML standard. Also resorted the attributes
as in Document above.

* html/HTMLBodyElement.idl: Removed unneeded language #if around event handler
attributes. Removed all the commented out event handler attributes.
Sorted event handler attributes into a single section rather than separating
"standard" from "overrides".

* html/HTMLElement.cpp:
(WebCore::HTMLElement::populateEventNameForAttributeLocalNameMap):
Added a few missing attribute names, and re-sorted a bit. Moved any from
element subclasses here.

* html/HTMLFormElement.cpp:
(WebCore::HTMLFormElement::parseAttribute): Moved code to handle
oncomplete and oncompleteerror to Element and HTMLElement.
* html/HTMLFormElement.idl: Ditto.

* html/HTMLFrameSetElement.idl: Removed #if and resorted as above.

* html/HTMLInputElement.cpp:
(WebCore::HTMLInputElement::parseAttribute): Moved code to handle
onsearch to HTMLElement.

* html/HTMLMediaElement.cpp:
(WebCore::HTMLMediaElement::parseAttribute): Moved code to handle
all the event handler attributes to HTMLElement.
(WebCore::HTMLMediaElement::updateCaptionContainer): Removed a redundant
if statement I noticed while auditing all calls to JSC::call.
(WebCore::HTMLMediaElement::didAddUserAgentShadowRoot): Added clearException.
I noticed this was missing because a flawed earlier version of my patch was
causing the script to fail, leaving an exception behind that caused an
assertion later. So I audited all calls to JSC::call looking for this mistake.

* html/HTMLMediaElement.idl: Moved all the event handlers from here to
Element. Also changed everything possible to use Conditional instead of #if.

* html/HTMLPlugInImageElement.cpp:
(WebCore::HTMLPlugInImageElement::didAddUserAgentShadowRoot): Added
clearException. Noticed it was missing while auditing all calls to JSC::call.

* html/HTMLVideoElement.cpp:
(WebCore::HTMLVideoElement::parseAttribute): Moved event handler code to
HTMLElement.

* html/HTMLVideoElement.idl: Moved event handler to Element.idl and use
Conditional instead of #if.

* page/DOMWindow.idl: Use Conditional instead of #if and tidy up the event
handlers section.

* svg/svgattrs.in: Remove six unused attribute names. Presumably used in
some older scheme to implement event handlers but no longer used at all.

LayoutTests:

* fast/dom/event-handler-attributes-expected.txt: Updated for new tests and to
expect more tests to pass.

* fast/dom/event-handler-attributes.html: Added testing of event handlers on
non-HTML, non-SVG elements, and on SVG elements. Also removed
webkitpresentationmodechanged from the test, for now at least.

* fast/events/event-attribute-expected.txt: Updated to expect more tests to pass.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@181358 268f45cc-cd09-0410-ab3c-d52691b4dbfc

28 files changed:
LayoutTests/ChangeLog
LayoutTests/fast/dom/event-handler-attributes-expected.txt
LayoutTests/fast/dom/event-handler-attributes.html
LayoutTests/fast/events/event-attribute-expected.txt
Source/JavaScriptCore/ChangeLog
Source/JavaScriptCore/inspector/InjectedScriptManager.cpp
Source/WebCore/ChangeLog
Source/WebCore/bindings/scripts/CodeGenerator.pm
Source/WebCore/bindings/scripts/CodeGeneratorJS.pm
Source/WebCore/bindings/scripts/CodeGeneratorObjC.pm
Source/WebCore/bindings/scripts/test/JS/JSTestInterface.cpp
Source/WebCore/bindings/scripts/test/JS/JSTestObj.cpp
Source/WebCore/bindings/scripts/test/TestObj.idl
Source/WebCore/dom/Document.idl
Source/WebCore/dom/Element.idl
Source/WebCore/html/HTMLBodyElement.idl
Source/WebCore/html/HTMLElement.cpp
Source/WebCore/html/HTMLFormElement.cpp
Source/WebCore/html/HTMLFormElement.idl
Source/WebCore/html/HTMLFrameSetElement.idl
Source/WebCore/html/HTMLInputElement.cpp
Source/WebCore/html/HTMLMediaElement.cpp
Source/WebCore/html/HTMLMediaElement.idl
Source/WebCore/html/HTMLPlugInImageElement.cpp
Source/WebCore/html/HTMLVideoElement.cpp
Source/WebCore/html/HTMLVideoElement.idl
Source/WebCore/page/DOMWindow.idl
Source/WebCore/svg/svgattrs.in

index e6290eb..a27305e 100644 (file)
@@ -1,3 +1,19 @@
+2015-03-09  Darin Adler  <darin@apple.com>
+
+        Some event handler fixes
+        https://bugs.webkit.org/show_bug.cgi?id=142474
+
+        Reviewed by Anders Carlsson.
+
+        * fast/dom/event-handler-attributes-expected.txt: Updated for new tests and to
+        expect more tests to pass.
+
+        * fast/dom/event-handler-attributes.html: Added testing of event handlers on
+        non-HTML, non-SVG elements, and on SVG elements. Also removed
+        webkitpresentationmodechanged from the test, for now at least.
+
+        * fast/events/event-attribute-expected.txt: Updated to expect more tests to pass.
+
 2015-03-10  Brent Fulgham  <bfulgham@apple.com>
 
         CSS scroll-snap-destination and scroll-snap-coordinate are not honoring position values
index 8fc8bb4..756cbd1 100644 (file)
@@ -84,6 +84,7 @@ Event names we expect not to be able to set on the window object
 
 PASS testScriptAttribute(window, "beforecopy") is "none"
 PASS testScriptAttribute(window, "beforecut") is "none"
+PASS testScriptAttribute(window, "beforeload") is "none"
 PASS testScriptAttribute(window, "beforepaste") is "none"
 PASS testScriptAttribute(window, "copy") is "none"
 PASS testScriptAttribute(window, "cut") is "none"
@@ -98,7 +99,6 @@ PASS testScriptAttribute(window, "touchcancel") is "none"
 PASS testScriptAttribute(window, "touchend") is "none"
 PASS testScriptAttribute(window, "touchmove") is "none"
 PASS testScriptAttribute(window, "touchstart") is "none"
-PASS testScriptAttribute(window, "webkitpresentationmodechanged") is "none"
 
 Event names we expect to be able to set on the document
 
@@ -152,6 +152,7 @@ Event names we expect not to be able to set on the document
 PASS testScriptAttribute(document, "animationend") is "none"
 PASS testScriptAttribute(document, "animationiteration") is "none"
 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"
@@ -194,21 +195,21 @@ PASS testScriptAttribute(document, "waiting") is "none"
 PASS testScriptAttribute(document, "webkitanimationend") is "none"
 PASS testScriptAttribute(document, "webkitanimationiteration") is "none"
 PASS testScriptAttribute(document, "webkitanimationstart") is "none"
-PASS testScriptAttribute(document, "webkitpresentationmodechanged") is "none"
 PASS testScriptAttribute(document, "webkittransitionend") is "none"
 
 Event names we expect to be able to set on an element (tested on the <html> element)
 
 PASS testElementAttribute(element, "abort") is "target"
-FAIL testElementAttribute(element, "animationend") should be target. Was script: none; content: target.
-FAIL testElementAttribute(element, "animationiteration") should be target. Was script: none; content: target.
-FAIL testElementAttribute(element, "animationstart") should be target. Was script: none; content: target.
+PASS testElementAttribute(element, "animationend") is "target"
+PASS testElementAttribute(element, "animationiteration") is "target"
+PASS testElementAttribute(element, "animationstart") is "target"
 PASS testElementAttribute(element, "beforecopy") is "target"
 PASS testElementAttribute(element, "beforecut") is "target"
+PASS testElementAttribute(element, "beforeload") is "target"
 PASS testElementAttribute(element, "beforepaste") is "target"
 PASS testElementAttribute(element, "blur") is "target"
-FAIL testElementAttribute(element, "canplay") should be target. Was script: none; content: target.
-FAIL testElementAttribute(element, "canplaythrough") should be target. Was script: none; content: target.
+PASS testElementAttribute(element, "canplay") is "target"
+PASS testElementAttribute(element, "canplaythrough") is "target"
 PASS testElementAttribute(element, "change") is "target"
 PASS testElementAttribute(element, "click") is "target"
 PASS testElementAttribute(element, "contextmenu") is "target"
@@ -222,22 +223,22 @@ PASS testElementAttribute(element, "dragleave") is "target"
 PASS testElementAttribute(element, "dragover") is "target"
 PASS testElementAttribute(element, "dragstart") is "target"
 PASS testElementAttribute(element, "drop") is "target"
-FAIL testElementAttribute(element, "durationchange") should be target. Was script: none; content: target.
-FAIL testElementAttribute(element, "emptied") should be target. Was script: none; content: target.
-FAIL testElementAttribute(element, "ended") should be target. Was script: none; content: target.
+PASS testElementAttribute(element, "durationchange") is "target"
+PASS testElementAttribute(element, "emptied") is "target"
+PASS testElementAttribute(element, "ended") is "target"
 PASS testElementAttribute(element, "error") is "target"
 PASS testElementAttribute(element, "focus") is "target"
-FAIL testElementAttribute(element, "focusin") should be target. Was script: none; content: target.
-FAIL testElementAttribute(element, "focusout") should be target. Was script: none; content: target.
+PASS testElementAttribute(element, "focusin") is "target"
+PASS testElementAttribute(element, "focusout") is "target"
 PASS testElementAttribute(element, "input") is "target"
 PASS testElementAttribute(element, "invalid") is "target"
 PASS testElementAttribute(element, "keydown") is "target"
 PASS testElementAttribute(element, "keypress") is "target"
 PASS testElementAttribute(element, "keyup") is "target"
 PASS testElementAttribute(element, "load") is "target"
-FAIL testElementAttribute(element, "loadeddata") should be target. Was script: none; content: target.
-FAIL testElementAttribute(element, "loadedmetadata") should be target. Was script: none; content: target.
-FAIL testElementAttribute(element, "loadstart") should be target. Was script: none; content: target.
+PASS testElementAttribute(element, "loadeddata") is "target"
+PASS testElementAttribute(element, "loadedmetadata") is "target"
+PASS testElementAttribute(element, "loadstart") is "target"
 PASS testElementAttribute(element, "mousedown") is "target"
 PASS testElementAttribute(element, "mouseenter") is "target"
 PASS testElementAttribute(element, "mouseleave") is "target"
@@ -247,33 +248,32 @@ PASS testElementAttribute(element, "mouseover") is "target"
 PASS testElementAttribute(element, "mouseup") is "target"
 PASS testElementAttribute(element, "mousewheel") is "target"
 PASS testElementAttribute(element, "paste") is "target"
-FAIL testElementAttribute(element, "pause") should be target. Was script: none; content: target.
-FAIL testElementAttribute(element, "play") should be target. Was script: none; content: target.
-FAIL testElementAttribute(element, "playing") should be target. Was script: none; content: target.
-FAIL testElementAttribute(element, "progress") should be target. Was script: none; content: target.
-FAIL testElementAttribute(element, "ratechange") should be target. Was script: none; content: target.
+PASS testElementAttribute(element, "pause") is "target"
+PASS testElementAttribute(element, "play") is "target"
+PASS testElementAttribute(element, "playing") is "target"
+PASS testElementAttribute(element, "progress") is "target"
+PASS testElementAttribute(element, "ratechange") is "target"
 PASS testElementAttribute(element, "reset") is "target"
 PASS testElementAttribute(element, "scroll") is "target"
-FAIL testElementAttribute(element, "search") should be target. Was script: target; content: none.
-FAIL testElementAttribute(element, "seeked") should be target. Was script: none; content: target.
-FAIL testElementAttribute(element, "seeking") should be target. Was script: none; content: target.
+PASS testElementAttribute(element, "search") is "target"
+PASS testElementAttribute(element, "seeked") is "target"
+PASS testElementAttribute(element, "seeking") is "target"
 PASS testElementAttribute(element, "select") is "target"
 PASS testElementAttribute(element, "selectstart") is "target"
-FAIL testElementAttribute(element, "stalled") should be target. Was script: none; content: target.
+PASS testElementAttribute(element, "stalled") is "target"
 PASS testElementAttribute(element, "submit") is "target"
-FAIL testElementAttribute(element, "suspend") should be target. Was script: none; content: target.
-FAIL testElementAttribute(element, "timeupdate") should be target. Was script: none; content: target.
-FAIL testElementAttribute(element, "touchcancel") should be target. Was script: none; content: target.
-FAIL testElementAttribute(element, "touchend") should be target. Was script: none; content: target.
-FAIL testElementAttribute(element, "touchmove") should be target. Was script: none; content: target.
-FAIL testElementAttribute(element, "touchstart") should be target. Was script: none; content: target.
-FAIL testElementAttribute(element, "transitionend") should be target. Was script: none; content: target.
-FAIL testElementAttribute(element, "volumechange") should be target. Was script: none; content: target.
-FAIL testElementAttribute(element, "waiting") should be target. Was script: none; content: target.
+PASS testElementAttribute(element, "suspend") is "target"
+PASS testElementAttribute(element, "timeupdate") is "target"
+PASS testElementAttribute(element, "touchcancel") is "target"
+PASS testElementAttribute(element, "touchend") is "target"
+PASS testElementAttribute(element, "touchmove") is "target"
+PASS testElementAttribute(element, "touchstart") is "target"
+PASS testElementAttribute(element, "transitionend") is "target"
+PASS testElementAttribute(element, "volumechange") is "target"
+PASS testElementAttribute(element, "waiting") is "target"
 FAIL testElementAttribute(element, "webkitanimationend") should be target. Was script: none; content: target.
 FAIL testElementAttribute(element, "webkitanimationiteration") should be target. Was script: none; content: target.
 FAIL testElementAttribute(element, "webkitanimationstart") should be target. Was script: none; content: target.
-FAIL testElementAttribute(element, "webkitpresentationmodechanged") should be target. Was none.
 FAIL testElementAttribute(element, "webkittransitionend") should be target. Was script: none; content: target.
 PASS testElementAttribute(element, "wheel") is "target"
 
@@ -297,15 +297,16 @@ PASS testElementAttribute(element, "unload") is "none"
 Event names we expect to be able to set on an element (tested on the <input> element)
 
 PASS testElementAttribute(inputElement, "abort") is "target"
-FAIL testElementAttribute(inputElement, "animationend") should be target. Was script: none; content: target.
-FAIL testElementAttribute(inputElement, "animationiteration") should be target. Was script: none; content: target.
-FAIL testElementAttribute(inputElement, "animationstart") should be target. Was script: none; content: target.
+PASS testElementAttribute(inputElement, "animationend") is "target"
+PASS testElementAttribute(inputElement, "animationiteration") is "target"
+PASS testElementAttribute(inputElement, "animationstart") is "target"
 PASS testElementAttribute(inputElement, "beforecopy") is "target"
 PASS testElementAttribute(inputElement, "beforecut") is "target"
+PASS testElementAttribute(inputElement, "beforeload") is "target"
 PASS testElementAttribute(inputElement, "beforepaste") is "target"
 PASS testElementAttribute(inputElement, "blur") is "target"
-FAIL testElementAttribute(inputElement, "canplay") should be target. Was script: none; content: target.
-FAIL testElementAttribute(inputElement, "canplaythrough") should be target. Was script: none; content: target.
+PASS testElementAttribute(inputElement, "canplay") is "target"
+PASS testElementAttribute(inputElement, "canplaythrough") is "target"
 PASS testElementAttribute(inputElement, "change") is "target"
 PASS testElementAttribute(inputElement, "click") is "target"
 PASS testElementAttribute(inputElement, "contextmenu") is "target"
@@ -319,22 +320,22 @@ PASS testElementAttribute(inputElement, "dragleave") is "target"
 PASS testElementAttribute(inputElement, "dragover") is "target"
 PASS testElementAttribute(inputElement, "dragstart") is "target"
 PASS testElementAttribute(inputElement, "drop") is "target"
-FAIL testElementAttribute(inputElement, "durationchange") should be target. Was script: none; content: target.
-FAIL testElementAttribute(inputElement, "emptied") should be target. Was script: none; content: target.
-FAIL testElementAttribute(inputElement, "ended") should be target. Was script: none; content: target.
+PASS testElementAttribute(inputElement, "durationchange") is "target"
+PASS testElementAttribute(inputElement, "emptied") is "target"
+PASS testElementAttribute(inputElement, "ended") is "target"
 PASS testElementAttribute(inputElement, "error") is "target"
 PASS testElementAttribute(inputElement, "focus") is "target"
-FAIL testElementAttribute(inputElement, "focusin") should be target. Was script: none; content: target.
-FAIL testElementAttribute(inputElement, "focusout") should be target. Was script: none; content: target.
+PASS testElementAttribute(inputElement, "focusin") is "target"
+PASS testElementAttribute(inputElement, "focusout") is "target"
 PASS testElementAttribute(inputElement, "input") is "target"
 PASS testElementAttribute(inputElement, "invalid") is "target"
 PASS testElementAttribute(inputElement, "keydown") is "target"
 PASS testElementAttribute(inputElement, "keypress") is "target"
 PASS testElementAttribute(inputElement, "keyup") is "target"
 PASS testElementAttribute(inputElement, "load") is "target"
-FAIL testElementAttribute(inputElement, "loadeddata") should be target. Was script: none; content: target.
-FAIL testElementAttribute(inputElement, "loadedmetadata") should be target. Was script: none; content: target.
-FAIL testElementAttribute(inputElement, "loadstart") should be target. Was script: none; content: target.
+PASS testElementAttribute(inputElement, "loadeddata") is "target"
+PASS testElementAttribute(inputElement, "loadedmetadata") is "target"
+PASS testElementAttribute(inputElement, "loadstart") is "target"
 PASS testElementAttribute(inputElement, "mousedown") is "target"
 PASS testElementAttribute(inputElement, "mouseenter") is "target"
 PASS testElementAttribute(inputElement, "mouseleave") is "target"
@@ -344,33 +345,32 @@ PASS testElementAttribute(inputElement, "mouseover") is "target"
 PASS testElementAttribute(inputElement, "mouseup") is "target"
 PASS testElementAttribute(inputElement, "mousewheel") is "target"
 PASS testElementAttribute(inputElement, "paste") is "target"
-FAIL testElementAttribute(inputElement, "pause") should be target. Was script: none; content: target.
-FAIL testElementAttribute(inputElement, "play") should be target. Was script: none; content: target.
-FAIL testElementAttribute(inputElement, "playing") should be target. Was script: none; content: target.
-FAIL testElementAttribute(inputElement, "progress") should be target. Was script: none; content: target.
-FAIL testElementAttribute(inputElement, "ratechange") should be target. Was script: none; content: target.
+PASS testElementAttribute(inputElement, "pause") is "target"
+PASS testElementAttribute(inputElement, "play") is "target"
+PASS testElementAttribute(inputElement, "playing") is "target"
+PASS testElementAttribute(inputElement, "progress") is "target"
+PASS testElementAttribute(inputElement, "ratechange") is "target"
 PASS testElementAttribute(inputElement, "reset") is "target"
 PASS testElementAttribute(inputElement, "scroll") is "target"
 PASS testElementAttribute(inputElement, "search") is "target"
-FAIL testElementAttribute(inputElement, "seeked") should be target. Was script: none; content: target.
-FAIL testElementAttribute(inputElement, "seeking") should be target. Was script: none; content: target.
+PASS testElementAttribute(inputElement, "seeked") is "target"
+PASS testElementAttribute(inputElement, "seeking") is "target"
 PASS testElementAttribute(inputElement, "select") is "target"
 PASS testElementAttribute(inputElement, "selectstart") is "target"
-FAIL testElementAttribute(inputElement, "stalled") should be target. Was script: none; content: target.
+PASS testElementAttribute(inputElement, "stalled") is "target"
 PASS testElementAttribute(inputElement, "submit") is "target"
-FAIL testElementAttribute(inputElement, "suspend") should be target. Was script: none; content: target.
-FAIL testElementAttribute(inputElement, "timeupdate") should be target. Was script: none; content: target.
-FAIL testElementAttribute(inputElement, "touchcancel") should be target. Was script: none; content: target.
-FAIL testElementAttribute(inputElement, "touchend") should be target. Was script: none; content: target.
-FAIL testElementAttribute(inputElement, "touchmove") should be target. Was script: none; content: target.
-FAIL testElementAttribute(inputElement, "touchstart") should be target. Was script: none; content: target.
-FAIL testElementAttribute(inputElement, "transitionend") should be target. Was script: none; content: target.
-FAIL testElementAttribute(inputElement, "volumechange") should be target. Was script: none; content: target.
-FAIL testElementAttribute(inputElement, "waiting") should be target. Was script: none; content: target.
+PASS testElementAttribute(inputElement, "suspend") is "target"
+PASS testElementAttribute(inputElement, "timeupdate") is "target"
+PASS testElementAttribute(inputElement, "touchcancel") is "target"
+PASS testElementAttribute(inputElement, "touchend") is "target"
+PASS testElementAttribute(inputElement, "touchmove") is "target"
+PASS testElementAttribute(inputElement, "touchstart") is "target"
+PASS testElementAttribute(inputElement, "transitionend") is "target"
+PASS testElementAttribute(inputElement, "volumechange") is "target"
+PASS testElementAttribute(inputElement, "waiting") is "target"
 FAIL testElementAttribute(inputElement, "webkitanimationend") should be target. Was script: none; content: target.
 FAIL testElementAttribute(inputElement, "webkitanimationiteration") should be target. Was script: none; content: target.
 FAIL testElementAttribute(inputElement, "webkitanimationstart") should be target. Was script: none; content: target.
-FAIL testElementAttribute(inputElement, "webkitpresentationmodechanged") should be target. Was none.
 FAIL testElementAttribute(inputElement, "webkittransitionend") should be target. Was script: none; content: target.
 PASS testElementAttribute(inputElement, "wheel") is "target"
 
@@ -394,11 +394,12 @@ PASS testElementAttribute(inputElement, "unload") is "none"
 Event names we expect to be able to set on an element (tested on the <audio> element)
 
 PASS testElementAttribute(audioElement, "abort") is "target"
-FAIL testElementAttribute(audioElement, "animationend") should be target. Was script: none; content: target.
-FAIL testElementAttribute(audioElement, "animationiteration") should be target. Was script: none; content: target.
-FAIL testElementAttribute(audioElement, "animationstart") should be target. Was script: none; content: target.
+PASS testElementAttribute(audioElement, "animationend") is "target"
+PASS testElementAttribute(audioElement, "animationiteration") is "target"
+PASS testElementAttribute(audioElement, "animationstart") is "target"
 PASS testElementAttribute(audioElement, "beforecopy") is "target"
 PASS testElementAttribute(audioElement, "beforecut") is "target"
+PASS testElementAttribute(audioElement, "beforeload") is "target"
 PASS testElementAttribute(audioElement, "beforepaste") is "target"
 PASS testElementAttribute(audioElement, "blur") is "target"
 PASS testElementAttribute(audioElement, "canplay") is "target"
@@ -421,8 +422,8 @@ PASS testElementAttribute(audioElement, "emptied") is "target"
 PASS testElementAttribute(audioElement, "ended") is "target"
 PASS testElementAttribute(audioElement, "error") is "target"
 PASS testElementAttribute(audioElement, "focus") is "target"
-FAIL testElementAttribute(audioElement, "focusin") should be target. Was script: none; content: target.
-FAIL testElementAttribute(audioElement, "focusout") should be target. Was script: none; content: target.
+PASS testElementAttribute(audioElement, "focusin") is "target"
+PASS testElementAttribute(audioElement, "focusout") is "target"
 PASS testElementAttribute(audioElement, "input") is "target"
 PASS testElementAttribute(audioElement, "invalid") is "target"
 PASS testElementAttribute(audioElement, "keydown") is "target"
@@ -431,7 +432,7 @@ PASS testElementAttribute(audioElement, "keyup") is "target"
 PASS testElementAttribute(audioElement, "load") is "target"
 PASS testElementAttribute(audioElement, "loadeddata") is "target"
 PASS testElementAttribute(audioElement, "loadedmetadata") is "target"
-FAIL testElementAttribute(audioElement, "loadstart") should be target. Was script: none; content: target.
+PASS testElementAttribute(audioElement, "loadstart") is "target"
 PASS testElementAttribute(audioElement, "mousedown") is "target"
 PASS testElementAttribute(audioElement, "mouseenter") is "target"
 PASS testElementAttribute(audioElement, "mouseleave") is "target"
@@ -444,30 +445,29 @@ PASS testElementAttribute(audioElement, "paste") is "target"
 PASS testElementAttribute(audioElement, "pause") is "target"
 PASS testElementAttribute(audioElement, "play") is "target"
 PASS testElementAttribute(audioElement, "playing") is "target"
-FAIL testElementAttribute(audioElement, "progress") should be target. Was script: none; content: target.
+PASS testElementAttribute(audioElement, "progress") is "target"
 PASS testElementAttribute(audioElement, "ratechange") is "target"
 PASS testElementAttribute(audioElement, "reset") is "target"
 PASS testElementAttribute(audioElement, "scroll") is "target"
-FAIL testElementAttribute(audioElement, "search") should be target. Was script: target; content: none.
-FAIL testElementAttribute(audioElement, "seeked") should be target. Was script: none; content: target.
-FAIL testElementAttribute(audioElement, "seeking") should be target. Was script: none; content: target.
+PASS testElementAttribute(audioElement, "search") is "target"
+PASS testElementAttribute(audioElement, "seeked") is "target"
+PASS testElementAttribute(audioElement, "seeking") is "target"
 PASS testElementAttribute(audioElement, "select") is "target"
 PASS testElementAttribute(audioElement, "selectstart") is "target"
-FAIL testElementAttribute(audioElement, "stalled") should be target. Was script: none; content: target.
+PASS testElementAttribute(audioElement, "stalled") is "target"
 PASS testElementAttribute(audioElement, "submit") is "target"
-FAIL testElementAttribute(audioElement, "suspend") should be target. Was script: none; content: target.
+PASS testElementAttribute(audioElement, "suspend") is "target"
 PASS testElementAttribute(audioElement, "timeupdate") is "target"
-FAIL testElementAttribute(audioElement, "touchcancel") should be target. Was script: none; content: target.
-FAIL testElementAttribute(audioElement, "touchend") should be target. Was script: none; content: target.
-FAIL testElementAttribute(audioElement, "touchmove") should be target. Was script: none; content: target.
-FAIL testElementAttribute(audioElement, "touchstart") should be target. Was script: none; content: target.
-FAIL testElementAttribute(audioElement, "transitionend") should be target. Was script: none; content: target.
+PASS testElementAttribute(audioElement, "touchcancel") is "target"
+PASS testElementAttribute(audioElement, "touchend") is "target"
+PASS testElementAttribute(audioElement, "touchmove") is "target"
+PASS testElementAttribute(audioElement, "touchstart") is "target"
+PASS testElementAttribute(audioElement, "transitionend") is "target"
 PASS testElementAttribute(audioElement, "volumechange") is "target"
 PASS testElementAttribute(audioElement, "waiting") is "target"
 FAIL testElementAttribute(audioElement, "webkitanimationend") should be target. Was script: none; content: target.
 FAIL testElementAttribute(audioElement, "webkitanimationiteration") should be target. Was script: none; content: target.
 FAIL testElementAttribute(audioElement, "webkitanimationstart") should be target. Was script: none; content: target.
-FAIL testElementAttribute(audioElement, "webkitpresentationmodechanged") should be target. Was none.
 FAIL testElementAttribute(audioElement, "webkittransitionend") should be target. Was script: none; content: target.
 PASS testElementAttribute(audioElement, "wheel") is "target"
 
@@ -491,11 +491,12 @@ PASS testElementAttribute(audioElement, "unload") is "none"
 Event names we expect to be able to set on an element (tested on the <video> element)
 
 PASS testElementAttribute(videoElement, "abort") is "target"
-FAIL testElementAttribute(videoElement, "animationend") should be target. Was script: none; content: target.
-FAIL testElementAttribute(videoElement, "animationiteration") should be target. Was script: none; content: target.
-FAIL testElementAttribute(videoElement, "animationstart") should be target. Was script: none; content: target.
+PASS testElementAttribute(videoElement, "animationend") is "target"
+PASS testElementAttribute(videoElement, "animationiteration") is "target"
+PASS testElementAttribute(videoElement, "animationstart") is "target"
 PASS testElementAttribute(videoElement, "beforecopy") is "target"
 PASS testElementAttribute(videoElement, "beforecut") is "target"
+PASS testElementAttribute(videoElement, "beforeload") is "target"
 PASS testElementAttribute(videoElement, "beforepaste") is "target"
 PASS testElementAttribute(videoElement, "blur") is "target"
 PASS testElementAttribute(videoElement, "canplay") is "target"
@@ -518,8 +519,8 @@ PASS testElementAttribute(videoElement, "emptied") is "target"
 PASS testElementAttribute(videoElement, "ended") is "target"
 PASS testElementAttribute(videoElement, "error") is "target"
 PASS testElementAttribute(videoElement, "focus") is "target"
-FAIL testElementAttribute(videoElement, "focusin") should be target. Was script: none; content: target.
-FAIL testElementAttribute(videoElement, "focusout") should be target. Was script: none; content: target.
+PASS testElementAttribute(videoElement, "focusin") is "target"
+PASS testElementAttribute(videoElement, "focusout") is "target"
 PASS testElementAttribute(videoElement, "input") is "target"
 PASS testElementAttribute(videoElement, "invalid") is "target"
 PASS testElementAttribute(videoElement, "keydown") is "target"
@@ -528,7 +529,7 @@ PASS testElementAttribute(videoElement, "keyup") is "target"
 PASS testElementAttribute(videoElement, "load") is "target"
 PASS testElementAttribute(videoElement, "loadeddata") is "target"
 PASS testElementAttribute(videoElement, "loadedmetadata") is "target"
-FAIL testElementAttribute(videoElement, "loadstart") should be target. Was script: none; content: target.
+PASS testElementAttribute(videoElement, "loadstart") is "target"
 PASS testElementAttribute(videoElement, "mousedown") is "target"
 PASS testElementAttribute(videoElement, "mouseenter") is "target"
 PASS testElementAttribute(videoElement, "mouseleave") is "target"
@@ -541,30 +542,29 @@ PASS testElementAttribute(videoElement, "paste") is "target"
 PASS testElementAttribute(videoElement, "pause") is "target"
 PASS testElementAttribute(videoElement, "play") is "target"
 PASS testElementAttribute(videoElement, "playing") is "target"
-FAIL testElementAttribute(videoElement, "progress") should be target. Was script: none; content: target.
+PASS testElementAttribute(videoElement, "progress") is "target"
 PASS testElementAttribute(videoElement, "ratechange") is "target"
 PASS testElementAttribute(videoElement, "reset") is "target"
 PASS testElementAttribute(videoElement, "scroll") is "target"
-FAIL testElementAttribute(videoElement, "search") should be target. Was script: target; content: none.
-FAIL testElementAttribute(videoElement, "seeked") should be target. Was script: none; content: target.
-FAIL testElementAttribute(videoElement, "seeking") should be target. Was script: none; content: target.
+PASS testElementAttribute(videoElement, "search") is "target"
+PASS testElementAttribute(videoElement, "seeked") is "target"
+PASS testElementAttribute(videoElement, "seeking") is "target"
 PASS testElementAttribute(videoElement, "select") is "target"
 PASS testElementAttribute(videoElement, "selectstart") is "target"
-FAIL testElementAttribute(videoElement, "stalled") should be target. Was script: none; content: target.
+PASS testElementAttribute(videoElement, "stalled") is "target"
 PASS testElementAttribute(videoElement, "submit") is "target"
-FAIL testElementAttribute(videoElement, "suspend") should be target. Was script: none; content: target.
+PASS testElementAttribute(videoElement, "suspend") is "target"
 PASS testElementAttribute(videoElement, "timeupdate") is "target"
-FAIL testElementAttribute(videoElement, "touchcancel") should be target. Was script: none; content: target.
-FAIL testElementAttribute(videoElement, "touchend") should be target. Was script: none; content: target.
-FAIL testElementAttribute(videoElement, "touchmove") should be target. Was script: none; content: target.
-FAIL testElementAttribute(videoElement, "touchstart") should be target. Was script: none; content: target.
-FAIL testElementAttribute(videoElement, "transitionend") should be target. Was script: none; content: target.
+PASS testElementAttribute(videoElement, "touchcancel") is "target"
+PASS testElementAttribute(videoElement, "touchend") is "target"
+PASS testElementAttribute(videoElement, "touchmove") is "target"
+PASS testElementAttribute(videoElement, "touchstart") is "target"
+PASS testElementAttribute(videoElement, "transitionend") is "target"
 PASS testElementAttribute(videoElement, "volumechange") is "target"
 PASS testElementAttribute(videoElement, "waiting") is "target"
 FAIL testElementAttribute(videoElement, "webkitanimationend") should be target. Was script: none; content: target.
 FAIL testElementAttribute(videoElement, "webkitanimationiteration") should be target. Was script: none; content: target.
 FAIL testElementAttribute(videoElement, "webkitanimationstart") should be target. Was script: none; content: target.
-FAIL testElementAttribute(videoElement, "webkitpresentationmodechanged") should be target. Was none.
 FAIL testElementAttribute(videoElement, "webkittransitionend") should be target. Was script: none; content: target.
 PASS testElementAttribute(videoElement, "wheel") is "target"
 
@@ -596,8 +596,8 @@ PASS testElementAttribute(bodyElement, "load") is "window"
 FAIL testElementAttribute(bodyElement, "message") should be window. Was script: window; content: none.
 PASS testElementAttribute(bodyElement, "offline") is "window"
 PASS testElementAttribute(bodyElement, "online") is "window"
-FAIL testElementAttribute(bodyElement, "pagehide") should be window. Was script: none; content: window.
-FAIL testElementAttribute(bodyElement, "pageshow") should be window. Was script: none; content: window.
+PASS testElementAttribute(bodyElement, "pagehide") is "window"
+PASS testElementAttribute(bodyElement, "pageshow") is "window"
 PASS testElementAttribute(bodyElement, "popstate") is "window"
 PASS testElementAttribute(bodyElement, "resize") is "window"
 PASS testElementAttribute(bodyElement, "storage") is "window"
@@ -610,14 +610,15 @@ FAIL testElementAttribute(bodyElement, "selectionchange") should be document. Wa
 Non-forwarded event names on <body> element
 
 PASS testElementAttribute(bodyElement, "abort") is "target"
-FAIL testElementAttribute(bodyElement, "animationend") should be target. Was script: none; content: target.
-FAIL testElementAttribute(bodyElement, "animationiteration") should be target. Was script: none; content: target.
-FAIL testElementAttribute(bodyElement, "animationstart") should be target. Was script: none; content: target.
+PASS testElementAttribute(bodyElement, "animationend") is "target"
+PASS testElementAttribute(bodyElement, "animationiteration") is "target"
+PASS testElementAttribute(bodyElement, "animationstart") is "target"
 PASS testElementAttribute(bodyElement, "beforecopy") is "target"
 PASS testElementAttribute(bodyElement, "beforecut") is "target"
+PASS testElementAttribute(bodyElement, "beforeload") is "target"
 PASS testElementAttribute(bodyElement, "beforepaste") is "target"
-FAIL testElementAttribute(bodyElement, "canplay") should be target. Was script: none; content: target.
-FAIL testElementAttribute(bodyElement, "canplaythrough") should be target. Was script: none; content: target.
+PASS testElementAttribute(bodyElement, "canplay") is "target"
+PASS testElementAttribute(bodyElement, "canplaythrough") is "target"
 PASS testElementAttribute(bodyElement, "change") is "target"
 PASS testElementAttribute(bodyElement, "click") is "target"
 PASS testElementAttribute(bodyElement, "contextmenu") is "target"
@@ -631,19 +632,19 @@ PASS testElementAttribute(bodyElement, "dragleave") is "target"
 PASS testElementAttribute(bodyElement, "dragover") is "target"
 PASS testElementAttribute(bodyElement, "dragstart") is "target"
 PASS testElementAttribute(bodyElement, "drop") is "target"
-FAIL testElementAttribute(bodyElement, "durationchange") should be target. Was script: none; content: target.
-FAIL testElementAttribute(bodyElement, "emptied") should be target. Was script: none; content: target.
-FAIL testElementAttribute(bodyElement, "ended") should be target. Was script: none; content: target.
-FAIL testElementAttribute(bodyElement, "focusin") should be target. Was script: none; content: target.
-FAIL testElementAttribute(bodyElement, "focusout") should be target. Was script: none; content: target.
+PASS testElementAttribute(bodyElement, "durationchange") is "target"
+PASS testElementAttribute(bodyElement, "emptied") is "target"
+PASS testElementAttribute(bodyElement, "ended") is "target"
+PASS testElementAttribute(bodyElement, "focusin") is "target"
+PASS testElementAttribute(bodyElement, "focusout") is "target"
 PASS testElementAttribute(bodyElement, "input") is "target"
 PASS testElementAttribute(bodyElement, "invalid") is "target"
 PASS testElementAttribute(bodyElement, "keydown") is "target"
 PASS testElementAttribute(bodyElement, "keypress") is "target"
 PASS testElementAttribute(bodyElement, "keyup") is "target"
-FAIL testElementAttribute(bodyElement, "loadeddata") should be target. Was script: none; content: target.
-FAIL testElementAttribute(bodyElement, "loadedmetadata") should be target. Was script: none; content: target.
-FAIL testElementAttribute(bodyElement, "loadstart") should be target. Was script: none; content: target.
+PASS testElementAttribute(bodyElement, "loadeddata") is "target"
+PASS testElementAttribute(bodyElement, "loadedmetadata") is "target"
+PASS testElementAttribute(bodyElement, "loadstart") is "target"
 PASS testElementAttribute(bodyElement, "mousedown") is "target"
 PASS testElementAttribute(bodyElement, "mouseenter") is "target"
 PASS testElementAttribute(bodyElement, "mouseleave") is "target"
@@ -653,33 +654,32 @@ PASS testElementAttribute(bodyElement, "mouseover") is "target"
 PASS testElementAttribute(bodyElement, "mouseup") is "target"
 PASS testElementAttribute(bodyElement, "mousewheel") is "target"
 PASS testElementAttribute(bodyElement, "paste") is "target"
-FAIL testElementAttribute(bodyElement, "pause") should be target. Was script: none; content: target.
-FAIL testElementAttribute(bodyElement, "play") should be target. Was script: none; content: target.
-FAIL testElementAttribute(bodyElement, "playing") should be target. Was script: none; content: target.
-FAIL testElementAttribute(bodyElement, "progress") should be target. Was script: none; content: target.
-FAIL testElementAttribute(bodyElement, "ratechange") should be target. Was script: none; content: target.
+PASS testElementAttribute(bodyElement, "pause") is "target"
+PASS testElementAttribute(bodyElement, "play") is "target"
+PASS testElementAttribute(bodyElement, "playing") is "target"
+PASS testElementAttribute(bodyElement, "progress") is "target"
+PASS testElementAttribute(bodyElement, "ratechange") is "target"
 PASS testElementAttribute(bodyElement, "reset") is "target"
 FAIL testElementAttribute(bodyElement, "scroll") should be target. Was script: target; content: window.
-FAIL testElementAttribute(bodyElement, "search") should be target. Was script: target; content: none.
-FAIL testElementAttribute(bodyElement, "seeked") should be target. Was script: none; content: target.
-FAIL testElementAttribute(bodyElement, "seeking") should be target. Was script: none; content: target.
+PASS testElementAttribute(bodyElement, "search") is "target"
+PASS testElementAttribute(bodyElement, "seeked") is "target"
+PASS testElementAttribute(bodyElement, "seeking") is "target"
 PASS testElementAttribute(bodyElement, "select") is "target"
 PASS testElementAttribute(bodyElement, "selectstart") is "target"
-FAIL testElementAttribute(bodyElement, "stalled") should be target. Was script: none; content: target.
+PASS testElementAttribute(bodyElement, "stalled") is "target"
 PASS testElementAttribute(bodyElement, "submit") is "target"
-FAIL testElementAttribute(bodyElement, "suspend") should be target. Was script: none; content: target.
-FAIL testElementAttribute(bodyElement, "timeupdate") should be target. Was script: none; content: target.
-FAIL testElementAttribute(bodyElement, "touchcancel") should be target. Was script: none; content: target.
-FAIL testElementAttribute(bodyElement, "touchend") should be target. Was script: none; content: target.
-FAIL testElementAttribute(bodyElement, "touchmove") should be target. Was script: none; content: target.
-FAIL testElementAttribute(bodyElement, "touchstart") should be target. Was script: none; content: target.
-FAIL testElementAttribute(bodyElement, "transitionend") should be target. Was script: none; content: target.
-FAIL testElementAttribute(bodyElement, "volumechange") should be target. Was script: none; content: target.
-FAIL testElementAttribute(bodyElement, "waiting") should be target. Was script: none; content: target.
+PASS testElementAttribute(bodyElement, "suspend") is "target"
+PASS testElementAttribute(bodyElement, "timeupdate") is "target"
+PASS testElementAttribute(bodyElement, "touchcancel") is "target"
+PASS testElementAttribute(bodyElement, "touchend") is "target"
+PASS testElementAttribute(bodyElement, "touchmove") is "target"
+PASS testElementAttribute(bodyElement, "touchstart") is "target"
+PASS testElementAttribute(bodyElement, "transitionend") is "target"
+PASS testElementAttribute(bodyElement, "volumechange") is "target"
+PASS testElementAttribute(bodyElement, "waiting") is "target"
 FAIL testElementAttribute(bodyElement, "webkitanimationend") should be target. Was script: none; content: target.
 FAIL testElementAttribute(bodyElement, "webkitanimationiteration") should be target. Was script: none; content: target.
 FAIL testElementAttribute(bodyElement, "webkitanimationstart") should be target. Was script: none; content: target.
-FAIL testElementAttribute(bodyElement, "webkitpresentationmodechanged") should be target. Was none.
 FAIL testElementAttribute(bodyElement, "webkittransitionend") should be target. Was script: none; content: target.
 PASS testElementAttribute(bodyElement, "wheel") is "target"
 
@@ -713,14 +713,15 @@ FAIL testElementAttribute(framesetElement, "selectionchange") should be document
 Non-forwarded event names on <frameset> element
 
 PASS testElementAttribute(framesetElement, "abort") is "target"
-FAIL testElementAttribute(framesetElement, "animationend") should be target. Was script: none; content: target.
-FAIL testElementAttribute(framesetElement, "animationiteration") should be target. Was script: none; content: target.
-FAIL testElementAttribute(framesetElement, "animationstart") should be target. Was script: none; content: target.
+PASS testElementAttribute(framesetElement, "animationend") is "target"
+PASS testElementAttribute(framesetElement, "animationiteration") is "target"
+PASS testElementAttribute(framesetElement, "animationstart") is "target"
 PASS testElementAttribute(framesetElement, "beforecopy") is "target"
 PASS testElementAttribute(framesetElement, "beforecut") is "target"
+PASS testElementAttribute(framesetElement, "beforeload") is "target"
 PASS testElementAttribute(framesetElement, "beforepaste") is "target"
-FAIL testElementAttribute(framesetElement, "canplay") should be target. Was script: none; content: target.
-FAIL testElementAttribute(framesetElement, "canplaythrough") should be target. Was script: none; content: target.
+PASS testElementAttribute(framesetElement, "canplay") is "target"
+PASS testElementAttribute(framesetElement, "canplaythrough") is "target"
 PASS testElementAttribute(framesetElement, "change") is "target"
 PASS testElementAttribute(framesetElement, "click") is "target"
 PASS testElementAttribute(framesetElement, "contextmenu") is "target"
@@ -734,19 +735,19 @@ PASS testElementAttribute(framesetElement, "dragleave") is "target"
 PASS testElementAttribute(framesetElement, "dragover") is "target"
 PASS testElementAttribute(framesetElement, "dragstart") is "target"
 PASS testElementAttribute(framesetElement, "drop") is "target"
-FAIL testElementAttribute(framesetElement, "durationchange") should be target. Was script: none; content: target.
-FAIL testElementAttribute(framesetElement, "emptied") should be target. Was script: none; content: target.
-FAIL testElementAttribute(framesetElement, "ended") should be target. Was script: none; content: target.
-FAIL testElementAttribute(framesetElement, "focusin") should be target. Was script: none; content: window.
-FAIL testElementAttribute(framesetElement, "focusout") should be target. Was script: none; content: window.
+PASS testElementAttribute(framesetElement, "durationchange") is "target"
+PASS testElementAttribute(framesetElement, "emptied") is "target"
+PASS testElementAttribute(framesetElement, "ended") is "target"
+FAIL testElementAttribute(framesetElement, "focusin") should be target. Was script: target; content: window.
+FAIL testElementAttribute(framesetElement, "focusout") should be target. Was script: target; content: window.
 PASS testElementAttribute(framesetElement, "input") is "target"
 PASS testElementAttribute(framesetElement, "invalid") is "target"
 PASS testElementAttribute(framesetElement, "keydown") is "target"
 PASS testElementAttribute(framesetElement, "keypress") is "target"
 PASS testElementAttribute(framesetElement, "keyup") is "target"
-FAIL testElementAttribute(framesetElement, "loadeddata") should be target. Was script: none; content: target.
-FAIL testElementAttribute(framesetElement, "loadedmetadata") should be target. Was script: none; content: target.
-FAIL testElementAttribute(framesetElement, "loadstart") should be target. Was script: none; content: target.
+PASS testElementAttribute(framesetElement, "loadeddata") is "target"
+PASS testElementAttribute(framesetElement, "loadedmetadata") is "target"
+PASS testElementAttribute(framesetElement, "loadstart") is "target"
 PASS testElementAttribute(framesetElement, "mousedown") is "target"
 PASS testElementAttribute(framesetElement, "mouseenter") is "target"
 PASS testElementAttribute(framesetElement, "mouseleave") is "target"
@@ -756,33 +757,32 @@ PASS testElementAttribute(framesetElement, "mouseover") is "target"
 PASS testElementAttribute(framesetElement, "mouseup") is "target"
 PASS testElementAttribute(framesetElement, "mousewheel") is "target"
 PASS testElementAttribute(framesetElement, "paste") is "target"
-FAIL testElementAttribute(framesetElement, "pause") should be target. Was script: none; content: target.
-FAIL testElementAttribute(framesetElement, "play") should be target. Was script: none; content: target.
-FAIL testElementAttribute(framesetElement, "playing") should be target. Was script: none; content: target.
-FAIL testElementAttribute(framesetElement, "progress") should be target. Was script: none; content: target.
-FAIL testElementAttribute(framesetElement, "ratechange") should be target. Was script: none; content: target.
+PASS testElementAttribute(framesetElement, "pause") is "target"
+PASS testElementAttribute(framesetElement, "play") is "target"
+PASS testElementAttribute(framesetElement, "playing") is "target"
+PASS testElementAttribute(framesetElement, "progress") is "target"
+PASS testElementAttribute(framesetElement, "ratechange") is "target"
 PASS testElementAttribute(framesetElement, "reset") is "target"
 FAIL testElementAttribute(framesetElement, "scroll") should be target. Was script: target; content: window.
-FAIL testElementAttribute(framesetElement, "search") should be target. Was script: target; content: none.
-FAIL testElementAttribute(framesetElement, "seeked") should be target. Was script: none; content: target.
-FAIL testElementAttribute(framesetElement, "seeking") should be target. Was script: none; content: target.
+PASS testElementAttribute(framesetElement, "search") is "target"
+PASS testElementAttribute(framesetElement, "seeked") is "target"
+PASS testElementAttribute(framesetElement, "seeking") is "target"
 PASS testElementAttribute(framesetElement, "select") is "target"
 PASS testElementAttribute(framesetElement, "selectstart") is "target"
-FAIL testElementAttribute(framesetElement, "stalled") should be target. Was script: none; content: target.
+PASS testElementAttribute(framesetElement, "stalled") is "target"
 PASS testElementAttribute(framesetElement, "submit") is "target"
-FAIL testElementAttribute(framesetElement, "suspend") should be target. Was script: none; content: target.
-FAIL testElementAttribute(framesetElement, "timeupdate") should be target. Was script: none; content: target.
-FAIL testElementAttribute(framesetElement, "touchcancel") should be target. Was script: none; content: target.
-FAIL testElementAttribute(framesetElement, "touchend") should be target. Was script: none; content: target.
-FAIL testElementAttribute(framesetElement, "touchmove") should be target. Was script: none; content: target.
-FAIL testElementAttribute(framesetElement, "touchstart") should be target. Was script: none; content: target.
-FAIL testElementAttribute(framesetElement, "transitionend") should be target. Was script: none; content: target.
-FAIL testElementAttribute(framesetElement, "volumechange") should be target. Was script: none; content: target.
-FAIL testElementAttribute(framesetElement, "waiting") should be target. Was script: none; content: target.
+PASS testElementAttribute(framesetElement, "suspend") is "target"
+PASS testElementAttribute(framesetElement, "timeupdate") is "target"
+PASS testElementAttribute(framesetElement, "touchcancel") is "target"
+PASS testElementAttribute(framesetElement, "touchend") is "target"
+PASS testElementAttribute(framesetElement, "touchmove") is "target"
+PASS testElementAttribute(framesetElement, "touchstart") is "target"
+PASS testElementAttribute(framesetElement, "transitionend") is "target"
+PASS testElementAttribute(framesetElement, "volumechange") is "target"
+PASS testElementAttribute(framesetElement, "waiting") is "target"
 FAIL testElementAttribute(framesetElement, "webkitanimationend") should be target. Was script: none; content: target.
 FAIL testElementAttribute(framesetElement, "webkitanimationiteration") should be target. Was script: none; content: target.
 FAIL testElementAttribute(framesetElement, "webkitanimationstart") should be target. Was script: none; content: target.
-FAIL testElementAttribute(framesetElement, "webkitpresentationmodechanged") should be target. Was none.
 FAIL testElementAttribute(framesetElement, "webkittransitionend") should be target. Was script: none; content: target.
 PASS testElementAttribute(framesetElement, "wheel") is "target"
 
@@ -791,6 +791,197 @@ Event names we expect to not be able to set on <frameset> element
 PASS testElementAttribute(framesetElement, "noneventname") is "none"
 PASS testElementAttribute(framesetElement, "readystatechange") is "none"
 
+Event names we expect to be able to set on an element (tested on the SVG <rect> element)
+
+PASS testElementAttribute(rectElement, "abort") is "target"
+PASS testElementAttribute(rectElement, "animationend") is "target"
+PASS testElementAttribute(rectElement, "animationiteration") is "target"
+PASS testElementAttribute(rectElement, "animationstart") is "target"
+PASS testElementAttribute(rectElement, "beforecopy") is "target"
+PASS testElementAttribute(rectElement, "beforecut") is "target"
+PASS testElementAttribute(rectElement, "beforeload") is "target"
+PASS testElementAttribute(rectElement, "beforepaste") is "target"
+PASS testElementAttribute(rectElement, "blur") is "target"
+PASS testElementAttribute(rectElement, "canplay") is "target"
+PASS testElementAttribute(rectElement, "canplaythrough") is "target"
+PASS testElementAttribute(rectElement, "change") is "target"
+PASS testElementAttribute(rectElement, "click") is "target"
+PASS testElementAttribute(rectElement, "contextmenu") is "target"
+PASS testElementAttribute(rectElement, "copy") is "target"
+PASS testElementAttribute(rectElement, "cut") is "target"
+PASS testElementAttribute(rectElement, "dblclick") is "target"
+PASS testElementAttribute(rectElement, "drag") is "target"
+PASS testElementAttribute(rectElement, "dragend") is "target"
+PASS testElementAttribute(rectElement, "dragenter") is "target"
+PASS testElementAttribute(rectElement, "dragleave") is "target"
+PASS testElementAttribute(rectElement, "dragover") is "target"
+PASS testElementAttribute(rectElement, "dragstart") is "target"
+PASS testElementAttribute(rectElement, "drop") is "target"
+PASS testElementAttribute(rectElement, "durationchange") is "target"
+PASS testElementAttribute(rectElement, "emptied") is "target"
+PASS testElementAttribute(rectElement, "ended") is "target"
+PASS testElementAttribute(rectElement, "error") is "target"
+PASS testElementAttribute(rectElement, "focus") is "target"
+PASS testElementAttribute(rectElement, "focusin") is "target"
+PASS testElementAttribute(rectElement, "focusout") is "target"
+PASS testElementAttribute(rectElement, "input") is "target"
+PASS testElementAttribute(rectElement, "invalid") is "target"
+PASS testElementAttribute(rectElement, "keydown") is "target"
+PASS testElementAttribute(rectElement, "keypress") is "target"
+PASS testElementAttribute(rectElement, "keyup") is "target"
+PASS testElementAttribute(rectElement, "load") is "target"
+PASS testElementAttribute(rectElement, "loadeddata") is "target"
+PASS testElementAttribute(rectElement, "loadedmetadata") is "target"
+PASS testElementAttribute(rectElement, "loadstart") is "target"
+PASS testElementAttribute(rectElement, "mousedown") is "target"
+PASS testElementAttribute(rectElement, "mouseenter") is "target"
+PASS testElementAttribute(rectElement, "mouseleave") is "target"
+PASS testElementAttribute(rectElement, "mousemove") is "target"
+PASS testElementAttribute(rectElement, "mouseout") is "target"
+PASS testElementAttribute(rectElement, "mouseover") is "target"
+PASS testElementAttribute(rectElement, "mouseup") is "target"
+PASS testElementAttribute(rectElement, "mousewheel") is "target"
+PASS testElementAttribute(rectElement, "paste") is "target"
+PASS testElementAttribute(rectElement, "pause") is "target"
+PASS testElementAttribute(rectElement, "play") is "target"
+PASS testElementAttribute(rectElement, "playing") is "target"
+PASS testElementAttribute(rectElement, "progress") is "target"
+PASS testElementAttribute(rectElement, "ratechange") is "target"
+PASS testElementAttribute(rectElement, "reset") is "target"
+PASS testElementAttribute(rectElement, "scroll") is "target"
+PASS testElementAttribute(rectElement, "search") is "target"
+PASS testElementAttribute(rectElement, "seeked") is "target"
+PASS testElementAttribute(rectElement, "seeking") is "target"
+PASS testElementAttribute(rectElement, "select") is "target"
+PASS testElementAttribute(rectElement, "selectstart") is "target"
+PASS testElementAttribute(rectElement, "stalled") is "target"
+PASS testElementAttribute(rectElement, "submit") is "target"
+PASS testElementAttribute(rectElement, "suspend") is "target"
+PASS testElementAttribute(rectElement, "timeupdate") is "target"
+PASS testElementAttribute(rectElement, "touchcancel") is "target"
+PASS testElementAttribute(rectElement, "touchend") is "target"
+PASS testElementAttribute(rectElement, "touchmove") is "target"
+PASS testElementAttribute(rectElement, "touchstart") is "target"
+PASS testElementAttribute(rectElement, "transitionend") is "target"
+PASS testElementAttribute(rectElement, "volumechange") is "target"
+PASS testElementAttribute(rectElement, "waiting") is "target"
+FAIL testElementAttribute(rectElement, "webkitanimationend") should be target. Was script: none; content: target.
+FAIL testElementAttribute(rectElement, "webkitanimationiteration") should be target. Was script: none; content: target.
+FAIL testElementAttribute(rectElement, "webkitanimationstart") should be target. Was script: none; content: target.
+FAIL testElementAttribute(rectElement, "webkittransitionend") should be target. Was script: none; content: target.
+PASS testElementAttribute(rectElement, "wheel") is "target"
+
+Event names we expect not to be able to set on an element (tested on the SVG <rect> element)
+
+PASS testElementAttribute(rectElement, "beforeunload") is "none"
+PASS testElementAttribute(rectElement, "hashchange") is "none"
+PASS testElementAttribute(rectElement, "message") is "none"
+PASS testElementAttribute(rectElement, "noneventname") is "none"
+PASS testElementAttribute(rectElement, "offline") is "none"
+PASS testElementAttribute(rectElement, "online") is "none"
+PASS testElementAttribute(rectElement, "pagehide") is "none"
+PASS testElementAttribute(rectElement, "pageshow") is "none"
+PASS testElementAttribute(rectElement, "popstate") is "none"
+PASS testElementAttribute(rectElement, "readystatechange") is "none"
+PASS testElementAttribute(rectElement, "resize") is "none"
+PASS testElementAttribute(rectElement, "selectionchange") is "none"
+PASS testElementAttribute(rectElement, "storage") is "none"
+PASS testElementAttribute(rectElement, "unload") is "none"
+
+Event names on a non-HTML element
+
+FAIL testElementAttribute(nonHTMLElement, "abort") should be none. Was script: target; content: none.
+FAIL testElementAttribute(nonHTMLElement, "animationend") should be none. Was script: target; content: none.
+FAIL testElementAttribute(nonHTMLElement, "animationiteration") should be none. Was script: target; content: none.
+FAIL testElementAttribute(nonHTMLElement, "animationstart") should be none. Was script: target; content: none.
+FAIL testElementAttribute(nonHTMLElement, "beforecopy") should be none. Was script: target; content: none.
+FAIL testElementAttribute(nonHTMLElement, "beforecut") should be none. Was script: target; content: none.
+FAIL testElementAttribute(nonHTMLElement, "beforeload") should be none. Was script: target; content: none.
+FAIL testElementAttribute(nonHTMLElement, "beforepaste") should be none. Was script: target; content: none.
+PASS testElementAttribute(nonHTMLElement, "beforeunload") is "none"
+FAIL testElementAttribute(nonHTMLElement, "blur") should be none. Was script: target; content: none.
+FAIL testElementAttribute(nonHTMLElement, "canplay") should be none. Was script: target; content: none.
+FAIL testElementAttribute(nonHTMLElement, "canplaythrough") should be none. Was script: target; content: none.
+FAIL testElementAttribute(nonHTMLElement, "change") should be none. Was script: target; content: none.
+FAIL testElementAttribute(nonHTMLElement, "click") should be none. Was script: target; content: none.
+FAIL testElementAttribute(nonHTMLElement, "contextmenu") should be none. Was script: target; content: none.
+FAIL testElementAttribute(nonHTMLElement, "copy") should be none. Was script: target; content: none.
+FAIL testElementAttribute(nonHTMLElement, "cut") should be none. Was script: target; content: none.
+FAIL testElementAttribute(nonHTMLElement, "dblclick") should be none. Was script: target; content: none.
+FAIL testElementAttribute(nonHTMLElement, "drag") should be none. Was script: target; content: none.
+FAIL testElementAttribute(nonHTMLElement, "dragend") should be none. Was script: target; content: none.
+FAIL testElementAttribute(nonHTMLElement, "dragenter") should be none. Was script: target; content: none.
+FAIL testElementAttribute(nonHTMLElement, "dragleave") should be none. Was script: target; content: none.
+FAIL testElementAttribute(nonHTMLElement, "dragover") should be none. Was script: target; content: none.
+FAIL testElementAttribute(nonHTMLElement, "dragstart") should be none. Was script: target; content: none.
+FAIL testElementAttribute(nonHTMLElement, "drop") should be none. Was script: target; content: none.
+FAIL testElementAttribute(nonHTMLElement, "durationchange") should be none. Was script: target; content: none.
+FAIL testElementAttribute(nonHTMLElement, "emptied") should be none. Was script: target; content: none.
+FAIL testElementAttribute(nonHTMLElement, "ended") should be none. Was script: target; content: none.
+FAIL testElementAttribute(nonHTMLElement, "error") should be none. Was script: target; content: none.
+FAIL testElementAttribute(nonHTMLElement, "focus") should be none. Was script: target; content: none.
+FAIL testElementAttribute(nonHTMLElement, "focusin") should be none. Was script: target; content: none.
+FAIL testElementAttribute(nonHTMLElement, "focusout") should be none. Was script: target; content: none.
+PASS testElementAttribute(nonHTMLElement, "hashchange") is "none"
+FAIL testElementAttribute(nonHTMLElement, "input") should be none. Was script: target; content: none.
+FAIL testElementAttribute(nonHTMLElement, "invalid") should be none. Was script: target; content: none.
+FAIL testElementAttribute(nonHTMLElement, "keydown") should be none. Was script: target; content: none.
+FAIL testElementAttribute(nonHTMLElement, "keypress") should be none. Was script: target; content: none.
+FAIL testElementAttribute(nonHTMLElement, "keyup") should be none. Was script: target; content: none.
+FAIL testElementAttribute(nonHTMLElement, "load") should be none. Was script: target; content: none.
+FAIL testElementAttribute(nonHTMLElement, "loadeddata") should be none. Was script: target; content: none.
+FAIL testElementAttribute(nonHTMLElement, "loadedmetadata") should be none. Was script: target; content: none.
+FAIL testElementAttribute(nonHTMLElement, "loadstart") should be none. Was script: target; content: none.
+PASS testElementAttribute(nonHTMLElement, "message") is "none"
+FAIL testElementAttribute(nonHTMLElement, "mousedown") should be none. Was script: target; content: none.
+FAIL testElementAttribute(nonHTMLElement, "mouseenter") should be none. Was script: target; content: none.
+FAIL testElementAttribute(nonHTMLElement, "mouseleave") should be none. Was script: target; content: none.
+FAIL testElementAttribute(nonHTMLElement, "mousemove") should be none. Was script: target; content: none.
+FAIL testElementAttribute(nonHTMLElement, "mouseout") should be none. Was script: target; content: none.
+FAIL testElementAttribute(nonHTMLElement, "mouseover") should be none. Was script: target; content: none.
+FAIL testElementAttribute(nonHTMLElement, "mouseup") should be none. Was script: target; content: none.
+FAIL testElementAttribute(nonHTMLElement, "mousewheel") should be none. Was script: target; content: none.
+PASS testElementAttribute(nonHTMLElement, "noneventname") is "none"
+PASS testElementAttribute(nonHTMLElement, "offline") is "none"
+PASS testElementAttribute(nonHTMLElement, "online") is "none"
+PASS testElementAttribute(nonHTMLElement, "pagehide") is "none"
+PASS testElementAttribute(nonHTMLElement, "pageshow") is "none"
+FAIL testElementAttribute(nonHTMLElement, "paste") should be none. Was script: target; content: none.
+FAIL testElementAttribute(nonHTMLElement, "pause") should be none. Was script: target; content: none.
+FAIL testElementAttribute(nonHTMLElement, "play") should be none. Was script: target; content: none.
+FAIL testElementAttribute(nonHTMLElement, "playing") should be none. Was script: target; content: none.
+PASS testElementAttribute(nonHTMLElement, "popstate") is "none"
+FAIL testElementAttribute(nonHTMLElement, "progress") should be none. Was script: target; content: none.
+FAIL testElementAttribute(nonHTMLElement, "ratechange") should be none. Was script: target; content: none.
+PASS testElementAttribute(nonHTMLElement, "readystatechange") is "none"
+FAIL testElementAttribute(nonHTMLElement, "reset") should be none. Was script: target; content: none.
+PASS testElementAttribute(nonHTMLElement, "resize") is "none"
+FAIL testElementAttribute(nonHTMLElement, "scroll") should be none. Was script: target; content: none.
+FAIL testElementAttribute(nonHTMLElement, "search") should be none. Was script: target; content: none.
+FAIL testElementAttribute(nonHTMLElement, "seeked") should be none. Was script: target; content: none.
+FAIL testElementAttribute(nonHTMLElement, "seeking") should be none. Was script: target; content: none.
+FAIL testElementAttribute(nonHTMLElement, "select") should be none. Was script: target; content: none.
+PASS testElementAttribute(nonHTMLElement, "selectionchange") is "none"
+FAIL testElementAttribute(nonHTMLElement, "selectstart") should be none. Was script: target; content: none.
+FAIL testElementAttribute(nonHTMLElement, "stalled") should be none. Was script: target; content: none.
+PASS testElementAttribute(nonHTMLElement, "storage") is "none"
+FAIL testElementAttribute(nonHTMLElement, "submit") should be none. Was script: target; content: none.
+FAIL testElementAttribute(nonHTMLElement, "suspend") should be none. Was script: target; content: none.
+FAIL testElementAttribute(nonHTMLElement, "timeupdate") should be none. Was script: target; content: none.
+FAIL testElementAttribute(nonHTMLElement, "touchcancel") should be none. Was script: target; content: none.
+FAIL testElementAttribute(nonHTMLElement, "touchend") should be none. Was script: target; content: none.
+FAIL testElementAttribute(nonHTMLElement, "touchmove") should be none. Was script: target; content: none.
+FAIL testElementAttribute(nonHTMLElement, "touchstart") should be none. Was script: target; content: none.
+FAIL testElementAttribute(nonHTMLElement, "transitionend") should be none. Was script: target; content: none.
+PASS testElementAttribute(nonHTMLElement, "unload") is "none"
+FAIL testElementAttribute(nonHTMLElement, "volumechange") should be none. Was script: target; content: none.
+FAIL testElementAttribute(nonHTMLElement, "waiting") should be none. Was script: target; content: none.
+PASS testElementAttribute(nonHTMLElement, "webkitanimationend") is "none"
+PASS testElementAttribute(nonHTMLElement, "webkitanimationiteration") is "none"
+PASS testElementAttribute(nonHTMLElement, "webkitanimationstart") is "none"
+PASS testElementAttribute(nonHTMLElement, "webkittransitionend") is "none"
+FAIL testElementAttribute(nonHTMLElement, "wheel") should be none. Was script: target; content: none.
+
 PASS successfullyParsed is true
 
 TEST COMPLETE
index 5746bc7..9381a56 100644 (file)
@@ -143,6 +143,7 @@ const elementEvents = [
     "animationstart",
     "beforecopy",
     "beforecut",
+    "beforeload",
     "beforepaste",
     "blur",
     "canplay",
@@ -211,7 +212,6 @@ const elementEvents = [
     "webkitanimationend",
     "webkitanimationiteration",
     "webkitanimationstart",
-    "webkitpresentationmodechanged",
     "webkittransitionend",
     "wheel",
 ];
@@ -366,12 +366,14 @@ function testArray(array, prefix, expected, sectionName)
     }
 }
 
+const nonHTMLElement = document.createElementNS("foo", "foo");
 const element = document.documentElement;
 const bodyElement = document.body;
 const audioElement = document.createElement("video");
 const framesetElement = document.createElement("frameset");
 const inputElement = document.createElement("input");
 const videoElement = document.createElement("video");
+const rectElement = document.createElementNS("http://www.w3.org/2000/svg", "rect");
 
 testArray(windowEvents, "testScriptAttribute(window", "window", "Event names we expect to be able to set on the window object");
 testArray(arrayDifference(allEventNames, windowEvents), "testScriptAttribute(window", "none", "Event names we expect not to be able to set on the window object");
@@ -401,6 +403,11 @@ testArray(bodyElementDocumentForwardedEvents, "testElementAttribute(framesetElem
 testArray(arrayDifference(elementEvents, arrayUnion(bodyElementWindowForwardedEvents, bodyElementDocumentForwardedEvents)), "testElementAttribute(framesetElement", "target", "Non-forwarded event names on &lt;frameset> element");
 testArray(arrayDifference(allEventNames, arrayUnion(elementEvents, bodyElementWindowForwardedEvents, bodyElementDocumentForwardedEvents)), "testElementAttribute(framesetElement", "none", "Event names we expect to not be able to set on &lt;frameset> element");
 
+testArray(elementEvents, "testElementAttribute(rectElement", "target", "Event names we expect to be able to set on an element (tested on the SVG &lt;rect> element)");
+testArray(arrayDifference(allEventNames, elementEvents), "testElementAttribute(rectElement", "none", "Event names we expect not to be able to set on an element (tested on the SVG &lt;rect> element)");
+
+testArray(allEventNames, "testElementAttribute(nonHTMLElement", "none", "Event names on a non-HTML element");
+
 endSection();
 
 /*
@@ -409,11 +416,9 @@ endSection();
 
 To make the results of this test platform independent, there is no testing here for conditional events.
 An alternative would be to always make these event handler attributes work even if the feature
-that sends the events is turned off. See list here of IDL files that indicate these conditional events.
+that sends the events is turned off. See list here of IDL files that include these conditional events.
 
-page/DOMWindow.idl:#if defined(ENABLE_ORIENTATION_EVENTS) && ENABLE_ORIENTATION_EVENTS
-page/DOMWindow.idl:    attribute EventListener onorientationchange;
-page/DOMWindow.idl:#endif
+page/DOMWindow.idl:    [Conditional=ORIENTATION_EVENTS] attribute EventListener onorientationchange;
 page/DOMWindow.idl:    [Conditional=TOUCH_EVENTS] attribute EventListener ontouchstart;
 page/DOMWindow.idl:    [Conditional=TOUCH_EVENTS] attribute EventListener ontouchmove;
 page/DOMWindow.idl:    [Conditional=TOUCH_EVENTS] attribute EventListener ontouchend;
@@ -443,31 +448,26 @@ dom/Document.idl:    [NotEnumerable, Conditional=WILL_REVEAL_EDGE_EVENTS] attrib
 dom/Document.idl:    [NotEnumerable, Conditional=WILL_REVEAL_EDGE_EVENTS] attribute EventListener onwebkitwillrevealright;
 dom/Document.idl:    [NotEnumerable, Conditional=WILL_REVEAL_EDGE_EVENTS] attribute EventListener onwebkitwillrevealtop;
 
-dom/Element.idl:    [NotEnumerable, Conditional=TOUCH_EVENTS] attribute EventListener ontouchstart;
-dom/Element.idl:    [NotEnumerable, Conditional=TOUCH_EVENTS] attribute EventListener ontouchmove;
-dom/Element.idl:    [NotEnumerable, Conditional=TOUCH_EVENTS] attribute EventListener ontouchend;
-dom/Element.idl:    [NotEnumerable, Conditional=TOUCH_EVENTS] attribute EventListener ontouchcancel;
+dom/Element.idl:    [NotEnumerable, Conditional=ENCRYPTED_MEDIA] attribute EventListener onwebkitkeyadded;
+dom/Element.idl:    [NotEnumerable, Conditional=ENCRYPTED_MEDIA] attribute EventListener onwebkitkeyerror;
+dom/Element.idl:    [NotEnumerable, Conditional=ENCRYPTED_MEDIA] attribute EventListener onwebkitkeymessage;
+dom/Element.idl:    [NotEnumerable, Conditional=ENCRYPTED_MEDIA|ENCRYPTED_MEDIA_V2] attribute EventListener onwebkitneedkey;
 dom/Element.idl:    [NotEnumerable, Conditional=FULLSCREEN_API] attribute EventListener onwebkitfullscreenchange;
 dom/Element.idl:    [NotEnumerable, Conditional=FULLSCREEN_API] attribute EventListener onwebkitfullscreenerror;
+dom/Element.idl:    [NotEnumerable, Conditional=REQUEST_AUTOCOMPLETE] attribute EventListener onautocomplete;
+dom/Element.idl:    [NotEnumerable, Conditional=REQUEST_AUTOCOMPLETE] attribute EventListener onautocompleteerror;
+dom/Element.idl:    [NotEnumerable, Conditional=VIDEO_PRESENTATION_MODE] attribute EventListener onwebkitpresentationmodechanged;
 dom/Element.idl:    [NotEnumerable, Conditional=WILL_REVEAL_EDGE_EVENTS] attribute EventListener onwebkitwillrevealbottom;
 dom/Element.idl:    [NotEnumerable, Conditional=WILL_REVEAL_EDGE_EVENTS] attribute EventListener onwebkitwillrevealleft;
 dom/Element.idl:    [NotEnumerable, Conditional=WILL_REVEAL_EDGE_EVENTS] attribute EventListener onwebkitwillrevealright;
 dom/Element.idl:    [NotEnumerable, Conditional=WILL_REVEAL_EDGE_EVENTS] attribute EventListener onwebkitwillrevealtop;
+dom/Element.idl:    [NotEnumerable, Conditional=WIRELESS_PLAYBACK_TARGET] attribute EventListener onwebkitcurrentplaybacktargetiswirelesschanged;
+dom/Element.idl:    [NotEnumerable, Conditional=WIRELESS_PLAYBACK_TARGET] attribute EventListener onwebkitplaybacktargetavailabilitychanged;
 
 html/HTMLBodyElement.idl:    [Conditional=ORIENTATION_EVENTS, NotEnumerable, JSWindowEventListener] attribute EventListener onorientationchange;
 
 html/HTMLFrameSetElement.idl:    [Conditional=ORIENTATION_EVENTS, NotEnumerable, JSWindowEventListener] attribute EventListener onorientationchange;
 
-html/HTMLFormElement.idl:    [Conditional=REQUEST_AUTOCOMPLETE, NotEnumerable] attribute EventListener onautocomplete;
-html/HTMLFormElement.idl:    [Conditional=REQUEST_AUTOCOMPLETE, NotEnumerable] attribute EventListener onautocompleteerror;
-
-html/HTMLMediaElement.idl:    attribute EventListener onwebkitkeyadded;
-html/HTMLMediaElement.idl:    attribute EventListener onwebkitkeyerror;
-html/HTMLMediaElement.idl:    attribute EventListener onwebkitkeymessage;
-html/HTMLMediaElement.idl:    [Conditional=ENCRYPTED_MEDIA|ENCRYPTED_MEDIA_V2] attribute EventListener onwebkitneedkey;
-html/HTMLMediaElement.idl:    [Conditional=WIRELESS_PLAYBACK_TARGET] attribute EventListener onwebkitcurrentplaybacktargetiswirelesschanged;
-html/HTMLMediaElement.idl:    [Conditional=WIRELESS_PLAYBACK_TARGET] attribute EventListener onwebkitplaybacktargetavailabilitychanged;
-
 ----------------
 
 It would be good to extend this test to cover more objects.
index 4d5ea39..031c43e 100644 (file)
@@ -37,10 +37,10 @@ PASS /*img*/ typeof (element["onsubmit"]) is "function"
 PASS /*img*/ typeof (element["onerror"]) is "function"
 PASS /*img*/ typeof (element["oninput"]) is "function"
 PASS /*img*/ typeof (element["oninvalid"]) is "function"
-FAIL /*img*/ typeof (element["ontouchstart"]) should be function. Was undefined.
-FAIL /*img*/ typeof (element["ontouchmove"]) should be function. Was undefined.
-FAIL /*img*/ typeof (element["ontouchend"]) should be function. Was undefined.
-FAIL /*img*/ typeof (element["ontouchcancel"]) should be function. Was undefined.
+PASS /*img*/ typeof (element["ontouchstart"]) is "function"
+PASS /*img*/ typeof (element["ontouchmove"]) is "function"
+PASS /*img*/ typeof (element["ontouchend"]) is "function"
+PASS /*img*/ typeof (element["ontouchcancel"]) is "function"
 PASS /*img*/ typeof (element["onwebkitfullscreenchange"]) is "function"
 PASS /*img*/ typeof (element["onwebkitfullscreenerror"]) is "function"
 PASS /*img*/ typeof (element["onabort"]) is "function"
@@ -81,10 +81,10 @@ PASS /*script*/ typeof (element["onsubmit"]) is "function"
 PASS /*script*/ typeof (element["onerror"]) is "function"
 PASS /*script*/ typeof (element["oninput"]) is "function"
 PASS /*script*/ typeof (element["oninvalid"]) is "function"
-FAIL /*script*/ typeof (element["ontouchstart"]) should be function. Was undefined.
-FAIL /*script*/ typeof (element["ontouchmove"]) should be function. Was undefined.
-FAIL /*script*/ typeof (element["ontouchend"]) should be function. Was undefined.
-FAIL /*script*/ typeof (element["ontouchcancel"]) should be function. Was undefined.
+PASS /*script*/ typeof (element["ontouchstart"]) is "function"
+PASS /*script*/ typeof (element["ontouchmove"]) is "function"
+PASS /*script*/ typeof (element["ontouchend"]) is "function"
+PASS /*script*/ typeof (element["ontouchcancel"]) is "function"
 PASS /*script*/ typeof (element["onwebkitfullscreenchange"]) is "function"
 PASS /*script*/ typeof (element["onwebkitfullscreenerror"]) is "function"
 PASS /*script*/ typeof (element["onabort"]) is "function"
@@ -125,10 +125,10 @@ PASS /*video*/ typeof (element["onsubmit"]) is "function"
 PASS /*video*/ typeof (element["onerror"]) is "function"
 PASS /*video*/ typeof (element["oninput"]) is "function"
 PASS /*video*/ typeof (element["oninvalid"]) is "function"
-FAIL /*video*/ typeof (element["ontouchstart"]) should be function. Was undefined.
-FAIL /*video*/ typeof (element["ontouchmove"]) should be function. Was undefined.
-FAIL /*video*/ typeof (element["ontouchend"]) should be function. Was undefined.
-FAIL /*video*/ typeof (element["ontouchcancel"]) should be function. Was undefined.
+PASS /*video*/ typeof (element["ontouchstart"]) is "function"
+PASS /*video*/ typeof (element["ontouchmove"]) is "function"
+PASS /*video*/ typeof (element["ontouchend"]) is "function"
+PASS /*video*/ typeof (element["ontouchcancel"]) is "function"
 PASS /*video*/ typeof (element["onwebkitfullscreenchange"]) is "function"
 PASS /*video*/ typeof (element["onwebkitfullscreenerror"]) is "function"
 PASS /*video*/ typeof (element["onabort"]) is "function"
@@ -169,10 +169,10 @@ PASS /*div*/ typeof (element["onsubmit"]) is "function"
 PASS /*div*/ typeof (element["onerror"]) is "function"
 PASS /*div*/ typeof (element["oninput"]) is "function"
 PASS /*div*/ typeof (element["oninvalid"]) is "function"
-FAIL /*div*/ typeof (element["ontouchstart"]) should be function. Was undefined.
-FAIL /*div*/ typeof (element["ontouchmove"]) should be function. Was undefined.
-FAIL /*div*/ typeof (element["ontouchend"]) should be function. Was undefined.
-FAIL /*div*/ typeof (element["ontouchcancel"]) should be function. Was undefined.
+PASS /*div*/ typeof (element["ontouchstart"]) is "function"
+PASS /*div*/ typeof (element["ontouchmove"]) is "function"
+PASS /*div*/ typeof (element["ontouchend"]) is "function"
+PASS /*div*/ typeof (element["ontouchcancel"]) is "function"
 PASS /*div*/ typeof (element["onwebkitfullscreenchange"]) is "function"
 PASS /*div*/ typeof (element["onwebkitfullscreenerror"]) is "function"
 PASS /*div*/ typeof (element["onabort"]) is "function"
@@ -213,10 +213,10 @@ PASS /*form*/ typeof (element["onsubmit"]) is "function"
 PASS /*form*/ typeof (element["onerror"]) is "function"
 PASS /*form*/ typeof (element["oninput"]) is "function"
 PASS /*form*/ typeof (element["oninvalid"]) is "function"
-FAIL /*form*/ typeof (element["ontouchstart"]) should be function. Was undefined.
-FAIL /*form*/ typeof (element["ontouchmove"]) should be function. Was undefined.
-FAIL /*form*/ typeof (element["ontouchend"]) should be function. Was undefined.
-FAIL /*form*/ typeof (element["ontouchcancel"]) should be function. Was undefined.
+PASS /*form*/ typeof (element["ontouchstart"]) is "function"
+PASS /*form*/ typeof (element["ontouchmove"]) is "function"
+PASS /*form*/ typeof (element["ontouchend"]) is "function"
+PASS /*form*/ typeof (element["ontouchcancel"]) is "function"
 PASS /*form*/ typeof (element["onwebkitfullscreenchange"]) is "function"
 PASS /*form*/ typeof (element["onwebkitfullscreenerror"]) is "function"
 PASS /*form*/ typeof (element["onabort"]) is "function"
@@ -257,10 +257,10 @@ PASS /*input*/ typeof (element["onsubmit"]) is "function"
 PASS /*input*/ typeof (element["onerror"]) is "function"
 PASS /*input*/ typeof (element["oninput"]) is "function"
 PASS /*input*/ typeof (element["oninvalid"]) is "function"
-FAIL /*input*/ typeof (element["ontouchstart"]) should be function. Was undefined.
-FAIL /*input*/ typeof (element["ontouchmove"]) should be function. Was undefined.
-FAIL /*input*/ typeof (element["ontouchend"]) should be function. Was undefined.
-FAIL /*input*/ typeof (element["ontouchcancel"]) should be function. Was undefined.
+PASS /*input*/ typeof (element["ontouchstart"]) is "function"
+PASS /*input*/ typeof (element["ontouchmove"]) is "function"
+PASS /*input*/ typeof (element["ontouchend"]) is "function"
+PASS /*input*/ typeof (element["ontouchcancel"]) is "function"
 PASS /*input*/ typeof (element["onwebkitfullscreenchange"]) is "function"
 PASS /*input*/ typeof (element["onwebkitfullscreenerror"]) is "function"
 PASS /*input*/ typeof (element["onabort"]) is "function"
index 7db148e..f54b504 100644 (file)
@@ -1,3 +1,14 @@
+2015-03-10  Darin Adler  <darin@apple.com>
+
+        Some event handler fixes
+        https://bugs.webkit.org/show_bug.cgi?id=142474
+
+        Reviewed by Anders Carlsson.
+
+        * inspector/InjectedScriptManager.cpp:
+        (Inspector::InjectedScriptManager::createInjectedScript): Call clearException.
+        I spotted the fact it was missing by auditing all the calls to JSC::call.
+
 2015-03-10  Matthew Mirman  <mmirman@apple.com>
 
         Functions should have initialization precedence over arguments. 
index 7d24597..eee0fab 100644 (file)
@@ -156,6 +156,7 @@ Deprecated::ScriptObject InjectedScriptManager::createInjectedScript(const Strin
     args.append(jsNumber(id));
 
     JSValue result = JSC::call(scriptState, functionValue, callType, callData, globalThisValue, args);
+    scriptState->clearException();
     if (result.isObject())
         return Deprecated::ScriptObject(scriptState, result.getObject());
 
index 34873f5..d0b5593 100644 (file)
@@ -1,3 +1,104 @@
+2015-03-10  Darin Adler  <darin@apple.com>
+
+        Some event handler fixes
+        https://bugs.webkit.org/show_bug.cgi?id=142474
+
+        Reviewed by Anders Carlsson.
+
+        * bindings/scripts/CodeGenerator.pm:
+        (GenerateConditionalStringFromAttributeValue): Improved the algorithm here to
+        handle combinations of & and | in conditional expressions; that's coming up when
+        combining conditionals for includes in NavigatorContentUtils.idl.
+
+        * bindings/scripts/CodeGeneratorJS.pm:
+        (AddToImplIncludes): Removed the rudimentary attempt to split and merge
+        conditionals involving | here; instead we rely on the rules in the
+        GenerateConditionalStringFromAttributeValue to handle this.
+        (GenerateImplementation): Passed new "conditional" argument to JSValueToNative.
+        (GenerateParametersCheck): Pass "conditional" argument to AddToImplIncludes and
+        JSValueToNative.
+        (JSValueToNative): Changed to take "conditional" as an argument, since getting
+        it from the signature won't work for a method parameter.
+        (WriteData): Merge duplicates based on the result of the
+        GenerateConditionalStringFromAttributeValue function rather than on the values
+        passed into that function, since that function converts conditionals into a
+        canonical form and can make two strings equal that don't start out that way.
+
+        * bindings/scripts/CodeGeneratorObjC.pm:
+        (SkipAttribute): Added code to guarantee we won't make Objective-C bindings
+        for event handlers. We will rename EventListener to EventHandler in a
+        subsequent patch.
+
+        * bindings/scripts/test/JS/JSTestInterface.cpp: Updated for a progression caused
+        by the better logic for conditional includes.
+
+        * bindings/scripts/test/JS/JSTestObj.cpp: Updated for change to the test below.
+        * bindings/scripts/test/TestObj.idl: Added test of an event handler attribute.
+
+        * dom/Document.idl: Removed unneeded language #if around event handler
+        attributes. Removed all the commented out event handler attributes.
+        Sorted event handler attributes into a single section rather than separating
+        "standard" from "extensions". Sorted the conditional event handler attributes
+        into paragraphs at the bottom. We will probably make them all unconditional
+        in a subsequent patch.
+
+        * dom/Element.idl: Removed unneeded language #if around event handler
+        attributes. Removed all the commented out event handler attributes.
+        Moved event handler attributes here from all derived element classes to
+        match the approach from the HTML standard. Also resorted the attributes
+        as in Document above.
+
+        * html/HTMLBodyElement.idl: Removed unneeded language #if around event handler
+        attributes. Removed all the commented out event handler attributes.
+        Sorted event handler attributes into a single section rather than separating
+        "standard" from "overrides".
+
+        * html/HTMLElement.cpp:
+        (WebCore::HTMLElement::populateEventNameForAttributeLocalNameMap):
+        Added a few missing attribute names, and re-sorted a bit. Moved any from
+        element subclasses here.
+
+        * html/HTMLFormElement.cpp:
+        (WebCore::HTMLFormElement::parseAttribute): Moved code to handle
+        oncomplete and oncompleteerror to Element and HTMLElement.
+        * html/HTMLFormElement.idl: Ditto.
+
+        * html/HTMLFrameSetElement.idl: Removed #if and resorted as above.
+
+        * html/HTMLInputElement.cpp:
+        (WebCore::HTMLInputElement::parseAttribute): Moved code to handle
+        onsearch to HTMLElement.
+
+        * html/HTMLMediaElement.cpp:
+        (WebCore::HTMLMediaElement::parseAttribute): Moved code to handle
+        all the event handler attributes to HTMLElement.
+        (WebCore::HTMLMediaElement::updateCaptionContainer): Removed a redundant
+        if statement I noticed while auditing all calls to JSC::call.
+        (WebCore::HTMLMediaElement::didAddUserAgentShadowRoot): Added clearException.
+        I noticed this was missing because a flawed earlier version of my patch was
+        causing the script to fail, leaving an exception behind that caused an
+        assertion later. So I audited all calls to JSC::call looking for this mistake.
+
+        * html/HTMLMediaElement.idl: Moved all the event handlers from here to
+        Element. Also changed everything possible to use Conditional instead of #if.
+
+        * html/HTMLPlugInImageElement.cpp:
+        (WebCore::HTMLPlugInImageElement::didAddUserAgentShadowRoot): Added
+        clearException. Noticed it was missing while auditing all calls to JSC::call.
+
+        * html/HTMLVideoElement.cpp:
+        (WebCore::HTMLVideoElement::parseAttribute): Moved event handler code to
+        HTMLElement.
+
+        * html/HTMLVideoElement.idl: Moved event handler to Element.idl and use
+        Conditional instead of #if.
+
+        * page/DOMWindow.idl: Use Conditional instead of #if and tidy up the event
+        handlers section.
+
+        * svg/svgattrs.in: Remove six unused attribute names. Presumably used in
+        some older scheme to implement event handlers but no longer used at all.
+
 2015-03-10  Brent Fulgham  <bfulgham@apple.com>
 
         CSS scroll-snap-destination and scroll-snap-coordinate are not honoring position values
index 7781ec3..f0b4d9a 100644 (file)
@@ -686,15 +686,26 @@ sub GenerateConditionalStringFromAttributeValue
     my $generator = shift;
     my $conditional = shift;
 
-    my $operator = ($conditional =~ /&/ ? '&' : ($conditional =~ /\|/ ? '|' : ''));
-    if ($operator) {
-        # Avoid duplicated conditions.
-        my %conditions;
-        map { $conditions{$_} = 1 } split('\\' . $operator, $conditional);
-        return "ENABLE(" . join(") $operator$operator ENABLE(", sort keys %conditions) . ")";
-    } else {
-        return "ENABLE(" . $conditional . ")";
-    }
+    my %disjunction;
+    map {
+        my $expression = $_;
+        my %conjunction;
+        map { $conjunction{$_} = 1; } split(/&/, $expression);
+        $expression = "ENABLE(" . join(") && ENABLE(", sort keys %conjunction) . ")";
+        $disjunction{$expression} = 1
+    } split(/\|/, $conditional);
+
+    return "1" if keys %disjunction == 0;
+    return (%disjunction)[0] if keys %disjunction == 1;
+
+    my @parenthesized;
+    map {
+        my $expression = $_;
+        $expression = "($expression)" if $expression =~ / /;
+        push @parenthesized, $expression;
+    } sort keys %disjunction;
+
+    return join(" || ", @parenthesized);
 }
 
 sub GenerateCompileTimeCheckForEnumsIfNeeded
index 38f5076..afc0ec0 100644 (file)
@@ -289,14 +289,7 @@ sub AddToImplIncludes
         $implIncludes{$header} = $conditional;
     } else {
         my $oldValue = $implIncludes{$header};
-        if ($oldValue ne 1) {
-            my %newValue = ();
-            $newValue{$conditional} = 1;
-            foreach my $condition (split(/\|/, $oldValue)) {
-                $newValue{$condition} = 1;
-            }
-            $implIncludes{$header} = join("|", sort keys %newValue);
-        }
+        $implIncludes{$header} = "$oldValue|$conditional" if $oldValue ne 1;
     }
 }
 
@@ -2625,7 +2618,7 @@ sub GenerateImplementation
                         }
                     }
 
-                    push(@implContent, "    " . GetNativeTypeFromSignature($attribute->signature) . " nativeValue(" . JSValueToNative($attribute->signature, "value") . ");\n");
+                    push(@implContent, "    " . GetNativeTypeFromSignature($attribute->signature) . " nativeValue(" . JSValueToNative($attribute->signature, "value", $attribute->signature->extendedAttributes->{"Conditional"}) . ");\n");
                     push(@implContent, "    if (UNLIKELY(exec->hadException()))\n");
                     push(@implContent, "        return;\n");
 
@@ -2680,7 +2673,7 @@ sub GenerateImplementation
                         }
                         if ($attribute->signature->extendedAttributes->{"ImplementedBy"}) {
                             my $implementedBy = $attribute->signature->extendedAttributes->{"ImplementedBy"};
-                            $implIncludes{"${implementedBy}.h"} = 1;
+                            AddToImplIncludes("${implementedBy}.h", $attribute->signature->extendedAttributes->{"Conditional"});
                             unshift(@arguments, "&impl") if !$attribute->isStatic;
                             $functionName = "${implementedBy}::${functionName}";
                         } elsif ($attribute->isStatic) {
@@ -3183,7 +3176,7 @@ sub GenerateParametersCheck
     my $functionName;
     my $implementedBy = $function->signature->extendedAttributes->{"ImplementedBy"};
     if ($implementedBy) {
-        AddToImplIncludes("${implementedBy}.h");
+        AddToImplIncludes("${implementedBy}.h", $function->signature->extendedAttributes->{"Conditional"});
         unshift(@arguments, "&impl") if !$function->isStatic;
         $functionName = "${implementedBy}::${functionImplementationName}";
     } elsif ($function->isStatic) {
@@ -3336,7 +3329,7 @@ sub GenerateParametersCheck
                 push(@$outputArray, "        return JSValue::encode(jsNull());\n");
                 push(@$outputArray, "    const AtomicString& $name(existing_$name);\n");
             } else {
-                push(@$outputArray, "    " . GetNativeTypeFromSignature($parameter) . " $name(" . JSValueToNative($parameter, $optional && $defaultAttribute && $defaultAttribute eq "NullString" ? "argumentOrNull(exec, $argsIndex)" : "exec->argument($argsIndex)") . ");\n");
+                push(@$outputArray, "    " . GetNativeTypeFromSignature($parameter) . " $name(" . JSValueToNative($parameter, $optional && $defaultAttribute && $defaultAttribute eq "NullString" ? "argumentOrNull(exec, $argsIndex)" : "exec->argument($argsIndex)", $function->signature->extendedAttributes->{"Conditional"}) . ");\n");
             }
 
             # If a parameter is "an index" and it's negative it should throw an INDEX_SIZE_ERR exception.
@@ -3794,8 +3787,8 @@ sub JSValueToNative
 {
     my $signature = shift;
     my $value = shift;
+    my $conditional = shift;
 
-    my $conditional = $signature->extendedAttributes->{"Conditional"};
     my $type = $signature->type;
 
     return "$value.toBoolean(exec)" if $type eq "boolean";
@@ -4202,14 +4195,14 @@ sub WriteData
         if ($condition eq 1) {
             push @includes, $include;
         } else {
-            push @{$implIncludeConditions{$condition}}, $include;
+            push @{$implIncludeConditions{$codeGenerator->GenerateConditionalStringFromAttributeValue($condition)}}, $include;
         }
     }
     foreach my $include (sort @includes) {
         $contents .= "#include $include\n";
     }
     foreach my $condition (sort keys %implIncludeConditions) {
-        $contents .= "\n#if " . $codeGenerator->GenerateConditionalStringFromAttributeValue($condition) . "\n";
+        $contents .= "\n#if " . $condition . "\n";
         foreach my $include (sort @{$implIncludeConditions{$condition}}) {
             $contents .= "#include $include\n";
         }
index fc8fff0..6b6ad4a 100644 (file)
@@ -555,12 +555,12 @@ sub SkipAttribute
     return 1 if $codeGenerator->GetArrayType($type);
     return 1 if $codeGenerator->IsTypedArrayType($type);
     return 1 if $codeGenerator->IsEnumType($type);
+    return 1 if $type eq "EventListener";
     return 1 if $attribute->isStatic;
 
-    # This is for DynamicsCompressorNode.idl
-    if ($attribute->signature->name eq "release") {
-        return 1;
-    }
+    # This is for DynamicsCompressorNode.idl.
+    # FIXME: Normally we would rename rather than just skipping for a case like this.
+    return 1 if $attribute->signature->name eq "release";
 
     return 0;
 }
index 1eddbb0..2e14cab 100644 (file)
@@ -26,7 +26,6 @@
 
 #include "ExceptionCode.h"
 #include "JSDOMBinding.h"
-#include "JSTestObj.h"
 #include "ScriptExecutionContext.h"
 #include "TestInterface.h"
 #include "TestObj.h"
 
 #if ENABLE(Condition11) || ENABLE(Condition12) || ENABLE(Condition22) || ENABLE(Condition23)
 #include "JSNode.h"
+#include "JSTestObj.h"
+#include "Node.h"
 #include "URL.h"
 #include <runtime/JSString.h>
 #endif
 
-#if ENABLE(Condition11) || ENABLE(Condition12) || ENABLE(Condition22) || ENABLE(Condition23)
-#include "Node.h"
-#endif
-
 using namespace JSC;
 
 namespace WebCore {
index 570c061..14a785a 100644 (file)
@@ -220,6 +220,8 @@ JSC::EncodedJSValue jsTestObjStringAttrWithSetterException(JSC::ExecState*, JSC:
 void setJSTestObjStringAttrWithSetterException(JSC::ExecState*, JSC::JSObject*, JSC::EncodedJSValue, JSC::EncodedJSValue);
 JSC::EncodedJSValue jsTestObjCustomAttr(JSC::ExecState*, JSC::JSObject*, JSC::EncodedJSValue, JSC::PropertyName);
 void setJSTestObjCustomAttr(JSC::ExecState*, JSC::JSObject*, JSC::EncodedJSValue, JSC::EncodedJSValue);
+JSC::EncodedJSValue jsTestObjOnfoo(JSC::ExecState*, JSC::JSObject*, JSC::EncodedJSValue, JSC::PropertyName);
+void setJSTestObjOnfoo(JSC::ExecState*, JSC::JSObject*, JSC::EncodedJSValue, JSC::EncodedJSValue);
 JSC::EncodedJSValue jsTestObjWithScriptStateAttribute(JSC::ExecState*, JSC::JSObject*, JSC::EncodedJSValue, JSC::PropertyName);
 void setJSTestObjWithScriptStateAttribute(JSC::ExecState*, JSC::JSObject*, JSC::EncodedJSValue, JSC::EncodedJSValue);
 JSC::EncodedJSValue jsTestObjWithScriptExecutionContextAttribute(JSC::ExecState*, JSC::JSObject*, JSC::EncodedJSValue, JSC::PropertyName);
@@ -508,6 +510,7 @@ static const HashTableValue JSTestObjPrototypeTableValues[] =
     { "attrWithSetterException", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjAttrWithSetterException), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjAttrWithSetterException) },
     { "stringAttrWithGetterException", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjStringAttrWithGetterException), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjStringAttrWithGetterException) },
     { "stringAttrWithSetterException", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjStringAttrWithSetterException), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjStringAttrWithSetterException) },
+    { "onfoo", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjOnfoo), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjOnfoo) },
     { "withScriptStateAttribute", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjWithScriptStateAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjWithScriptStateAttribute) },
     { "withScriptExecutionContextAttribute", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjWithScriptExecutionContextAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjWithScriptExecutionContextAttribute) },
     { "withScriptStateAttributeRaises", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjWithScriptStateAttributeRaises), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjWithScriptStateAttributeRaises) },
@@ -1241,6 +1244,22 @@ EncodedJSValue jsTestObjCustomAttr(ExecState* exec, JSObject* slotBase, EncodedJ
 }
 
 
+EncodedJSValue jsTestObjOnfoo(ExecState* exec, JSObject* slotBase, EncodedJSValue thisValue, PropertyName)
+{
+    UNUSED_PARAM(exec);
+    UNUSED_PARAM(slotBase);
+    UNUSED_PARAM(thisValue);
+    JSTestObj* castedThis = jsDynamicCast<JSTestObj*>(JSValue::decode(thisValue));
+    if (UNLIKELY(!castedThis)) {
+        if (jsDynamicCast<JSTestObjPrototype*>(slotBase))
+            return reportDeprecatedGetterError(*exec, "TestObj", "onfoo");
+        return throwGetterTypeError(*exec, "TestObj", "onfoo");
+    }
+    UNUSED_PARAM(exec);
+    return JSValue::encode(eventHandlerAttribute(castedThis->impl(), eventNames().fooEvent));
+}
+
+
 EncodedJSValue jsTestObjWithScriptStateAttribute(ExecState* exec, JSObject* slotBase, EncodedJSValue thisValue, PropertyName)
 {
     UNUSED_PARAM(exec);
@@ -2421,6 +2440,22 @@ void setJSTestObjCustomAttr(ExecState* exec, JSObject* baseObject, EncodedJSValu
 }
 
 
+void setJSTestObjOnfoo(ExecState* exec, JSObject* baseObject, EncodedJSValue thisValue, EncodedJSValue encodedValue)
+{
+    JSValue value = JSValue::decode(encodedValue);
+    UNUSED_PARAM(baseObject);
+    JSTestObj* castedThis = jsDynamicCast<JSTestObj*>(JSValue::decode(thisValue));
+    if (UNLIKELY(!castedThis)) {
+        if (jsDynamicCast<JSTestObjPrototype*>(JSValue::decode(thisValue)))
+            reportDeprecatedSetterError(*exec, "TestObj", "onfoo");
+        else
+            throwSetterTypeError(*exec, "TestObj", "onfoo");
+        return;
+    }
+    setEventHandlerAttribute(*exec, *castedThis, castedThis->impl(), eventNames().fooEvent, value);
+}
+
+
 void setJSTestObjWithScriptStateAttribute(ExecState* exec, JSObject* baseObject, EncodedJSValue thisValue, EncodedJSValue encodedValue)
 {
     JSValue value = JSValue::decode(encodedValue);
index 82b8990..931c037 100644 (file)
@@ -109,12 +109,9 @@ enum _optional { "", "OptionalValue1", "OptionalValue2", "OptionalValue3" };
     [Custom] void customMethod();
     [Custom] void customMethodWithArgs(long longArg, DOMString strArg, TestObj objArg);
 
-    void addEventListener(DOMString type, 
-                          EventListener listener, 
-                          optional boolean useCapture);
-    void removeEventListener(DOMString type, 
-                             EventListener listener, 
-                             optional boolean useCapture);
+    void addEventListener(DOMString type, EventListener listener, optional boolean useCapture);
+    void removeEventListener(DOMString type, EventListener listener, optional boolean useCapture);
+    attribute EventListener onfoo;
 
     // 'CallWith' extended attribute
     [CallWith=ScriptState] void withScriptStateVoid();
index e8f48a4..3ad88bb 100644 (file)
     [Conditional=FONT_LOAD_EVENTS] readonly attribute FontLoader fonts;
 #endif
 
-#if (!defined(LANGUAGE_OBJECTIVE_C) || !LANGUAGE_OBJECTIVE_C) && (!defined(LANGUAGE_GOBJECT) || !LANGUAGE_GOBJECT)
-    // Event handler DOM attributes
     [NotEnumerable] attribute EventListener onabort;
+    [NotEnumerable] attribute EventListener onbeforecopy;
+    [NotEnumerable] attribute EventListener onbeforecut;
+    [NotEnumerable] attribute EventListener onbeforepaste;
     [NotEnumerable] attribute EventListener onblur;
     [NotEnumerable] attribute EventListener onchange;
     [NotEnumerable] attribute EventListener onclick;
     [NotEnumerable] attribute EventListener oncontextmenu;
+    [NotEnumerable] attribute EventListener oncopy;
+    [NotEnumerable] attribute EventListener oncut;
     [NotEnumerable] attribute EventListener ondblclick;
     [NotEnumerable] attribute EventListener ondrag;
     [NotEnumerable] attribute EventListener ondragend;
     [NotEnumerable] attribute EventListener onmouseover;
     [NotEnumerable] attribute EventListener onmouseup;
     [NotEnumerable] attribute EventListener onmousewheel;
+    [NotEnumerable] attribute EventListener onpaste;
     [NotEnumerable] attribute EventListener onreadystatechange;
+    [NotEnumerable] attribute EventListener onreset;
     [NotEnumerable] attribute EventListener onscroll;
+    [NotEnumerable] attribute EventListener onsearch;
     [NotEnumerable] attribute EventListener onselect;
+    [NotEnumerable] attribute EventListener onselectionchange;
+    [NotEnumerable] attribute EventListener onselectstart;
     [NotEnumerable] attribute EventListener onsubmit;
     [NotEnumerable] attribute EventListener onwheel;
 
-    // [NotEnumerable] attribute EventListener oncanplay;
-    // [NotEnumerable] attribute EventListener oncanplaythrough;
-    // [NotEnumerable] attribute EventListener ondurationchange;
-    // [NotEnumerable] attribute EventListener onemptied;
-    // [NotEnumerable] attribute EventListener onended;
-    // [NotEnumerable] attribute EventListener onloadeddata;
-    // [NotEnumerable] attribute EventListener onloadedmetadata;
-    // [NotEnumerable] attribute EventListener onloadstart;
-    // [NotEnumerable] attribute EventListener onpause;
-    // [NotEnumerable] attribute EventListener onplay;
-    // [NotEnumerable] attribute EventListener onplaying;
-    // [NotEnumerable] attribute EventListener onprogress;
-    // [NotEnumerable] attribute EventListener onratechange;
-    // [NotEnumerable] attribute EventListener onseeked;
-    // [NotEnumerable] attribute EventListener onseeking;
-    // [NotEnumerable] attribute EventListener onshow;
-    // [NotEnumerable] attribute EventListener onstalled;
-    // [NotEnumerable] attribute EventListener onsuspend;
-    // [NotEnumerable] attribute EventListener ontimeupdate;
-    // [NotEnumerable] attribute EventListener onvolumechange;
-    // [NotEnumerable] attribute EventListener onwaiting;
+    [NotEnumerable, Conditional=CSP_NEXT] attribute EventListener onsecuritypolicyviolation;
 
-    // WebKit extensions
-    [NotEnumerable] attribute EventListener onbeforecut;
-    [NotEnumerable] attribute EventListener oncut;
-    [NotEnumerable] attribute EventListener onbeforecopy;
-    [NotEnumerable] attribute EventListener oncopy;
-    [NotEnumerable] attribute EventListener onbeforepaste;
-    [NotEnumerable] attribute EventListener onpaste;
-    [NotEnumerable] attribute EventListener onreset;
-    [NotEnumerable] attribute EventListener onsearch;
-    [NotEnumerable] attribute EventListener onselectstart;
-    [NotEnumerable] attribute EventListener onselectionchange;
-    [NotEnumerable,Conditional=TOUCH_EVENTS] attribute EventListener ontouchstart;
-    [NotEnumerable,Conditional=TOUCH_EVENTS] attribute EventListener ontouchmove;
-    [NotEnumerable,Conditional=TOUCH_EVENTS] attribute EventListener ontouchend;
-    [NotEnumerable,Conditional=TOUCH_EVENTS] attribute EventListener ontouchcancel;
     [NotEnumerable, Conditional=FULLSCREEN_API] attribute EventListener onwebkitfullscreenchange;
     [NotEnumerable, Conditional=FULLSCREEN_API] attribute EventListener onwebkitfullscreenerror;
+
     [NotEnumerable, Conditional=POINTER_LOCK] attribute EventListener onpointerlockchange;
     [NotEnumerable, Conditional=POINTER_LOCK] attribute EventListener onpointerlockerror;
-    [NotEnumerable, Conditional=CSP_NEXT] attribute EventListener onsecuritypolicyviolation;
+
+    [NotEnumerable, Conditional=TOUCH_EVENTS] attribute EventListener ontouchstart;
+    [NotEnumerable, Conditional=TOUCH_EVENTS] attribute EventListener ontouchmove;
+    [NotEnumerable, Conditional=TOUCH_EVENTS] attribute EventListener ontouchend;
+    [NotEnumerable, Conditional=TOUCH_EVENTS] attribute EventListener ontouchcancel;
+
     [NotEnumerable, Conditional=WILL_REVEAL_EDGE_EVENTS] attribute EventListener onwebkitwillrevealbottom;
     [NotEnumerable, Conditional=WILL_REVEAL_EDGE_EVENTS] attribute EventListener onwebkitwillrevealleft;
     [NotEnumerable, Conditional=WILL_REVEAL_EDGE_EVENTS] attribute EventListener onwebkitwillrevealright;
     [NotEnumerable, Conditional=WILL_REVEAL_EDGE_EVENTS] attribute EventListener onwebkitwillrevealtop;
-#endif
 
 #if defined(ENABLE_IOS_TOUCH_EVENTS) && ENABLE_IOS_TOUCH_EVENTS
 #include <WebKitAdditions/DocumentIOS.idl>
index ddb9bb6..f3561ed 100644 (file)
     [Conditional=CSS_REGIONS] readonly attribute DOMString webkitRegionOverset;
     [Conditional=CSS_REGIONS] sequence<Range> webkitGetRegionFlowRanges();
 
-#if !defined(LANGUAGE_OBJECTIVE_C) || !LANGUAGE_OBJECTIVE_C
-    // Event handler DOM attributes
+    // 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 EventListener onabort;
+    [NotEnumerable] attribute EventListener onanimationend;
+    [NotEnumerable] attribute EventListener onanimationiteration;
+    [NotEnumerable] attribute EventListener onanimationstart;
+    [NotEnumerable] attribute EventListener onbeforecopy;
+    [NotEnumerable] attribute EventListener onbeforecut;
+    [NotEnumerable] attribute EventListener onbeforeload;
+    [NotEnumerable] attribute EventListener onbeforepaste;
     [NotEnumerable] attribute EventListener onblur;
+    [NotEnumerable] attribute EventListener oncanplay;
+    [NotEnumerable] attribute EventListener oncanplaythrough;
     [NotEnumerable] attribute EventListener onchange;
     [NotEnumerable] attribute EventListener onclick;
     [NotEnumerable] attribute EventListener oncontextmenu;
+    [NotEnumerable] attribute EventListener oncopy;
+    [NotEnumerable] attribute EventListener oncut;
     [NotEnumerable] attribute EventListener ondblclick;
     [NotEnumerable] attribute EventListener ondrag;
     [NotEnumerable] attribute EventListener ondragend;
     [NotEnumerable] attribute EventListener ondragover;
     [NotEnumerable] attribute EventListener ondragstart;
     [NotEnumerable] attribute EventListener ondrop;
+    [NotEnumerable] attribute EventListener ondurationchange;
+    [NotEnumerable] attribute EventListener onemptied;
+    [NotEnumerable] attribute EventListener onended;
     [NotEnumerable] attribute EventListener onerror;
     [NotEnumerable] attribute EventListener onfocus;
+    [NotEnumerable] attribute EventListener onfocusin;
+    [NotEnumerable] attribute EventListener onfocusout;
     [NotEnumerable] attribute EventListener oninput;
     [NotEnumerable] attribute EventListener oninvalid;
     [NotEnumerable] attribute EventListener onkeydown;
     [NotEnumerable] attribute EventListener onkeypress;
     [NotEnumerable] attribute EventListener onkeyup;
     [NotEnumerable] attribute EventListener onload;
+    [NotEnumerable] attribute EventListener onloadeddata;
+    [NotEnumerable] attribute EventListener onloadedmetadata;
+    [NotEnumerable] attribute EventListener onloadstart;
     [NotEnumerable] attribute EventListener onmousedown;
     [NotEnumerable] attribute EventListener onmouseenter;
     [NotEnumerable] attribute EventListener onmouseleave;
     [NotEnumerable] attribute EventListener onmouseover;
     [NotEnumerable] attribute EventListener onmouseup;
     [NotEnumerable] attribute EventListener onmousewheel;
+    [NotEnumerable] attribute EventListener onpaste;
+    [NotEnumerable] attribute EventListener onpause;
+    [NotEnumerable] attribute EventListener onplay;
+    [NotEnumerable] attribute EventListener onplaying;
+    [NotEnumerable] attribute EventListener onprogress;
+    [NotEnumerable] attribute EventListener onratechange;
+    [NotEnumerable] attribute EventListener onreset;
     [NotEnumerable] attribute EventListener onscroll;
+    [NotEnumerable] attribute EventListener onsearch;
+    [NotEnumerable] attribute EventListener onseeked;
+    [NotEnumerable] attribute EventListener onseeking;
     [NotEnumerable] attribute EventListener onselect;
+    [NotEnumerable] attribute EventListener onselectstart;
+    [NotEnumerable] attribute EventListener onstalled;
     [NotEnumerable] attribute EventListener onsubmit;
+    [NotEnumerable] attribute EventListener onsuspend;
+    [NotEnumerable] attribute EventListener ontimeupdate;
+    [NotEnumerable] attribute EventListener ontouchcancel;
+    [NotEnumerable] attribute EventListener ontouchend;
+    [NotEnumerable] attribute EventListener ontouchmove;
+    [NotEnumerable] attribute EventListener ontouchstart;
+    [NotEnumerable] attribute EventListener ontransitionend;
+    [NotEnumerable] attribute EventListener onvolumechange;
+    [NotEnumerable] attribute EventListener onwaiting;
     [NotEnumerable] attribute EventListener onwheel;
 
-    // [NotEnumerable] attribute EventListener oncanplay;
-    // [NotEnumerable] attribute EventListener oncanplaythrough;
-    // [NotEnumerable] attribute EventListener ondurationchange;
-    // [NotEnumerable] attribute EventListener onemptied;
-    // [NotEnumerable] attribute EventListener onended;
-    // [NotEnumerable] attribute EventListener onloadeddata;
-    // [NotEnumerable] attribute EventListener onloadedmetadata;
-    // [NotEnumerable] attribute EventListener onloadstart;
-    // [NotEnumerable] attribute EventListener onpause;
-    // [NotEnumerable] attribute EventListener onplay;
-    // [NotEnumerable] attribute EventListener onplaying;
-    // [NotEnumerable] attribute EventListener onprogress;
-    // [NotEnumerable] attribute EventListener onratechange;
-    // [NotEnumerable] attribute EventListener onreadystatechange;
-    // [NotEnumerable] attribute EventListener onseeked;
-    // [NotEnumerable] attribute EventListener onseeking;
-    // [NotEnumerable] attribute EventListener onshow;
-    // [NotEnumerable] attribute EventListener onstalled;
-    // [NotEnumerable] attribute EventListener onsuspend;
-    // [NotEnumerable] attribute EventListener ontimeupdate;
-    // [NotEnumerable] attribute EventListener onvolumechange;
-    // [NotEnumerable] attribute EventListener onwaiting;
+    // FIXME: If event handler attributes are all not enumerable, is there really a need to have them be conditional?
+    // I suggest just including them all unconditionally even if the event in question won't ever be sent.
+
+    [NotEnumerable, Conditional=ENCRYPTED_MEDIA] attribute EventListener onwebkitkeyadded;
+    [NotEnumerable, Conditional=ENCRYPTED_MEDIA] attribute EventListener onwebkitkeyerror;
+    [NotEnumerable, Conditional=ENCRYPTED_MEDIA] attribute EventListener onwebkitkeymessage;
+
+    [NotEnumerable, Conditional=ENCRYPTED_MEDIA|ENCRYPTED_MEDIA_V2] attribute EventListener onwebkitneedkey;
 
-    // WebKit extensions
-    [NotEnumerable] attribute EventListener onbeforecut;
-    [NotEnumerable] attribute EventListener oncut;
-    [NotEnumerable] attribute EventListener onbeforecopy;
-    [NotEnumerable] attribute EventListener oncopy;
-    [NotEnumerable] attribute EventListener onbeforepaste;
-    [NotEnumerable] attribute EventListener onpaste;
-    [NotEnumerable] attribute EventListener onreset;
-    [NotEnumerable] attribute EventListener onsearch;
-    [NotEnumerable] attribute EventListener onselectstart;
-    [NotEnumerable,Conditional=TOUCH_EVENTS] attribute EventListener ontouchstart;
-    [NotEnumerable,Conditional=TOUCH_EVENTS] attribute EventListener ontouchmove;
-    [NotEnumerable,Conditional=TOUCH_EVENTS] attribute EventListener ontouchend;
-    [NotEnumerable,Conditional=TOUCH_EVENTS] attribute EventListener ontouchcancel;
     [NotEnumerable, Conditional=FULLSCREEN_API] attribute EventListener onwebkitfullscreenchange;
     [NotEnumerable, Conditional=FULLSCREEN_API] attribute EventListener onwebkitfullscreenerror;
+
+    [NotEnumerable, Conditional=REQUEST_AUTOCOMPLETE] attribute EventListener onautocomplete;
+    [NotEnumerable, Conditional=REQUEST_AUTOCOMPLETE] attribute EventListener onautocompleteerror;
+
+    [NotEnumerable, Conditional=VIDEO_PRESENTATION_MODE] attribute EventListener onwebkitpresentationmodechanged;
+
     [NotEnumerable, Conditional=WILL_REVEAL_EDGE_EVENTS] attribute EventListener onwebkitwillrevealbottom;
     [NotEnumerable, Conditional=WILL_REVEAL_EDGE_EVENTS] attribute EventListener onwebkitwillrevealleft;
     [NotEnumerable, Conditional=WILL_REVEAL_EDGE_EVENTS] attribute EventListener onwebkitwillrevealright;
     [NotEnumerable, Conditional=WILL_REVEAL_EDGE_EVENTS] attribute EventListener onwebkitwillrevealtop;
-#endif
+
+    [NotEnumerable, Conditional=WIRELESS_PLAYBACK_TARGET] attribute EventListener onwebkitcurrentplaybacktargetiswirelesschanged;
+    [NotEnumerable, Conditional=WIRELESS_PLAYBACK_TARGET] attribute EventListener onwebkitplaybacktargetavailabilitychanged;
 };
 
 Element implements ChildNode;
index a07e7e7..6ac26fa 100644 (file)
@@ -26,31 +26,22 @@ interface HTMLBodyElement : HTMLElement {
     [Reflect] attribute DOMString text;
     [Reflect] attribute DOMString vLink;
 
-#if !defined(LANGUAGE_OBJECTIVE_C) || !LANGUAGE_OBJECTIVE_C
-    // Event handler attributes
     [NotEnumerable, JSWindowEventListener] attribute EventListener onbeforeunload;
+    [NotEnumerable, JSWindowEventListener] attribute EventListener onblur;
+    [NotEnumerable, JSWindowEventListener] attribute EventListener onerror;
+    [NotEnumerable, JSWindowEventListener] attribute EventListener onfocus;
     [NotEnumerable, JSWindowEventListener] attribute EventListener onhashchange;
+    [NotEnumerable, JSWindowEventListener] attribute EventListener onload;
     [NotEnumerable, JSWindowEventListener] attribute EventListener onmessage;
     [NotEnumerable, JSWindowEventListener] attribute EventListener onoffline;
     [NotEnumerable, JSWindowEventListener] attribute EventListener ononline;
+    [NotEnumerable, JSWindowEventListener] attribute EventListener onpagehide;
+    [NotEnumerable, JSWindowEventListener] attribute EventListener onpageshow;
     [NotEnumerable, JSWindowEventListener] attribute EventListener onpopstate;
     [NotEnumerable, JSWindowEventListener] attribute EventListener onresize;
     [NotEnumerable, JSWindowEventListener] attribute EventListener onstorage;
     [NotEnumerable, JSWindowEventListener] attribute EventListener onunload;
 
     [Conditional=ORIENTATION_EVENTS, NotEnumerable, JSWindowEventListener] attribute EventListener onorientationchange;
-
-    // Overrides of Element attributes (with different implementation in bindings).
-    [NotEnumerable, JSWindowEventListener] attribute EventListener onblur;
-    [NotEnumerable, JSWindowEventListener] attribute EventListener onerror;
-    [NotEnumerable, JSWindowEventListener] attribute EventListener onfocus;
-    [NotEnumerable, JSWindowEventListener] attribute EventListener onload;
-
-    // Not implemented yet.
-    // [NotEnumerable, JSWindowEventListener] attribute EventListener onafterprint;
-    // [NotEnumerable, JSWindowEventListener] attribute EventListener onbeforeprint;
-    // [NotEnumerable, JSWindowEventListener] attribute EventListener onredo;
-    // [NotEnumerable, JSWindowEventListener] attribute EventListener onundo;
-#endif
 };
 
index 38f489c..9e4ae52 100644 (file)
@@ -252,8 +252,12 @@ void HTMLElement::populateEventNameForAttributeLocalNameMap(HashMap<AtomicString
 {
     static const QualifiedName* const simpleTable[] = {
         &onabortAttr,
+        &onanimationendAttr,
+        &onanimationiterationAttr,
+        &onanimationstartAttr,
         &onbeforecopyAttr,
         &onbeforecutAttr,
+        &onbeforeloadAttr,
         &onbeforepasteAttr,
         &onblurAttr,
         &oncanplayAttr,
@@ -303,6 +307,7 @@ void HTMLElement::populateEventNameForAttributeLocalNameMap(HashMap<AtomicString
         &onratechangeAttr,
         &onresetAttr,
         &onscrollAttr,
+        &onsearchAttr,
         &onseekedAttr,
         &onseekingAttr,
         &onselectAttr,
@@ -315,23 +320,37 @@ void HTMLElement::populateEventNameForAttributeLocalNameMap(HashMap<AtomicString
         &ontouchendAttr,
         &ontouchmoveAttr,
         &ontouchstartAttr,
+        &ontransitionendAttr,
         &onvolumechangeAttr,
         &onwaitingAttr,
-#if ENABLE(WILL_REVEAL_EDGE_EVENTS)
-        &onwebkitwillrevealbottomAttr,
-        &onwebkitwillrevealleftAttr,
-        &onwebkitwillrevealrightAttr,
-        &onwebkitwillrevealtopAttr,
-#endif
+        &onwebkitbeginfullscreenAttr,
+        &onwebkitendfullscreenAttr,
         &onwheelAttr,
+#if ENABLE(FULLSCREEN_API)
+        &onwebkitfullscreenchangeAttr,
+        &onwebkitfullscreenerrorAttr,
+#endif
 #if ENABLE(IOS_GESTURE_EVENTS)
         &ongesturechangeAttr,
         &ongestureendAttr,
         &ongesturestartAttr,
 #endif
-#if ENABLE(FULLSCREEN_API)
-        &onwebkitfullscreenchangeAttr,
-        &onwebkitfullscreenerrorAttr,
+#if ENABLE(REQUEST_AUTOCOMPLETE)
+        &onautocompleteAttr,
+        &onautocompleteerrorAttr,
+#endif
+#if ENABLE(VIDEO_PRESENTATION_MODE)
+        &onwebkitpresentationmodechangedAttr,
+#endif
+#if ENABLE(WILL_REVEAL_EDGE_EVENTS)
+        &onwebkitwillrevealbottomAttr,
+        &onwebkitwillrevealleftAttr,
+        &onwebkitwillrevealrightAttr,
+        &onwebkitwillrevealtopAttr,
+#endif
+#if ENABLE(WIRELESS_PLAYBACK_TARGET)
+        &onwebkitcurrentplaybacktargetiswirelesschangedAttr,
+        &onwebkitplaybacktargetavailabilitychangedAttr,
 #endif
     };
 
@@ -353,10 +372,6 @@ void HTMLElement::populateEventNameForAttributeLocalNameMap(HashMap<AtomicString
     };
 
     const CustomMapping customTable[] = {
-        { onanimationendAttr, eventNames().animationendEvent },
-        { onanimationiterationAttr, eventNames().animationiterationEvent },
-        { onanimationstartAttr, eventNames().animationstartEvent },
-        { ontransitionendAttr, eventNames().webkitTransitionEndEvent },
         { onwebkitanimationendAttr, eventNames().webkitAnimationEndEvent },
         { onwebkitanimationiterationAttr, eventNames().webkitAnimationIterationEvent },
         { onwebkitanimationstartAttr, eventNames().webkitAnimationStartEvent },
index 0ade3ef..4234fec 100644 (file)
@@ -500,12 +500,6 @@ void HTMLFormElement::parseAttribute(const QualifiedName& name, const AtomicStri
         else
             document().unregisterForPageCacheSuspensionCallbacks(this);
     }
-#if ENABLE(REQUEST_AUTOCOMPLETE)
-    else if (name == onautocompleteAttr)
-        setAttributeEventListener(eventNames().autocompleteEvent, name, value);
-    else if (name == onautocompleteerrorAttr)
-        setAttributeEventListener(eventNames().autocompleteerrorEvent, name, value);
-#endif
     else
         HTMLElement::parseAttribute(name, value);
 }
index 5e78f5f..2b7276d 100644 (file)
@@ -47,9 +47,5 @@
     void reset();
     boolean checkValidity();
 
-#if (!defined(LANGUAGE_OBJECTIVE_C) || !LANGUAGE_OBJECTIVE_C) && (!defined(LANGUAGE_GOBJECT) || !LANGUAGE_GOBJECT)
-    [Conditional=REQUEST_AUTOCOMPLETE, NotEnumerable] attribute EventListener onautocomplete;
-    [Conditional=REQUEST_AUTOCOMPLETE, NotEnumerable] attribute EventListener onautocompleteerror;
-#endif
     [Conditional=REQUEST_AUTOCOMPLETE] void requestAutocomplete();
 };
index cbf9757..acd5528 100644 (file)
     [Reflect] attribute DOMString cols;
     [Reflect] attribute DOMString rows;
 
-#if !defined(LANGUAGE_OBJECTIVE_C) || !LANGUAGE_OBJECTIVE_C
-    // Event handler attributes
     [NotEnumerable, JSWindowEventListener] attribute EventListener onbeforeunload;
+    [NotEnumerable, JSWindowEventListener] attribute EventListener onblur;
+    [NotEnumerable, JSWindowEventListener] attribute EventListener onerror;
+    [NotEnumerable, JSWindowEventListener] attribute EventListener onfocus;
     [NotEnumerable, JSWindowEventListener] attribute EventListener onhashchange;
+    [NotEnumerable, JSWindowEventListener] attribute EventListener onload;
     [NotEnumerable, JSWindowEventListener] attribute EventListener onmessage;
     [NotEnumerable, JSWindowEventListener] attribute EventListener onoffline;
     [NotEnumerable, JSWindowEventListener] attribute EventListener ononline;
     [NotEnumerable, JSWindowEventListener] attribute EventListener onunload;
 
     [Conditional=ORIENTATION_EVENTS, NotEnumerable, JSWindowEventListener] attribute EventListener onorientationchange;
-
-    // Overrides of Element attributes (with different implementation in bindings).
-    [NotEnumerable, JSWindowEventListener] attribute EventListener onblur;
-    [NotEnumerable, JSWindowEventListener] attribute EventListener onerror;
-    [NotEnumerable, JSWindowEventListener] attribute EventListener onfocus;
-    [NotEnumerable, JSWindowEventListener] attribute EventListener onload;
-
-    // Not implemented yet.
-    // [NotEnumerable, JSWindowEventListener] attribute EventListener onafterprint;
-    // [NotEnumerable, JSWindowEventListener] attribute EventListener onbeforeprint;
-    // [NotEnumerable, JSWindowEventListener] attribute EventListener onredo;
-    // [NotEnumerable, JSWindowEventListener] attribute EventListener onundo;
-#endif
 };
 
index 0ddabf9..ff63043 100644 (file)
@@ -697,9 +697,6 @@ void HTMLInputElement::parseAttribute(const QualifiedName& name, const AtomicStr
         m_inputType->srcAttributeChanged();
     else if (name == usemapAttr || name == accesskeyAttr) {
         // FIXME: ignore for the moment
-    } else if (name == onsearchAttr) {
-        // Search field and slider attributes all just cause updateFromElement to be called through style recalcing.
-        setAttributeEventListener(eventNames().searchEvent, name, value);
     } else if (name == resultsAttr) {
         m_maxResults = !value.isNull() ? std::min(value.toInt(), maxSavedResults) : -1;
         m_inputType->maxResultsAttributeChanged();
index 718c64d..d43c18b 100644 (file)
@@ -545,62 +545,6 @@ void HTMLMediaElement::parseAttribute(const QualifiedName& name, const AtomicStr
 
     } else if (name == mediagroupAttr)
         setMediaGroup(value);
-    else if (name == onabortAttr)
-        setAttributeEventListener(eventNames().abortEvent, name, value);
-    else if (name == onbeforeloadAttr)
-        setAttributeEventListener(eventNames().beforeloadEvent, name, value);
-    else if (name == oncanplayAttr)
-        setAttributeEventListener(eventNames().canplayEvent, name, value);
-    else if (name == oncanplaythroughAttr)
-        setAttributeEventListener(eventNames().canplaythroughEvent, name, value);
-    else if (name == ondurationchangeAttr)
-        setAttributeEventListener(eventNames().durationchangeEvent, name, value);
-    else if (name == onemptiedAttr)
-        setAttributeEventListener(eventNames().emptiedEvent, name, value);
-    else if (name == onendedAttr)
-        setAttributeEventListener(eventNames().endedEvent, name, value);
-    else if (name == onerrorAttr)
-        setAttributeEventListener(eventNames().errorEvent, name, value);
-    else if (name == onloadeddataAttr)
-        setAttributeEventListener(eventNames().loadeddataEvent, name, value);
-    else if (name == onloadedmetadataAttr)
-        setAttributeEventListener(eventNames().loadedmetadataEvent, name, value);
-    else if (name == onloadstartAttr)
-        setAttributeEventListener(eventNames().loadstartEvent, name, value);
-    else if (name == onpauseAttr)
-        setAttributeEventListener(eventNames().pauseEvent, name, value);
-    else if (name == onplayAttr)
-        setAttributeEventListener(eventNames().playEvent, name, value);
-    else if (name == onplayingAttr)
-        setAttributeEventListener(eventNames().playingEvent, name, value);
-    else if (name == onprogressAttr)
-        setAttributeEventListener(eventNames().progressEvent, name, value);
-    else if (name == onratechangeAttr)
-        setAttributeEventListener(eventNames().ratechangeEvent, name, value);
-    else if (name == onseekedAttr)
-        setAttributeEventListener(eventNames().seekedEvent, name, value);
-    else if (name == onseekingAttr)
-        setAttributeEventListener(eventNames().seekingEvent, name, value);
-    else if (name == onstalledAttr)
-        setAttributeEventListener(eventNames().stalledEvent, name, value);
-    else if (name == onsuspendAttr)
-        setAttributeEventListener(eventNames().suspendEvent, name, value);
-    else if (name == ontimeupdateAttr)
-        setAttributeEventListener(eventNames().timeupdateEvent, name, value);
-    else if (name == onvolumechangeAttr)
-        setAttributeEventListener(eventNames().volumechangeEvent, name, value);
-    else if (name == onwaitingAttr)
-        setAttributeEventListener(eventNames().waitingEvent, name, value);
-    else if (name == onwebkitbeginfullscreenAttr)
-        setAttributeEventListener(eventNames().webkitbeginfullscreenEvent, name, value);
-    else if (name == onwebkitendfullscreenAttr)
-        setAttributeEventListener(eventNames().webkitendfullscreenEvent, name, value);
-#if ENABLE(WIRELESS_PLAYBACK_TARGET)
-    else if (name == onwebkitcurrentplaybacktargetiswirelesschangedAttr)
-        setAttributeEventListener(eventNames().webkitcurrentplaybacktargetiswirelesschangedEvent, name, value);
-    else if (name == onwebkitplaybacktargetavailabilitychangedAttr)
-        setAttributeEventListener(eventNames().webkitplaybacktargetavailabilitychangedEvent, name, value);
-#endif
     else
         HTMLElement::parseAttribute(name, value);
 }
@@ -3769,9 +3713,7 @@ void HTMLMediaElement::updateCaptionContainer()
 
     JSC::MarkedArgumentBuffer noArguments;
     JSC::call(exec, methodObject, callType, callData, controllerObject, noArguments);
-
-    if (exec->hadException())
-        exec->clearException();
+    exec->clearException();
 #endif
 }
     
@@ -5967,6 +5909,7 @@ void HTMLMediaElement::didAddUserAgentShadowRoot(ShadowRoot* root)
         return;
 
     JSC::JSValue controllerValue = JSC::call(exec, function, callType, callData, globalObject, argList);
+    exec->clearException();
     JSC::JSObject* controllerObject = JSC::jsDynamicCast<JSC::JSObject*>(controllerValue);
     if (!controllerObject)
         return;
index 8626b7c..5309b2e 100644 (file)
     attribute boolean muted;
     [Reflect=muted] attribute boolean defaultMuted;
 
-    attribute EventListener onemptied;
-    attribute EventListener onloadedmetadata;
-    attribute EventListener onloadeddata;
-    attribute EventListener oncanplay;
-    attribute EventListener oncanplaythrough;
-    attribute EventListener onplaying;
-    attribute EventListener onended;
-    attribute EventListener onwaiting;
-    attribute EventListener ondurationchange;
-    attribute EventListener ontimeupdate;
-    attribute EventListener onplay;
-    attribute EventListener onpause;
-    attribute EventListener onratechange;
-    attribute EventListener onvolumechange;
-
     // WebKit extensions
     attribute boolean webkitPreservesPitch;
 
     [Conditional=MEDIA_STATISTICS] readonly attribute unsigned long webkitAudioDecodedByteCount;
     [Conditional=MEDIA_STATISTICS] readonly attribute unsigned long webkitVideoDecodedByteCount;
 
-#if defined(ENABLE_ENCRYPTED_MEDIA) && ENABLE_ENCRYPTED_MEDIA
-    [RaisesException] void webkitGenerateKeyRequest([TreatNullAs=NullString, TreatUndefinedAs=NullString] DOMString keySystem, optional Uint8Array initData);
-    [RaisesException] void webkitAddKey([TreatNullAs=NullString, TreatUndefinedAs=NullString] DOMString keySystem, Uint8Array key, optional Uint8Array initData, [Default=NullString] optional DOMString sessionId);
-    [RaisesException] void webkitCancelKeyRequest([TreatNullAs=NullString, TreatUndefinedAs=NullString] DOMString keySystem, [Default=NullString] optional DOMString sessionId);
+#if !defined(LANGUAGE_GOBJECT) || !LANGUAGE_GOBJECT // Work around shortcomings in the gobject binding generator handling of conditional features by turning these off for gobject.
+    [Conditional=ENCRYPTED_MEDIA, RaisesException] void webkitGenerateKeyRequest([TreatNullAs=NullString, TreatUndefinedAs=NullString] DOMString keySystem, optional Uint8Array initData);
+    [Conditional=ENCRYPTED_MEDIA, RaisesException] void webkitAddKey([TreatNullAs=NullString, TreatUndefinedAs=NullString] DOMString keySystem, Uint8Array key, optional Uint8Array initData, [Default=NullString] optional DOMString sessionId);
+    [Conditional=ENCRYPTED_MEDIA, RaisesException] void webkitCancelKeyRequest([TreatNullAs=NullString, TreatUndefinedAs=NullString] DOMString keySystem, [Default=NullString] optional DOMString sessionId);
 
-    attribute EventListener onwebkitkeyadded;
-    attribute EventListener onwebkitkeyerror;
-    attribute EventListener onwebkitkeymessage;
-#endif
-    [Conditional=ENCRYPTED_MEDIA|ENCRYPTED_MEDIA_V2] attribute EventListener onwebkitneedkey;
-#if defined(ENABLE_ENCRYPTED_MEDIA_V2) && ENABLE_ENCRYPTED_MEDIA_V2
-    [ImplementedAs=keys] readonly attribute MediaKeys webkitKeys;
-    [ImplementedAs=setMediaKeys] void webkitSetMediaKeys(MediaKeys mediaKeys);
-#endif
+    [Conditional=ENCRYPTED_MEDIA_V2, ImplementedAs=keys] readonly attribute MediaKeys webkitKeys;
+    [Conditional=ENCRYPTED_MEDIA_V2, ImplementedAs=setMediaKeys] void webkitSetMediaKeys(MediaKeys mediaKeys);
 
-#if defined(ENABLE_VIDEO_TRACK) && ENABLE_VIDEO_TRACK
-    [RaisesException] TextTrack addTextTrack(DOMString kind, optional DOMString label, optional DOMString language);
-    readonly attribute AudioTrackList audioTracks;
-    readonly attribute TextTrackList textTracks;
-    readonly attribute VideoTrackList videoTracks;
+    [Conditional=VIDEO_TRACK, RaisesException] TextTrack addTextTrack(DOMString kind, optional DOMString label, optional DOMString language);
+    [Conditional=VIDEO_TRACK] readonly attribute AudioTrackList audioTracks;
+    [Conditional=VIDEO_TRACK] readonly attribute TextTrackList textTracks;
+    [Conditional=VIDEO_TRACK] readonly attribute VideoTrackList videoTracks;
 #endif
 
     [Reflect, TreatNullAs=NullString] attribute DOMString mediaGroup;
 
     [Conditional=WIRELESS_PLAYBACK_TARGET] void webkitShowPlaybackTargetPicker();
     [Conditional=WIRELESS_PLAYBACK_TARGET] readonly attribute boolean webkitCurrentPlaybackTargetIsWireless;
-    [Conditional=WIRELESS_PLAYBACK_TARGET] attribute EventListener onwebkitcurrentplaybacktargetiswirelesschanged;
-    [Conditional=WIRELESS_PLAYBACK_TARGET] attribute EventListener onwebkitplaybacktargetavailabilitychanged;
 };
index 09bc165..743e996 100644 (file)
@@ -402,6 +402,7 @@ void HTMLPlugInImageElement::didAddUserAgentShadowRoot(ShadowRoot* root)
         return;
 
     JSC::call(exec, overlay, callType, callData, globalObject, argList);
+    exec->clearException();
 }
 
 bool HTMLPlugInImageElement::partOfSnapshotOverlay(const Node* node) const
index d2d18c3..c96e955 100644 (file)
@@ -125,10 +125,6 @@ void HTMLVideoElement::parseAttribute(const QualifiedName& name, const AtomicStr
     else if (name == webkitwirelessvideoplaybackdisabledAttr)
         mediaSession().setWirelessVideoPlaybackDisabled(*this, webkitWirelessVideoPlaybackDisabled());
 #endif
-#if ENABLE(VIDEO_PRESENTATION_MODE)
-    else if (name == onwebkitpresentationmodechangedAttr)
-        setAttributeEventListener(eventNames().webkitpresentationmodechangedEvent, name, value);
-#endif
     else {
         HTMLMediaElement::parseAttribute(name, value);    
 
index c882188..e3c54fe 100644 (file)
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
  */
 
-#if defined(ENABLE_VIDEO_PRESENTATION_MODE) && ENABLE_VIDEO_PRESENTATION_MODE
-enum VideoPresentationMode {
-    "fullscreen",
-    "optimized",
-    "inline"
-};
-#endif
+// FIXME: This should be Conditional=VIDEO_PRESENTATION_MODE.
+enum VideoPresentationMode { "fullscreen", "optimized", "inline" };
 
 [
     Conditional=VIDEO,
@@ -53,20 +48,13 @@ enum VideoPresentationMode {
 
     [Conditional=WIRELESS_PLAYBACK_TARGET] attribute boolean webkitWirelessVideoPlaybackDisabled;
 
-    // The number of frames that have been decoded and made available for
-    // playback.
+    // The number of frames that have been decoded and made available for playback.
     [Conditional=MEDIA_STATISTICS] readonly attribute unsigned long webkitDecodedFrameCount;
 
-    // The number of decoded frames that have been dropped by the player
-    // for performance reasons during playback.
+    // The number of decoded frames that have been dropped by the player for performance reasons during playback.
     [Conditional=MEDIA_STATISTICS] readonly attribute unsigned long webkitDroppedFrameCount;
 
-#if defined(ENABLE_VIDEO_PRESENTATION_MODE) && ENABLE_VIDEO_PRESENTATION_MODE
-    boolean webkitSupportsPresentationMode(VideoPresentationMode mode);
-
-    readonly attribute VideoPresentationMode webkitPresentationMode;
-    void webkitSetPresentationMode(VideoPresentationMode mode);
-
-    attribute EventListener onwebkitpresentationmodechanged;
-#endif
+    [Conditional=VIDEO_PRESENTATION_MODE] boolean webkitSupportsPresentationMode(VideoPresentationMode mode);
+    [Conditional=VIDEO_PRESENTATION_MODE] readonly attribute VideoPresentationMode webkitPresentationMode;
+    [Conditional=VIDEO_PRESENTATION_MODE] void webkitSetPresentationMode(VideoPresentationMode mode);
 };
index 662a281..ce56822 100644 (file)
     [GetterRaisesException] readonly attribute Storage sessionStorage;
     [GetterRaisesException] readonly attribute Storage localStorage;
 
-#if defined(ENABLE_ORIENTATION_EVENTS) && ENABLE_ORIENTATION_EVENTS
     // This is the interface orientation in degrees. Some examples are:
     //  0 is straight up; -90 is when the device is rotated 90 clockwise;
     //  90 is when rotated counter clockwise.
-    readonly attribute long orientation;
-#endif
+    [Conditional=ORIENTATION_EVENTS] readonly attribute long orientation;
 
     // cross-document messaging
 #if defined(LANGUAGE_JAVASCRIPT) && LANGUAGE_JAVASCRIPT
     [DoNotCheckSecurity, Custom, RaisesException, ForwardDeclareInHeader] void postMessage(SerializedScriptValue message, optional MessagePort messagePort, DOMString targetOrigin);
 #endif
 
-#if defined(ENABLE_WEB_TIMING) && ENABLE_WEB_TIMING
-    [Replaceable] readonly attribute Performance performance;
-#endif
+    [Conditional=WEB_TIMING, Replaceable] readonly attribute Performance performance;
 
-#if defined(ENABLE_REQUEST_ANIMATION_FRAME) && ENABLE_REQUEST_ANIMATION_FRAME
-    long requestAnimationFrame(RequestAnimationFrameCallback callback);
-    void cancelAnimationFrame(long id);
-    long webkitRequestAnimationFrame(RequestAnimationFrameCallback callback);
-    [ImplementedAs=cancelAnimationFrame] void webkitCancelAnimationFrame(long id);
-    [ImplementedAs=cancelAnimationFrame] void webkitCancelRequestAnimationFrame(long id); // This is a deprecated alias for webkitCancelAnimationFrame(). Remove this when removing vendor prefix.
-#endif
+    [Conditional=REQUEST_ANIMATION_FRAME] long requestAnimationFrame(RequestAnimationFrameCallback callback);
+    [Conditional=REQUEST_ANIMATION_FRAME] void cancelAnimationFrame(long id);
+    [Conditional=REQUEST_ANIMATION_FRAME] long webkitRequestAnimationFrame(RequestAnimationFrameCallback callback);
+    [Conditional=REQUEST_ANIMATION_FRAME, ImplementedAs=cancelAnimationFrame] void webkitCancelAnimationFrame(long id);
+    [Conditional=REQUEST_ANIMATION_FRAME, ImplementedAs=cancelAnimationFrame] void webkitCancelRequestAnimationFrame(long id); // This is a deprecated alias for webkitCancelAnimationFrame(). Remove this when removing vendor prefix.
 
     [Replaceable] readonly attribute DOMWindowCSS CSS;
 
-    // Events
     attribute EventListener onabort;
+    attribute EventListener onanimationend;
+    attribute EventListener onanimationiteration;
+    attribute EventListener onanimationstart;
     attribute EventListener onbeforeunload;
     attribute EventListener onblur;
     attribute EventListener oncanplay;
     attribute EventListener onpopstate;
     attribute EventListener onprogress;
     attribute EventListener onratechange;
+    attribute EventListener onreset;
     attribute EventListener onresize;
     attribute EventListener onscroll;
+    attribute EventListener onsearch;
     attribute EventListener onseeked;
     attribute EventListener onseeking;
     attribute EventListener onselect;
     attribute EventListener onsubmit;
     attribute EventListener onsuspend;
     attribute EventListener ontimeupdate;
+    attribute EventListener ontransitionend;
     attribute EventListener onunload;
     attribute EventListener onvolumechange;
     attribute EventListener onwaiting;
-    attribute EventListener onwheel;
-
-    // Not implemented yet.
-    // attribute EventListener onafterprint;
-    // attribute EventListener onbeforeprint;
-    // attribute EventListener onreadystatechange;
-    // attribute EventListener onredo;
-    // attribute EventListener onshow;
-    // attribute EventListener onundo;
-
-    // Webkit extensions
-    attribute EventListener onreset;
-    attribute EventListener onsearch;
     attribute EventListener onwebkitanimationend;
     attribute EventListener onwebkitanimationiteration;
     attribute EventListener onwebkitanimationstart;
-    attribute EventListener onanimationend;
-    attribute EventListener onanimationiteration;
-    attribute EventListener onanimationstart;
     attribute EventListener onwebkittransitionend;
-    attribute EventListener ontransitionend;
-#if defined(ENABLE_ORIENTATION_EVENTS) && ENABLE_ORIENTATION_EVENTS
-    attribute EventListener onorientationchange;
-#endif
-    [Conditional=TOUCH_EVENTS] attribute EventListener ontouchstart;
-    [Conditional=TOUCH_EVENTS] attribute EventListener ontouchmove;
-    [Conditional=TOUCH_EVENTS] attribute EventListener ontouchend;
-    [Conditional=TOUCH_EVENTS] attribute EventListener ontouchcancel;
+    attribute EventListener onwheel;
+
+    [Conditional=DEVICE_ORIENTATION] attribute EventListener ondevicemotion;
+    [Conditional=DEVICE_ORIENTATION] attribute EventListener ondeviceorientation;
 
     [Conditional=IOS_GESTURE_EVENTS] attribute EventListener ongesturestart;
     [Conditional=IOS_GESTURE_EVENTS] attribute EventListener ongesturechange;
     [Conditional=IOS_GESTURE_EVENTS] attribute EventListener ongestureend;
 
-    [Conditional=DEVICE_ORIENTATION] attribute EventListener ondevicemotion;
-    [Conditional=DEVICE_ORIENTATION] attribute EventListener ondeviceorientation;
+    [Conditional=ORIENTATION_EVENTS] attribute EventListener onorientationchange;
+
+    [Conditional=TOUCH_EVENTS] attribute EventListener ontouchstart;
+    [Conditional=TOUCH_EVENTS] attribute EventListener ontouchmove;
+    [Conditional=TOUCH_EVENTS] attribute EventListener ontouchend;
+    [Conditional=TOUCH_EVENTS] attribute EventListener ontouchcancel;
 
     [Conditional=PROXIMITY_EVENTS] attribute EventListener onwebkitdeviceproximity;
 
     [Conditional=WILL_REVEAL_EDGE_EVENTS] attribute EventListener onwebkitwillrevealtop;
 
     // EventTarget interface
-    [Custom] void addEventListener(DOMString type,
-                                  EventListener listener,
-                                  optional boolean useCapture);
-    [Custom] void removeEventListener(DOMString type,
-                                      EventListener listener,
-                                      optional boolean useCapture);
-    [RaisesException] boolean dispatchEvent(Event evt);
+    [Custom] void addEventListener(DOMString type, EventListener listener, optional boolean useCapture);
+    [Custom] void removeEventListener(DOMString type, EventListener listener, optional boolean useCapture);
+    [RaisesException] boolean dispatchEvent(Event event);
 
     void captureEvents(/*in long eventFlags*/);
     void releaseEvents(/*in long eventFlags*/);
index bee8ecc..8b4cbd8 100644 (file)
@@ -128,12 +128,6 @@ mode
 name
 numOctaves
 offset
-onactivate
-onbegin
-onend
-onfocusin
-onfocusout
-onrepeat
 onzoom
 opacity
 operator