 Chromium Code Reviews
 Chromium Code Reviews Issue 30793002:
  cc: Do not allow gesture-scrolling 'overflow[-{x|y}]:hidden' layers.  (Closed) 
  Base URL: svn://svn.chromium.org/chrome/trunk/src
    
  
    Issue 30793002:
  cc: Do not allow gesture-scrolling 'overflow[-{x|y}]:hidden' layers.  (Closed) 
  Base URL: svn://svn.chromium.org/chrome/trunk/src| Index: cc/layers/layer_impl.cc | 
| diff --git a/cc/layers/layer_impl.cc b/cc/layers/layer_impl.cc | 
| index d42ec311f966c4dcbd32cfc7f166dc3f64ef90f8..03333a4ad88feb44a42f02b026ca94a45049d47c 100644 | 
| --- a/cc/layers/layer_impl.cc | 
| +++ b/cc/layers/layer_impl.cc | 
| @@ -42,6 +42,8 @@ LayerImpl::LayerImpl(LayerTreeImpl* tree_impl, int id) | 
| scrollable_(false), | 
| should_scroll_on_main_thread_(false), | 
| have_wheel_event_handlers_(false), | 
| + user_scrollable_horizontal_(true), | 
| + user_scrollable_vertical_(true), | 
| background_color_(0), | 
| stacking_order_changed_(false), | 
| double_sided_(true), | 
| @@ -341,6 +343,15 @@ void LayerImpl::SetSentScrollDelta(gfx::Vector2d sent_scroll_delta) { | 
| gfx::Vector2dF LayerImpl::ScrollBy(gfx::Vector2dF scroll) { | 
| DCHECK(scrollable()); | 
| + gfx::Vector2dF scroll_hidden; | 
| + if (!user_scrollable_horizontal_) { | 
| + scroll_hidden.set_x(scroll.x()); | 
| + scroll.set_x(0.f); | 
| + } | 
| + if (!user_scrollable_vertical_) { | 
| + scroll_hidden.set_y(scroll.y()); | 
| + scroll.set_y(0.f); | 
| + } | 
| gfx::Vector2dF min_delta = -scroll_offset_; | 
| gfx::Vector2dF max_delta = max_scroll_offset_ - scroll_offset_; | 
| @@ -348,7 +359,8 @@ gfx::Vector2dF LayerImpl::ScrollBy(gfx::Vector2dF scroll) { | 
| gfx::Vector2dF new_delta = (ScrollDelta() + scroll); | 
| new_delta.SetToMax(min_delta); | 
| new_delta.SetToMin(max_delta); | 
| - gfx::Vector2dF unscrolled = ScrollDelta() + scroll - new_delta; | 
| + gfx::Vector2dF unscrolled = | 
| + ScrollDelta() + scroll + scroll_hidden - new_delta; | 
| SetScrollDelta(new_delta); | 
| return unscrolled; | 
| } | 
| @@ -449,6 +461,9 @@ InputHandler::ScrollStatus LayerImpl::TryScroll( | 
| return InputHandler::ScrollIgnored; | 
| } | 
| + if (!user_scrollable_horizontal_ && !user_scrollable_vertical_) | 
| + return InputHandler::ScrollIgnored; | 
| 
jamesr
2013/10/21 22:36:34
nit: it'd be useful to TRACE_EVENT this bail-out l
 
sadrul
2013/10/21 23:11:17
Done.
 | 
| + | 
| return InputHandler::ScrollStarted; | 
| } | 
| @@ -514,6 +529,8 @@ void LayerImpl::PushPropertiesTo(LayerImpl* layer) { | 
| layer->SetTransform(transform_); | 
| layer->SetScrollable(scrollable_); | 
| + layer->SetUserScrollable(user_scrollable_horizontal_, | 
| + user_scrollable_vertical_); | 
| layer->SetScrollOffsetAndDelta( | 
| scroll_offset_, layer->ScrollDelta() - layer->sent_scroll_delta()); | 
| layer->SetSentScrollDelta(gfx::Vector2d()); |