summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--cc/input/event_listener_properties.h8
-rw-r--r--cc/layers/layer_impl.cc1
-rw-r--r--cc/trees/layer_tree_host_impl_unittest.cc9
-rw-r--r--content/renderer/gpu/render_widget_compositor.cc4
-rw-r--r--third_party/WebKit/Source/core/frame/EventHandlerRegistry.cpp2
-rw-r--r--third_party/WebKit/Source/web/tests/ScrollingCoordinatorTest.cpp4
-rw-r--r--third_party/WebKit/public/platform/WebEventListenerProperties.h5
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