diff options
7 files changed, 28 insertions, 5 deletions
diff --git a/cc/input/event_listener_properties.h b/cc/input/event_listener_properties.h index 2755c6e..6b9141d 100644 --- a/cc/input/event_listener_properties.h +++ b/cc/input/event_listener_properties.h @@ -9,7 +9,13 @@ namespace cc { enum class EventListenerClass { kTouch, kMouseWheel, kNumClasses }; -enum class EventListenerProperties { kNone, kPassive, kBlocking, kMax }; +enum class EventListenerProperties { + kNone, + kPassive, + kBlocking, + kBlockingAndPassive, + kMax +}; } // namespace cc diff --git a/cc/layers/layer_impl.cc b/cc/layers/layer_impl.cc index 804aa66..69ade49 100644 --- a/cc/layers/layer_impl.cc +++ b/cc/layers/layer_impl.cc @@ -544,6 +544,7 @@ InputHandler::ScrollStatus LayerImpl::TryScroll( layer_tree_impl_->event_listener_properties( EventListenerClass::kMouseWheel); if (event_properties == EventListenerProperties::kBlocking || + event_properties == EventListenerProperties::kBlockingAndPassive || (!layer_tree_impl_->settings().use_mouse_wheel_gestures && event_properties == EventListenerProperties::kPassive)) { TRACE_EVENT0("cc", "LayerImpl::tryScroll: Failed WheelEventHandlers"); diff --git a/cc/trees/layer_tree_host_impl_unittest.cc b/cc/trees/layer_tree_host_impl_unittest.cc index 2ec30fa..f2da25e 100644 --- a/cc/trees/layer_tree_host_impl_unittest.cc +++ b/cc/trees/layer_tree_host_impl_unittest.cc @@ -740,6 +740,15 @@ TEST_F(LayerTreeHostImplTest, ScrollBlocksOnWheelEventHandlers) { EXPECT_EQ(MainThreadScrollingReason::kEventHandlers, status.main_thread_scrolling_reasons); + host_impl_->active_tree()->set_event_listener_properties( + EventListenerClass::kMouseWheel, + EventListenerProperties::kBlockingAndPassive); + status = host_impl_->ScrollBegin(BeginState(gfx::Point()).get(), + InputHandler::WHEEL); + EXPECT_EQ(InputHandler::SCROLL_ON_MAIN_THREAD, status.thread); + EXPECT_EQ(MainThreadScrollingReason::kEventHandlers, + status.main_thread_scrolling_reasons); + // But gesture scrolls can still be handled. status = host_impl_->ScrollBegin(BeginState(gfx::Point()).get(), InputHandler::GESTURE); diff --git a/content/renderer/gpu/render_widget_compositor.cc b/content/renderer/gpu/render_widget_compositor.cc index 64e1c8f..66a8d40 100644 --- a/content/renderer/gpu/render_widget_compositor.cc +++ b/content/renderer/gpu/render_widget_compositor.cc @@ -762,6 +762,10 @@ static_assert(static_cast<cc::EventListenerProperties>( blink::WebEventListenerProperties::Blocking) == cc::EventListenerProperties::kBlocking, "EventListener and WebEventListener enums must match"); +static_assert(static_cast<cc::EventListenerProperties>( + blink::WebEventListenerProperties::BlockingAndPassive) == + cc::EventListenerProperties::kBlockingAndPassive, + "EventListener and WebEventListener enums must match"); void RenderWidgetCompositor::setEventListenerProperties( blink::WebEventListenerClass eventClass, diff --git a/third_party/WebKit/Source/core/frame/EventHandlerRegistry.cpp b/third_party/WebKit/Source/core/frame/EventHandlerRegistry.cpp index b889e6c..1e8a73b 100644 --- a/third_party/WebKit/Source/core/frame/EventHandlerRegistry.cpp +++ b/third_party/WebKit/Source/core/frame/EventHandlerRegistry.cpp @@ -40,6 +40,8 @@ inline bool isPointerEventType(const AtomicString& eventType) WebEventListenerProperties webEventListenerProperties(bool hasBlocking, bool hasPassive) { + if (hasBlocking && hasPassive) + return WebEventListenerProperties::BlockingAndPassive; if (hasBlocking) return WebEventListenerProperties::Blocking; if (hasPassive) diff --git a/third_party/WebKit/Source/web/tests/ScrollingCoordinatorTest.cpp b/third_party/WebKit/Source/web/tests/ScrollingCoordinatorTest.cpp index e113df1..0a7698d 100644 --- a/third_party/WebKit/Source/web/tests/ScrollingCoordinatorTest.cpp +++ b/third_party/WebKit/Source/web/tests/ScrollingCoordinatorTest.cpp @@ -331,7 +331,7 @@ TEST_F(ScrollingCoordinatorTest, touchEventHandlerBoth) navigateTo(m_baseURL + "touch-event-handler-both.html"); forceFullCompositingUpdate(); - ASSERT_EQ(WebEventListenerProperties::Blocking, webLayerTreeView()->eventListenerProperties(WebEventListenerClass::Touch)); + ASSERT_EQ(WebEventListenerProperties::BlockingAndPassive, webLayerTreeView()->eventListenerProperties(WebEventListenerClass::Touch)); } TEST_F(ScrollingCoordinatorTest, wheelEventHandler) @@ -358,7 +358,7 @@ TEST_F(ScrollingCoordinatorTest, wheelEventHandlerBoth) navigateTo(m_baseURL + "wheel-event-handler-both.html"); forceFullCompositingUpdate(); - ASSERT_EQ(WebEventListenerProperties::Blocking, webLayerTreeView()->eventListenerProperties(WebEventListenerClass::MouseWheel)); + ASSERT_EQ(WebEventListenerProperties::BlockingAndPassive, webLayerTreeView()->eventListenerProperties(WebEventListenerClass::MouseWheel)); } TEST_F(ScrollingCoordinatorTest, scrollEventHandler) diff --git a/third_party/WebKit/public/platform/WebEventListenerProperties.h b/third_party/WebKit/public/platform/WebEventListenerProperties.h index 56ec72f..1b2d9a0 100644 --- a/third_party/WebKit/public/platform/WebEventListenerProperties.h +++ b/third_party/WebKit/public/platform/WebEventListenerProperties.h @@ -17,8 +17,9 @@ enum class WebEventListenerClass { // Indicates the variety of event listener types for a given WebEventListenerClass. enum class WebEventListenerProperties { Nothing, // This should be "None"; but None #defined in X11's X.h - Passive, - Blocking, // This indicates >= 1 blocking listener (and >= 0 passive listeners) + Passive, // This indicates solely passive listeners. + Blocking, // This indicates solely blocking listeners. + BlockingAndPassive, // This indicates >= 1 blocking listener and >= 1 passive listeners. }; } // namespace blink |