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;