Index: third_party/WebKit/Source/core/page/SpatialNavigation.cpp |
diff --git a/third_party/WebKit/Source/core/page/SpatialNavigation.cpp b/third_party/WebKit/Source/core/page/SpatialNavigation.cpp |
index fae5f8e406daf2473e5a23f09f86e10a36d09981..d329451a9c3e691c055bd49ed5a02226e34c07df 100644 |
--- a/third_party/WebKit/Source/core/page/SpatialNavigation.cpp |
+++ b/third_party/WebKit/Source/core/page/SpatialNavigation.cpp |
@@ -244,22 +244,32 @@ |
frameView ? frameView->getHostWindow() : nullptr); |
switch (type) { |
case WebFocusTypeLeft: |
- dx = -pixelsPerLineStep; |
+ dx = -std::min(pixelsPerLineStep, |
+ container->layoutBox()->scrollLeft().toInt()); |
break; |
case WebFocusTypeRight: |
ASSERT(container->layoutBox()->scrollWidth() > |
(container->layoutBox()->scrollLeft() + |
container->layoutBox()->clientWidth())); |
- dx = pixelsPerLineStep; |
+ dx = std::min(pixelsPerLineStep, |
+ (container->layoutBox()->scrollWidth() - |
+ (container->layoutBox()->scrollLeft() + |
+ container->layoutBox()->clientWidth())) |
+ .toInt()); |
break; |
case WebFocusTypeUp: |
- dy = -pixelsPerLineStep; |
+ dy = -std::min(pixelsPerLineStep, |
+ container->layoutBox()->scrollTop().toInt()); |
break; |
case WebFocusTypeDown: |
ASSERT(container->layoutBox()->scrollHeight() - |
(container->layoutBox()->scrollTop() + |
container->layoutBox()->clientHeight())); |
- dy = pixelsPerLineStep; |
+ dy = std::min(pixelsPerLineStep, |
+ (container->layoutBox()->scrollHeight() - |
+ (container->layoutBox()->scrollTop() + |
+ container->layoutBox()->clientHeight())) |
+ .toInt()); |
break; |
default: |
ASSERT_NOT_REACHED(); |