summaryrefslogtreecommitdiffstats
path: root/Source
diff options
context:
space:
mode:
authorVictoria Lease <violets@google.com>2012-02-29 17:22:42 -0800
committerVictoria Lease <violets@google.com>2012-03-01 09:33:38 -0800
commita30818b6d22801f8f2f4d6f29dd83d3eddb67b6f (patch)
tree3e14eb069d3e4d265c3188a3072d54e4687fbcfa /Source
parent6753735b5cf1b2396d387b9f876a11a5fd2b3c3d (diff)
downloadexternal_webkit-a30818b6d22801f8f2f4d6f29dd83d3eddb67b6f.zip
external_webkit-a30818b6d22801f8f2f4d6f29dd83d3eddb67b6f.tar.gz
external_webkit-a30818b6d22801f8f2f4d6f29dd83d3eddb67b6f.tar.bz2
pin find-on-page scrolls to content edges
Bug: 6066283 This change also contains code to prevent find-on-page from scrolling in unnecessary circumstances, for example when a match is already being displayed. Change-Id: I555c84f8851a82e854d12cb34b8805c9d3f22f5e
Diffstat (limited to 'Source')
-rw-r--r--Source/WebKit/android/WebCoreSupport/PlatformBridge.cpp25
1 files changed, 15 insertions, 10 deletions
diff --git a/Source/WebKit/android/WebCoreSupport/PlatformBridge.cpp b/Source/WebKit/android/WebCoreSupport/PlatformBridge.cpp
index b684a1a..e536701 100644
--- a/Source/WebKit/android/WebCoreSupport/PlatformBridge.cpp
+++ b/Source/WebKit/android/WebCoreSupport/PlatformBridge.cpp
@@ -49,6 +49,8 @@
#include <wtf/android/AndroidThreading.h>
#include <wtf/MainThread.h>
+#include <algorithm>
+
using namespace android;
namespace WebCore {
@@ -169,18 +171,21 @@ void PlatformBridge::updateTextfield(FrameView* frameView, Node* nodePtr, bool c
}
void PlatformBridge::setScrollPosition(ScrollView* scrollView, int x, int y) {
+ FrameView* frameView = scrollView->frameView();
+ if (!frameView) return;
// Check to make sure the view is the main FrameView.
android::WebViewCore *webViewCore = android::WebViewCore::getWebViewCore(scrollView);
- if (webViewCore->mainFrame()->view() == scrollView)
- webViewCore->scrollTo(x, y);
- else {
- FrameView* frameView = scrollView->frameView();
- if (frameView) {
- RenderView* renderer = frameView->frame()->contentRenderer();
- if (renderer) {
- RenderLayer* layer = renderer->layer();
- layer->scrollToOffset(x, y);
- }
+ if (webViewCore->mainFrame()->view() == scrollView) {
+ const IntRect& visibleContentRect = frameView->visibleContentRect();
+ x = std::max(0, std::min(frameView->contentsWidth(), x));
+ y = std::max(0, std::min(frameView->contentsHeight(), y));
+ if ((x != visibleContentRect.x()) || (y != visibleContentRect.y()))
+ webViewCore->scrollTo(x, y);
+ } else {
+ RenderView* renderer = frameView->frame()->contentRenderer();
+ if (renderer) {
+ RenderLayer* layer = renderer->layer();
+ layer->scrollToOffset(x, y);
}
}
}