From 2166fda4e11a6ebbda48bab4837a39ef8d33a7b5 Mon Sep 17 00:00:00 2001 From: Pedro Pontes Date: Wed, 6 Feb 2019 11:15:46 +0100 Subject: [PATCH] fix: populate phase of WebMouseWheelEvents generated in webContents.sendInputEvent. --- atom/browser/api/atom_api_web_contents.cc | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/atom/browser/api/atom_api_web_contents.cc b/atom/browser/api/atom_api_web_contents.cc index 7f4f0dc706d04..f63de93dac033 100644 --- a/atom/browser/api/atom_api_web_contents.cc +++ b/atom/browser/api/atom_api_web_contents.cc @@ -1748,6 +1748,19 @@ void WebContents::SendInputEvent(v8::Isolate* isolate, mouse_wheel_event); #endif } else { + // Chromium expects phase info in wheel events (and applies a + // DCHECK to verify it). See: https://crbug.com/756524. + mouse_wheel_event.phase = blink::WebMouseWheelEvent::kPhaseBegan; + mouse_wheel_event.dispatch_type = blink::WebInputEvent::kBlocking; + rwh->ForwardWheelEvent(mouse_wheel_event); + + // Send a synthetic wheel event with phaseEnded to finish scrolling. + mouse_wheel_event.has_synthetic_phase = true; + mouse_wheel_event.delta_x = 0; + mouse_wheel_event.delta_y = 0; + mouse_wheel_event.phase = blink::WebMouseWheelEvent::kPhaseEnded; + mouse_wheel_event.dispatch_type = + blink::WebInputEvent::kEventNonBlocking; rwh->ForwardWheelEvent(mouse_wheel_event); } return;