| Index: content/browser/android/overscroll_glow.cc
 | 
| diff --git a/content/browser/android/overscroll_glow.cc b/content/browser/android/overscroll_glow.cc
 | 
| index 0aa00e04ac6ad8d8addf8875fa1952befd04963a..8638be5efc5a9b7c5c1e9560a00856669de8b472 100644
 | 
| --- a/content/browser/android/overscroll_glow.cc
 | 
| +++ b/content/browser/android/overscroll_glow.cc
 | 
| @@ -77,7 +77,11 @@ gfx::SizeF ComputeSize(OverscrollGlow::Edge edge,
 | 
|  }  // namespace
 | 
|  
 | 
|  OverscrollGlow::OverscrollGlow(OverscrollGlowClient* client)
 | 
| -    : client_(client), edge_offsets_(), initialized_(false) {
 | 
| +    : client_(client),
 | 
| +      edge_offsets_(),
 | 
| +      initialized_(false),
 | 
| +      allow_horizontal_overscroll_(true),
 | 
| +      allow_vertical_overscroll_(true) {
 | 
|    DCHECK(client);
 | 
|  }
 | 
|  
 | 
| @@ -116,12 +120,21 @@ bool OverscrollGlow::OnOverscrolled(base::TimeTicks current_time,
 | 
|            const gfx::Vector2dF& accumulated_overscroll,
 | 
|            gfx::Vector2dF overscroll_delta,
 | 
|            gfx::Vector2dF velocity,
 | 
| -          const gfx::Vector2dF& displacement) {
 | 
| +          const gfx::Vector2dF& overscroll_location) {
 | 
|    // The size of the glow determines the relative effect of the inputs; an
 | 
|    // empty-sized effect is effectively disabled.
 | 
|    if (viewport_size_.IsEmpty())
 | 
|      return false;
 | 
|  
 | 
| +  if (!allow_horizontal_overscroll_) {
 | 
| +    overscroll_delta.set_x(0);
 | 
| +    velocity.set_x(0);
 | 
| +  }
 | 
| +  if (!allow_vertical_overscroll_) {
 | 
| +    overscroll_delta.set_y(0);
 | 
| +    velocity.set_y(0);
 | 
| +  }
 | 
| +
 | 
|    // Ignore sufficiently small values that won't meaningfuly affect animation.
 | 
|    overscroll_delta = ZeroSmallComponents(overscroll_delta);
 | 
|    if (overscroll_delta.IsZero()) {
 | 
| @@ -143,7 +156,7 @@ bool OverscrollGlow::OnOverscrolled(base::TimeTicks current_time,
 | 
|    if (!velocity.IsZero())
 | 
|      Absorb(current_time, velocity, x_overscroll_started, y_overscroll_started);
 | 
|    else
 | 
| -    Pull(current_time, overscroll_delta, displacement);
 | 
| +    Pull(current_time, overscroll_delta, overscroll_location);
 | 
|  
 | 
|    return CheckNeedsAnimate();
 | 
|  }
 | 
| @@ -180,6 +193,12 @@ void OverscrollGlow::OnFrameUpdated(
 | 
|                                                 viewport_size.height();
 | 
|    edge_offsets_[OverscrollGlow::EDGE_RIGHT] =
 | 
|        content_size.width() - content_scroll_offset.x() - viewport_size.width();
 | 
| +
 | 
| +  // Only allow overscroll on scrollable axes, matching platform behavior.
 | 
| +  allow_horizontal_overscroll_ =
 | 
| +      std::ceil(viewport_size_.width()) < std::floor(content_size.width());
 | 
| +  allow_vertical_overscroll_ =
 | 
| +      std::ceil(viewport_size_.height()) < std::floor(content_size.height());
 | 
|  }
 | 
|  
 | 
|  bool OverscrollGlow::CheckNeedsAnimate() {
 | 
| 
 |