Index: content/renderer/render_view_impl.cc |
diff --git a/content/renderer/render_view_impl.cc b/content/renderer/render_view_impl.cc |
index bd8d127487973645052c26c0c620a02600b73b5d..fc31ff6baf6a309619fea4138022057e6fb235f1 100644 |
--- a/content/renderer/render_view_impl.cc |
+++ b/content/renderer/render_view_impl.cc |
@@ -1417,15 +1417,20 @@ void RenderViewImpl::OnScrollFocusedEditableNodeIntoRect( |
const gfx::Rect& rect) { |
if (has_scrolled_focused_editable_node_into_rect_ && |
rect == rect_for_scrolled_focused_editable_node_) { |
+ FocusChangeComplete(); |
return; |
} |
blink::WebElement element = GetFocusedElement(); |
+ bool will_animate = false; |
if (!element.isNull() && IsEditableNode(element)) { |
rect_for_scrolled_focused_editable_node_ = rect; |
has_scrolled_focused_editable_node_into_rect_ = true; |
- webview()->scrollFocusedNodeIntoRect(rect); |
+ will_animate = webview()->scrollFocusedNodeIntoRect(rect); |
} |
+ |
+ if (!will_animate) |
+ FocusChangeComplete(); |
} |
void RenderViewImpl::OnSetEditCommandsForNextKeyEvent( |
@@ -1920,6 +1925,8 @@ void RenderViewImpl::focusedNodeChanged(const WebNode& node) { |
// TODO(dmazzoni): this should be part of RenderFrameObserver. |
GetMainRenderFrame()->FocusedNodeChanged(node); |
+ |
+ focused_element_bounds_ = node_bounds; |
} |
void RenderViewImpl::didUpdateLayout() { |
@@ -3199,9 +3206,16 @@ void RenderViewImpl::OnResize(const ViewMsg_Resize_Params& params) { |
if (old_visible_viewport_size != visible_viewport_size_) |
has_scrolled_focused_editable_node_into_rect_ = false; |
- FOR_EACH_OBSERVER(RenderViewObserver, |
- observers_, |
- Resized()); |
+ blink::WebElement focused_element = GetFocusedElement(); |
+ blink::WebRect bounds = focused_element.isNull() |
+ ? blink::WebRect() |
+ : focused_element.boundsInViewportSpace(); |
+ if (bounds != focused_element_bounds_) { |
+ FOR_EACH_OBSERVER(RenderViewObserver, observers_, |
+ FocusedElementMovedOnResize()); |
+ } |
+ |
+ focused_element_bounds_ = bounds; |
} |
void RenderViewImpl::DidInitiatePaint() { |
@@ -3627,6 +3641,11 @@ void RenderViewImpl::GetSelectionBounds(gfx::Rect* start, gfx::Rect* end) { |
RenderWidget::GetSelectionBounds(start, end); |
} |
+void RenderViewImpl::FocusChangeComplete() { |
+ RenderWidget::FocusChangeComplete(); |
+ FOR_EACH_OBSERVER(RenderViewObserver, observers_, FocusChangeComplete()); |
+} |
+ |
void RenderViewImpl::GetCompositionCharacterBounds( |
std::vector<gfx::Rect>* bounds) { |
DCHECK(bounds); |
@@ -3713,6 +3732,10 @@ void RenderViewImpl::InstrumentWillComposite() { |
webview()->devToolsAgent()->willComposite(); |
} |
+void RenderViewImpl::DidCompletePageScaleAnimation() { |
+ FocusChangeComplete(); |
+} |
+ |
void RenderViewImpl::SetScreenMetricsEmulationParameters( |
float device_scale_factor, |
const gfx::Point& root_layer_offset, |