| Index: cc/layers/layer_impl.cc
|
| diff --git a/cc/layers/layer_impl.cc b/cc/layers/layer_impl.cc
|
| index 55ffa7fb994122e462ab07fe5099fa0bef581e6c..19f87e2b5f54256abdf29087eaf02ee98649d993 100644
|
| --- a/cc/layers/layer_impl.cc
|
| +++ b/cc/layers/layer_impl.cc
|
| @@ -54,6 +54,7 @@ LayerImpl::LayerImpl(LayerTreeImpl* tree_impl,
|
| should_scroll_on_main_thread_(false),
|
| have_wheel_event_handlers_(false),
|
| have_scroll_event_handlers_(false),
|
| + scroll_blocks_on_(ScrollBlocksOnNone),
|
| user_scrollable_horizontal_(true),
|
| user_scrollable_vertical_(true),
|
| stacking_order_changed_(false),
|
| @@ -392,7 +393,8 @@ void LayerImpl::ApplySentScrollDeltasFromAbortedCommit() {
|
|
|
| InputHandler::ScrollStatus LayerImpl::TryScroll(
|
| const gfx::PointF& screen_space_point,
|
| - InputHandler::ScrollInputType type) const {
|
| + InputHandler::ScrollInputType type,
|
| + ScrollBlocksOn effective_block_mode) const {
|
| if (should_scroll_on_main_thread()) {
|
| TRACE_EVENT0("cc", "LayerImpl::TryScroll: Failed ShouldScrollOnMainThread");
|
| return InputHandler::ScrollOnMainThread;
|
| @@ -430,7 +432,14 @@ InputHandler::ScrollStatus LayerImpl::TryScroll(
|
| }
|
| }
|
|
|
| - if (type == InputHandler::Wheel && have_wheel_event_handlers()) {
|
| + if (have_scroll_event_handlers() &&
|
| + effective_block_mode & ScrollBlocksOnScrollEvent) {
|
| + TRACE_EVENT0("cc", "LayerImpl::tryScroll: Failed ScrollEventHandlers");
|
| + return InputHandler::ScrollOnMainThread;
|
| + }
|
| +
|
| + if (type == InputHandler::Wheel && have_wheel_event_handlers() &&
|
| + effective_block_mode & ScrollBlocksOnWheelEvent) {
|
| TRACE_EVENT0("cc", "LayerImpl::tryScroll: Failed WheelEventHandlers");
|
| return InputHandler::ScrollOnMainThread;
|
| }
|
| @@ -487,6 +496,7 @@ void LayerImpl::PushPropertiesTo(LayerImpl* layer) {
|
| layer->SetShouldScrollOnMainThread(should_scroll_on_main_thread_);
|
| layer->SetHaveWheelEventHandlers(have_wheel_event_handlers_);
|
| layer->SetHaveScrollEventHandlers(have_scroll_event_handlers_);
|
| + layer->SetScrollBlocksOn(scroll_blocks_on_);
|
| layer->SetNonFastScrollableRegion(non_fast_scrollable_region_);
|
| layer->SetTouchEventHandlerRegion(touch_event_handler_region_);
|
| layer->SetContentsOpaque(contents_opaque_);
|
| @@ -649,6 +659,17 @@ base::DictionaryValue* LayerImpl::LayerTreeAsJson() const {
|
| result->Set("TouchRegion", region.release());
|
| }
|
|
|
| + if (scroll_blocks_on_) {
|
| + list = new base::ListValue;
|
| + if (scroll_blocks_on_ & ScrollBlocksOnStartTouch)
|
| + list->AppendString("StartTouch");
|
| + if (scroll_blocks_on_ & ScrollBlocksOnWheelEvent)
|
| + list->AppendString("WheelEvent");
|
| + if (scroll_blocks_on_ & ScrollBlocksOnScrollEvent)
|
| + list->AppendString("ScrollEvent");
|
| + result->Set("ScrollBlocksOn", list);
|
| + }
|
| +
|
| list = new base::ListValue;
|
| for (size_t i = 0; i < children_.size(); ++i)
|
| list->Append(children_[i]->LayerTreeAsJson());
|
| @@ -1440,6 +1461,9 @@ void LayerImpl::AsValueInto(base::debug::TracedValue* state) const {
|
| non_fast_scrollable_region_.AsValueInto(state);
|
| state->EndArray();
|
| }
|
| + if (scroll_blocks_on_) {
|
| + state->SetInteger("scroll_blocks_on", scroll_blocks_on_);
|
| + }
|
|
|
| state->BeginArray("children");
|
| for (size_t i = 0; i < children_.size(); ++i) {
|
|
|