Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(338)

Unified Diff: third_party/WebKit/LayoutTests/inspector/input-event-warning.html

Issue 1989103006: Fix event warning crash when a listener is removed while dispatching event (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/LayoutTests/inspector/input-event-warning.html
diff --git a/third_party/WebKit/LayoutTests/inspector/input-event-warning.html b/third_party/WebKit/LayoutTests/inspector/input-event-warning.html
new file mode 100644
index 0000000000000000000000000000000000000000..f0cec9e9b393209ce9d09923cdbfc16e0225f81a
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/inspector/input-event-warning.html
@@ -0,0 +1,96 @@
+<html>
+<head>
+<script src="../http/tests/inspector/inspector-test.js"></script>
+<script>
+
+function eventListenerSuicidal(event)
+{
+ event.target.removeEventListener("wheel", eventListenerSuicidal);
+}
+
+function eventListener1(e)
+{
+}
+
+function eventListener2(event)
+{
+ event.preventDefault();
+}
+
+function dispatchEvents()
+{
+ var target = document.createElement("div");
+ document.body.appendChild(target);
+ var touches = [new Touch({identifier: 1, clientX: 100, clientY: 100, target: target})];
+ var touchEventInit = {
+ cancelable: true,
+ touches: touches,
+ targetTouches: touches,
+ changedTouches: touches
+ };
+ var wheelEvent = new WheelEvent("wheel", { cancelable: true, deltaX: -120, deltaY: 120 });
+ var events = [
+ new WheelEvent("wheel", { cancelable: true, deltaX: -120, deltaY: 120 }),
+ new WheelEvent("wheel", { cancelable: false, deltaX: -120, deltaY: 120 }),
+ new MouseEvent("mousemove", { cancelable: true, clientX: 100, clinetY: 100, movementX: 0, movementY: 0 }),
+ new TouchEvent("touchstart", touchEventInit),
+ new TouchEvent("touchmove", touchEventInit),
+ new TouchEvent("touchend", touchEventInit),
+ ];
+
+ var eventTypes = ["wheel", "mousemove", "touchstart", "touchmove", "touchend"];
+ for (var type of eventTypes) {
+ target.addEventListener(type, eventListener1);
+ target.addEventListener(type, eventListener2);
+ }
+ var deadline = performance.now() + 100;
+ while (performance.now() < deadline) {};
+ if (window.testRunner)
+ window.testRunner.setDumpConsoleMessages(false);
+ for (var event of events)
+ target.dispatchEvent(event);
+
+ // Make sure we don't emit warnings twice, make another pass.
+ for (var event of events)
+ target.dispatchEvent(event);
+
+ // Make sure we don't crash.
+ target = document.createElement("div");
+ document.body.appendChild(target);
+ target.addEventListener("wheel", eventListenerSuicidal);
+ target.dispatchEvent(wheelEvent);
+}
+
+function test()
+{
+ WebInspector.multitargetConsoleModel.addEventListener(WebInspector.ConsoleModel.Events.MessageAdded, InspectorTest.safeWrap(onConsoleMessage));
+ step1();
+
+ function step1()
+ {
+ InspectorTest.mainTarget.pageAgent().setBlockedEventsWarningThreshold(30);
+ InspectorTest.evaluateInPage("dispatchEvents()", step2);
+ }
+
+ function step2()
+ {
+ InspectorTest.mainTarget.pageAgent().setBlockedEventsWarningThreshold(0.000001);
+ InspectorTest.addResult("There should be no warnings above this line");
+ InspectorTest.evaluateInPage("dispatchEvents()", () => InspectorTest.completeTest());
+ }
+
+ function onConsoleMessage(event)
+ {
+ var message = event.data;
+ var text = message.messageText;
+ InspectorTest.addResult(text.replace(/ \d+ ms/, " <number> ms"));
+ }
+}
+</script>
+</head>
+<body onload="runTest()">
+<p>Tests that console warnings are issued for a blocked event listener and that
+there is no crash when an offending listener is removed by the handler.</p>
+</div>
+</body>
+</html>

Powered by Google App Engine
This is Rietveld 408576698