Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(264)

Side by Side Diff: content/renderer/render_view_impl.cc

Issue 715733002: [Android] Show autofill popup after animation. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Hide popup when resizing the viewport resulted in movement of the focused element. Created 6 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 1298 matching lines...) Expand 10 before | Expand all | Expand 10 after
1309 IPC_MESSAGE_HANDLER(ViewMsg_UpdateWebPreferences, OnUpdateWebPreferences) 1309 IPC_MESSAGE_HANDLER(ViewMsg_UpdateWebPreferences, OnUpdateWebPreferences)
1310 IPC_MESSAGE_HANDLER(ViewMsg_EnumerateDirectoryResponse, 1310 IPC_MESSAGE_HANDLER(ViewMsg_EnumerateDirectoryResponse,
1311 OnEnumerateDirectoryResponse) 1311 OnEnumerateDirectoryResponse)
1312 IPC_MESSAGE_HANDLER(ViewMsg_RunFileChooserResponse, OnFileChooserResponse) 1312 IPC_MESSAGE_HANDLER(ViewMsg_RunFileChooserResponse, OnFileChooserResponse)
1313 IPC_MESSAGE_HANDLER(ViewMsg_SuppressDialogsUntilSwapOut, 1313 IPC_MESSAGE_HANDLER(ViewMsg_SuppressDialogsUntilSwapOut,
1314 OnSuppressDialogsUntilSwapOut) 1314 OnSuppressDialogsUntilSwapOut)
1315 IPC_MESSAGE_HANDLER(ViewMsg_ClosePage, OnClosePage) 1315 IPC_MESSAGE_HANDLER(ViewMsg_ClosePage, OnClosePage)
1316 IPC_MESSAGE_HANDLER(ViewMsg_ThemeChanged, OnThemeChanged) 1316 IPC_MESSAGE_HANDLER(ViewMsg_ThemeChanged, OnThemeChanged)
1317 IPC_MESSAGE_HANDLER(ViewMsg_MoveOrResizeStarted, OnMoveOrResizeStarted) 1317 IPC_MESSAGE_HANDLER(ViewMsg_MoveOrResizeStarted, OnMoveOrResizeStarted)
1318 IPC_MESSAGE_HANDLER(ViewMsg_ClearFocusedElement, OnClearFocusedElement) 1318 IPC_MESSAGE_HANDLER(ViewMsg_ClearFocusedElement, OnClearFocusedElement)
1319 IPC_MESSAGE_HANDLER(ViewMsg_FocusChangeComplete, FocusChangeComplete)
1319 IPC_MESSAGE_HANDLER(ViewMsg_SetBackgroundOpaque, OnSetBackgroundOpaque) 1320 IPC_MESSAGE_HANDLER(ViewMsg_SetBackgroundOpaque, OnSetBackgroundOpaque)
1320 IPC_MESSAGE_HANDLER(ViewMsg_EnablePreferredSizeChangedMode, 1321 IPC_MESSAGE_HANDLER(ViewMsg_EnablePreferredSizeChangedMode,
1321 OnEnablePreferredSizeChangedMode) 1322 OnEnablePreferredSizeChangedMode)
1322 IPC_MESSAGE_HANDLER(ViewMsg_EnableAutoResize, OnEnableAutoResize) 1323 IPC_MESSAGE_HANDLER(ViewMsg_EnableAutoResize, OnEnableAutoResize)
1323 IPC_MESSAGE_HANDLER(ViewMsg_DisableAutoResize, OnDisableAutoResize) 1324 IPC_MESSAGE_HANDLER(ViewMsg_DisableAutoResize, OnDisableAutoResize)
1324 IPC_MESSAGE_HANDLER(ViewMsg_DisableScrollbarsForSmallWindows, 1325 IPC_MESSAGE_HANDLER(ViewMsg_DisableScrollbarsForSmallWindows,
1325 OnDisableScrollbarsForSmallWindows) 1326 OnDisableScrollbarsForSmallWindows)
1326 IPC_MESSAGE_HANDLER(ViewMsg_SetRendererPrefs, OnSetRendererPrefs) 1327 IPC_MESSAGE_HANDLER(ViewMsg_SetRendererPrefs, OnSetRendererPrefs)
1327 IPC_MESSAGE_HANDLER(ViewMsg_MediaPlayerActionAt, OnMediaPlayerActionAt) 1328 IPC_MESSAGE_HANDLER(ViewMsg_MediaPlayerActionAt, OnMediaPlayerActionAt)
1328 IPC_MESSAGE_HANDLER(ViewMsg_PluginActionAt, OnPluginActionAt) 1329 IPC_MESSAGE_HANDLER(ViewMsg_PluginActionAt, OnPluginActionAt)
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
1409 1410
1410 Send(new InputHostMsg_MoveCaret_ACK(routing_id_)); 1411 Send(new InputHostMsg_MoveCaret_ACK(routing_id_));
1411 1412
1412 webview()->focusedFrame()->moveCaretSelection(point); 1413 webview()->focusedFrame()->moveCaretSelection(point);
1413 } 1414 }
1414 1415
1415 void RenderViewImpl::OnScrollFocusedEditableNodeIntoRect( 1416 void RenderViewImpl::OnScrollFocusedEditableNodeIntoRect(
1416 const gfx::Rect& rect) { 1417 const gfx::Rect& rect) {
1417 if (has_scrolled_focused_editable_node_into_rect_ && 1418 if (has_scrolled_focused_editable_node_into_rect_ &&
1418 rect == rect_for_scrolled_focused_editable_node_) { 1419 rect == rect_for_scrolled_focused_editable_node_) {
1420 FocusChangeComplete();
1419 return; 1421 return;
1420 } 1422 }
1421 1423
1422 blink::WebElement element = GetFocusedElement(); 1424 blink::WebElement element = GetFocusedElement();
1425 bool will_animate = false;
1423 if (!element.isNull() && IsEditableNode(element)) { 1426 if (!element.isNull() && IsEditableNode(element)) {
1424 rect_for_scrolled_focused_editable_node_ = rect; 1427 rect_for_scrolled_focused_editable_node_ = rect;
1425 has_scrolled_focused_editable_node_into_rect_ = true; 1428 has_scrolled_focused_editable_node_into_rect_ = true;
1426 webview()->scrollFocusedNodeIntoRect(rect); 1429 will_animate = webview()->scrollFocusedNodeIntoRect(rect);
1427 } 1430 }
1431
1432 if (!will_animate)
1433 FocusChangeComplete();
1428 } 1434 }
1429 1435
1430 void RenderViewImpl::OnSetEditCommandsForNextKeyEvent( 1436 void RenderViewImpl::OnSetEditCommandsForNextKeyEvent(
1431 const EditCommands& edit_commands) { 1437 const EditCommands& edit_commands) {
1432 edit_commands_ = edit_commands; 1438 edit_commands_ = edit_commands;
1433 } 1439 }
1434 1440
1435 void RenderViewImpl::OnSetHistoryOffsetAndLength(int history_offset, 1441 void RenderViewImpl::OnSetHistoryOffsetAndLength(int history_offset,
1436 int history_length) { 1442 int history_length) {
1437 DCHECK_GE(history_offset, -1); 1443 DCHECK_GE(history_offset, -1);
(...skipping 470 matching lines...) Expand 10 before | Expand all | Expand 10 after
1908 1914
1909 void RenderViewImpl::focusedNodeChanged(const WebNode& node) { 1915 void RenderViewImpl::focusedNodeChanged(const WebNode& node) {
1910 has_scrolled_focused_editable_node_into_rect_ = false; 1916 has_scrolled_focused_editable_node_into_rect_ = false;
1911 1917
1912 Send(new ViewHostMsg_FocusedNodeChanged(routing_id_, IsEditableNode(node))); 1918 Send(new ViewHostMsg_FocusedNodeChanged(routing_id_, IsEditableNode(node)));
1913 1919
1914 FOR_EACH_OBSERVER(RenderViewObserver, observers_, FocusedNodeChanged(node)); 1920 FOR_EACH_OBSERVER(RenderViewObserver, observers_, FocusedNodeChanged(node));
1915 1921
1916 // TODO(dmazzoni): this should be part of RenderFrameObserver. 1922 // TODO(dmazzoni): this should be part of RenderFrameObserver.
1917 GetMainRenderFrame()->FocusedNodeChanged(node); 1923 GetMainRenderFrame()->FocusedNodeChanged(node);
1924
1925 blink::WebElement focused_element = GetFocusedElement();
1926 focused_element_bounds_ = focused_element.isNull()
1927 ? blink::WebRect()
1928 : focused_element.boundsInViewportSpace();
1918 } 1929 }
1919 1930
1920 void RenderViewImpl::didUpdateLayout() { 1931 void RenderViewImpl::didUpdateLayout() {
1921 FOR_EACH_OBSERVER(RenderViewObserver, observers_, DidUpdateLayout()); 1932 FOR_EACH_OBSERVER(RenderViewObserver, observers_, DidUpdateLayout());
1922 1933
1923 // We don't always want to set up a timer, only if we've been put in that 1934 // We don't always want to set up a timer, only if we've been put in that
1924 // mode by getting a |ViewMsg_EnablePreferredSizeChangedMode| 1935 // mode by getting a |ViewMsg_EnablePreferredSizeChangedMode|
1925 // message. 1936 // message.
1926 if (!send_preferred_size_changes_ || !webview()) 1937 if (!send_preferred_size_changes_ || !webview())
1927 return; 1938 return;
(...skipping 1276 matching lines...) Expand 10 before | Expand all | Expand 10 after
3204 } 3215 }
3205 } 3216 }
3206 3217
3207 gfx::Size old_visible_viewport_size = visible_viewport_size_; 3218 gfx::Size old_visible_viewport_size = visible_viewport_size_;
3208 3219
3209 RenderWidget::OnResize(params); 3220 RenderWidget::OnResize(params);
3210 3221
3211 if (old_visible_viewport_size != visible_viewport_size_) 3222 if (old_visible_viewport_size != visible_viewport_size_)
3212 has_scrolled_focused_editable_node_into_rect_ = false; 3223 has_scrolled_focused_editable_node_into_rect_ = false;
3213 3224
3214 FOR_EACH_OBSERVER(RenderViewObserver, 3225 blink::WebElement focused_element = GetFocusedElement();
3215 observers_, 3226 blink::WebRect bounds = focused_element.isNull()
3216 Resized()); 3227 ? blink::WebRect()
3228 : focused_element.boundsInViewportSpace();
3229 if (bounds != focused_element_bounds_) {
3230 FOR_EACH_OBSERVER(RenderViewObserver, observers_,
3231 FocusedElementMovedOnResize());
3232 }
3233
3234 focused_element_bounds_ = bounds;
3217 } 3235 }
3218 3236
3219 void RenderViewImpl::DidInitiatePaint() { 3237 void RenderViewImpl::DidInitiatePaint() {
3220 #if defined(ENABLE_PLUGINS) 3238 #if defined(ENABLE_PLUGINS)
3221 // Notify all instances that we painted. The same caveats apply as for 3239 // Notify all instances that we painted. The same caveats apply as for
3222 // ViewFlushedPaint regarding instances closing themselves, so we take 3240 // ViewFlushedPaint regarding instances closing themselves, so we take
3223 // similar precautions. 3241 // similar precautions.
3224 PepperPluginSet plugins = active_pepper_instances_; 3242 PepperPluginSet plugins = active_pepper_instances_;
3225 for (PepperPluginSet::iterator i = plugins.begin(); i != plugins.end(); ++i) { 3243 for (PepperPluginSet::iterator i = plugins.begin(); i != plugins.end(); ++i) {
3226 if (active_pepper_instances_.find(*i) != active_pepper_instances_.end()) 3244 if (active_pepper_instances_.find(*i) != active_pepper_instances_.end())
(...skipping 405 matching lines...) Expand 10 before | Expand all | Expand 10 after
3632 // after Pepper API equips features related to surrounding text retrieval. 3650 // after Pepper API equips features related to surrounding text retrieval.
3633 gfx::Rect caret = focused_pepper_plugin_->GetCaretBounds(); 3651 gfx::Rect caret = focused_pepper_plugin_->GetCaretBounds();
3634 *start = caret; 3652 *start = caret;
3635 *end = caret; 3653 *end = caret;
3636 return; 3654 return;
3637 } 3655 }
3638 #endif 3656 #endif
3639 RenderWidget::GetSelectionBounds(start, end); 3657 RenderWidget::GetSelectionBounds(start, end);
3640 } 3658 }
3641 3659
3660 void RenderViewImpl::FocusChangeComplete() {
3661 RenderWidget::FocusChangeComplete();
3662 FOR_EACH_OBSERVER(RenderViewObserver, observers_, FocusChangeComplete());
3663 }
3664
3642 void RenderViewImpl::GetCompositionCharacterBounds( 3665 void RenderViewImpl::GetCompositionCharacterBounds(
3643 std::vector<gfx::Rect>* bounds) { 3666 std::vector<gfx::Rect>* bounds) {
3644 DCHECK(bounds); 3667 DCHECK(bounds);
3645 bounds->clear(); 3668 bounds->clear();
3646 3669
3647 #if defined(ENABLE_PLUGINS) 3670 #if defined(ENABLE_PLUGINS)
3648 if (focused_pepper_plugin_) { 3671 if (focused_pepper_plugin_) {
3649 return; 3672 return;
3650 } 3673 }
3651 #endif 3674 #endif
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
3718 } 3741 }
3719 3742
3720 void RenderViewImpl::InstrumentWillComposite() { 3743 void RenderViewImpl::InstrumentWillComposite() {
3721 if (!webview()) 3744 if (!webview())
3722 return; 3745 return;
3723 if (!webview()->devToolsAgent()) 3746 if (!webview()->devToolsAgent())
3724 return; 3747 return;
3725 webview()->devToolsAgent()->willComposite(); 3748 webview()->devToolsAgent()->willComposite();
3726 } 3749 }
3727 3750
3751 void RenderViewImpl::DidCompletePageScaleAnimation() {
3752 FocusChangeComplete();
3753 }
3754
3728 void RenderViewImpl::SetScreenMetricsEmulationParameters( 3755 void RenderViewImpl::SetScreenMetricsEmulationParameters(
3729 float device_scale_factor, 3756 float device_scale_factor,
3730 const gfx::Point& root_layer_offset, 3757 const gfx::Point& root_layer_offset,
3731 float root_layer_scale) { 3758 float root_layer_scale) {
3732 if (webview() && compositor()) { 3759 if (webview() && compositor()) {
3733 webview()->setCompositorDeviceScaleFactorOverride(device_scale_factor); 3760 webview()->setCompositorDeviceScaleFactorOverride(device_scale_factor);
3734 webview()->setRootLayerTransform( 3761 webview()->setRootLayerTransform(
3735 blink::WebSize(root_layer_offset.x(), root_layer_offset.y()), 3762 blink::WebSize(root_layer_offset.x(), root_layer_offset.y()),
3736 root_layer_scale); 3763 root_layer_scale);
3737 } 3764 }
(...skipping 369 matching lines...) Expand 10 before | Expand all | Expand 10 after
4107 std::vector<gfx::Size> sizes; 4134 std::vector<gfx::Size> sizes;
4108 ConvertToFaviconSizes(icon_urls[i].sizes(), &sizes); 4135 ConvertToFaviconSizes(icon_urls[i].sizes(), &sizes);
4109 if (!url.isEmpty()) 4136 if (!url.isEmpty())
4110 urls.push_back( 4137 urls.push_back(
4111 FaviconURL(url, ToFaviconType(icon_urls[i].iconType()), sizes)); 4138 FaviconURL(url, ToFaviconType(icon_urls[i].iconType()), sizes));
4112 } 4139 }
4113 SendUpdateFaviconURL(urls); 4140 SendUpdateFaviconURL(urls);
4114 } 4141 }
4115 4142
4116 } // namespace content 4143 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698