Index: third_party/WebKit/Source/core/input/ScrollManager.cpp |
diff --git a/third_party/WebKit/Source/core/input/ScrollManager.cpp b/third_party/WebKit/Source/core/input/ScrollManager.cpp |
index 0d4a7cb180e276e187db3c6488917ace6589fea7..5a349f7fd3a88c8bc651f895e2111e3dbc66e05c 100644 |
--- a/third_party/WebKit/Source/core/input/ScrollManager.cpp |
+++ b/third_party/WebKit/Source/core/input/ScrollManager.cpp |
@@ -6,6 +6,7 @@ |
#include <memory> |
#include "core/dom/DOMNodeIds.h" |
+#include "core/dom/NodeComputedStyle.h" |
#include "core/events/GestureEvent.h" |
#include "core/frame/BrowserControls.h" |
#include "core/frame/LocalFrameView.h" |
@@ -93,6 +94,8 @@ void ScrollManager::RecomputeScrollChain(const Node& start_node, |
DCHECK(start_node.GetLayoutObject()); |
LayoutBox* cur_box = start_node.GetLayoutObject()->EnclosingBox(); |
Element* document_element = frame_->GetDocument()->documentElement(); |
+ bool x_dominated = |
+ std::abs(scroll_state.deltaXHint()) > std::abs(scroll_state.deltaYHint()); |
// Scrolling propagates along the containing block chain and ends at the |
// RootScroller element. The RootScroller element will have a custom |
@@ -117,6 +120,14 @@ void ScrollManager::RecomputeScrollChain(const Node& start_node, |
if (IsViewportScrollingElement(*cur_element) || |
cur_element == document_element) |
break; |
+ |
+ if ((x_dominated && |
+ cur_element->GetComputedStyle()->ScrollBoundaryBehaviorX() != |
+ EScrollBoundaryBehavior::kAuto) || |
+ (!x_dominated && |
+ cur_element->GetComputedStyle()->ScrollBoundaryBehaviorY() != |
+ EScrollBoundaryBehavior::kAuto)) |
+ break; |
} |
cur_box = cur_box->ContainingBlock(); |