Title: [245086] trunk
Revision
245086
Author
[email protected]
Date
2019-05-08 18:34:05 -0700 (Wed, 08 May 2019)

Log Message

[iOS Debug] ASSERTION FAILED: !m_originalNode in WebCore::JSLazyEventListener::checkValidityForEventTarget(WebCore::EventTarget &)
https://bugs.webkit.org/show_bug.cgi?id=197696
<rdar://problem/50586956>

Reviewed by Simon Fraser.

Source/WebCore:

Setting the onorientationchange / onresize event handler on the body should set the event handler on the
window object, as per the HTML specification. However, calling body.addEventListener() with 'orientationchange'
or 'resize' should not set the event listener on the window object, only the body. Blink and Gecko seem to
behave as per specification but WebKit had a quirk for the addEventListener case. The quirk's implementation
is slightly wrong (because it is unsafe to take a JSLazyEventListener from a body element and add it to the
window, given that the JSLazyEventListener keeps a raw pointer to its element) and was causing crashes such
as <rdar://problem/24314027>. As a result, this patch simply drops the WebKit quirk, which will align our
behavior with other browsers and fix the crashes altogether.

Test: fast/events/ios/rotation/orientationchange-event-listener-on.body.html

* dom/Node.cpp:
(WebCore::tryAddEventListener):
(WebCore::tryRemoveEventListener):

LayoutTests:

Add layout test coverage.

* fast/events/ios/rotation/orientationchange-event-listener-on.body-expected.txt: Added.
* fast/events/ios/rotation/orientationchange-event-listener-on.body.html: Added.

Modified Paths

Added Paths

Removed Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (245085 => 245086)


--- trunk/LayoutTests/ChangeLog	2019-05-09 01:18:19 UTC (rev 245085)
+++ trunk/LayoutTests/ChangeLog	2019-05-09 01:34:05 UTC (rev 245086)
@@ -1,3 +1,16 @@
+2019-05-08  Chris Dumez  <[email protected]>
+
+        [iOS Debug] ASSERTION FAILED: !m_originalNode in WebCore::JSLazyEventListener::checkValidityForEventTarget(WebCore::EventTarget &)
+        https://bugs.webkit.org/show_bug.cgi?id=197696
+        <rdar://problem/50586956>
+
+        Reviewed by Simon Fraser.
+
+        Add layout test coverage.
+
+        * fast/events/ios/rotation/orientationchange-event-listener-on.body-expected.txt: Added.
+        * fast/events/ios/rotation/orientationchange-event-listener-on.body.html: Added.
+
 2019-05-08  Ryan Haddad  <[email protected]>
 
         Unreviewed, rolling out r245058.

Added: trunk/LayoutTests/fast/events/ios/rotation/orientationchange-event-listener-on.body-expected.txt (0 => 245086)


--- trunk/LayoutTests/fast/events/ios/rotation/orientationchange-event-listener-on.body-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/fast/events/ios/rotation/orientationchange-event-listener-on.body-expected.txt	2019-05-09 01:34:05 UTC (rev 245086)
@@ -0,0 +1,15 @@
+Tests the behavior of the resize / orientationchange event listeners on both the body and the window.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+Before rotation
+PASS In body's onorientationchange event handler
+PASS In window's orientationchange event listener
+PASS In body's onresize event handler
+PASS In window's resize event listener
+After rotation
+PASS successfullyParsed is true
+
+TEST COMPLETE
+Rotation test.

Added: trunk/LayoutTests/fast/events/ios/rotation/orientationchange-event-listener-on.body.html (0 => 245086)


--- trunk/LayoutTests/fast/events/ios/rotation/orientationchange-event-listener-on.body.html	                        (rev 0)
+++ trunk/LayoutTests/fast/events/ios/rotation/orientationchange-event-listener-on.body.html	2019-05-09 01:34:05 UTC (rev 245086)
@@ -0,0 +1,67 @@
+<!DOCTYPE html> <!-- webkit-test-runner [ useFlexibleViewport=true ] -->
+
+<html>
+<head>
+    <meta name="viewport" content="initial-scale=1.0">
+    <script src=""
+</head>
+<body _onorientationchange_="bodyOrientationChange()" _onresize_="bodyResize()">
+    <script>
+        description("Tests the behavior of the resize / orientationchange event listeners on both the body and the window.");
+        jsTestIsAsync = true;
+
+        function getRotationUIScript()
+        {
+            return `
+            (function() {
+                uiController.simulateRotation('landscape-right', function() {
+                    uiController.doAfterVisibleContentRectUpdate(function () {
+                        uiController.uiScriptComplete();
+                    })
+                });
+            })();`
+        }
+
+        function doTest()
+        {
+            debug('Before rotation');
+            if (!window.testRunner)
+                return;
+
+            testRunner.runUIScript(getRotationUIScript(), function(result) {
+                debug('After rotation');
+
+                finishJSTest();
+            });
+        }
+        window.addEventListener('resize', function() {
+            testPassed("In window's resize event listener");
+        }, false);
+
+        window.addEventListener('orientationchange', function() {
+            testPassed("In window's orientationchange event listener");
+        }, false);
+
+        document.body.addEventListener('resize', function() {
+            testFailed("In body's resize event listener");
+        }, false);
+
+        document.body.addEventListener('orientationchange', function() {
+            testFailed("In body's orientationchange event listener");
+        }, false);
+
+        function bodyOrientationChange()
+        {
+            testPassed("In body's onorientationchange event handler");
+        }
+
+        function bodyResize()
+        {
+            testPassed("In body's onresize event handler");
+        }
+
+        window.addEventListener('load', doTest, false);
+    </script>
+    Rotation test.
+</body>
+</html>

Deleted: trunk/LayoutTests/platform/ios/fast/dom/event-handler-attributes-expected.txt (245085 => 245086)


--- trunk/LayoutTests/platform/ios/fast/dom/event-handler-attributes-expected.txt	2019-05-09 01:18:19 UTC (rev 245085)
+++ trunk/LayoutTests/platform/ios/fast/dom/event-handler-attributes-expected.txt	2019-05-09 01:34:05 UTC (rev 245086)
@@ -1,948 +0,0 @@
-Test which event listeners are set up by event handler attributes (the ones with names like onclick).
-
-On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
-
-
-Event names we expect to be able to set on the window object
-
-PASS testScriptAttribute(window, "abort") is "window"
-PASS testScriptAttribute(window, "animationend") is "window"
-PASS testScriptAttribute(window, "animationiteration") is "window"
-PASS testScriptAttribute(window, "animationstart") is "window"
-PASS testScriptAttribute(window, "beforeunload") is "window"
-PASS testScriptAttribute(window, "blur") is "window"
-PASS testScriptAttribute(window, "canplay") is "window"
-PASS testScriptAttribute(window, "canplaythrough") is "window"
-PASS testScriptAttribute(window, "change") is "window"
-PASS testScriptAttribute(window, "click") is "window"
-PASS testScriptAttribute(window, "contextmenu") is "window"
-PASS testScriptAttribute(window, "dblclick") is "window"
-PASS testScriptAttribute(window, "drag") is "window"
-PASS testScriptAttribute(window, "dragend") is "window"
-PASS testScriptAttribute(window, "dragenter") is "window"
-PASS testScriptAttribute(window, "dragleave") is "window"
-PASS testScriptAttribute(window, "dragover") is "window"
-PASS testScriptAttribute(window, "dragstart") is "window"
-PASS testScriptAttribute(window, "drop") is "window"
-PASS testScriptAttribute(window, "durationchange") is "window"
-PASS testScriptAttribute(window, "emptied") is "window"
-PASS testScriptAttribute(window, "ended") is "window"
-PASS testScriptAttribute(window, "error") is "window"
-PASS testScriptAttribute(window, "focus") is "window"
-PASS testScriptAttribute(window, "hashchange") is "window"
-PASS testScriptAttribute(window, "input") is "window"
-PASS testScriptAttribute(window, "invalid") is "window"
-PASS testScriptAttribute(window, "keydown") is "window"
-PASS testScriptAttribute(window, "keypress") is "window"
-PASS testScriptAttribute(window, "keyup") is "window"
-PASS testScriptAttribute(window, "load") is "window"
-PASS testScriptAttribute(window, "loadeddata") is "window"
-PASS testScriptAttribute(window, "loadedmetadata") is "window"
-PASS testScriptAttribute(window, "loadstart") is "window"
-PASS testScriptAttribute(window, "message") is "window"
-PASS testScriptAttribute(window, "mousedown") is "window"
-PASS testScriptAttribute(window, "mouseenter") is "window"
-PASS testScriptAttribute(window, "mouseleave") is "window"
-PASS testScriptAttribute(window, "mousemove") is "window"
-PASS testScriptAttribute(window, "mouseout") is "window"
-PASS testScriptAttribute(window, "mouseover") is "window"
-PASS testScriptAttribute(window, "mouseup") is "window"
-PASS testScriptAttribute(window, "mousewheel") is "window"
-PASS testScriptAttribute(window, "offline") is "window"
-PASS testScriptAttribute(window, "online") is "window"
-PASS testScriptAttribute(window, "pagehide") is "window"
-PASS testScriptAttribute(window, "pageshow") is "window"
-PASS testScriptAttribute(window, "pause") is "window"
-PASS testScriptAttribute(window, "play") is "window"
-PASS testScriptAttribute(window, "playing") is "window"
-PASS testScriptAttribute(window, "popstate") is "window"
-PASS testScriptAttribute(window, "progress") is "window"
-PASS testScriptAttribute(window, "ratechange") is "window"
-PASS testScriptAttribute(window, "reset") is "window"
-PASS testScriptAttribute(window, "resize") is "window"
-PASS testScriptAttribute(window, "scroll") is "window"
-PASS testScriptAttribute(window, "search") is "window"
-PASS testScriptAttribute(window, "seeked") is "window"
-PASS testScriptAttribute(window, "seeking") is "window"
-PASS testScriptAttribute(window, "select") is "window"
-PASS testScriptAttribute(window, "stalled") is "window"
-PASS testScriptAttribute(window, "storage") is "window"
-PASS testScriptAttribute(window, "submit") is "window"
-PASS testScriptAttribute(window, "suspend") is "window"
-PASS testScriptAttribute(window, "timeupdate") is "window"
-PASS testScriptAttribute(window, "transitionend") is "window"
-PASS testScriptAttribute(window, "unload") is "window"
-PASS testScriptAttribute(window, "volumechange") is "window"
-PASS testScriptAttribute(window, "waiting") is "window"
-PASS testScriptAttribute(window, "webkitanimationend") is "window"
-PASS testScriptAttribute(window, "webkitanimationiteration") is "window"
-PASS testScriptAttribute(window, "webkitanimationstart") is "window"
-PASS testScriptAttribute(window, "webkittransitionend") is "window"
-PASS testScriptAttribute(window, "wheel") is "window"
-
-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"
-PASS testScriptAttribute(window, "focusin") is "none"
-PASS testScriptAttribute(window, "focusout") is "none"
-PASS testScriptAttribute(window, "noneventname") is "none"
-PASS testScriptAttribute(window, "paste") is "none"
-PASS testScriptAttribute(window, "readystatechange") is "none"
-PASS testScriptAttribute(window, "selectionchange") is "none"
-PASS testScriptAttribute(window, "selectstart") is "none"
-
-Event names we expect to be able to set on the document
-
-PASS testScriptAttribute(document, "abort") is "document"
-PASS testScriptAttribute(document, "animationend") is "document"
-PASS testScriptAttribute(document, "animationiteration") is "document"
-PASS testScriptAttribute(document, "animationstart") is "document"
-PASS testScriptAttribute(document, "beforecopy") is "document"
-PASS testScriptAttribute(document, "beforecut") is "document"
-PASS testScriptAttribute(document, "beforepaste") is "document"
-PASS testScriptAttribute(document, "blur") is "document"
-PASS testScriptAttribute(document, "canplay") is "document"
-PASS testScriptAttribute(document, "canplaythrough") is "document"
-PASS testScriptAttribute(document, "change") is "document"
-PASS testScriptAttribute(document, "click") is "document"
-PASS testScriptAttribute(document, "contextmenu") is "document"
-PASS testScriptAttribute(document, "copy") is "document"
-PASS testScriptAttribute(document, "cut") is "document"
-PASS testScriptAttribute(document, "dblclick") is "document"
-PASS testScriptAttribute(document, "drag") is "document"
-PASS testScriptAttribute(document, "dragend") is "document"
-PASS testScriptAttribute(document, "dragenter") is "document"
-PASS testScriptAttribute(document, "dragleave") is "document"
-PASS testScriptAttribute(document, "dragover") is "document"
-PASS testScriptAttribute(document, "dragstart") is "document"
-PASS testScriptAttribute(document, "drop") is "document"
-PASS testScriptAttribute(document, "durationchange") is "document"
-PASS testScriptAttribute(document, "emptied") is "document"
-PASS testScriptAttribute(document, "ended") is "document"
-PASS testScriptAttribute(document, "error") is "document"
-PASS testScriptAttribute(document, "focus") is "document"
-PASS testScriptAttribute(document, "input") is "document"
-PASS testScriptAttribute(document, "invalid") is "document"
-PASS testScriptAttribute(document, "keydown") is "document"
-PASS testScriptAttribute(document, "keypress") is "document"
-PASS testScriptAttribute(document, "keyup") is "document"
-PASS testScriptAttribute(document, "load") is "document"
-PASS testScriptAttribute(document, "loadeddata") is "document"
-PASS testScriptAttribute(document, "loadedmetadata") is "document"
-PASS testScriptAttribute(document, "loadstart") is "document"
-PASS testScriptAttribute(document, "mousedown") is "document"
-PASS testScriptAttribute(document, "mouseenter") is "document"
-PASS testScriptAttribute(document, "mouseleave") is "document"
-PASS testScriptAttribute(document, "mousemove") is "document"
-PASS testScriptAttribute(document, "mouseout") is "document"
-PASS testScriptAttribute(document, "mouseover") is "document"
-PASS testScriptAttribute(document, "mouseup") is "document"
-PASS testScriptAttribute(document, "mousewheel") is "document"
-PASS testScriptAttribute(document, "paste") is "document"
-PASS testScriptAttribute(document, "pause") is "document"
-PASS testScriptAttribute(document, "play") is "document"
-PASS testScriptAttribute(document, "playing") is "document"
-PASS testScriptAttribute(document, "progress") is "document"
-PASS testScriptAttribute(document, "ratechange") is "document"
-PASS testScriptAttribute(document, "readystatechange") is "document"
-PASS testScriptAttribute(document, "reset") is "document"
-FAIL testScriptAttribute(document, "resize") should be document. Was window, document.
-PASS testScriptAttribute(document, "scroll") is "document"
-PASS testScriptAttribute(document, "search") is "document"
-PASS testScriptAttribute(document, "seeked") is "document"
-PASS testScriptAttribute(document, "seeking") is "document"
-PASS testScriptAttribute(document, "select") is "document"
-PASS testScriptAttribute(document, "selectionchange") is "document"
-PASS testScriptAttribute(document, "selectstart") is "document"
-PASS testScriptAttribute(document, "stalled") is "document"
-PASS testScriptAttribute(document, "submit") is "document"
-PASS testScriptAttribute(document, "suspend") is "document"
-PASS testScriptAttribute(document, "timeupdate") is "document"
-PASS testScriptAttribute(document, "transitionend") is "document"
-PASS testScriptAttribute(document, "volumechange") is "document"
-PASS testScriptAttribute(document, "waiting") is "document"
-PASS testScriptAttribute(document, "wheel") is "document"
-
-Event names we expect not to be able to set on the document
-
-PASS testScriptAttribute(document, "beforeload") is "none"
-PASS testScriptAttribute(document, "beforeunload") is "none"
-PASS testScriptAttribute(document, "focusin") is "none"
-PASS testScriptAttribute(document, "focusout") is "none"
-PASS testScriptAttribute(document, "hashchange") is "none"
-PASS testScriptAttribute(document, "message") is "none"
-PASS testScriptAttribute(document, "noneventname") is "none"
-PASS testScriptAttribute(document, "offline") is "none"
-PASS testScriptAttribute(document, "online") is "none"
-PASS testScriptAttribute(document, "pagehide") is "none"
-PASS testScriptAttribute(document, "pageshow") is "none"
-PASS testScriptAttribute(document, "popstate") is "none"
-PASS testScriptAttribute(document, "storage") is "none"
-PASS testScriptAttribute(document, "unload") is "none"
-PASS testScriptAttribute(document, "webkitanimationend") is "none"
-PASS testScriptAttribute(document, "webkitanimationiteration") is "none"
-PASS testScriptAttribute(document, "webkitanimationstart") 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"
-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"
-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"
-PASS testElementAttribute(element, "copy") is "target"
-PASS testElementAttribute(element, "cut") is "target"
-PASS testElementAttribute(element, "dblclick") is "target"
-PASS testElementAttribute(element, "drag") is "target"
-PASS testElementAttribute(element, "dragend") is "target"
-PASS testElementAttribute(element, "dragenter") is "target"
-PASS testElementAttribute(element, "dragleave") is "target"
-PASS testElementAttribute(element, "dragover") is "target"
-PASS testElementAttribute(element, "dragstart") is "target"
-PASS testElementAttribute(element, "drop") is "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"
-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"
-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"
-PASS testElementAttribute(element, "mousemove") is "target"
-PASS testElementAttribute(element, "mouseout") is "target"
-PASS testElementAttribute(element, "mouseover") is "target"
-PASS testElementAttribute(element, "mouseup") is "target"
-PASS testElementAttribute(element, "mousewheel") is "target"
-PASS testElementAttribute(element, "paste") is "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"
-FAIL testElementAttribute(element, "resize") should be target. Was target, window.
-PASS testElementAttribute(element, "scroll") is "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"
-PASS testElementAttribute(element, "stalled") is "target"
-PASS testElementAttribute(element, "submit") is "target"
-PASS testElementAttribute(element, "suspend") is "target"
-PASS testElementAttribute(element, "timeupdate") is "target"
-PASS testElementAttribute(element, "transitionend") is "target"
-PASS testElementAttribute(element, "volumechange") is "target"
-PASS testElementAttribute(element, "waiting") is "target"
-PASS testElementAttribute(element, "webkitanimationend") is "target"
-PASS testElementAttribute(element, "webkitanimationiteration") is "target"
-PASS testElementAttribute(element, "webkitanimationstart") is "target"
-PASS testElementAttribute(element, "webkittransitionend") is "target"
-PASS testElementAttribute(element, "wheel") is "target"
-
-Event names we expect not to be able to set on an element (tested on the <html> element)
-
-PASS testElementAttribute(element, "beforeunload") is "none"
-PASS testElementAttribute(element, "hashchange") is "none"
-PASS testElementAttribute(element, "message") is "none"
-PASS testElementAttribute(element, "noneventname") is "none"
-PASS testElementAttribute(element, "offline") is "none"
-PASS testElementAttribute(element, "online") is "none"
-PASS testElementAttribute(element, "pagehide") is "none"
-PASS testElementAttribute(element, "pageshow") is "none"
-PASS testElementAttribute(element, "popstate") is "none"
-PASS testElementAttribute(element, "readystatechange") is "none"
-PASS testElementAttribute(element, "selectionchange") is "none"
-PASS testElementAttribute(element, "storage") is "none"
-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"
-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"
-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"
-PASS testElementAttribute(inputElement, "copy") is "target"
-PASS testElementAttribute(inputElement, "cut") is "target"
-PASS testElementAttribute(inputElement, "dblclick") is "target"
-PASS testElementAttribute(inputElement, "drag") is "target"
-PASS testElementAttribute(inputElement, "dragend") is "target"
-PASS testElementAttribute(inputElement, "dragenter") is "target"
-PASS testElementAttribute(inputElement, "dragleave") is "target"
-PASS testElementAttribute(inputElement, "dragover") is "target"
-PASS testElementAttribute(inputElement, "dragstart") is "target"
-PASS testElementAttribute(inputElement, "drop") is "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"
-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"
-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"
-PASS testElementAttribute(inputElement, "mousemove") is "target"
-PASS testElementAttribute(inputElement, "mouseout") is "target"
-PASS testElementAttribute(inputElement, "mouseover") is "target"
-PASS testElementAttribute(inputElement, "mouseup") is "target"
-PASS testElementAttribute(inputElement, "mousewheel") is "target"
-PASS testElementAttribute(inputElement, "paste") is "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"
-FAIL testElementAttribute(inputElement, "resize") should be target. Was target, window.
-PASS testElementAttribute(inputElement, "scroll") is "target"
-PASS testElementAttribute(inputElement, "search") is "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"
-PASS testElementAttribute(inputElement, "stalled") is "target"
-PASS testElementAttribute(inputElement, "submit") is "target"
-PASS testElementAttribute(inputElement, "suspend") is "target"
-PASS testElementAttribute(inputElement, "timeupdate") is "target"
-PASS testElementAttribute(inputElement, "transitionend") is "target"
-PASS testElementAttribute(inputElement, "volumechange") is "target"
-PASS testElementAttribute(inputElement, "waiting") is "target"
-PASS testElementAttribute(inputElement, "webkitanimationend") is "target"
-PASS testElementAttribute(inputElement, "webkitanimationiteration") is "target"
-PASS testElementAttribute(inputElement, "webkitanimationstart") is "target"
-PASS testElementAttribute(inputElement, "webkittransitionend") is "target"
-PASS testElementAttribute(inputElement, "wheel") is "target"
-
-Event names we expect not to be able to set on an element (tested on the <input> element)
-
-PASS testElementAttribute(inputElement, "beforeunload") is "none"
-PASS testElementAttribute(inputElement, "hashchange") is "none"
-PASS testElementAttribute(inputElement, "message") is "none"
-PASS testElementAttribute(inputElement, "noneventname") is "none"
-PASS testElementAttribute(inputElement, "offline") is "none"
-PASS testElementAttribute(inputElement, "online") is "none"
-PASS testElementAttribute(inputElement, "pagehide") is "none"
-PASS testElementAttribute(inputElement, "pageshow") is "none"
-PASS testElementAttribute(inputElement, "popstate") is "none"
-PASS testElementAttribute(inputElement, "readystatechange") is "none"
-PASS testElementAttribute(inputElement, "selectionchange") is "none"
-PASS testElementAttribute(inputElement, "storage") is "none"
-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"
-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"
-PASS testElementAttribute(audioElement, "canplaythrough") is "target"
-PASS testElementAttribute(audioElement, "change") is "target"
-PASS testElementAttribute(audioElement, "click") is "target"
-PASS testElementAttribute(audioElement, "contextmenu") is "target"
-PASS testElementAttribute(audioElement, "copy") is "target"
-PASS testElementAttribute(audioElement, "cut") is "target"
-PASS testElementAttribute(audioElement, "dblclick") is "target"
-PASS testElementAttribute(audioElement, "drag") is "target"
-PASS testElementAttribute(audioElement, "dragend") is "target"
-PASS testElementAttribute(audioElement, "dragenter") is "target"
-PASS testElementAttribute(audioElement, "dragleave") is "target"
-PASS testElementAttribute(audioElement, "dragover") is "target"
-PASS testElementAttribute(audioElement, "dragstart") is "target"
-PASS testElementAttribute(audioElement, "drop") is "target"
-PASS testElementAttribute(audioElement, "durationchange") is "target"
-PASS testElementAttribute(audioElement, "emptied") is "target"
-PASS testElementAttribute(audioElement, "ended") is "target"
-PASS testElementAttribute(audioElement, "error") is "target"
-PASS testElementAttribute(audioElement, "focus") is "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"
-PASS testElementAttribute(audioElement, "keypress") is "target"
-PASS testElementAttribute(audioElement, "keyup") is "target"
-PASS testElementAttribute(audioElement, "load") is "target"
-PASS testElementAttribute(audioElement, "loadeddata") is "target"
-PASS testElementAttribute(audioElement, "loadedmetadata") is "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"
-PASS testElementAttribute(audioElement, "mousemove") is "target"
-PASS testElementAttribute(audioElement, "mouseout") is "target"
-PASS testElementAttribute(audioElement, "mouseover") is "target"
-PASS testElementAttribute(audioElement, "mouseup") is "target"
-PASS testElementAttribute(audioElement, "mousewheel") is "target"
-PASS testElementAttribute(audioElement, "paste") is "target"
-PASS testElementAttribute(audioElement, "pause") is "target"
-PASS testElementAttribute(audioElement, "play") is "target"
-PASS testElementAttribute(audioElement, "playing") is "target"
-PASS testElementAttribute(audioElement, "progress") is "target"
-PASS testElementAttribute(audioElement, "ratechange") is "target"
-PASS testElementAttribute(audioElement, "reset") is "target"
-FAIL testElementAttribute(audioElement, "resize") should be target. Was target, window.
-PASS testElementAttribute(audioElement, "scroll") is "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"
-PASS testElementAttribute(audioElement, "stalled") is "target"
-PASS testElementAttribute(audioElement, "submit") is "target"
-PASS testElementAttribute(audioElement, "suspend") is "target"
-PASS testElementAttribute(audioElement, "timeupdate") is "target"
-PASS testElementAttribute(audioElement, "transitionend") is "target"
-PASS testElementAttribute(audioElement, "volumechange") is "target"
-PASS testElementAttribute(audioElement, "waiting") is "target"
-PASS testElementAttribute(audioElement, "webkitanimationend") is "target"
-PASS testElementAttribute(audioElement, "webkitanimationiteration") is "target"
-PASS testElementAttribute(audioElement, "webkitanimationstart") is "target"
-PASS testElementAttribute(audioElement, "webkittransitionend") is "target"
-PASS testElementAttribute(audioElement, "wheel") is "target"
-
-Event names we expect not to be able to set on an element (tested on the <audio> element)
-
-PASS testElementAttribute(audioElement, "beforeunload") is "none"
-PASS testElementAttribute(audioElement, "hashchange") is "none"
-PASS testElementAttribute(audioElement, "message") is "none"
-PASS testElementAttribute(audioElement, "noneventname") is "none"
-PASS testElementAttribute(audioElement, "offline") is "none"
-PASS testElementAttribute(audioElement, "online") is "none"
-PASS testElementAttribute(audioElement, "pagehide") is "none"
-PASS testElementAttribute(audioElement, "pageshow") is "none"
-PASS testElementAttribute(audioElement, "popstate") is "none"
-PASS testElementAttribute(audioElement, "readystatechange") is "none"
-PASS testElementAttribute(audioElement, "selectionchange") is "none"
-PASS testElementAttribute(audioElement, "storage") is "none"
-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"
-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"
-PASS testElementAttribute(videoElement, "canplaythrough") is "target"
-PASS testElementAttribute(videoElement, "change") is "target"
-PASS testElementAttribute(videoElement, "click") is "target"
-PASS testElementAttribute(videoElement, "contextmenu") is "target"
-PASS testElementAttribute(videoElement, "copy") is "target"
-PASS testElementAttribute(videoElement, "cut") is "target"
-PASS testElementAttribute(videoElement, "dblclick") is "target"
-PASS testElementAttribute(videoElement, "drag") is "target"
-PASS testElementAttribute(videoElement, "dragend") is "target"
-PASS testElementAttribute(videoElement, "dragenter") is "target"
-PASS testElementAttribute(videoElement, "dragleave") is "target"
-PASS testElementAttribute(videoElement, "dragover") is "target"
-PASS testElementAttribute(videoElement, "dragstart") is "target"
-PASS testElementAttribute(videoElement, "drop") is "target"
-PASS testElementAttribute(videoElement, "durationchange") is "target"
-PASS testElementAttribute(videoElement, "emptied") is "target"
-PASS testElementAttribute(videoElement, "ended") is "target"
-PASS testElementAttribute(videoElement, "error") is "target"
-PASS testElementAttribute(videoElement, "focus") is "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"
-PASS testElementAttribute(videoElement, "keypress") is "target"
-PASS testElementAttribute(videoElement, "keyup") is "target"
-PASS testElementAttribute(videoElement, "load") is "target"
-PASS testElementAttribute(videoElement, "loadeddata") is "target"
-PASS testElementAttribute(videoElement, "loadedmetadata") is "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"
-PASS testElementAttribute(videoElement, "mousemove") is "target"
-PASS testElementAttribute(videoElement, "mouseout") is "target"
-PASS testElementAttribute(videoElement, "mouseover") is "target"
-PASS testElementAttribute(videoElement, "mouseup") is "target"
-PASS testElementAttribute(videoElement, "mousewheel") is "target"
-PASS testElementAttribute(videoElement, "paste") is "target"
-PASS testElementAttribute(videoElement, "pause") is "target"
-PASS testElementAttribute(videoElement, "play") is "target"
-PASS testElementAttribute(videoElement, "playing") is "target"
-PASS testElementAttribute(videoElement, "progress") is "target"
-PASS testElementAttribute(videoElement, "ratechange") is "target"
-PASS testElementAttribute(videoElement, "reset") is "target"
-FAIL testElementAttribute(videoElement, "resize") should be target. Was target, window.
-PASS testElementAttribute(videoElement, "scroll") is "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"
-PASS testElementAttribute(videoElement, "stalled") is "target"
-PASS testElementAttribute(videoElement, "submit") is "target"
-PASS testElementAttribute(videoElement, "suspend") is "target"
-PASS testElementAttribute(videoElement, "timeupdate") is "target"
-PASS testElementAttribute(videoElement, "transitionend") is "target"
-PASS testElementAttribute(videoElement, "volumechange") is "target"
-PASS testElementAttribute(videoElement, "waiting") is "target"
-PASS testElementAttribute(videoElement, "webkitanimationend") is "target"
-PASS testElementAttribute(videoElement, "webkitanimationiteration") is "target"
-PASS testElementAttribute(videoElement, "webkitanimationstart") is "target"
-PASS testElementAttribute(videoElement, "webkittransitionend") is "target"
-PASS testElementAttribute(videoElement, "wheel") is "target"
-
-Event names we expect not to be able to set on an element (tested on the <video> element)
-
-PASS testElementAttribute(videoElement, "beforeunload") is "none"
-PASS testElementAttribute(videoElement, "hashchange") is "none"
-PASS testElementAttribute(videoElement, "message") is "none"
-PASS testElementAttribute(videoElement, "noneventname") is "none"
-PASS testElementAttribute(videoElement, "offline") is "none"
-PASS testElementAttribute(videoElement, "online") is "none"
-PASS testElementAttribute(videoElement, "pagehide") is "none"
-PASS testElementAttribute(videoElement, "pageshow") is "none"
-PASS testElementAttribute(videoElement, "popstate") is "none"
-PASS testElementAttribute(videoElement, "readystatechange") is "none"
-PASS testElementAttribute(videoElement, "selectionchange") is "none"
-PASS testElementAttribute(videoElement, "storage") is "none"
-PASS testElementAttribute(videoElement, "unload") is "none"
-
-Event names we expect to be forwarded from <body> element to window object)
-
-PASS testElementAttribute(bodyElement, "beforeunload") is "window"
-PASS testElementAttribute(bodyElement, "blur") is "window"
-PASS testElementAttribute(bodyElement, "error") is "window"
-PASS testElementAttribute(bodyElement, "focus") is "window"
-PASS testElementAttribute(bodyElement, "focusin") is "window"
-PASS testElementAttribute(bodyElement, "focusout") is "window"
-PASS testElementAttribute(bodyElement, "hashchange") is "window"
-PASS testElementAttribute(bodyElement, "load") is "window"
-PASS testElementAttribute(bodyElement, "message") is "window"
-PASS testElementAttribute(bodyElement, "offline") is "window"
-PASS testElementAttribute(bodyElement, "online") is "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"
-PASS testElementAttribute(bodyElement, "unload") is "window"
-
-Event names we expect to be forwarded from <body> element to document)
-
-PASS testElementAttribute(bodyElement, "selectionchange") is "document"
-
-Non-forwarded event names on <body> element
-
-PASS testElementAttribute(bodyElement, "abort") is "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"
-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"
-PASS testElementAttribute(bodyElement, "copy") is "target"
-PASS testElementAttribute(bodyElement, "cut") is "target"
-PASS testElementAttribute(bodyElement, "dblclick") is "target"
-PASS testElementAttribute(bodyElement, "drag") is "target"
-PASS testElementAttribute(bodyElement, "dragend") is "target"
-PASS testElementAttribute(bodyElement, "dragenter") is "target"
-PASS testElementAttribute(bodyElement, "dragleave") is "target"
-PASS testElementAttribute(bodyElement, "dragover") is "target"
-PASS testElementAttribute(bodyElement, "dragstart") is "target"
-PASS testElementAttribute(bodyElement, "drop") is "target"
-PASS testElementAttribute(bodyElement, "durationchange") is "target"
-PASS testElementAttribute(bodyElement, "emptied") is "target"
-PASS testElementAttribute(bodyElement, "ended") 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"
-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"
-PASS testElementAttribute(bodyElement, "mousemove") is "target"
-PASS testElementAttribute(bodyElement, "mouseout") is "target"
-PASS testElementAttribute(bodyElement, "mouseover") is "target"
-PASS testElementAttribute(bodyElement, "mouseup") is "target"
-PASS testElementAttribute(bodyElement, "mousewheel") is "target"
-PASS testElementAttribute(bodyElement, "paste") is "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 window.
-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"
-PASS testElementAttribute(bodyElement, "stalled") is "target"
-PASS testElementAttribute(bodyElement, "submit") is "target"
-PASS testElementAttribute(bodyElement, "suspend") is "target"
-PASS testElementAttribute(bodyElement, "timeupdate") is "target"
-PASS testElementAttribute(bodyElement, "transitionend") is "target"
-PASS testElementAttribute(bodyElement, "volumechange") is "target"
-PASS testElementAttribute(bodyElement, "waiting") is "target"
-PASS testElementAttribute(bodyElement, "webkitanimationend") is "target"
-PASS testElementAttribute(bodyElement, "webkitanimationiteration") is "target"
-PASS testElementAttribute(bodyElement, "webkitanimationstart") is "target"
-PASS testElementAttribute(bodyElement, "webkittransitionend") is "target"
-PASS testElementAttribute(bodyElement, "wheel") is "target"
-
-Event names we expect to not be able to set on <body> element
-
-PASS testElementAttribute(bodyElement, "noneventname") is "none"
-PASS testElementAttribute(bodyElement, "readystatechange") is "none"
-
-Event names we expect to be forwarded from <frameset> element to window object)
-
-PASS testElementAttribute(framesetElement, "beforeunload") is "window"
-PASS testElementAttribute(framesetElement, "blur") is "window"
-PASS testElementAttribute(framesetElement, "error") is "window"
-PASS testElementAttribute(framesetElement, "focus") is "window"
-PASS testElementAttribute(framesetElement, "focusin") is "window"
-PASS testElementAttribute(framesetElement, "focusout") is "window"
-PASS testElementAttribute(framesetElement, "hashchange") is "window"
-PASS testElementAttribute(framesetElement, "load") is "window"
-PASS testElementAttribute(framesetElement, "message") is "window"
-PASS testElementAttribute(framesetElement, "offline") is "window"
-PASS testElementAttribute(framesetElement, "online") is "window"
-PASS testElementAttribute(framesetElement, "pagehide") is "window"
-PASS testElementAttribute(framesetElement, "pageshow") is "window"
-PASS testElementAttribute(framesetElement, "popstate") is "window"
-PASS testElementAttribute(framesetElement, "resize") is "window"
-PASS testElementAttribute(framesetElement, "storage") is "window"
-PASS testElementAttribute(framesetElement, "unload") is "window"
-
-Event names we expect to be forwarded from <frameset> element to document)
-
-FAIL testElementAttribute(framesetElement, "selectionchange") should be document. Was none.
-
-Non-forwarded event names on <frameset> element
-
-PASS testElementAttribute(framesetElement, "abort") is "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"
-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"
-PASS testElementAttribute(framesetElement, "copy") is "target"
-PASS testElementAttribute(framesetElement, "cut") is "target"
-PASS testElementAttribute(framesetElement, "dblclick") is "target"
-PASS testElementAttribute(framesetElement, "drag") is "target"
-PASS testElementAttribute(framesetElement, "dragend") is "target"
-PASS testElementAttribute(framesetElement, "dragenter") is "target"
-PASS testElementAttribute(framesetElement, "dragleave") is "target"
-PASS testElementAttribute(framesetElement, "dragover") is "target"
-PASS testElementAttribute(framesetElement, "dragstart") is "target"
-PASS testElementAttribute(framesetElement, "drop") is "target"
-PASS testElementAttribute(framesetElement, "durationchange") is "target"
-PASS testElementAttribute(framesetElement, "emptied") is "target"
-PASS testElementAttribute(framesetElement, "ended") is "target"
-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"
-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"
-PASS testElementAttribute(framesetElement, "mousemove") is "target"
-PASS testElementAttribute(framesetElement, "mouseout") is "target"
-PASS testElementAttribute(framesetElement, "mouseover") is "target"
-PASS testElementAttribute(framesetElement, "mouseup") is "target"
-PASS testElementAttribute(framesetElement, "mousewheel") is "target"
-PASS testElementAttribute(framesetElement, "paste") is "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 window.
-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"
-PASS testElementAttribute(framesetElement, "stalled") is "target"
-PASS testElementAttribute(framesetElement, "submit") is "target"
-PASS testElementAttribute(framesetElement, "suspend") is "target"
-PASS testElementAttribute(framesetElement, "timeupdate") is "target"
-PASS testElementAttribute(framesetElement, "transitionend") is "target"
-PASS testElementAttribute(framesetElement, "volumechange") is "target"
-PASS testElementAttribute(framesetElement, "waiting") is "target"
-PASS testElementAttribute(framesetElement, "webkitanimationend") is "target"
-PASS testElementAttribute(framesetElement, "webkitanimationiteration") is "target"
-PASS testElementAttribute(framesetElement, "webkitanimationstart") is "target"
-PASS testElementAttribute(framesetElement, "webkittransitionend") is "target"
-PASS testElementAttribute(framesetElement, "wheel") is "target"
-
-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"
-FAIL testElementAttribute(rectElement, "resize") should be target. Was target, window.
-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, "transitionend") is "target"
-PASS testElementAttribute(rectElement, "volumechange") is "target"
-PASS testElementAttribute(rectElement, "waiting") is "target"
-PASS testElementAttribute(rectElement, "webkitanimationend") is "target"
-PASS testElementAttribute(rectElement, "webkitanimationiteration") is "target"
-PASS testElementAttribute(rectElement, "webkitanimationstart") is "target"
-PASS testElementAttribute(rectElement, "webkittransitionend") is "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, "selectionchange") is "none"
-PASS testElementAttribute(rectElement, "storage") is "none"
-PASS testElementAttribute(rectElement, "unload") is "none"
-
-Event names on a non-HTML element
-
-PASS testElementAttribute(nonHTMLElement, "abort") is "none"
-PASS testElementAttribute(nonHTMLElement, "animationend") is "none"
-PASS testElementAttribute(nonHTMLElement, "animationiteration") is "none"
-PASS testElementAttribute(nonHTMLElement, "animationstart") is "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"
-PASS testElementAttribute(nonHTMLElement, "blur") is "none"
-PASS testElementAttribute(nonHTMLElement, "canplay") is "none"
-PASS testElementAttribute(nonHTMLElement, "canplaythrough") is "none"
-PASS testElementAttribute(nonHTMLElement, "change") is "none"
-PASS testElementAttribute(nonHTMLElement, "click") is "none"
-PASS testElementAttribute(nonHTMLElement, "contextmenu") is "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.
-PASS testElementAttribute(nonHTMLElement, "dblclick") is "none"
-PASS testElementAttribute(nonHTMLElement, "drag") is "none"
-PASS testElementAttribute(nonHTMLElement, "dragend") is "none"
-PASS testElementAttribute(nonHTMLElement, "dragenter") is "none"
-PASS testElementAttribute(nonHTMLElement, "dragleave") is "none"
-PASS testElementAttribute(nonHTMLElement, "dragover") is "none"
-PASS testElementAttribute(nonHTMLElement, "dragstart") is "none"
-PASS testElementAttribute(nonHTMLElement, "drop") is "none"
-PASS testElementAttribute(nonHTMLElement, "durationchange") is "none"
-PASS testElementAttribute(nonHTMLElement, "emptied") is "none"
-PASS testElementAttribute(nonHTMLElement, "ended") is "none"
-PASS testElementAttribute(nonHTMLElement, "error") is "none"
-PASS testElementAttribute(nonHTMLElement, "focus") is "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"
-PASS testElementAttribute(nonHTMLElement, "input") is "none"
-PASS testElementAttribute(nonHTMLElement, "invalid") is "none"
-PASS testElementAttribute(nonHTMLElement, "keydown") is "none"
-PASS testElementAttribute(nonHTMLElement, "keypress") is "none"
-PASS testElementAttribute(nonHTMLElement, "keyup") is "none"
-PASS testElementAttribute(nonHTMLElement, "load") is "none"
-PASS testElementAttribute(nonHTMLElement, "loadeddata") is "none"
-PASS testElementAttribute(nonHTMLElement, "loadedmetadata") is "none"
-PASS testElementAttribute(nonHTMLElement, "loadstart") is "none"
-PASS testElementAttribute(nonHTMLElement, "message") is "none"
-PASS testElementAttribute(nonHTMLElement, "mousedown") is "none"
-PASS testElementAttribute(nonHTMLElement, "mouseenter") is "none"
-PASS testElementAttribute(nonHTMLElement, "mouseleave") is "none"
-PASS testElementAttribute(nonHTMLElement, "mousemove") is "none"
-PASS testElementAttribute(nonHTMLElement, "mouseout") is "none"
-PASS testElementAttribute(nonHTMLElement, "mouseover") is "none"
-PASS testElementAttribute(nonHTMLElement, "mouseup") is "none"
-PASS testElementAttribute(nonHTMLElement, "mousewheel") is "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.
-PASS testElementAttribute(nonHTMLElement, "pause") is "none"
-PASS testElementAttribute(nonHTMLElement, "play") is "none"
-PASS testElementAttribute(nonHTMLElement, "playing") is "none"
-PASS testElementAttribute(nonHTMLElement, "popstate") is "none"
-PASS testElementAttribute(nonHTMLElement, "progress") is "none"
-PASS testElementAttribute(nonHTMLElement, "ratechange") is "none"
-PASS testElementAttribute(nonHTMLElement, "readystatechange") is "none"
-PASS testElementAttribute(nonHTMLElement, "reset") is "none"
-PASS testElementAttribute(nonHTMLElement, "resize") is "none"
-PASS testElementAttribute(nonHTMLElement, "scroll") is "none"
-PASS testElementAttribute(nonHTMLElement, "search") is "none"
-PASS testElementAttribute(nonHTMLElement, "seeked") is "none"
-PASS testElementAttribute(nonHTMLElement, "seeking") is "none"
-PASS testElementAttribute(nonHTMLElement, "select") is "none"
-PASS testElementAttribute(nonHTMLElement, "selectionchange") is "none"
-FAIL testElementAttribute(nonHTMLElement, "selectstart") should be none. Was script: target; content: none.
-PASS testElementAttribute(nonHTMLElement, "stalled") is "none"
-PASS testElementAttribute(nonHTMLElement, "storage") is "none"
-PASS testElementAttribute(nonHTMLElement, "submit") is "none"
-PASS testElementAttribute(nonHTMLElement, "suspend") is "none"
-PASS testElementAttribute(nonHTMLElement, "timeupdate") is "none"
-PASS testElementAttribute(nonHTMLElement, "transitionend") is "none"
-PASS testElementAttribute(nonHTMLElement, "unload") is "none"
-PASS testElementAttribute(nonHTMLElement, "volumechange") is "none"
-PASS testElementAttribute(nonHTMLElement, "waiting") is "none"
-FAIL testElementAttribute(nonHTMLElement, "webkitanimationend") should be none. Was script: target; content: none.
-FAIL testElementAttribute(nonHTMLElement, "webkitanimationiteration") should be none. Was script: target; content: none.
-FAIL testElementAttribute(nonHTMLElement, "webkitanimationstart") should be none. Was script: target; content: none.
-FAIL testElementAttribute(nonHTMLElement, "webkittransitionend") should be none. Was script: target; content: none.
-PASS testElementAttribute(nonHTMLElement, "wheel") is "none"
-
-PASS successfullyParsed is true
-
-TEST COMPLETE
-

Modified: trunk/Source/WebCore/ChangeLog (245085 => 245086)


--- trunk/Source/WebCore/ChangeLog	2019-05-09 01:18:19 UTC (rev 245085)
+++ trunk/Source/WebCore/ChangeLog	2019-05-09 01:34:05 UTC (rev 245086)
@@ -1,3 +1,26 @@
+2019-05-08  Chris Dumez  <[email protected]>
+
+        [iOS Debug] ASSERTION FAILED: !m_originalNode in WebCore::JSLazyEventListener::checkValidityForEventTarget(WebCore::EventTarget &)
+        https://bugs.webkit.org/show_bug.cgi?id=197696
+        <rdar://problem/50586956>
+
+        Reviewed by Simon Fraser.
+
+        Setting the onorientationchange / onresize event handler on the body should set the event handler on the
+        window object, as per the HTML specification. However, calling body.addEventListener() with 'orientationchange'
+        or 'resize' should not set the event listener on the window object, only the body. Blink and Gecko seem to
+        behave as per specification but WebKit had a quirk for the addEventListener case. The quirk's implementation
+        is slightly wrong (because it is unsafe to take a JSLazyEventListener from a body element and add it to the
+        window, given that the JSLazyEventListener keeps a raw pointer to its element) and was causing crashes such
+        as <rdar://problem/24314027>. As a result, this patch simply drops the WebKit quirk, which will align our
+        behavior with other browsers and fix the crashes altogether.
+
+        Test: fast/events/ios/rotation/orientationchange-event-listener-on.body.html
+
+        * dom/Node.cpp:
+        (WebCore::tryAddEventListener):
+        (WebCore::tryRemoveEventListener):
+
 2019-05-08  Ryan Haddad  <[email protected]>
 
         Unreviewed, rolling out r245058.

Modified: trunk/Source/WebCore/dom/Node.cpp (245085 => 245086)


--- trunk/Source/WebCore/dom/Node.cpp	2019-05-09 01:18:19 UTC (rev 245085)
+++ trunk/Source/WebCore/dom/Node.cpp	2019-05-09 01:34:05 UTC (rev 245086)
@@ -2118,13 +2118,6 @@
     if (targetNode == &targetNode->document() && eventType == eventNames().scrollEvent)
         targetNode->document().domWindow()->incrementScrollEventListenersCount();
 
-    // FIXME: Would it be sufficient to special-case this code for <body> and <frameset>?
-    //
-    // This code was added to address <rdar://problem/5846492> Onorientationchange event not working for document.body.
-    // Forward this call to addEventListener() to the window since these are window-only events.
-    if (eventType == eventNames().orientationchangeEvent || eventType == eventNames().resizeEvent)
-        targetNode->document().domWindow()->addEventListener(eventType, WTFMove(listener), options);
-
 #if ENABLE(TOUCH_EVENTS)
     if (eventNames().isTouchRelatedEventType(targetNode->document(), eventType))
         targetNode->document().addTouchEventListener(*targetNode);
@@ -2160,12 +2153,6 @@
     if (targetNode == &targetNode->document() && eventType == eventNames().scrollEvent)
         targetNode->document().domWindow()->decrementScrollEventListenersCount();
 
-    // FIXME: Would it be sufficient to special-case this code for <body> and <frameset>? See <rdar://problem/15647823>.
-    // This code was added to address <rdar://problem/5846492> Onorientationchange event not working for document.body.
-    // Forward this call to removeEventListener() to the window since these are window-only events.
-    if (eventType == eventNames().orientationchangeEvent || eventType == eventNames().resizeEvent)
-        targetNode->document().domWindow()->removeEventListener(eventType, listener, options);
-
 #if ENABLE(TOUCH_EVENTS)
     if (eventNames().isTouchRelatedEventType(targetNode->document(), eventType))
         targetNode->document().removeTouchEventListener(*targetNode);
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to