OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "content/renderer/render_view_impl.h" | 5 #include "content/renderer/render_view_impl.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <cmath> | 8 #include <cmath> |
9 | 9 |
10 #include "base/auto_reset.h" | 10 #include "base/auto_reset.h" |
(...skipping 1405 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1416 | 1416 |
1417 Send(new InputHostMsg_MoveCaret_ACK(routing_id_)); | 1417 Send(new InputHostMsg_MoveCaret_ACK(routing_id_)); |
1418 | 1418 |
1419 webview()->focusedFrame()->moveCaretSelection(point); | 1419 webview()->focusedFrame()->moveCaretSelection(point); |
1420 } | 1420 } |
1421 | 1421 |
1422 void RenderViewImpl::OnScrollFocusedEditableNodeIntoRect( | 1422 void RenderViewImpl::OnScrollFocusedEditableNodeIntoRect( |
1423 const gfx::Rect& rect) { | 1423 const gfx::Rect& rect) { |
1424 if (has_scrolled_focused_editable_node_into_rect_ && | 1424 if (has_scrolled_focused_editable_node_into_rect_ && |
1425 rect == rect_for_scrolled_focused_editable_node_) { | 1425 rect == rect_for_scrolled_focused_editable_node_) { |
| 1426 FocusChangeComplete(); |
1426 return; | 1427 return; |
1427 } | 1428 } |
1428 | 1429 |
1429 blink::WebElement element = GetFocusedElement(); | 1430 blink::WebElement element = GetFocusedElement(); |
| 1431 bool will_animate = false; |
1430 if (!element.isNull() && IsEditableNode(element)) { | 1432 if (!element.isNull() && IsEditableNode(element)) { |
1431 rect_for_scrolled_focused_editable_node_ = rect; | 1433 rect_for_scrolled_focused_editable_node_ = rect; |
1432 has_scrolled_focused_editable_node_into_rect_ = true; | 1434 has_scrolled_focused_editable_node_into_rect_ = true; |
1433 webview()->scrollFocusedNodeIntoRect(rect); | 1435 will_animate = webview()->scrollFocusedNodeIntoRect(rect); |
1434 } | 1436 } |
| 1437 |
| 1438 if (!will_animate) |
| 1439 FocusChangeComplete(); |
1435 } | 1440 } |
1436 | 1441 |
1437 void RenderViewImpl::OnSetEditCommandsForNextKeyEvent( | 1442 void RenderViewImpl::OnSetEditCommandsForNextKeyEvent( |
1438 const EditCommands& edit_commands) { | 1443 const EditCommands& edit_commands) { |
1439 edit_commands_ = edit_commands; | 1444 edit_commands_ = edit_commands; |
1440 } | 1445 } |
1441 | 1446 |
1442 void RenderViewImpl::OnSetHistoryOffsetAndLength(int history_offset, | 1447 void RenderViewImpl::OnSetHistoryOffsetAndLength(int history_offset, |
1443 int history_length) { | 1448 int history_length) { |
1444 DCHECK_GE(history_offset, -1); | 1449 DCHECK_GE(history_offset, -1); |
(...skipping 474 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1919 WebNode web_node = const_cast<WebNode&>(node); | 1924 WebNode web_node = const_cast<WebNode&>(node); |
1920 node_bounds = gfx::Rect(web_node.to<WebElement>().boundsInViewportSpace()); | 1925 node_bounds = gfx::Rect(web_node.to<WebElement>().boundsInViewportSpace()); |
1921 } | 1926 } |
1922 Send(new ViewHostMsg_FocusedNodeChanged(routing_id_, IsEditableNode(node), | 1927 Send(new ViewHostMsg_FocusedNodeChanged(routing_id_, IsEditableNode(node), |
1923 node_bounds)); | 1928 node_bounds)); |
1924 | 1929 |
1925 FOR_EACH_OBSERVER(RenderViewObserver, observers_, FocusedNodeChanged(node)); | 1930 FOR_EACH_OBSERVER(RenderViewObserver, observers_, FocusedNodeChanged(node)); |
1926 | 1931 |
1927 // TODO(dmazzoni): this should be part of RenderFrameObserver. | 1932 // TODO(dmazzoni): this should be part of RenderFrameObserver. |
1928 GetMainRenderFrame()->FocusedNodeChanged(node); | 1933 GetMainRenderFrame()->FocusedNodeChanged(node); |
| 1934 |
| 1935 focused_element_bounds_ = node_bounds; |
1929 } | 1936 } |
1930 | 1937 |
1931 void RenderViewImpl::didUpdateLayout() { | 1938 void RenderViewImpl::didUpdateLayout() { |
1932 FOR_EACH_OBSERVER(RenderViewObserver, observers_, DidUpdateLayout()); | 1939 FOR_EACH_OBSERVER(RenderViewObserver, observers_, DidUpdateLayout()); |
1933 | 1940 |
1934 // We don't always want to set up a timer, only if we've been put in that | 1941 // We don't always want to set up a timer, only if we've been put in that |
1935 // mode by getting a |ViewMsg_EnablePreferredSizeChangedMode| | 1942 // mode by getting a |ViewMsg_EnablePreferredSizeChangedMode| |
1936 // message. | 1943 // message. |
1937 if (!send_preferred_size_changes_ || !webview()) | 1944 if (!send_preferred_size_changes_ || !webview()) |
1938 return; | 1945 return; |
(...skipping 1231 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3170 } | 3177 } |
3171 } | 3178 } |
3172 | 3179 |
3173 gfx::Size old_visible_viewport_size = visible_viewport_size_; | 3180 gfx::Size old_visible_viewport_size = visible_viewport_size_; |
3174 | 3181 |
3175 RenderWidget::OnResize(params); | 3182 RenderWidget::OnResize(params); |
3176 | 3183 |
3177 if (old_visible_viewport_size != visible_viewport_size_) | 3184 if (old_visible_viewport_size != visible_viewport_size_) |
3178 has_scrolled_focused_editable_node_into_rect_ = false; | 3185 has_scrolled_focused_editable_node_into_rect_ = false; |
3179 | 3186 |
3180 FOR_EACH_OBSERVER(RenderViewObserver, | 3187 blink::WebElement focused_element = GetFocusedElement(); |
3181 observers_, | 3188 blink::WebRect bounds = focused_element.isNull() |
3182 Resized()); | 3189 ? blink::WebRect() |
| 3190 : focused_element.boundsInViewportSpace(); |
| 3191 if (bounds != focused_element_bounds_) { |
| 3192 FOR_EACH_OBSERVER(RenderViewObserver, observers_, |
| 3193 FocusedElementMovedOnResize()); |
| 3194 } |
| 3195 |
| 3196 focused_element_bounds_ = bounds; |
3183 } | 3197 } |
3184 | 3198 |
3185 void RenderViewImpl::DidInitiatePaint() { | 3199 void RenderViewImpl::DidInitiatePaint() { |
3186 #if defined(ENABLE_PLUGINS) | 3200 #if defined(ENABLE_PLUGINS) |
3187 // Notify all instances that we painted. The same caveats apply as for | 3201 // Notify all instances that we painted. The same caveats apply as for |
3188 // ViewFlushedPaint regarding instances closing themselves, so we take | 3202 // ViewFlushedPaint regarding instances closing themselves, so we take |
3189 // similar precautions. | 3203 // similar precautions. |
3190 PepperPluginSet plugins = active_pepper_instances_; | 3204 PepperPluginSet plugins = active_pepper_instances_; |
3191 for (PepperPluginSet::iterator i = plugins.begin(); i != plugins.end(); ++i) { | 3205 for (PepperPluginSet::iterator i = plugins.begin(); i != plugins.end(); ++i) { |
3192 if (active_pepper_instances_.find(*i) != active_pepper_instances_.end()) | 3206 if (active_pepper_instances_.find(*i) != active_pepper_instances_.end()) |
(...skipping 405 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3598 // after Pepper API equips features related to surrounding text retrieval. | 3612 // after Pepper API equips features related to surrounding text retrieval. |
3599 gfx::Rect caret = focused_pepper_plugin_->GetCaretBounds(); | 3613 gfx::Rect caret = focused_pepper_plugin_->GetCaretBounds(); |
3600 *start = caret; | 3614 *start = caret; |
3601 *end = caret; | 3615 *end = caret; |
3602 return; | 3616 return; |
3603 } | 3617 } |
3604 #endif | 3618 #endif |
3605 RenderWidget::GetSelectionBounds(start, end); | 3619 RenderWidget::GetSelectionBounds(start, end); |
3606 } | 3620 } |
3607 | 3621 |
| 3622 void RenderViewImpl::FocusChangeComplete() { |
| 3623 RenderWidget::FocusChangeComplete(); |
| 3624 FOR_EACH_OBSERVER(RenderViewObserver, observers_, FocusChangeComplete()); |
| 3625 } |
| 3626 |
3608 void RenderViewImpl::GetCompositionCharacterBounds( | 3627 void RenderViewImpl::GetCompositionCharacterBounds( |
3609 std::vector<gfx::Rect>* bounds) { | 3628 std::vector<gfx::Rect>* bounds) { |
3610 DCHECK(bounds); | 3629 DCHECK(bounds); |
3611 bounds->clear(); | 3630 bounds->clear(); |
3612 | 3631 |
3613 #if defined(ENABLE_PLUGINS) | 3632 #if defined(ENABLE_PLUGINS) |
3614 if (focused_pepper_plugin_) { | 3633 if (focused_pepper_plugin_) { |
3615 return; | 3634 return; |
3616 } | 3635 } |
3617 #endif | 3636 #endif |
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3684 } | 3703 } |
3685 | 3704 |
3686 void RenderViewImpl::InstrumentWillComposite() { | 3705 void RenderViewImpl::InstrumentWillComposite() { |
3687 if (!webview()) | 3706 if (!webview()) |
3688 return; | 3707 return; |
3689 if (!webview()->devToolsAgent()) | 3708 if (!webview()->devToolsAgent()) |
3690 return; | 3709 return; |
3691 webview()->devToolsAgent()->willComposite(); | 3710 webview()->devToolsAgent()->willComposite(); |
3692 } | 3711 } |
3693 | 3712 |
| 3713 void RenderViewImpl::DidCompletePageScaleAnimation() { |
| 3714 FocusChangeComplete(); |
| 3715 } |
| 3716 |
3694 void RenderViewImpl::SetScreenMetricsEmulationParameters( | 3717 void RenderViewImpl::SetScreenMetricsEmulationParameters( |
3695 float device_scale_factor, | 3718 float device_scale_factor, |
3696 const gfx::Point& root_layer_offset, | 3719 const gfx::Point& root_layer_offset, |
3697 float root_layer_scale) { | 3720 float root_layer_scale) { |
3698 if (webview() && compositor()) { | 3721 if (webview() && compositor()) { |
3699 webview()->setCompositorDeviceScaleFactorOverride(device_scale_factor); | 3722 webview()->setCompositorDeviceScaleFactorOverride(device_scale_factor); |
3700 webview()->setRootLayerTransform( | 3723 webview()->setRootLayerTransform( |
3701 blink::WebSize(root_layer_offset.x(), root_layer_offset.y()), | 3724 blink::WebSize(root_layer_offset.x(), root_layer_offset.y()), |
3702 root_layer_scale); | 3725 root_layer_scale); |
3703 } | 3726 } |
(...skipping 371 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4075 std::vector<gfx::Size> sizes; | 4098 std::vector<gfx::Size> sizes; |
4076 ConvertToFaviconSizes(icon_urls[i].sizes(), &sizes); | 4099 ConvertToFaviconSizes(icon_urls[i].sizes(), &sizes); |
4077 if (!url.isEmpty()) | 4100 if (!url.isEmpty()) |
4078 urls.push_back( | 4101 urls.push_back( |
4079 FaviconURL(url, ToFaviconType(icon_urls[i].iconType()), sizes)); | 4102 FaviconURL(url, ToFaviconType(icon_urls[i].iconType()), sizes)); |
4080 } | 4103 } |
4081 SendUpdateFaviconURL(urls); | 4104 SendUpdateFaviconURL(urls); |
4082 } | 4105 } |
4083 | 4106 |
4084 } // namespace content | 4107 } // namespace content |
OLD | NEW |