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

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

Issue 335943002: [Android] Composited selection handle rendering (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@input_native_handles_final
Patch Set: Clean up paste popup interaction Created 6 years, 5 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_android.h" 5 #include "content/browser/renderer_host/render_widget_host_view_android.h"
6 6
7 #include <android/bitmap.h> 7 #include <android/bitmap.h>
8 8
9 #include "base/basictypes.h" 9 #include "base/basictypes.h"
10 #include "base/bind.h" 10 #include "base/bind.h"
11 #include "base/callback_helpers.h" 11 #include "base/callback_helpers.h"
12 #include "base/command_line.h" 12 #include "base/command_line.h"
13 #include "base/logging.h" 13 #include "base/logging.h"
14 #include "base/message_loop/message_loop.h" 14 #include "base/message_loop/message_loop.h"
15 #include "base/metrics/histogram.h" 15 #include "base/metrics/histogram.h"
16 #include "base/strings/utf_string_conversions.h" 16 #include "base/strings/utf_string_conversions.h"
17 #include "base/sys_info.h" 17 #include "base/sys_info.h"
18 #include "base/threading/worker_pool.h" 18 #include "base/threading/worker_pool.h"
19 #include "cc/base/latency_info_swap_promise.h" 19 #include "cc/base/latency_info_swap_promise.h"
20 #include "cc/layers/delegated_frame_provider.h" 20 #include "cc/layers/delegated_frame_provider.h"
21 #include "cc/layers/delegated_renderer_layer.h" 21 #include "cc/layers/delegated_renderer_layer.h"
22 #include "cc/layers/layer.h" 22 #include "cc/layers/layer.h"
23 #include "cc/output/compositor_frame.h" 23 #include "cc/output/compositor_frame.h"
24 #include "cc/output/compositor_frame_ack.h" 24 #include "cc/output/compositor_frame_ack.h"
25 #include "cc/output/copy_output_request.h" 25 #include "cc/output/copy_output_request.h"
26 #include "cc/output/copy_output_result.h" 26 #include "cc/output/copy_output_result.h"
27 #include "cc/resources/single_release_callback.h" 27 #include "cc/resources/single_release_callback.h"
28 #include "cc/trees/layer_tree_host.h" 28 #include "cc/trees/layer_tree_host.h"
29 #include "content/browser/accessibility/browser_accessibility_manager_android.h" 29 #include "content/browser/accessibility/browser_accessibility_manager_android.h"
30 #include "content/browser/android/composited_touch_handle_drawable.h"
30 #include "content/browser/android/content_view_core_impl.h" 31 #include "content/browser/android/content_view_core_impl.h"
31 #include "content/browser/android/in_process/synchronous_compositor_impl.h" 32 #include "content/browser/android/in_process/synchronous_compositor_impl.h"
32 #include "content/browser/android/overscroll_glow.h" 33 #include "content/browser/android/overscroll_glow.h"
33 #include "content/browser/devtools/render_view_devtools_agent_host.h" 34 #include "content/browser/devtools/render_view_devtools_agent_host.h"
34 #include "content/browser/gpu/compositor_util.h" 35 #include "content/browser/gpu/compositor_util.h"
35 #include "content/browser/gpu/gpu_data_manager_impl.h" 36 #include "content/browser/gpu/gpu_data_manager_impl.h"
36 #include "content/browser/gpu/gpu_process_host_ui_shim.h" 37 #include "content/browser/gpu/gpu_process_host_ui_shim.h"
37 #include "content/browser/gpu/gpu_surface_tracker.h" 38 #include "content/browser/gpu/gpu_surface_tracker.h"
38 #include "content/browser/media/media_web_contents_observer.h" 39 #include "content/browser/media/media_web_contents_observer.h"
39 #include "content/browser/renderer_host/compositor_impl_android.h" 40 #include "content/browser/renderer_host/compositor_impl_android.h"
40 #include "content/browser/renderer_host/dip_util.h" 41 #include "content/browser/renderer_host/dip_util.h"
41 #include "content/browser/renderer_host/image_transport_factory_android.h" 42 #include "content/browser/renderer_host/image_transport_factory_android.h"
42 #include "content/browser/renderer_host/input/synthetic_gesture_target_android.h " 43 #include "content/browser/renderer_host/input/synthetic_gesture_target_android.h "
44 #include "content/browser/renderer_host/input/touch_selection_controller.h"
43 #include "content/browser/renderer_host/input/web_input_event_builders_android.h " 45 #include "content/browser/renderer_host/input/web_input_event_builders_android.h "
44 #include "content/browser/renderer_host/input/web_input_event_util.h" 46 #include "content/browser/renderer_host/input/web_input_event_util.h"
45 #include "content/browser/renderer_host/render_process_host_impl.h" 47 #include "content/browser/renderer_host/render_process_host_impl.h"
46 #include "content/browser/renderer_host/render_view_host_impl.h" 48 #include "content/browser/renderer_host/render_view_host_impl.h"
47 #include "content/browser/renderer_host/render_widget_host_impl.h" 49 #include "content/browser/renderer_host/render_widget_host_impl.h"
48 #include "content/common/gpu/client/gl_helper.h" 50 #include "content/common/gpu/client/gl_helper.h"
49 #include "content/common/gpu/gpu_messages.h" 51 #include "content/common/gpu/gpu_messages.h"
50 #include "content/common/input/did_overscroll_params.h" 52 #include "content/common/input/did_overscroll_params.h"
51 #include "content/common/input_messages.h" 53 #include "content/common/input_messages.h"
52 #include "content/common/view_messages.h" 54 #include "content/common/view_messages.h"
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
145 return params; 147 return params;
146 } 148 }
147 149
148 ui::GestureProvider::Config CreateGestureProviderConfig() { 150 ui::GestureProvider::Config CreateGestureProviderConfig() {
149 ui::GestureProvider::Config config = ui::DefaultGestureProviderConfig(); 151 ui::GestureProvider::Config config = ui::DefaultGestureProviderConfig();
150 config.disable_click_delay = 152 config.disable_click_delay =
151 CommandLine::ForCurrentProcess()->HasSwitch(switches::kDisableClickDelay); 153 CommandLine::ForCurrentProcess()->HasSwitch(switches::kDisableClickDelay);
152 return config; 154 return config;
153 } 155 }
154 156
157 TouchHandleOrientation SelectionBoundTypeToTouchHandleOrientation(
158 cc::SelectionBoundType bound_type) {
159 switch (bound_type) {
160 case cc::SELECTION_BOUND_LEFT:
161 return TOUCH_HANDLE_LEFT;
162 case cc::SELECTION_BOUND_RIGHT:
163 return TOUCH_HANDLE_RIGHT;
164 case cc::SELECTION_BOUND_CENTER:
165 return TOUCH_HANDLE_CENTER;
166 case cc::SELECTION_BOUND_EMPTY:
167 return TOUCH_HANDLE_ORIENTATION_UNDEFINED;
168 }
169 }
170
155 bool HasFixedPageScale(const cc::CompositorFrameMetadata& frame_metadata) { 171 bool HasFixedPageScale(const cc::CompositorFrameMetadata& frame_metadata) {
156 return frame_metadata.min_page_scale_factor == 172 return frame_metadata.min_page_scale_factor ==
157 frame_metadata.max_page_scale_factor; 173 frame_metadata.max_page_scale_factor;
158 } 174 }
159 175
160 bool HasMobileViewport(const cc::CompositorFrameMetadata& frame_metadata) { 176 bool HasMobileViewport(const cc::CompositorFrameMetadata& frame_metadata) {
161 float window_width_dip = 177 float window_width_dip =
162 frame_metadata.page_scale_factor * frame_metadata.viewport_size.width(); 178 frame_metadata.page_scale_factor * frame_metadata.viewport_size.width();
163 float content_width_css = frame_metadata.root_layer_size.width(); 179 float content_width_css = frame_metadata.root_layer_size.width();
164 return content_width_css <= window_width_dip + kMobileViewportWidthEpsilon; 180 return content_width_css <= window_width_dip + kMobileViewportWidthEpsilon;
(...skipping 385 matching lines...) Expand 10 before | Expand all | Expand 10 after
550 const gfx::Rect rect) { 566 const gfx::Rect rect) {
551 if (content_view_core_) 567 if (content_view_core_)
552 content_view_core_->OnSmartClipDataExtracted(rect, result); 568 content_view_core_->OnSmartClipDataExtracted(rect, result);
553 } 569 }
554 570
555 bool RenderWidgetHostViewAndroid::OnTouchEvent( 571 bool RenderWidgetHostViewAndroid::OnTouchEvent(
556 const ui::MotionEvent& event) { 572 const ui::MotionEvent& event) {
557 if (!host_) 573 if (!host_)
558 return false; 574 return false;
559 575
576 if (selection_controller_ &&
577 selection_controller_->WillHandleTouchEvent(event))
578 return true;
579
560 if (!gesture_provider_.OnTouchEvent(event)) 580 if (!gesture_provider_.OnTouchEvent(event))
561 return false; 581 return false;
562 582
563 if (gesture_text_selector_.OnTouchEvent(event)) { 583 if (gesture_text_selector_.OnTouchEvent(event)) {
564 gesture_provider_.OnTouchEventAck(false); 584 gesture_provider_.OnTouchEventAck(false);
565 return true; 585 return true;
566 } 586 }
567 587
568 // Short-circuit touch forwarding if no touch handlers exist. 588 // Short-circuit touch forwarding if no touch handlers exist.
569 if (!host_->ShouldForwardTouchEvent()) { 589 if (!host_->ShouldForwardTouchEvent()) {
570 const bool event_consumed = false; 590 const bool event_consumed = false;
571 gesture_provider_.OnTouchEventAck(event_consumed); 591 gesture_provider_.OnTouchEventAck(event_consumed);
572 return true; 592 return true;
573 } 593 }
574 594
575 SendTouchEvent(CreateWebTouchEventFromMotionEvent(event)); 595 SendTouchEvent(CreateWebTouchEventFromMotionEvent(event));
576 return true; 596 return true;
577 } 597 }
578 598
599 bool RenderWidgetHostViewAndroid::OnTouchHandleEvent(
600 const ui::MotionEvent& event) {
601 return selection_controller_ &&
602 selection_controller_->WillHandleTouchEvent(event);
603 }
604
579 void RenderWidgetHostViewAndroid::ResetGestureDetection() { 605 void RenderWidgetHostViewAndroid::ResetGestureDetection() {
580 const ui::MotionEvent* current_down_event = 606 const ui::MotionEvent* current_down_event =
581 gesture_provider_.GetCurrentDownEvent(); 607 gesture_provider_.GetCurrentDownEvent();
582 if (!current_down_event) 608 if (!current_down_event)
583 return; 609 return;
584 610
585 scoped_ptr<ui::MotionEvent> cancel_event = current_down_event->Cancel(); 611 scoped_ptr<ui::MotionEvent> cancel_event = current_down_event->Cancel();
586 DCHECK(cancel_event); 612 DCHECK(cancel_event);
587 OnTouchEvent(*cancel_event); 613 OnTouchEvent(*cancel_event);
588 } 614 }
589 615
590 void RenderWidgetHostViewAndroid::SetDoubleTapSupportEnabled(bool enabled) { 616 void RenderWidgetHostViewAndroid::SetDoubleTapSupportEnabled(bool enabled) {
591 gesture_provider_.SetDoubleTapSupportForPlatformEnabled(enabled); 617 gesture_provider_.SetDoubleTapSupportForPlatformEnabled(enabled);
592 } 618 }
593 619
594 void RenderWidgetHostViewAndroid::SetMultiTouchZoomSupportEnabled( 620 void RenderWidgetHostViewAndroid::SetMultiTouchZoomSupportEnabled(
595 bool enabled) { 621 bool enabled) {
596 gesture_provider_.SetMultiTouchZoomSupportEnabled(enabled); 622 gesture_provider_.SetMultiTouchZoomSupportEnabled(enabled);
597 } 623 }
598 624
599 void RenderWidgetHostViewAndroid::ImeCancelComposition() { 625 void RenderWidgetHostViewAndroid::ImeCancelComposition() {
600 ime_adapter_android_.CancelComposition(); 626 ime_adapter_android_.CancelComposition();
601 } 627 }
602 628
603 void RenderWidgetHostViewAndroid::FocusedNodeChanged(bool is_editable_node) { 629 void RenderWidgetHostViewAndroid::FocusedNodeChanged(bool is_editable_node) {
604 ime_adapter_android_.FocusedNodeChanged(is_editable_node); 630 ime_adapter_android_.FocusedNodeChanged(is_editable_node);
631 if (selection_controller_)
632 selection_controller_->OnSelectionEditable(is_editable_node);
605 } 633 }
606 634
607 void RenderWidgetHostViewAndroid::RenderProcessGone( 635 void RenderWidgetHostViewAndroid::RenderProcessGone(
608 base::TerminationStatus status, int error_code) { 636 base::TerminationStatus status, int error_code) {
609 Destroy(); 637 Destroy();
610 } 638 }
611 639
612 void RenderWidgetHostViewAndroid::Destroy() { 640 void RenderWidgetHostViewAndroid::Destroy() {
613 RemoveLayers(); 641 RemoveLayers();
614 SetContentViewCore(NULL); 642 SetContentViewCore(NULL);
(...skipping 329 matching lines...) Expand 10 before | Expand all | Expand 10 after
944 static_cast<RenderViewDevToolsAgentHost*>(dtah.get()), 972 static_cast<RenderViewDevToolsAgentHost*>(dtah.get()),
945 frame_metadata)); 973 frame_metadata));
946 } 974 }
947 } 975 }
948 976
949 void RenderWidgetHostViewAndroid::SetOverlayVideoMode(bool enabled) { 977 void RenderWidgetHostViewAndroid::SetOverlayVideoMode(bool enabled) {
950 if (layer_) 978 if (layer_)
951 layer_->SetContentsOpaque(!enabled); 979 layer_->SetContentsOpaque(!enabled);
952 } 980 }
953 981
982 void RenderWidgetHostViewAndroid::SetNeedsAnimate() {
983 DCHECK(content_view_core_);
984 content_view_core_->GetWindowAndroid()->SetNeedsAnimate();
985 }
986
987 void RenderWidgetHostViewAndroid::MoveCaret(const gfx::PointF& position) {
988 MoveCaret(gfx::Point(position.x(), position.y()));
989 }
990
991 void RenderWidgetHostViewAndroid::SelectBetweenCoordinates(
992 const gfx::PointF& start,
993 const gfx::PointF& end) {
994 DCHECK(content_view_core_);
995 content_view_core_->SelectBetweenCoordinates(start, end);
996 }
997
998 void RenderWidgetHostViewAndroid::OnSelectionEvent(
999 SelectionEventType event,
1000 const gfx::PointF& position) {
1001 DCHECK(content_view_core_);
1002 content_view_core_->OnSelectionEvent(event, position);
1003 }
1004
1005 scoped_ptr<TouchHandleDrawable> RenderWidgetHostViewAndroid::CreateDrawable() {
1006 DCHECK(content_view_core_);
1007 if (using_synchronous_compositor_)
1008 return content_view_core_->CreatePopupTouchHandleDrawable();
1009
1010 return scoped_ptr<TouchHandleDrawable>(new CompositedTouchHandleDrawable(
1011 content_view_core_->GetLayer(), GetDpiScale()));
1012 }
1013
954 void RenderWidgetHostViewAndroid::SynchronousCopyContents( 1014 void RenderWidgetHostViewAndroid::SynchronousCopyContents(
955 const gfx::Rect& src_subrect_in_pixel, 1015 const gfx::Rect& src_subrect_in_pixel,
956 const gfx::Size& dst_size_in_pixel, 1016 const gfx::Size& dst_size_in_pixel,
957 const base::Callback<void(bool, const SkBitmap&)>& callback, 1017 const base::Callback<void(bool, const SkBitmap&)>& callback,
958 const SkBitmap::Config config) { 1018 const SkBitmap::Config config) {
959 SynchronousCompositor* compositor = 1019 SynchronousCompositor* compositor =
960 SynchronousCompositorImpl::FromID(host_->GetProcess()->GetID(), 1020 SynchronousCompositorImpl::FromID(host_->GetProcess()->GetID(),
961 host_->GetRoutingID()); 1021 host_->GetRoutingID());
962 if (!compositor) { 1022 if (!compositor) {
963 callback.Run(false, SkBitmap()); 1023 callback.Run(false, SkBitmap());
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
1012 rvhi->media_web_contents_observer()->OnFrameInfoUpdated(); 1072 rvhi->media_web_contents_observer()->OnFrameInfoUpdated();
1013 } 1073 }
1014 #endif // defined(VIDEO_HOLE) 1074 #endif // defined(VIDEO_HOLE)
1015 } 1075 }
1016 1076
1017 void RenderWidgetHostViewAndroid::UpdateSelectionBounds( 1077 void RenderWidgetHostViewAndroid::UpdateSelectionBounds(
1018 const cc::CompositorFrameMetadata& frame_metadata) { 1078 const cc::CompositorFrameMetadata& frame_metadata) {
1019 if (!content_view_core_) 1079 if (!content_view_core_)
1020 return; 1080 return;
1021 1081
1022 const cc::ViewportSelectionBound& anchor = frame_metadata.selection_anchor; 1082 const cc::ViewportSelectionBound& start = frame_metadata.selection_start;
1023 const cc::ViewportSelectionBound& focus = frame_metadata.selection_focus; 1083 const cc::ViewportSelectionBound& end = frame_metadata.selection_end;
1024 1084
1025 if (cached_selection_anchor_ == anchor && cached_selection_focus_ == focus) 1085 DCHECK(selection_controller_);
1026 return; 1086 selection_controller_->OnSelectionBoundsChanged(
1027 1087 start.viewport_rect,
1028 TRACE_EVENT0("input", "RenderWidgetHostViewAndroid::UpdateSelectionBounds"); 1088 SelectionBoundTypeToTouchHandleOrientation(start.type),
1029 1089 start.visible,
1030 cached_selection_anchor_ = anchor; 1090 end.viewport_rect,
1031 cached_selection_focus_ = focus; 1091 SelectionBoundTypeToTouchHandleOrientation(end.type),
1032 1092 end.visible);
1033 content_view_core_->OnSelectionBoundsChanged(
1034 anchor.viewport_rect.bottom_left(),
1035 focus.viewport_rect.bottom_left(),
1036 anchor.type == cc::SELECTION_BOUND_RIGHT
1037 ? blink::WebTextDirectionRightToLeft
1038 : blink::WebTextDirectionDefault,
1039 focus.type == cc::SELECTION_BOUND_LEFT
1040 ? blink::WebTextDirectionRightToLeft
1041 : blink::WebTextDirectionDefault,
1042 anchor.visible,
1043 focus.visible);
1044 } 1093 }
1045 1094
1046 void RenderWidgetHostViewAndroid::AcceleratedSurfaceInitialized(int host_id, 1095 void RenderWidgetHostViewAndroid::AcceleratedSurfaceInitialized(int host_id,
1047 int route_id) { 1096 int route_id) {
1048 accelerated_surface_route_id_ = route_id; 1097 accelerated_surface_route_id_ = route_id;
1049 } 1098 }
1050 1099
1051 void RenderWidgetHostViewAndroid::AcceleratedSurfaceBuffersSwapped( 1100 void RenderWidgetHostViewAndroid::AcceleratedSurfaceBuffersSwapped(
1052 const GpuHostMsg_AcceleratedSurfaceBuffersSwapped_Params& params, 1101 const GpuHostMsg_AcceleratedSurfaceBuffersSwapped_Params& params,
1053 int gpu_host_id) { 1102 int gpu_host_id) {
1054 NOTREACHED() << "Need --composite-to-mailbox or --enable-delegated-renderer"; 1103 NOTREACHED() << "Need --composite-to-mailbox or --enable-delegated-renderer";
1055 } 1104 }
1056 1105
1057 void RenderWidgetHostViewAndroid::AttachLayers() { 1106 void RenderWidgetHostViewAndroid::AttachLayers() {
1058 if (!content_view_core_) 1107 if (!content_view_core_)
1059 return; 1108 return;
1060 if (!layer_.get()) 1109 if (!layer_.get())
1061 return; 1110 return;
1062 1111
1063 content_view_core_->AttachLayer(layer_); 1112 content_view_core_->AttachLayer(layer_);
1064 if (overscroll_effect_enabled_) 1113 if (overscroll_effect_enabled_)
1065 overscroll_effect_->Enable(); 1114 overscroll_effect_->Enable();
1066 layer_->SetHideLayerAndSubtree(!is_showing_); 1115 layer_->SetHideLayerAndSubtree(!is_showing_);
1067 } 1116 }
1068 1117
1069 void RenderWidgetHostViewAndroid::RemoveLayers() { 1118 void RenderWidgetHostViewAndroid::RemoveLayers() {
1070 if (!content_view_core_) 1119 if (!content_view_core_)
1071 return; 1120 return;
1121
1072 if (!layer_.get()) 1122 if (!layer_.get())
1073 return; 1123 return;
1074 1124
1075 content_view_core_->RemoveLayer(layer_); 1125 content_view_core_->RemoveLayer(layer_);
1076 overscroll_effect_->Disable(); 1126 overscroll_effect_->Disable();
1077 } 1127 }
1078 1128
1079 void RenderWidgetHostViewAndroid::SetNeedsAnimate() { 1129 bool RenderWidgetHostViewAndroid::Animate(base::TimeTicks frame_time) {
1080 content_view_core_->GetWindowAndroid()->SetNeedsAnimate(); 1130 bool needs_animate = overscroll_effect_->Animate(frame_time);
1131 if (selection_controller_)
1132 needs_animate |= selection_controller_->Animate(frame_time);
1133 return needs_animate;
1081 } 1134 }
1082 1135
1083 bool RenderWidgetHostViewAndroid::Animate(base::TimeTicks frame_time) { 1136 float RenderWidgetHostViewAndroid::GetDpiScale() const {
1084 return overscroll_effect_->Animate(frame_time); 1137 DCHECK(content_view_core_);
1138 return content_view_core_->GetDpiScale();
1085 } 1139 }
1086 1140
1087 void RenderWidgetHostViewAndroid::AcceleratedSurfacePostSubBuffer( 1141 void RenderWidgetHostViewAndroid::AcceleratedSurfacePostSubBuffer(
1088 const GpuHostMsg_AcceleratedSurfacePostSubBuffer_Params& params, 1142 const GpuHostMsg_AcceleratedSurfacePostSubBuffer_Params& params,
1089 int gpu_host_id) { 1143 int gpu_host_id) {
1090 NOTREACHED(); 1144 NOTREACHED();
1091 } 1145 }
1092 1146
1093 void RenderWidgetHostViewAndroid::AcceleratedSurfaceSuspend() { 1147 void RenderWidgetHostViewAndroid::AcceleratedSurfaceSuspend() {
1094 NOTREACHED(); 1148 NOTREACHED();
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
1139 1193
1140 void RenderWidgetHostViewAndroid::GestureEventAck( 1194 void RenderWidgetHostViewAndroid::GestureEventAck(
1141 const blink::WebGestureEvent& event, 1195 const blink::WebGestureEvent& event,
1142 InputEventAckState ack_result) { 1196 InputEventAckState ack_result) {
1143 if (content_view_core_) 1197 if (content_view_core_)
1144 content_view_core_->OnGestureEventAck(event, ack_result); 1198 content_view_core_->OnGestureEventAck(event, ack_result);
1145 } 1199 }
1146 1200
1147 InputEventAckState RenderWidgetHostViewAndroid::FilterInputEvent( 1201 InputEventAckState RenderWidgetHostViewAndroid::FilterInputEvent(
1148 const blink::WebInputEvent& input_event) { 1202 const blink::WebInputEvent& input_event) {
1203 if (selection_controller_) {
1204 switch (input_event.type) {
1205 case blink::WebInputEvent::GestureLongPress:
1206 case blink::WebInputEvent::GestureLongTap:
1207 selection_controller_->AllowAutomaticInsertionShowing();
1208 selection_controller_->AllowAutomaticSelectionShowing();
1209 break;
1210 case blink::WebInputEvent::GestureTap:
1211 selection_controller_->AllowAutomaticInsertionShowing();
1212 break;
1213 default:
1214 break;
1215 }
1216 }
1217
1149 if (content_view_core_ && 1218 if (content_view_core_ &&
1150 content_view_core_->FilterInputEvent(input_event)) 1219 content_view_core_->FilterInputEvent(input_event))
1151 return INPUT_EVENT_ACK_STATE_CONSUMED; 1220 return INPUT_EVENT_ACK_STATE_CONSUMED;
1152 1221
1153 if (!host_) 1222 if (!host_)
1154 return INPUT_EVENT_ACK_STATE_NOT_CONSUMED; 1223 return INPUT_EVENT_ACK_STATE_NOT_CONSUMED;
1155 1224
1156 if (input_event.type == blink::WebInputEvent::GestureTapDown || 1225 if (input_event.type == blink::WebInputEvent::GestureTapDown ||
1157 input_event.type == blink::WebInputEvent::TouchStart) { 1226 input_event.type == blink::WebInputEvent::TouchStart) {
1158 GpuDataManagerImpl* gpu_data = GpuDataManagerImpl::GetInstance(); 1227 GpuDataManagerImpl* gpu_data = GpuDataManagerImpl::GetInstance();
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
1246 1315
1247 if (host_) 1316 if (host_)
1248 host_->ForwardGestureEventWithLatencyInfo(event, CreateLatencyInfo(event)); 1317 host_->ForwardGestureEventWithLatencyInfo(event, CreateLatencyInfo(event));
1249 } 1318 }
1250 1319
1251 void RenderWidgetHostViewAndroid::MoveCaret(const gfx::Point& point) { 1320 void RenderWidgetHostViewAndroid::MoveCaret(const gfx::Point& point) {
1252 if (host_) 1321 if (host_)
1253 host_->MoveCaret(point); 1322 host_->MoveCaret(point);
1254 } 1323 }
1255 1324
1325 void RenderWidgetHostViewAndroid::HideTextHandles() {
1326 if (selection_controller_)
1327 selection_controller_->HideAndDisallowAutomaticShowing();
1328 }
1329
1256 SkColor RenderWidgetHostViewAndroid::GetCachedBackgroundColor() const { 1330 SkColor RenderWidgetHostViewAndroid::GetCachedBackgroundColor() const {
1257 return cached_background_color_; 1331 return cached_background_color_;
1258 } 1332 }
1259 1333
1260 void RenderWidgetHostViewAndroid::DidOverscroll( 1334 void RenderWidgetHostViewAndroid::DidOverscroll(
1261 const DidOverscrollParams& params) { 1335 const DidOverscrollParams& params) {
1262 if (!content_view_core_ || !layer_ || !is_showing_) 1336 if (!content_view_core_ || !layer_ || !is_showing_)
1263 return; 1337 return;
1264 1338
1265 const float device_scale_factor = content_view_core_->GetDpiScale(); 1339 const float device_scale_factor = GetDpiScale();
1266 if (overscroll_effect_->OnOverscrolled( 1340 if (overscroll_effect_->OnOverscrolled(
1267 content_view_core_->GetLayer(), 1341 content_view_core_->GetLayer(),
1268 base::TimeTicks::Now(), 1342 base::TimeTicks::Now(),
1269 gfx::ScaleVector2d(params.accumulated_overscroll, 1343 gfx::ScaleVector2d(params.accumulated_overscroll,
1270 device_scale_factor), 1344 device_scale_factor),
1271 gfx::ScaleVector2d(params.latest_overscroll_delta, 1345 gfx::ScaleVector2d(params.latest_overscroll_delta,
1272 device_scale_factor), 1346 device_scale_factor),
1273 gfx::ScaleVector2d(params.current_fling_velocity, 1347 gfx::ScaleVector2d(params.current_fling_velocity,
1274 device_scale_factor))) { 1348 device_scale_factor))) {
1275 SetNeedsAnimate(); 1349 SetNeedsAnimate();
1276 } 1350 }
1277 } 1351 }
1278 1352
1279 void RenderWidgetHostViewAndroid::DidStopFlinging() { 1353 void RenderWidgetHostViewAndroid::DidStopFlinging() {
1280 if (content_view_core_) 1354 if (content_view_core_)
1281 content_view_core_->DidStopFlinging(); 1355 content_view_core_->DidStopFlinging();
1282 } 1356 }
1283 1357
1284 void RenderWidgetHostViewAndroid::SetContentViewCore( 1358 void RenderWidgetHostViewAndroid::SetContentViewCore(
1285 ContentViewCoreImpl* content_view_core) { 1359 ContentViewCoreImpl* content_view_core) {
1286 RemoveLayers(); 1360 RemoveLayers();
1287 if (observing_root_window_ && content_view_core_) { 1361 if (observing_root_window_ && content_view_core_) {
1288 content_view_core_->GetWindowAndroid()->RemoveObserver(this); 1362 content_view_core_->GetWindowAndroid()->RemoveObserver(this);
1289 observing_root_window_ = false; 1363 observing_root_window_ = false;
1290 } 1364 }
1291 1365
1292 bool resize = false; 1366 bool resize = false;
1293 if (content_view_core != content_view_core_) { 1367 if (content_view_core != content_view_core_) {
1368 selection_controller_.reset();
1294 ReleaseLocksOnSurface(); 1369 ReleaseLocksOnSurface();
1295 resize = true; 1370 resize = true;
1296 } 1371 }
1297 1372
1298 content_view_core_ = content_view_core; 1373 content_view_core_ = content_view_core;
1299 1374
1300 if (GetBrowserAccessibilityManager()) { 1375 if (GetBrowserAccessibilityManager()) {
1301 base::android::ScopedJavaLocalRef<jobject> obj; 1376 base::android::ScopedJavaLocalRef<jobject> obj;
1302 if (content_view_core_) 1377 if (content_view_core_)
1303 obj = content_view_core_->GetJavaObject(); 1378 obj = content_view_core_->GetJavaObject();
1304 GetBrowserAccessibilityManager()->ToBrowserAccessibilityManagerAndroid()-> 1379 GetBrowserAccessibilityManager()->ToBrowserAccessibilityManagerAndroid()->
1305 SetContentViewCore(obj); 1380 SetContentViewCore(obj);
1306 } 1381 }
1307 1382
1308 AttachLayers(); 1383 AttachLayers();
1309 if (content_view_core_ && !using_synchronous_compositor_) { 1384
1385 if (!content_view_core_)
1386 return;
1387
1388 if (!using_synchronous_compositor_) {
1310 content_view_core_->GetWindowAndroid()->AddObserver(this); 1389 content_view_core_->GetWindowAndroid()->AddObserver(this);
1311 observing_root_window_ = true; 1390 observing_root_window_ = true;
1312 if (needs_begin_frame_) 1391 if (needs_begin_frame_)
1313 content_view_core_->GetWindowAndroid()->RequestVSyncUpdate(); 1392 content_view_core_->GetWindowAndroid()->RequestVSyncUpdate();
1314 } 1393 }
1315 1394
1316 if (resize && content_view_core_) 1395 if (resize)
1317 WasResized(); 1396 WasResized();
1397
1398 if (!selection_controller_)
1399 selection_controller_.reset(new TouchSelectionController(this));
1318 } 1400 }
1319 1401
1320 void RenderWidgetHostViewAndroid::RunAckCallbacks() { 1402 void RenderWidgetHostViewAndroid::RunAckCallbacks() {
1321 while (!ack_callbacks_.empty()) { 1403 while (!ack_callbacks_.empty()) {
1322 ack_callbacks_.front().Run(); 1404 ack_callbacks_.front().Run();
1323 ack_callbacks_.pop(); 1405 ack_callbacks_.pop();
1324 } 1406 }
1325 } 1407 }
1326 1408
1327 void RenderWidgetHostViewAndroid::OnGestureEvent( 1409 void RenderWidgetHostViewAndroid::OnGestureEvent(
(...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after
1470 // supported we should go with that (this degrades quality) 1552 // supported we should go with that (this degrades quality)
1471 // or stick back to the default format. 1553 // or stick back to the default format.
1472 if (base::SysInfo::IsLowEndDevice()) { 1554 if (base::SysInfo::IsLowEndDevice()) {
1473 if (IsReadbackConfigSupported(SkBitmap::kRGB_565_Config)) 1555 if (IsReadbackConfigSupported(SkBitmap::kRGB_565_Config))
1474 return SkBitmap::kRGB_565_Config; 1556 return SkBitmap::kRGB_565_Config;
1475 } 1557 }
1476 return SkBitmap::kARGB_8888_Config; 1558 return SkBitmap::kARGB_8888_Config;
1477 } 1559 }
1478 1560
1479 void RenderWidgetHostViewAndroid::ShowSelectionHandlesAutomatically() { 1561 void RenderWidgetHostViewAndroid::ShowSelectionHandlesAutomatically() {
1480 if (content_view_core_) 1562 if (selection_controller_)
1481 content_view_core_->ShowSelectionHandlesAutomatically(); 1563 selection_controller_->AllowAutomaticSelectionShowing();
1482 } 1564 }
1483 1565
1484 void RenderWidgetHostViewAndroid::SelectRange( 1566 void RenderWidgetHostViewAndroid::SelectRange(
1485 float x1, float y1, float x2, float y2) { 1567 float x1, float y1, float x2, float y2) {
1486 if (content_view_core_) 1568 if (content_view_core_)
1487 static_cast<WebContentsImpl*>(content_view_core_->GetWebContents())-> 1569 static_cast<WebContentsImpl*>(content_view_core_->GetWebContents())->
1488 SelectRange(gfx::Point(x1, y1), gfx::Point(x2, y2)); 1570 SelectRange(gfx::Point(x1, y1), gfx::Point(x2, y2));
1489 } 1571 }
1490 1572
1491 void RenderWidgetHostViewAndroid::Unselect() { 1573 void RenderWidgetHostViewAndroid::Unselect() {
(...skipping 21 matching lines...) Expand all
1513 results->orientationAngle = display.RotationAsDegree(); 1595 results->orientationAngle = display.RotationAsDegree();
1514 results->orientationType = 1596 results->orientationType =
1515 RenderWidgetHostViewBase::GetOrientationTypeForMobile(display); 1597 RenderWidgetHostViewBase::GetOrientationTypeForMobile(display);
1516 gfx::DeviceDisplayInfo info; 1598 gfx::DeviceDisplayInfo info;
1517 results->depth = info.GetBitsPerPixel(); 1599 results->depth = info.GetBitsPerPixel();
1518 results->depthPerComponent = info.GetBitsPerComponent(); 1600 results->depthPerComponent = info.GetBitsPerComponent();
1519 results->isMonochrome = (results->depthPerComponent == 0); 1601 results->isMonochrome = (results->depthPerComponent == 0);
1520 } 1602 }
1521 1603
1522 } // namespace content 1604 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698