| Index: content/renderer/render_view_impl.cc
|
| diff --git a/content/renderer/render_view_impl.cc b/content/renderer/render_view_impl.cc
|
| index 1a17cdd96caa60e7d24a3cf03cc25815d32dc79f..f1f70521254ad7fb0d6aed2fcd8d37250c359e46 100644
|
| --- a/content/renderer/render_view_impl.cc
|
| +++ b/content/renderer/render_view_impl.cc
|
| @@ -1423,15 +1423,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(
|
| @@ -1926,6 +1931,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() {
|
| @@ -3177,9 +3184,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() {
|
| @@ -3605,6 +3619,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);
|
| @@ -3691,6 +3710,10 @@ void RenderViewImpl::InstrumentWillComposite() {
|
| webview()->devToolsAgent()->willComposite();
|
| }
|
|
|
| +void RenderViewImpl::DidCompletePageScaleAnimation() {
|
| + FocusChangeComplete();
|
| +}
|
| +
|
| void RenderViewImpl::SetScreenMetricsEmulationParameters(
|
| float device_scale_factor,
|
| const gfx::Point& root_layer_offset,
|
|
|