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

Side by Side Diff: content/browser/renderer_host/render_widget_host_view_aura.cc

Issue 698253004: Reland: Implement Aura side of unified touch text selection for contents (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fixed overrides in TouchHandleDrawableAura Created 5 years, 11 months 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/browser/renderer_host/render_widget_host_view_aura.h" 5 #include "content/browser/renderer_host/render_widget_host_view_aura.h"
6 6
7 #include "base/auto_reset.h" 7 #include "base/auto_reset.h"
8 #include "base/basictypes.h" 8 #include "base/basictypes.h"
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/callback_helpers.h" 10 #include "base/callback_helpers.h"
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
67 #include "ui/compositor/dip_util.h" 67 #include "ui/compositor/dip_util.h"
68 #include "ui/events/event.h" 68 #include "ui/events/event.h"
69 #include "ui/events/event_utils.h" 69 #include "ui/events/event_utils.h"
70 #include "ui/events/gestures/gesture_recognizer.h" 70 #include "ui/events/gestures/gesture_recognizer.h"
71 #include "ui/gfx/canvas.h" 71 #include "ui/gfx/canvas.h"
72 #include "ui/gfx/display.h" 72 #include "ui/gfx/display.h"
73 #include "ui/gfx/geometry/rect_conversions.h" 73 #include "ui/gfx/geometry/rect_conversions.h"
74 #include "ui/gfx/geometry/size_conversions.h" 74 #include "ui/gfx/geometry/size_conversions.h"
75 #include "ui/gfx/screen.h" 75 #include "ui/gfx/screen.h"
76 #include "ui/gfx/skia_util.h" 76 #include "ui/gfx/skia_util.h"
77 #include "ui/touch_selection/touch_selection_controller_aura.h"
77 #include "ui/wm/public/activation_client.h" 78 #include "ui/wm/public/activation_client.h"
78 #include "ui/wm/public/scoped_tooltip_disabler.h" 79 #include "ui/wm/public/scoped_tooltip_disabler.h"
79 #include "ui/wm/public/tooltip_client.h" 80 #include "ui/wm/public/tooltip_client.h"
80 #include "ui/wm/public/transient_window_client.h" 81 #include "ui/wm/public/transient_window_client.h"
81 #include "ui/wm/public/window_types.h" 82 #include "ui/wm/public/window_types.h"
82 83
83 #if defined(OS_WIN) 84 #if defined(OS_WIN)
84 #include "content/browser/accessibility/browser_accessibility_manager_win.h" 85 #include "content/browser/accessibility/browser_accessibility_manager_win.h"
85 #include "content/browser/accessibility/browser_accessibility_win.h" 86 #include "content/browser/accessibility/browser_accessibility_win.h"
86 #include "content/browser/renderer_host/legacy_render_widget_host_win.h" 87 #include "content/browser/renderer_host/legacy_render_widget_host_win.h"
(...skipping 342 matching lines...) Expand 10 before | Expand all | Expand 10 after
429 accept_return_character_(false), 430 accept_return_character_(false),
430 last_swapped_software_frame_scale_factor_(1.f), 431 last_swapped_software_frame_scale_factor_(1.f),
431 paint_canvas_(NULL), 432 paint_canvas_(NULL),
432 synthetic_move_sent_(false), 433 synthetic_move_sent_(false),
433 cursor_visibility_state_in_renderer_(UNKNOWN), 434 cursor_visibility_state_in_renderer_(UNKNOWN),
434 #if defined(OS_WIN) 435 #if defined(OS_WIN)
435 legacy_render_widget_host_HWND_(NULL), 436 legacy_render_widget_host_HWND_(NULL),
436 legacy_window_destroyed_(false), 437 legacy_window_destroyed_(false),
437 #endif 438 #endif
438 has_snapped_to_boundary_(false), 439 has_snapped_to_boundary_(false),
439 touch_editing_client_(NULL),
440 is_guest_view_hack_(is_guest_view_hack), 440 is_guest_view_hack_(is_guest_view_hack),
441 weak_ptr_factory_(this) { 441 weak_ptr_factory_(this) {
442 if (!is_guest_view_hack_) 442 if (!is_guest_view_hack_)
443 host_->SetView(this); 443 host_->SetView(this);
444 444
445 window_observer_.reset(new WindowObserver(this)); 445 window_observer_.reset(new WindowObserver(this));
446 aura::client::SetTooltipText(window_, &tooltip_); 446 aura::client::SetTooltipText(window_, &tooltip_);
447 aura::client::SetActivationDelegate(window_, this); 447 aura::client::SetActivationDelegate(window_, this);
448 aura::client::SetActivationChangeObserver(window_, this); 448 aura::client::SetActivationChangeObserver(window_, this);
449 aura::client::SetFocusChangeObserver(window_, this); 449 aura::client::SetFocusChangeObserver(window_, this);
(...skipping 324 matching lines...) Expand 10 before | Expand all | Expand 10 after
774 // Make sure we have a FocusClient before attempting to Focus(). In some 774 // Make sure we have a FocusClient before attempting to Focus(). In some
775 // situations we may not yet be in a valid Window hierarchy (such as reloading 775 // situations we may not yet be in a valid Window hierarchy (such as reloading
776 // after out of memory discarded the tab). 776 // after out of memory discarded the tab).
777 aura::client::FocusClient* client = aura::client::GetFocusClient(window_); 777 aura::client::FocusClient* client = aura::client::GetFocusClient(window_);
778 if (client) 778 if (client)
779 window_->Focus(); 779 window_->Focus();
780 } 780 }
781 781
782 void RenderWidgetHostViewAura::Blur() { 782 void RenderWidgetHostViewAura::Blur() {
783 window_->Blur(); 783 window_->Blur();
784 if (selection_controller_)
785 selection_controller_->HideAndDisallowShowingAutomatically();
784 } 786 }
785 787
786 bool RenderWidgetHostViewAura::HasFocus() const { 788 bool RenderWidgetHostViewAura::HasFocus() const {
787 return window_->HasFocus(); 789 return window_->HasFocus();
788 } 790 }
789 791
790 bool RenderWidgetHostViewAura::IsSurfaceAvailableForCopy() const { 792 bool RenderWidgetHostViewAura::IsSurfaceAvailableForCopy() const {
791 return delegated_frame_host_->CanCopyToBitmap(); 793 return delegated_frame_host_->CanCopyToBitmap();
792 } 794 }
793 795
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
841 if (text_input_type_ != type || 843 if (text_input_type_ != type ||
842 text_input_mode_ != input_mode || 844 text_input_mode_ != input_mode ||
843 can_compose_inline_ != can_compose_inline || 845 can_compose_inline_ != can_compose_inline ||
844 text_input_flags_ != flags) { 846 text_input_flags_ != flags) {
845 text_input_type_ = type; 847 text_input_type_ = type;
846 text_input_mode_ = input_mode; 848 text_input_mode_ = input_mode;
847 can_compose_inline_ = can_compose_inline; 849 can_compose_inline_ = can_compose_inline;
848 text_input_flags_ = flags; 850 text_input_flags_ = flags;
849 if (GetInputMethod()) 851 if (GetInputMethod())
850 GetInputMethod()->OnTextInputTypeChanged(this); 852 GetInputMethod()->OnTextInputTypeChanged(this);
851 if (touch_editing_client_) 853 const bool is_editable_node = type != ui::TEXT_INPUT_TYPE_NONE;
852 touch_editing_client_->OnTextInputTypeChanged(text_input_type_); 854 if (selection_controller_)
855 selection_controller_->OnSelectionEditable(is_editable_node);
853 } 856 }
854 } 857 }
855 858
856 void RenderWidgetHostViewAura::OnTextInputStateChanged( 859 void RenderWidgetHostViewAura::OnTextInputStateChanged(
857 const ViewHostMsg_TextInputState_Params& params) { 860 const ViewHostMsg_TextInputState_Params& params) {
858 text_input_flags_ = params.flags; 861 text_input_flags_ = params.flags;
859 if (params.show_ime_if_needed && params.type != ui::TEXT_INPUT_TYPE_NONE) { 862 if (params.show_ime_if_needed && params.type != ui::TEXT_INPUT_TYPE_NONE) {
860 if (GetInputMethod()) 863 if (GetInputMethod())
861 GetInputMethod()->ShowImeIfNeeded(); 864 GetInputMethod()->ShowImeIfNeeded();
862 } 865 }
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
899 // Content tooltips should be visible indefinitely. 902 // Content tooltips should be visible indefinitely.
900 tooltip_client->SetTooltipShownTimeout(window_, 0); 903 tooltip_client->SetTooltipShownTimeout(window_, 0);
901 } 904 }
902 } 905 }
903 906
904 void RenderWidgetHostViewAura::SelectionChanged(const base::string16& text, 907 void RenderWidgetHostViewAura::SelectionChanged(const base::string16& text,
905 size_t offset, 908 size_t offset,
906 const gfx::Range& range) { 909 const gfx::Range& range) {
907 RenderWidgetHostViewBase::SelectionChanged(text, offset, range); 910 RenderWidgetHostViewBase::SelectionChanged(text, offset, range);
908 911
912 if (selection_controller_)
913 selection_controller_->OnSelectionEmpty(text.empty());
914
909 #if defined(USE_X11) && !defined(OS_CHROMEOS) 915 #if defined(USE_X11) && !defined(OS_CHROMEOS)
910 if (text.empty() || range.is_empty()) 916 if (text.empty() || range.is_empty())
911 return; 917 return;
912 size_t pos = range.GetMin() - offset; 918 size_t pos = range.GetMin() - offset;
913 size_t n = range.length(); 919 size_t n = range.length();
914 920
915 DCHECK(pos + n <= text.length()) << "The text can not fully cover range."; 921 DCHECK(pos + n <= text.length()) << "The text can not fully cover range.";
916 if (pos >= text.length()) { 922 if (pos >= text.length()) {
917 NOTREACHED() << "The text can not cover range."; 923 NOTREACHED() << "The text can not cover range.";
918 return; 924 return;
919 } 925 }
920 926
921 // Set the CLIPBOARD_TYPE_SELECTION to the ui::Clipboard. 927 // Set the CLIPBOARD_TYPE_SELECTION to the ui::Clipboard.
922 ui::ScopedClipboardWriter clipboard_writer(ui::CLIPBOARD_TYPE_SELECTION); 928 ui::ScopedClipboardWriter clipboard_writer(ui::CLIPBOARD_TYPE_SELECTION);
923 clipboard_writer.WriteText(text.substr(pos, n)); 929 clipboard_writer.WriteText(text.substr(pos, n));
924 #endif // defined(USE_X11) && !defined(OS_CHROMEOS) 930 #endif // defined(USE_X11) && !defined(OS_CHROMEOS)
925 } 931 }
926 932
927 gfx::Size RenderWidgetHostViewAura::GetRequestedRendererSize() const { 933 gfx::Size RenderWidgetHostViewAura::GetRequestedRendererSize() const {
928 return delegated_frame_host_->GetRequestedRendererSize(); 934 return delegated_frame_host_->GetRequestedRendererSize();
929 } 935 }
930 936
931 void RenderWidgetHostViewAura::SelectionBoundsChanged( 937 void RenderWidgetHostViewAura::SelectionBoundsChanged(
932 const ViewHostMsg_SelectionBounds_Params& params) { 938 const ViewHostMsg_SelectionBounds_Params& params) {
933 ui::SelectionBound anchor_bound, focus_bound; 939 NOTREACHED() << "Selection bounds should be routed through the compositor.";
934 anchor_bound.SetEdge(params.anchor_rect.origin(),
935 params.anchor_rect.bottom_left());
936 focus_bound.SetEdge(params.focus_rect.origin(),
937 params.focus_rect.bottom_left());
938
939 if (params.anchor_rect == params.focus_rect) {
940 anchor_bound.set_type(ui::SelectionBound::CENTER);
941 focus_bound.set_type(ui::SelectionBound::CENTER);
942 } else {
943 // Whether text is LTR at the anchor handle.
944 bool anchor_LTR = params.anchor_dir == blink::WebTextDirectionLeftToRight;
945 // Whether text is LTR at the focus handle.
946 bool focus_LTR = params.focus_dir == blink::WebTextDirectionLeftToRight;
947
948 if ((params.is_anchor_first && anchor_LTR) ||
949 (!params.is_anchor_first && !anchor_LTR)) {
950 anchor_bound.set_type(ui::SelectionBound::LEFT);
951 } else {
952 anchor_bound.set_type(ui::SelectionBound::RIGHT);
953 }
954 if ((params.is_anchor_first && focus_LTR) ||
955 (!params.is_anchor_first && !focus_LTR)) {
956 focus_bound.set_type(ui::SelectionBound::RIGHT);
957 } else {
958 focus_bound.set_type(ui::SelectionBound::LEFT);
959 }
960 }
961
962 if (anchor_bound == selection_anchor_ && focus_bound == selection_focus_)
963 return;
964
965 selection_anchor_ = anchor_bound;
966 selection_focus_ = focus_bound;
967 if (GetInputMethod())
968 GetInputMethod()->OnCaretBoundsChanged(this);
969
970 if (touch_editing_client_) {
971 touch_editing_client_->OnSelectionOrCursorChanged(
972 anchor_bound, focus_bound);
973 }
974 } 940 }
975 941
976 void RenderWidgetHostViewAura::CopyFromCompositingSurface( 942 void RenderWidgetHostViewAura::CopyFromCompositingSurface(
977 const gfx::Rect& src_subrect, 943 const gfx::Rect& src_subrect,
978 const gfx::Size& dst_size, 944 const gfx::Size& dst_size,
979 ReadbackRequestCallback& callback, 945 ReadbackRequestCallback& callback,
980 const SkColorType color_type) { 946 const SkColorType color_type) {
981 delegated_frame_host_->CopyFromCompositingSurface( 947 delegated_frame_host_->CopyFromCompositingSurface(
982 src_subrect, dst_size, callback, color_type); 948 src_subrect, dst_size, callback, color_type);
983 } 949 }
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
1052 scoped_ptr<cc::CompositorFrame> frame) { 1018 scoped_ptr<cc::CompositorFrame> frame) {
1053 TRACE_EVENT0("content", "RenderWidgetHostViewAura::OnSwapCompositorFrame"); 1019 TRACE_EVENT0("content", "RenderWidgetHostViewAura::OnSwapCompositorFrame");
1054 1020
1055 last_scroll_offset_ = frame->metadata.root_scroll_offset; 1021 last_scroll_offset_ = frame->metadata.root_scroll_offset;
1056 if (frame->delegated_frame_data) { 1022 if (frame->delegated_frame_data) {
1057 delegated_frame_host_->SwapDelegatedFrame( 1023 delegated_frame_host_->SwapDelegatedFrame(
1058 output_surface_id, 1024 output_surface_id,
1059 frame->delegated_frame_data.Pass(), 1025 frame->delegated_frame_data.Pass(),
1060 frame->metadata.device_scale_factor, 1026 frame->metadata.device_scale_factor,
1061 frame->metadata.latency_info); 1027 frame->metadata.latency_info);
1028 SelectionBoundsUpdated(ui::SelectionBound(frame->metadata.selection_start),
1029 ui::SelectionBound(frame->metadata.selection_end));
1062 return; 1030 return;
1063 } 1031 }
1064 1032
1065 if (frame->software_frame_data) { 1033 if (frame->software_frame_data) {
1066 DLOG(ERROR) << "Unable to use software frame in aura"; 1034 DLOG(ERROR) << "Unable to use software frame in aura";
1067 RecordAction( 1035 RecordAction(
1068 base::UserMetricsAction("BadMessageTerminate_SharedMemoryAura")); 1036 base::UserMetricsAction("BadMessageTerminate_SharedMemoryAura"));
1069 host_->GetProcess()->ReceivedBadMessage(); 1037 host_->GetProcess()->ReceivedBadMessage();
1070 return; 1038 return;
1071 } 1039 }
1072 } 1040 }
1073 1041
1074 void RenderWidgetHostViewAura::DidStopFlinging() { 1042 void RenderWidgetHostViewAura::DidStopFlinging() {
1075 if (touch_editing_client_) 1043 if (selection_controller_)
1076 touch_editing_client_->DidStopFlinging(); 1044 selection_controller_->OnFlingCompleted();
1077 } 1045 }
1078 1046
1079 #if defined(OS_WIN) 1047 #if defined(OS_WIN)
1080 void RenderWidgetHostViewAura::SetParentNativeViewAccessible( 1048 void RenderWidgetHostViewAura::SetParentNativeViewAccessible(
1081 gfx::NativeViewAccessible accessible_parent) { 1049 gfx::NativeViewAccessible accessible_parent) {
1082 } 1050 }
1083 1051
1084 gfx::NativeViewId RenderWidgetHostViewAura::GetParentForWindowlessPlugin() 1052 gfx::NativeViewId RenderWidgetHostViewAura::GetParentForWindowlessPlugin()
1085 const { 1053 const {
1086 if (legacy_render_widget_host_HWND_) { 1054 if (legacy_render_widget_host_HWND_) {
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
1146 InputEventAckState ack_result) { 1114 InputEventAckState ack_result) {
1147 if (overscroll_controller_) { 1115 if (overscroll_controller_) {
1148 overscroll_controller_->ReceivedEventACK( 1116 overscroll_controller_->ReceivedEventACK(
1149 event, (INPUT_EVENT_ACK_STATE_CONSUMED == ack_result)); 1117 event, (INPUT_EVENT_ACK_STATE_CONSUMED == ack_result));
1150 } 1118 }
1151 } 1119 }
1152 1120
1153 void RenderWidgetHostViewAura::GestureEventAck( 1121 void RenderWidgetHostViewAura::GestureEventAck(
1154 const blink::WebGestureEvent& event, 1122 const blink::WebGestureEvent& event,
1155 InputEventAckState ack_result) { 1123 InputEventAckState ack_result) {
1156 if (touch_editing_client_)
1157 touch_editing_client_->GestureEventAck(event.type);
1158
1159 if (overscroll_controller_) { 1124 if (overscroll_controller_) {
1160 overscroll_controller_->ReceivedEventACK( 1125 overscroll_controller_->ReceivedEventACK(
1161 event, (INPUT_EVENT_ACK_STATE_CONSUMED == ack_result)); 1126 event, (INPUT_EVENT_ACK_STATE_CONSUMED == ack_result));
1162 } 1127 }
1163 } 1128 }
1164 1129
1165 void RenderWidgetHostViewAura::ProcessAckedTouchEvent( 1130 void RenderWidgetHostViewAura::ProcessAckedTouchEvent(
1166 const TouchEventWithLatencyInfo& touch, InputEventAckState ack_result) { 1131 const TouchEventWithLatencyInfo& touch, InputEventAckState ack_result) {
1167 ScopedVector<ui::TouchEvent> events; 1132 ScopedVector<ui::TouchEvent> events;
1168 if (!MakeUITouchEventsFromWebTouchEvents(touch, &events, 1133 if (!MakeUITouchEventsFromWebTouchEvents(touch, &events,
(...skipping 350 matching lines...) Expand 10 before | Expand all | Expand 10 after
1519 return gfx::Rect(origin.x(), 1484 return gfx::Rect(origin.x(),
1520 origin.y(), 1485 origin.y(),
1521 end.x() - origin.x(), 1486 end.x() - origin.x(),
1522 end.y() - origin.y()); 1487 end.y() - origin.y());
1523 } 1488 }
1524 1489
1525 return rect; 1490 return rect;
1526 } 1491 }
1527 1492
1528 gfx::Rect RenderWidgetHostViewAura::GetCaretBounds() const { 1493 gfx::Rect RenderWidgetHostViewAura::GetCaretBounds() const {
1529 gfx::Rect rect = 1494 if (selection_controller_) {
1530 ui::RectBetweenSelectionBounds(selection_anchor_, selection_focus_); 1495 const ui::SelectionBound& start = selection_controller_->start();
1531 return ConvertRectToScreen(rect); 1496 const ui::SelectionBound& end = selection_controller_->end();
1497 return ConvertRectToScreen(ui::RectBetweenSelectionBounds(start, end));
1498 }
1499 return gfx::Rect();
1532 } 1500 }
1533 1501
1534 bool RenderWidgetHostViewAura::GetCompositionCharacterBounds( 1502 bool RenderWidgetHostViewAura::GetCompositionCharacterBounds(
1535 uint32 index, 1503 uint32 index,
1536 gfx::Rect* rect) const { 1504 gfx::Rect* rect) const {
1537 DCHECK(rect); 1505 DCHECK(rect);
1538 if (index >= composition_character_bounds_.size()) 1506 if (index >= composition_character_bounds_.size())
1539 return false; 1507 return false;
1540 *rect = ConvertRectToScreen(composition_character_bounds_[index]); 1508 *rect = ConvertRectToScreen(composition_character_bounds_[index]);
1541 return true; 1509 return true;
(...skipping 178 matching lines...) Expand 10 before | Expand all | Expand 10 after
1720 const gfx::Point& location) { 1688 const gfx::Point& location) {
1721 return true; 1689 return true;
1722 } 1690 }
1723 1691
1724 bool RenderWidgetHostViewAura::CanFocus() { 1692 bool RenderWidgetHostViewAura::CanFocus() {
1725 return popup_type_ == blink::WebPopupTypeNone; 1693 return popup_type_ == blink::WebPopupTypeNone;
1726 } 1694 }
1727 1695
1728 void RenderWidgetHostViewAura::OnCaptureLost() { 1696 void RenderWidgetHostViewAura::OnCaptureLost() {
1729 host_->LostCapture(); 1697 host_->LostCapture();
1730 if (touch_editing_client_) 1698 if (selection_controller_)
1731 touch_editing_client_->EndTouchEditing(false); 1699 selection_controller_->HideAndDisallowShowingAutomatically();
1732 } 1700 }
1733 1701
1734 void RenderWidgetHostViewAura::OnPaint(gfx::Canvas* canvas) { 1702 void RenderWidgetHostViewAura::OnPaint(gfx::Canvas* canvas) {
1735 NOTREACHED(); 1703 NOTREACHED();
1736 } 1704 }
1737 1705
1738 void RenderWidgetHostViewAura::OnDeviceScaleFactorChanged( 1706 void RenderWidgetHostViewAura::OnDeviceScaleFactorChanged(
1739 float device_scale_factor) { 1707 float device_scale_factor) {
1740 if (!host_ || !window_->GetRootWindow()) 1708 if (!host_ || !window_->GetRootWindow())
1741 return; 1709 return;
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
1804 } 1772 }
1805 1773
1806 void RenderWidgetHostViewAura::GetHitTestMask(gfx::Path* mask) const { 1774 void RenderWidgetHostViewAura::GetHitTestMask(gfx::Path* mask) const {
1807 } 1775 }
1808 1776
1809 //////////////////////////////////////////////////////////////////////////////// 1777 ////////////////////////////////////////////////////////////////////////////////
1810 // RenderWidgetHostViewAura, ui::EventHandler implementation: 1778 // RenderWidgetHostViewAura, ui::EventHandler implementation:
1811 1779
1812 void RenderWidgetHostViewAura::OnKeyEvent(ui::KeyEvent* event) { 1780 void RenderWidgetHostViewAura::OnKeyEvent(ui::KeyEvent* event) {
1813 TRACE_EVENT0("input", "RenderWidgetHostViewAura::OnKeyEvent"); 1781 TRACE_EVENT0("input", "RenderWidgetHostViewAura::OnKeyEvent");
1814 if (touch_editing_client_ && touch_editing_client_->HandleInputEvent(event))
1815 return;
1816 1782
1817 if (popup_child_host_view_ && popup_child_host_view_->NeedsInputGrab()) { 1783 if (popup_child_host_view_ && popup_child_host_view_->NeedsInputGrab()) {
1818 popup_child_host_view_->OnKeyEvent(event); 1784 popup_child_host_view_->OnKeyEvent(event);
1819 if (event->handled()) 1785 if (event->handled())
1820 return; 1786 return;
1821 } 1787 }
1822 1788
1823 // We need to handle the Escape key for Pepper Flash. 1789 // We need to handle the Escape key for Pepper Flash.
1824 if (is_fullscreen_ && event->key_code() == ui::VKEY_ESCAPE) { 1790 if (is_fullscreen_ && event->key_code() == ui::VKEY_ESCAPE) {
1825 // Focus the window we were created from. 1791 // Focus the window we were created from.
(...skipping 26 matching lines...) Expand all
1852 // We don't have to communicate with an input method here. 1818 // We don't have to communicate with an input method here.
1853 NativeWebKeyboardEvent webkit_event(*event); 1819 NativeWebKeyboardEvent webkit_event(*event);
1854 ForwardKeyboardEvent(webkit_event); 1820 ForwardKeyboardEvent(webkit_event);
1855 } 1821 }
1856 event->SetHandled(); 1822 event->SetHandled();
1857 } 1823 }
1858 1824
1859 void RenderWidgetHostViewAura::OnMouseEvent(ui::MouseEvent* event) { 1825 void RenderWidgetHostViewAura::OnMouseEvent(ui::MouseEvent* event) {
1860 TRACE_EVENT0("input", "RenderWidgetHostViewAura::OnMouseEvent"); 1826 TRACE_EVENT0("input", "RenderWidgetHostViewAura::OnMouseEvent");
1861 1827
1862 if (touch_editing_client_ && touch_editing_client_->HandleInputEvent(event))
1863 return;
1864
1865 if (mouse_locked_) { 1828 if (mouse_locked_) {
1866 aura::client::CursorClient* cursor_client = 1829 aura::client::CursorClient* cursor_client =
1867 aura::client::GetCursorClient(window_->GetRootWindow()); 1830 aura::client::GetCursorClient(window_->GetRootWindow());
1868 DCHECK(!cursor_client || !cursor_client->IsCursorVisible()); 1831 DCHECK(!cursor_client || !cursor_client->IsCursorVisible());
1869 1832
1870 if (event->type() == ui::ET_MOUSEWHEEL) { 1833 if (event->type() == ui::ET_MOUSEWHEEL) {
1871 blink::WebMouseWheelEvent mouse_wheel_event = 1834 blink::WebMouseWheelEvent mouse_wheel_event =
1872 MakeWebMouseWheelEvent(static_cast<ui::MouseWheelEvent&>(*event)); 1835 MakeWebMouseWheelEvent(static_cast<ui::MouseWheelEvent&>(*event));
1873 if (mouse_wheel_event.deltaX != 0 || mouse_wheel_event.deltaY != 0) 1836 if (mouse_wheel_event.deltaX != 0 || mouse_wheel_event.deltaY != 0)
1874 host_->ForwardWheelEvent(mouse_wheel_event); 1837 host_->ForwardWheelEvent(mouse_wheel_event);
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after
1993 event->ConvertLocationToTarget(window_, window_->parent()); 1956 event->ConvertLocationToTarget(window_, window_->parent());
1994 window_->parent()->delegate()->OnMouseEvent(event); 1957 window_->parent()->delegate()->OnMouseEvent(event);
1995 } 1958 }
1996 1959
1997 if (!IsXButtonUpEvent(event)) 1960 if (!IsXButtonUpEvent(event))
1998 event->SetHandled(); 1961 event->SetHandled();
1999 } 1962 }
2000 1963
2001 void RenderWidgetHostViewAura::OnScrollEvent(ui::ScrollEvent* event) { 1964 void RenderWidgetHostViewAura::OnScrollEvent(ui::ScrollEvent* event) {
2002 TRACE_EVENT0("input", "RenderWidgetHostViewAura::OnScrollEvent"); 1965 TRACE_EVENT0("input", "RenderWidgetHostViewAura::OnScrollEvent");
2003 if (touch_editing_client_ && touch_editing_client_->HandleInputEvent(event))
2004 return;
2005 1966
2006 if (event->type() == ui::ET_SCROLL) { 1967 if (event->type() == ui::ET_SCROLL) {
2007 #if !defined(OS_WIN) 1968 #if !defined(OS_WIN)
2008 // TODO(ananta) 1969 // TODO(ananta)
2009 // Investigate if this is true for Windows 8 Metro ASH as well. 1970 // Investigate if this is true for Windows 8 Metro ASH as well.
2010 if (event->finger_count() != 2) 1971 if (event->finger_count() != 2)
2011 return; 1972 return;
2012 #endif 1973 #endif
2013 blink::WebGestureEvent gesture_event = 1974 blink::WebGestureEvent gesture_event =
2014 MakeWebGestureEventFlingCancel(); 1975 MakeWebGestureEventFlingCancel();
2015 host_->ForwardGestureEvent(gesture_event); 1976 host_->ForwardGestureEvent(gesture_event);
2016 blink::WebMouseWheelEvent mouse_wheel_event = 1977 blink::WebMouseWheelEvent mouse_wheel_event =
2017 MakeWebMouseWheelEvent(*event); 1978 MakeWebMouseWheelEvent(*event);
2018 host_->ForwardWheelEvent(mouse_wheel_event); 1979 host_->ForwardWheelEvent(mouse_wheel_event);
2019 RecordAction(base::UserMetricsAction("TrackpadScroll")); 1980 RecordAction(base::UserMetricsAction("TrackpadScroll"));
2020 } else if (event->type() == ui::ET_SCROLL_FLING_START || 1981 } else if (event->type() == ui::ET_SCROLL_FLING_START ||
2021 event->type() == ui::ET_SCROLL_FLING_CANCEL) { 1982 event->type() == ui::ET_SCROLL_FLING_CANCEL) {
2022 blink::WebGestureEvent gesture_event = MakeWebGestureEvent(*event); 1983 blink::WebGestureEvent gesture_event = MakeWebGestureEvent(*event);
2023 host_->ForwardGestureEvent(gesture_event); 1984 host_->ForwardGestureEvent(gesture_event);
2024 if (event->type() == ui::ET_SCROLL_FLING_START) 1985 if (event->type() == ui::ET_SCROLL_FLING_START)
2025 RecordAction(base::UserMetricsAction("TrackpadScrollFling")); 1986 RecordAction(base::UserMetricsAction("TrackpadScrollFling"));
2026 } 1987 }
2027 1988
2028 event->SetHandled(); 1989 event->SetHandled();
2029 } 1990 }
2030 1991
2031 void RenderWidgetHostViewAura::OnTouchEvent(ui::TouchEvent* event) { 1992 void RenderWidgetHostViewAura::OnTouchEvent(ui::TouchEvent* event) {
2032 TRACE_EVENT0("input", "RenderWidgetHostViewAura::OnTouchEvent"); 1993 TRACE_EVENT0("input", "RenderWidgetHostViewAura::OnTouchEvent");
2033 if (touch_editing_client_ && touch_editing_client_->HandleInputEvent(event)) 1994
2034 return; 1995 if (selection_controller_) {
1996 selection_controller_->HandleTouchEvent(event);
1997 if (event->handled())
1998 return;
1999 }
2035 2000
2036 // Update the touch event first. 2001 // Update the touch event first.
2037 if (!pointer_state_.OnTouch(*event)) { 2002 if (!pointer_state_.OnTouch(*event)) {
2038 event->StopPropagation(); 2003 event->StopPropagation();
2039 return; 2004 return;
2040 } 2005 }
2041 2006
2042 blink::WebTouchEvent touch_event = CreateWebTouchEventFromMotionEvent( 2007 blink::WebTouchEvent touch_event = CreateWebTouchEventFromMotionEvent(
2043 pointer_state_, event->may_cause_scrolling()); 2008 pointer_state_, event->may_cause_scrolling());
2044 pointer_state_.CleanupRemovedTouchPoints(*event); 2009 pointer_state_.CleanupRemovedTouchPoints(*event);
2045 2010
2046 // Forward the touch event only if a touch point was updated, and 2011 // Forward the touch event only if a touch point was updated, and
2047 // there's a touch-event handler in the page, and no other 2012 // there's a touch-event handler in the page, and no other
2048 // touch-event is in the queue. It is important to always mark 2013 // touch-event is in the queue. It is important to always mark
2049 // events as being handled asynchronously if there is a touch-event 2014 // events as being handled asynchronously if there is a touch-event
2050 // handler in the page, or some touch-event is already in the queue, 2015 // handler in the page, or some touch-event is already in the queue,
2051 // even if no point has been updated. This ensures that this event 2016 // even if no point has been updated. This ensures that this event
2052 // does not get processed by the gesture recognizer before events 2017 // does not get processed by the gesture recognizer before events
2053 // currently awaiting dispatch in the touch queue. 2018 // currently awaiting dispatch in the touch queue.
2054 if (host_->ShouldForwardTouchEvent()) { 2019 if (host_->ShouldForwardTouchEvent()) {
2055 event->DisableSynchronousHandling(); 2020 event->DisableSynchronousHandling();
2056 host_->ForwardTouchEventWithLatencyInfo(touch_event, *event->latency()); 2021 host_->ForwardTouchEventWithLatencyInfo(touch_event, *event->latency());
2057 } 2022 }
2058 } 2023 }
2059 2024
2060 void RenderWidgetHostViewAura::OnGestureEvent(ui::GestureEvent* event) { 2025 void RenderWidgetHostViewAura::OnGestureEvent(ui::GestureEvent* event) {
2061 TRACE_EVENT0("input", "RenderWidgetHostViewAura::OnGestureEvent"); 2026 TRACE_EVENT0("input", "RenderWidgetHostViewAura::OnGestureEvent");
2027
2028 if (selection_controller_) {
2029 selection_controller_->HandleGestureEvent(event);
2030 if (event->handled())
2031 return;
2032 }
2033
2062 if ((event->type() == ui::ET_GESTURE_PINCH_BEGIN || 2034 if ((event->type() == ui::ET_GESTURE_PINCH_BEGIN ||
2063 event->type() == ui::ET_GESTURE_PINCH_UPDATE || 2035 event->type() == ui::ET_GESTURE_PINCH_UPDATE ||
2064 event->type() == ui::ET_GESTURE_PINCH_END) && !pinch_zoom_enabled_) { 2036 event->type() == ui::ET_GESTURE_PINCH_END) && !pinch_zoom_enabled_) {
2065 event->SetHandled(); 2037 event->SetHandled();
2066 return; 2038 return;
2067 } 2039 }
2068 2040
2069 if (touch_editing_client_ && touch_editing_client_->HandleInputEvent(event))
2070 return;
2071
2072 // Confirm existing composition text on TAP gesture, to make sure the input 2041 // Confirm existing composition text on TAP gesture, to make sure the input
2073 // caret won't be moved with an ongoing composition text. 2042 // caret won't be moved with an ongoing composition text.
2074 if (event->type() == ui::ET_GESTURE_TAP) 2043 if (event->type() == ui::ET_GESTURE_TAP)
2075 FinishImeCompositionSession(); 2044 FinishImeCompositionSession();
2076 2045
2077 RenderViewHostDelegate* delegate = NULL; 2046 RenderViewHostDelegate* delegate = NULL;
2078 if (host_->IsRenderView()) 2047 if (host_->IsRenderView())
2079 delegate = RenderViewHost::From(host_)->GetDelegate(); 2048 delegate = RenderViewHost::From(host_)->GetDelegate();
2080 2049
2081 if (delegate && event->type() == ui::ET_GESTURE_BEGIN && 2050 if (delegate && event->type() == ui::ET_GESTURE_BEGIN &&
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after
2184 host_->GetRootBrowserAccessibilityManager(); 2153 host_->GetRootBrowserAccessibilityManager();
2185 if (manager) 2154 if (manager)
2186 manager->OnWindowFocused(); 2155 manager->OnWindowFocused();
2187 } else if (window_ == lost_focus) { 2156 } else if (window_ == lost_focus) {
2188 host_->SetActive(false); 2157 host_->SetActive(false);
2189 host_->Blur(); 2158 host_->Blur();
2190 2159
2191 DetachFromInputMethod(); 2160 DetachFromInputMethod();
2192 host_->SetInputMethodActive(false); 2161 host_->SetInputMethodActive(false);
2193 2162
2194 if (touch_editing_client_) 2163 if (selection_controller_)
2195 touch_editing_client_->EndTouchEditing(false); 2164 selection_controller_->HideAndDisallowShowingAutomatically();
2196 2165
2197 if (overscroll_controller_) 2166 if (overscroll_controller_)
2198 overscroll_controller_->Cancel(); 2167 overscroll_controller_->Cancel();
2199 2168
2200 BrowserAccessibilityManager* manager = 2169 BrowserAccessibilityManager* manager =
2201 host_->GetRootBrowserAccessibilityManager(); 2170 host_->GetRootBrowserAccessibilityManager();
2202 if (manager) 2171 if (manager)
2203 manager->OnWindowBlurred(); 2172 manager->OnWindowBlurred();
2204 2173
2205 // If we lose the focus while fullscreen, close the window; Pepper Flash 2174 // If we lose the focus while fullscreen, close the window; Pepper Flash
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
2242 TRACE_EVENT1("ui", "RenderWidgetHostViewAura::OnHostMoved", 2211 TRACE_EVENT1("ui", "RenderWidgetHostViewAura::OnHostMoved",
2243 "new_origin", new_origin.ToString()); 2212 "new_origin", new_origin.ToString());
2244 2213
2245 UpdateScreenInfo(window_); 2214 UpdateScreenInfo(window_);
2246 } 2215 }
2247 2216
2248 //////////////////////////////////////////////////////////////////////////////// 2217 ////////////////////////////////////////////////////////////////////////////////
2249 // RenderWidgetHostViewAura, private: 2218 // RenderWidgetHostViewAura, private:
2250 2219
2251 RenderWidgetHostViewAura::~RenderWidgetHostViewAura() { 2220 RenderWidgetHostViewAura::~RenderWidgetHostViewAura() {
2252 if (touch_editing_client_) 2221 selection_controller_.reset();
2253 touch_editing_client_->OnViewDestroyed(); 2222 selection_controller_client_.reset();
2254
2255 delegated_frame_host_.reset(); 2223 delegated_frame_host_.reset();
2256 window_observer_.reset(); 2224 window_observer_.reset();
2257 if (window_->GetHost()) 2225 if (window_->GetHost())
2258 window_->GetHost()->RemoveObserver(this); 2226 window_->GetHost()->RemoveObserver(this);
2259 UnlockMouse(); 2227 UnlockMouse();
2260 if (popup_parent_host_view_) { 2228 if (popup_parent_host_view_) {
2261 DCHECK(popup_parent_host_view_->popup_child_host_view_ == NULL || 2229 DCHECK(popup_parent_host_view_->popup_child_host_view_ == NULL ||
2262 popup_parent_host_view_->popup_child_host_view_ == this); 2230 popup_parent_host_view_->popup_child_host_view_ == this);
2263 popup_parent_host_view_->popup_child_host_view_ = NULL; 2231 popup_parent_host_view_->popup_child_host_view_ = NULL;
2264 } 2232 }
(...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after
2394 host_->SendCursorVisibilityState(is_visible); 2362 host_->SendCursorVisibilityState(is_visible);
2395 } 2363 }
2396 2364
2397 void RenderWidgetHostViewAura::SetOverscrollControllerEnabled(bool enabled) { 2365 void RenderWidgetHostViewAura::SetOverscrollControllerEnabled(bool enabled) {
2398 if (!enabled) 2366 if (!enabled)
2399 overscroll_controller_.reset(); 2367 overscroll_controller_.reset();
2400 else if (!overscroll_controller_) 2368 else if (!overscroll_controller_)
2401 overscroll_controller_.reset(new OverscrollController()); 2369 overscroll_controller_.reset(new OverscrollController());
2402 } 2370 }
2403 2371
2372 void RenderWidgetHostViewAura::InitSelectionController(
2373 ui::TouchSelectionControllerAuraClient* selection_controller_client) {
2374 DCHECK(!selection_controller_client_);
2375 selection_controller_client_.reset(selection_controller_client);
2376 selection_controller_.reset(
2377 new ui::TouchSelectionControllerAura(selection_controller_client));
2378 }
2379
2404 void RenderWidgetHostViewAura::SnapToPhysicalPixelBoundary() { 2380 void RenderWidgetHostViewAura::SnapToPhysicalPixelBoundary() {
2405 // The top left corner of our view in window coordinates might not land on a 2381 // The top left corner of our view in window coordinates might not land on a
2406 // device pixel boundary if we have a non-integer device scale. In that case, 2382 // device pixel boundary if we have a non-integer device scale. In that case,
2407 // to avoid the web contents area looking blurry we translate the web contents 2383 // to avoid the web contents area looking blurry we translate the web contents
2408 // in the +x, +y direction to land on the nearest pixel boundary. This may 2384 // in the +x, +y direction to land on the nearest pixel boundary. This may
2409 // cause the bottom and right edges to be clipped slightly, but that's ok. 2385 // cause the bottom and right edges to be clipped slightly, but that's ok.
2410 aura::Window* snapped = NULL; 2386 aura::Window* snapped = NULL;
2411 // On desktop, use the root window. On alternative environment (ash), 2387 // On desktop, use the root window. On alternative environment (ash),
2412 // use the toplevel window which must be already snapped. 2388 // use the toplevel window which must be already snapped.
2413 if (gfx::Screen::GetScreenFor(window_) != 2389 if (gfx::Screen::GetScreenFor(window_) !=
(...skipping 12 matching lines...) Expand all
2426 if (HasDisplayPropertyChanged(window_)) 2402 if (HasDisplayPropertyChanged(window_))
2427 host_->InvalidateScreenInfo(); 2403 host_->InvalidateScreenInfo();
2428 2404
2429 SnapToPhysicalPixelBoundary(); 2405 SnapToPhysicalPixelBoundary();
2430 // Don't recursively call SetBounds if this bounds update is the result of 2406 // Don't recursively call SetBounds if this bounds update is the result of
2431 // a Window::SetBoundsInternal call. 2407 // a Window::SetBoundsInternal call.
2432 if (!in_bounds_changed_) 2408 if (!in_bounds_changed_)
2433 window_->SetBounds(rect); 2409 window_->SetBounds(rect);
2434 host_->WasResized(); 2410 host_->WasResized();
2435 delegated_frame_host_->WasResized(); 2411 delegated_frame_host_->WasResized();
2436 if (touch_editing_client_) {
2437 touch_editing_client_->OnSelectionOrCursorChanged(selection_anchor_,
2438 selection_focus_);
2439 }
2440 #if defined(OS_WIN) 2412 #if defined(OS_WIN)
2441 // Create the legacy dummy window which corresponds to the bounds of the 2413 // Create the legacy dummy window which corresponds to the bounds of the
2442 // webcontents. This will be passed as the container window for windowless 2414 // webcontents. This will be passed as the container window for windowless
2443 // plugins. 2415 // plugins.
2444 // Plugins like Flash assume the container window which is returned via the 2416 // Plugins like Flash assume the container window which is returned via the
2445 // NPNVnetscapeWindow property corresponds to the bounds of the webpage. 2417 // NPNVnetscapeWindow property corresponds to the bounds of the webpage.
2446 // This is not true in Aura where we have only HWND which is the main Aura 2418 // This is not true in Aura where we have only HWND which is the main Aura
2447 // window. If we return this window to plugins like Flash then it causes the 2419 // window. If we return this window to plugins like Flash then it causes the
2448 // coordinate translations done by these plugins to break. 2420 // coordinate translations done by these plugins to break.
2449 // Additonally the legacy dummy window is needed for accessibility and for 2421 // Additonally the legacy dummy window is needed for accessibility and for
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after
2573 } 2545 }
2574 #endif 2546 #endif
2575 2547
2576 host_->ForwardKeyboardEvent(event); 2548 host_->ForwardKeyboardEvent(event);
2577 } 2549 }
2578 2550
2579 SkColorType RenderWidgetHostViewAura::PreferredReadbackFormat() { 2551 SkColorType RenderWidgetHostViewAura::PreferredReadbackFormat() {
2580 return kN32_SkColorType; 2552 return kN32_SkColorType;
2581 } 2553 }
2582 2554
2555 void RenderWidgetHostViewAura::SelectionBoundsUpdated(
2556 const ui::SelectionBound& start,
2557 const ui::SelectionBound& end) {
2558 if (selection_controller_)
2559 selection_controller_->OnSelectionBoundsUpdated(start, end);
2560 if (GetInputMethod())
2561 GetInputMethod()->OnCaretBoundsChanged(this);
2562 }
2563
2583 //////////////////////////////////////////////////////////////////////////////// 2564 ////////////////////////////////////////////////////////////////////////////////
2584 // DelegatedFrameHost, public: 2565 // DelegatedFrameHost, public:
2585 2566
2586 ui::Compositor* RenderWidgetHostViewAura::GetCompositor() const { 2567 ui::Compositor* RenderWidgetHostViewAura::GetCompositor() const {
2587 aura::WindowTreeHost* host = window_->GetHost(); 2568 aura::WindowTreeHost* host = window_->GetHost();
2588 return host ? host->compositor() : NULL; 2569 return host ? host->compositor() : NULL;
2589 } 2570 }
2590 2571
2591 ui::Layer* RenderWidgetHostViewAura::GetLayer() { 2572 ui::Layer* RenderWidgetHostViewAura::GetLayer() {
2592 return window_->layer(); 2573 return window_->layer();
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
2629 2610
2630 //////////////////////////////////////////////////////////////////////////////// 2611 ////////////////////////////////////////////////////////////////////////////////
2631 // RenderWidgetHostViewBase, public: 2612 // RenderWidgetHostViewBase, public:
2632 2613
2633 // static 2614 // static
2634 void RenderWidgetHostViewBase::GetDefaultScreenInfo(WebScreenInfo* results) { 2615 void RenderWidgetHostViewBase::GetDefaultScreenInfo(WebScreenInfo* results) {
2635 GetScreenInfoForWindow(results, NULL); 2616 GetScreenInfoForWindow(results, NULL);
2636 } 2617 }
2637 2618
2638 } // namespace content 2619 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698