Index: cc/trees/layer_tree_host_impl.cc |
diff --git a/cc/trees/layer_tree_host_impl.cc b/cc/trees/layer_tree_host_impl.cc |
index d7559a11a91ee6dac61611d01011bc95558e7ce8..d78c1693eb86fadd921c82a2cca5bc98930c8d71 100644 |
--- a/cc/trees/layer_tree_host_impl.cc |
+++ b/cc/trees/layer_tree_host_impl.cc |
@@ -610,8 +610,19 @@ LayerTreeHostImpl::EventListenerTypeForTouchStartAt( |
LayerImpl* layer_impl = |
active_tree_->FindLayerThatIsHitByPointInTouchHandlerRegion( |
device_viewport_point); |
- if (layer_impl == NULL) |
+ if (layer_impl == NULL) { |
+ // At present, TouchHandlerRegions are only set for LayerTrees serving the |
+ // document's mainframe, i.e. LayerTrees that have a ViewPort defined. But |
+ // subframes can still have touch handlers, so here we err on the side of |
+ // caution and report a handler even if we don't know which layer it's on. |
+ if ((active_tree_->event_listener_properties( |
+ EventListenerClass::kTouchStartOrMove) == |
+ EventListenerProperties::kBlocking) && |
+ !active_tree_->OuterViewportScrollLayer()) { |
+ return InputHandler::TouchStartEventListenerType::HANDLER; |
+ } |
return InputHandler::TouchStartEventListenerType::NO_HANDLER; |
+ } |
if (!CurrentlyScrollingLayer()) |
return InputHandler::TouchStartEventListenerType::HANDLER; |