Index: content/renderer/render_view_impl.cc |
diff --git a/content/renderer/render_view_impl.cc b/content/renderer/render_view_impl.cc |
index 7a79a498a90c1ded365840f87357a34a9a808486..bbba8305ecc5393416d79352a0dd3b8e51f00295 100644 |
--- a/content/renderer/render_view_impl.cc |
+++ b/content/renderer/render_view_impl.cc |
@@ -667,6 +667,7 @@ RenderViewImpl::RenderViewImpl(RenderViewImplParams* params) |
cached_is_main_frame_pinned_to_right_(false), |
cached_has_main_frame_horizontal_scrollbar_(false), |
cached_has_main_frame_vertical_scrollbar_(false), |
+ has_scrolled_focused_editable_node_into_rect_(false), |
notification_provider_(NULL), |
geolocation_dispatcher_(NULL), |
input_tag_speech_dispatcher_(NULL), |
@@ -1163,8 +1164,6 @@ bool RenderViewImpl::OnMessageReceived(const IPC::Message& message) { |
OnActivateNearestFindResult) |
IPC_MESSAGE_HANDLER(ViewMsg_FindMatchRects, OnFindMatchRects) |
IPC_MESSAGE_HANDLER(ViewMsg_SelectPopupMenuItems, OnSelectPopupMenuItems) |
- IPC_MESSAGE_HANDLER(ViewMsg_UndoScrollFocusedEditableNodeIntoView, |
- OnUndoScrollFocusedEditableNodeIntoRect) |
IPC_MESSAGE_HANDLER(ViewMsg_UpdateTopControlsState, |
OnUpdateTopControlsState) |
IPC_MESSAGE_HANDLER(ViewMsg_PauseVideo, OnPauseVideo) |
@@ -1335,12 +1334,16 @@ void RenderViewImpl::OnReplaceMisspelling(const base::string16& text) { |
void RenderViewImpl::OnScrollFocusedEditableNodeIntoRect( |
const gfx::Rect& rect) { |
+ if (has_scrolled_focused_editable_node_into_rect_ && |
+ rect == rect_for_scrolled_focused_editable_node_) { |
+ return; |
+ } |
+ |
blink::WebElement element = GetFocusedElement(); |
- if (!element.isNull()) { |
- if (IsEditableNode(element)) { |
- webview()->saveScrollAndScaleState(); |
- webview()->scrollFocusedNodeIntoRect(rect); |
- } |
+ if (!element.isNull() && IsEditableNode(element)) { |
+ rect_for_scrolled_focused_editable_node_ = rect; |
+ has_scrolled_focused_editable_node_into_rect_ = true; |
+ webview()->scrollFocusedNodeIntoRect(rect); |
} |
} |
@@ -1472,12 +1475,6 @@ void RenderViewImpl::OnSetInLiveResize(bool in_live_resize) { |
#endif |
#if defined(OS_ANDROID) |
-void RenderViewImpl::OnUndoScrollFocusedEditableNodeIntoRect() { |
- const WebElement element = GetFocusedElement(); |
- if (!element.isNull() && IsEditableNode(element)) |
- webview()->restoreScrollAndScaleState(); |
-} |
- |
void RenderViewImpl::OnPauseVideo() { |
// Inform RendererMediaPlayerManager to release all video player resources. |
// If something is in progress the resource will not be freed, it will |
@@ -2161,6 +2158,8 @@ void RenderViewImpl::focusPrevious() { |
} |
void RenderViewImpl::focusedNodeChanged(const WebNode& node) { |
+ has_scrolled_focused_editable_node_into_rect_ = false; |
+ |
Send(new ViewHostMsg_FocusedNodeChanged(routing_id_, IsEditableNode(node))); |
FOR_EACH_OBSERVER(RenderViewObserver, observers_, FocusedNodeChanged(node)); |