| Index: content/renderer/render_view_impl.cc
|
| diff --git a/content/renderer/render_view_impl.cc b/content/renderer/render_view_impl.cc
|
| index d37337b367e7961df83f23a614b9330fd268fec1..1141aaf0c7e13b8e1da6b0c07e39c35ccca8e61d 100644
|
| --- a/content/renderer/render_view_impl.cc
|
| +++ b/content/renderer/render_view_impl.cc
|
| @@ -1317,6 +1317,7 @@ bool RenderViewImpl::OnMessageReceived(const IPC::Message& message) {
|
| IPC_MESSAGE_HANDLER(ViewMsg_ThemeChanged, OnThemeChanged)
|
| IPC_MESSAGE_HANDLER(ViewMsg_MoveOrResizeStarted, OnMoveOrResizeStarted)
|
| IPC_MESSAGE_HANDLER(ViewMsg_ClearFocusedElement, OnClearFocusedElement)
|
| + IPC_MESSAGE_HANDLER(ViewMsg_FocusChangeComplete, FocusChangeComplete)
|
| IPC_MESSAGE_HANDLER(ViewMsg_SetBackgroundOpaque, OnSetBackgroundOpaque)
|
| IPC_MESSAGE_HANDLER(ViewMsg_EnablePreferredSizeChangedMode,
|
| OnEnablePreferredSizeChangedMode)
|
| @@ -1417,15 +1418,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 +1926,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() {
|
| @@ -3198,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() {
|
| @@ -3626,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);
|
| @@ -3712,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,
|
|
|