Non-callable "handleEvent" property is silently ignored
authorcommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 26 Sep 2019 17:43:24 +0000 (17:43 +0000)
committercommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 26 Sep 2019 17:43:24 +0000 (17:43 +0000)
https://bugs.webkit.org/show_bug.cgi?id=200066

Patch by Alexey Shvayka <shvaikalesh@gmail.com> on 2019-09-26
Reviewed by Darin Adler.

LayoutTests/imported/w3c:

* web-platform-tests/IndexedDB/fire-error-event-exception-expected.txt:
* web-platform-tests/IndexedDB/fire-success-event-exception-expected.txt:
* web-platform-tests/IndexedDB/fire-upgradeneeded-event-exception-expected.txt:
* web-platform-tests/dom/events/EventListener-handleEvent-expected.txt:

Source/WebCore:

Tests: imported/w3c/web-platform-tests/IndexedDB/fire-error-event-exception.html
       imported/w3c/web-platform-tests/IndexedDB/fire-success-event-exception.html
       imported/w3c/web-platform-tests/IndexedDB/fire-upgradeneeded-event-exception.html
       imported/w3c/web-platform-tests/dom/events/EventListener-handleEvent.html

* bindings/js/JSEventListener.cpp:
(WebCore::JSEventListener::handleEvent): Report TypeError if "handleEvent" is not callable.

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

LayoutTests/imported/w3c/ChangeLog
LayoutTests/imported/w3c/web-platform-tests/IndexedDB/fire-error-event-exception-expected.txt
LayoutTests/imported/w3c/web-platform-tests/IndexedDB/fire-success-event-exception-expected.txt
LayoutTests/imported/w3c/web-platform-tests/IndexedDB/fire-upgradeneeded-event-exception-expected.txt
LayoutTests/imported/w3c/web-platform-tests/dom/events/EventListener-handleEvent-expected.txt
Source/WebCore/ChangeLog
Source/WebCore/bindings/js/JSEventListener.cpp

index d9df2aa..98da9b1 100644 (file)
@@ -1,3 +1,15 @@
+2019-09-26  Alexey Shvayka  <shvaikalesh@gmail.com>
+
+        Non-callable "handleEvent" property is silently ignored
+        https://bugs.webkit.org/show_bug.cgi?id=200066
+
+        Reviewed by Darin Adler.
+
+        * web-platform-tests/IndexedDB/fire-error-event-exception-expected.txt:
+        * web-platform-tests/IndexedDB/fire-success-event-exception-expected.txt:
+        * web-platform-tests/IndexedDB/fire-upgradeneeded-event-exception-expected.txt:
+        * web-platform-tests/dom/events/EventListener-handleEvent-expected.txt:
+
 2019-09-25  Alexey Shvayka  <shvaikalesh@gmail.com>
 
         Re-sync web-platform-tests/IndexedDB from upstream
index d545726..0193fb8 100644 (file)
@@ -3,7 +3,7 @@ PASS Exception in error event handler on request
 PASS Exception in error event handler on request, with preventDefault 
 PASS Exception in error event listener on request 
 PASS Exception in error event listener ("handleEvent" lookup) on request 
-FAIL Exception in error event listener (non-callable "handleEvent") on request assert_equals: expected "AbortError" but got "ConstraintError"
+PASS Exception in error event listener (non-callable "handleEvent") on request 
 PASS Exception in second error event listener on request 
 PASS Exception in first error event listener on request, transaction active in second 
 PASS Exception in error event handler on transaction 
index 287453e..82fee40 100644 (file)
@@ -2,7 +2,7 @@
 PASS Exception in success event handler on request 
 PASS Exception in success event listener on request 
 PASS Exception in success event listener ("handleEvent" lookup) on request 
-FAIL Exception in success event listener (non-callable "handleEvent") on request assert_unreached: transaction should abort Reached unreachable code
+PASS Exception in success event listener (non-callable "handleEvent") on request 
 PASS Exception in second success event listener on request 
 PASS Exception in first success event listener, tx active in second 
 
index 3f95ec3..0442eb8 100644 (file)
@@ -1,13 +1,14 @@
 CONSOLE MESSAGE: line 31: Error
 CONSOLE MESSAGE: line 37: Error
 CONSOLE MESSAGE: line 44: Error
+CONSOLE MESSAGE: TypeError: 'handleEvent' property of event listener should be callable
 CONSOLE MESSAGE: line 62: Error
 CONSOLE MESSAGE: line 70: Error
 
 PASS Exception in upgradeneeded handler 
 PASS Exception in upgradeneeded listener 
 PASS Exception in upgradeneeded "handleEvent" lookup 
-FAIL Exception in upgradeneeded due to non-callable "handleEvent" assert_unreached: open should fail Reached unreachable code
+PASS Exception in upgradeneeded due to non-callable "handleEvent" 
 PASS Exception in second upgradeneeded listener 
 PASS Exception in first upgradeneeded listener, tx active in second 
 
index e23c5a9..64eb023 100644 (file)
@@ -1,9 +1,11 @@
 CONSOLE MESSAGE: line 46: [object Object]
+CONSOLE MESSAGE: line 101: TypeError: 'handleEvent' property of event listener should be callable
+CONSOLE MESSAGE: line 122: TypeError: 'handleEvent' property of event listener should be callable
 
 PASS calls `handleEvent` method of `EventListener` 
 PASS rethrows errors when getting `handleEvent` 
 PASS performs `Get` every time event is dispatched 
 PASS doesn't call `handleEvent` method on callable `EventListener` 
-FAIL throws if `handleEvent` is falsy and not callable assert_true: expected true got false
-FAIL throws if `handleEvent` is thruthy and not callable assert_true: expected true got false
+PASS throws if `handleEvent` is falsy and not callable 
+PASS throws if `handleEvent` is thruthy and not callable 
 
index 3019fe9..3b1e781 100644 (file)
@@ -1,3 +1,18 @@
+2019-09-26  Alexey Shvayka  <shvaikalesh@gmail.com>
+
+        Non-callable "handleEvent" property is silently ignored
+        https://bugs.webkit.org/show_bug.cgi?id=200066
+
+        Reviewed by Darin Adler.
+
+        Tests: imported/w3c/web-platform-tests/IndexedDB/fire-error-event-exception.html
+               imported/w3c/web-platform-tests/IndexedDB/fire-success-event-exception.html
+               imported/w3c/web-platform-tests/IndexedDB/fire-upgradeneeded-event-exception.html
+               imported/w3c/web-platform-tests/dom/events/EventListener-handleEvent.html
+
+        * bindings/js/JSEventListener.cpp:
+        (WebCore::JSEventListener::handleEvent): Report TypeError if "handleEvent" is not callable.
+
 2019-09-26  Zalan Bujtas  <zalan@apple.com>
 
         [LFC][IFC] Decouple Display::Run and Display::Box initializations.
index f6293b8..05394fe 100644 (file)
@@ -148,11 +148,13 @@ void JSEventListener::handleEvent(ScriptExecutionContext& scriptExecutionContext
             return;
         }
         callType = getCallData(vm, handleEventFunction, callData);
+        if (callType == CallType::None) {
+            event.target()->uncaughtExceptionInEventHandler();
+            reportException(exec, createTypeError(exec, "'handleEvent' property of event listener should be callable"_s));
+            return;
+        }
     }
 
-    if (callType == CallType::None)
-        return;
-
     Ref<JSEventListener> protectedThis(*this);
 
     MarkedArgumentBuffer args;