| 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 edf102efdb5e1ec07e1072c7d14b79e42cf6c9d1..d39d30e88850b76d3117aa67942ae963ea3f7133 100644
|
| --- a/cc/trees/layer_tree_host_impl.cc
|
| +++ b/cc/trees/layer_tree_host_impl.cc
|
| @@ -616,8 +616,24 @@ 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.
|
| + // This code can be removed once ScrollingCoordinator is per-compositor
|
| + // rather than per-page, https://crbug.com/680606, since a per-compositor
|
| + // version will correctly send touch-rects for non-mainframes.
|
| + EventListenerProperties properties =
|
| + active_tree_->event_listener_properties(
|
| + EventListenerClass::kTouchStartOrMove);
|
| + if ((properties == EventListenerProperties::kBlocking ||
|
| + properties == EventListenerProperties::kBlockingAndPassive) &&
|
| + !active_tree_->OuterViewportScrollLayer()) {
|
| + return InputHandler::TouchStartEventListenerType::HANDLER;
|
| + }
|
| return InputHandler::TouchStartEventListenerType::NO_HANDLER;
|
| + }
|
|
|
| if (!CurrentlyScrollingLayer())
|
| return InputHandler::TouchStartEventListenerType::HANDLER;
|
| @@ -2995,6 +3011,7 @@ void LayerTreeHostImpl::ApplyScroll(ScrollNode* scroll_node,
|
| // we want to scroll the inner viewport -- to allow panning while zoomed --
|
| // but also move browser controls if needed.
|
| bool is_inner_viewport_scroll_layer =
|
| + InnerViewportScrollLayer() &&
|
| scroll_node->owning_layer_id == InnerViewportScrollLayer()->id();
|
|
|
| if (is_viewport_scroll_layer || is_inner_viewport_scroll_layer) {
|
|
|