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

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: Tweaks to dragging and visibility 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 93 matching lines...) Expand 10 before | Expand all | Expand 10 after
146 return params; 148 return params;
147 } 149 }
148 150
149 ui::GestureProvider::Config CreateGestureProviderConfig() { 151 ui::GestureProvider::Config CreateGestureProviderConfig() {
150 ui::GestureProvider::Config config = ui::DefaultGestureProviderConfig(); 152 ui::GestureProvider::Config config = ui::DefaultGestureProviderConfig();
151 config.disable_click_delay = 153 config.disable_click_delay =
152 CommandLine::ForCurrentProcess()->HasSwitch(switches::kDisableClickDelay); 154 CommandLine::ForCurrentProcess()->HasSwitch(switches::kDisableClickDelay);
153 return config; 155 return config;
154 } 156 }
155 157
158 TouchHandleOrientation SelectionBoundTypeToTouchHandleOrientation(
159 cc::SelectionBoundType bound_type) {
160 switch (bound_type) {
161 case cc::SELECTION_BOUND_LEFT:
162 return TOUCH_HANDLE_LEFT;
163 case cc::SELECTION_BOUND_RIGHT:
164 return TOUCH_HANDLE_RIGHT;
165 case cc::SELECTION_BOUND_CENTER:
166 return TOUCH_HANDLE_CENTER;
167 case cc::SELECTION_BOUND_EMPTY:
168 return TOUCH_HANDLE_ORIENTATION_UNDEFINED;
169 }
170 }
171
156 bool HasFixedPageScale(const cc::CompositorFrameMetadata& frame_metadata) { 172 bool HasFixedPageScale(const cc::CompositorFrameMetadata& frame_metadata) {
157 return frame_metadata.min_page_scale_factor == 173 return frame_metadata.min_page_scale_factor ==
158 frame_metadata.max_page_scale_factor; 174 frame_metadata.max_page_scale_factor;
159 } 175 }
160 176
161 bool HasMobileViewport(const cc::CompositorFrameMetadata& frame_metadata) { 177 bool HasMobileViewport(const cc::CompositorFrameMetadata& frame_metadata) {
162 float window_width_dip = 178 float window_width_dip =
163 frame_metadata.page_scale_factor * 179 frame_metadata.page_scale_factor *
164 frame_metadata.scrollable_viewport_size.width(); 180 frame_metadata.scrollable_viewport_size.width();
165 float content_width_css = frame_metadata.root_layer_size.width(); 181 float content_width_css = frame_metadata.root_layer_size.width();
(...skipping 386 matching lines...) Expand 10 before | Expand all | Expand 10 after
552 const gfx::Rect rect) { 568 const gfx::Rect rect) {
553 if (content_view_core_) 569 if (content_view_core_)
554 content_view_core_->OnSmartClipDataExtracted(rect, result); 570 content_view_core_->OnSmartClipDataExtracted(rect, result);
555 } 571 }
556 572
557 bool RenderWidgetHostViewAndroid::OnTouchEvent( 573 bool RenderWidgetHostViewAndroid::OnTouchEvent(
558 const ui::MotionEvent& event) { 574 const ui::MotionEvent& event) {
559 if (!host_) 575 if (!host_)
560 return false; 576 return false;
561 577
578 if (selection_controller_ &&
579 selection_controller_->WillHandleTouchEvent(event))
580 return true;
581
562 if (!gesture_provider_.OnTouchEvent(event)) 582 if (!gesture_provider_.OnTouchEvent(event))
563 return false; 583 return false;
564 584
565 if (gesture_text_selector_.OnTouchEvent(event)) { 585 if (gesture_text_selector_.OnTouchEvent(event)) {
566 gesture_provider_.OnTouchEventAck(false); 586 gesture_provider_.OnTouchEventAck(false);
567 return true; 587 return true;
568 } 588 }
569 589
570 // Short-circuit touch forwarding if no touch handlers exist. 590 // Short-circuit touch forwarding if no touch handlers exist.
571 if (!host_->ShouldForwardTouchEvent()) { 591 if (!host_->ShouldForwardTouchEvent()) {
572 const bool event_consumed = false; 592 const bool event_consumed = false;
573 gesture_provider_.OnTouchEventAck(event_consumed); 593 gesture_provider_.OnTouchEventAck(event_consumed);
574 return true; 594 return true;
575 } 595 }
576 596
577 SendTouchEvent(CreateWebTouchEventFromMotionEvent(event)); 597 SendTouchEvent(CreateWebTouchEventFromMotionEvent(event));
578 return true; 598 return true;
579 } 599 }
580 600
601 bool RenderWidgetHostViewAndroid::OnTouchHandleEvent(
602 const ui::MotionEvent& event) {
603 return selection_controller_ &&
604 selection_controller_->WillHandleTouchEvent(event);
605 }
606
581 void RenderWidgetHostViewAndroid::ResetGestureDetection() { 607 void RenderWidgetHostViewAndroid::ResetGestureDetection() {
582 const ui::MotionEvent* current_down_event = 608 const ui::MotionEvent* current_down_event =
583 gesture_provider_.GetCurrentDownEvent(); 609 gesture_provider_.GetCurrentDownEvent();
584 if (!current_down_event) 610 if (!current_down_event)
585 return; 611 return;
586 612
587 scoped_ptr<ui::MotionEvent> cancel_event = current_down_event->Cancel(); 613 scoped_ptr<ui::MotionEvent> cancel_event = current_down_event->Cancel();
588 DCHECK(cancel_event); 614 DCHECK(cancel_event);
589 OnTouchEvent(*cancel_event); 615 OnTouchEvent(*cancel_event);
590 } 616 }
591 617
592 void RenderWidgetHostViewAndroid::SetDoubleTapSupportEnabled(bool enabled) { 618 void RenderWidgetHostViewAndroid::SetDoubleTapSupportEnabled(bool enabled) {
593 gesture_provider_.SetDoubleTapSupportForPlatformEnabled(enabled); 619 gesture_provider_.SetDoubleTapSupportForPlatformEnabled(enabled);
594 } 620 }
595 621
596 void RenderWidgetHostViewAndroid::SetMultiTouchZoomSupportEnabled( 622 void RenderWidgetHostViewAndroid::SetMultiTouchZoomSupportEnabled(
597 bool enabled) { 623 bool enabled) {
598 gesture_provider_.SetMultiTouchZoomSupportEnabled(enabled); 624 gesture_provider_.SetMultiTouchZoomSupportEnabled(enabled);
599 } 625 }
600 626
601 void RenderWidgetHostViewAndroid::ImeCancelComposition() { 627 void RenderWidgetHostViewAndroid::ImeCancelComposition() {
602 ime_adapter_android_.CancelComposition(); 628 ime_adapter_android_.CancelComposition();
603 } 629 }
604 630
605 void RenderWidgetHostViewAndroid::FocusedNodeChanged(bool is_editable_node) { 631 void RenderWidgetHostViewAndroid::FocusedNodeChanged(bool is_editable_node) {
606 ime_adapter_android_.FocusedNodeChanged(is_editable_node); 632 ime_adapter_android_.FocusedNodeChanged(is_editable_node);
633 if (selection_controller_)
634 selection_controller_->OnSelectionEditable(is_editable_node);
607 } 635 }
608 636
609 void RenderWidgetHostViewAndroid::RenderProcessGone( 637 void RenderWidgetHostViewAndroid::RenderProcessGone(
610 base::TerminationStatus status, int error_code) { 638 base::TerminationStatus status, int error_code) {
611 Destroy(); 639 Destroy();
612 } 640 }
613 641
614 void RenderWidgetHostViewAndroid::Destroy() { 642 void RenderWidgetHostViewAndroid::Destroy() {
615 RemoveLayers(); 643 RemoveLayers();
616 SetContentViewCore(NULL); 644 SetContentViewCore(NULL);
(...skipping 329 matching lines...) Expand 10 before | Expand all | Expand 10 after
946 static_cast<RenderViewDevToolsAgentHost*>(dtah.get()), 974 static_cast<RenderViewDevToolsAgentHost*>(dtah.get()),
947 frame_metadata)); 975 frame_metadata));
948 } 976 }
949 } 977 }
950 978
951 void RenderWidgetHostViewAndroid::SetOverlayVideoMode(bool enabled) { 979 void RenderWidgetHostViewAndroid::SetOverlayVideoMode(bool enabled) {
952 if (layer_) 980 if (layer_)
953 layer_->SetContentsOpaque(!enabled); 981 layer_->SetContentsOpaque(!enabled);
954 } 982 }
955 983
984 bool RenderWidgetHostViewAndroid::SupportsAnimation() const {
985 // The synchronous (WebView) compositor does not have a proper browser
986 // compositor with which to drive animations.
987 return !using_synchronous_compositor_;
988 }
989
990 void RenderWidgetHostViewAndroid::SetNeedsAnimate() {
991 DCHECK(content_view_core_);
992 DCHECK(!using_synchronous_compositor_);
993 content_view_core_->GetWindowAndroid()->SetNeedsAnimate();
994 }
995
996 void RenderWidgetHostViewAndroid::MoveCaret(const gfx::PointF& position) {
997 MoveCaret(gfx::Point(position.x(), position.y()));
998 }
999
1000 void RenderWidgetHostViewAndroid::SelectBetweenCoordinates(
1001 const gfx::PointF& start,
1002 const gfx::PointF& end) {
1003 DCHECK(content_view_core_);
1004 content_view_core_->SelectBetweenCoordinates(start, end);
1005 }
1006
1007 void RenderWidgetHostViewAndroid::OnSelectionEvent(
1008 SelectionEventType event,
1009 const gfx::PointF& position) {
1010 DCHECK(content_view_core_);
1011 content_view_core_->OnSelectionEvent(event, position);
1012 }
1013
1014 scoped_ptr<TouchHandleDrawable> RenderWidgetHostViewAndroid::CreateDrawable() {
1015 DCHECK(content_view_core_);
1016 if (using_synchronous_compositor_)
1017 return content_view_core_->CreatePopupTouchHandleDrawable();
1018
1019 return scoped_ptr<TouchHandleDrawable>(new CompositedTouchHandleDrawable(
1020 content_view_core_->GetLayer(), GetDpiScale()));
1021 }
1022
956 void RenderWidgetHostViewAndroid::SynchronousCopyContents( 1023 void RenderWidgetHostViewAndroid::SynchronousCopyContents(
957 const gfx::Rect& src_subrect_in_pixel, 1024 const gfx::Rect& src_subrect_in_pixel,
958 const gfx::Size& dst_size_in_pixel, 1025 const gfx::Size& dst_size_in_pixel,
959 const base::Callback<void(bool, const SkBitmap&)>& callback, 1026 const base::Callback<void(bool, const SkBitmap&)>& callback,
960 const SkColorType color_type) { 1027 const SkColorType color_type) {
961 SynchronousCompositor* compositor = 1028 SynchronousCompositor* compositor =
962 SynchronousCompositorImpl::FromID(host_->GetProcess()->GetID(), 1029 SynchronousCompositorImpl::FromID(host_->GetProcess()->GetID(),
963 host_->GetRoutingID()); 1030 host_->GetRoutingID());
964 if (!compositor) { 1031 if (!compositor) {
965 callback.Run(false, SkBitmap()); 1032 callback.Run(false, SkBitmap());
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
1017 } 1084 }
1018 1085
1019 void RenderWidgetHostViewAndroid::UpdateSelectionBounds( 1086 void RenderWidgetHostViewAndroid::UpdateSelectionBounds(
1020 const cc::CompositorFrameMetadata& frame_metadata) { 1087 const cc::CompositorFrameMetadata& frame_metadata) {
1021 if (!content_view_core_) 1088 if (!content_view_core_)
1022 return; 1089 return;
1023 1090
1024 const cc::ViewportSelectionBound& start = frame_metadata.selection_start; 1091 const cc::ViewportSelectionBound& start = frame_metadata.selection_start;
1025 const cc::ViewportSelectionBound& end = frame_metadata.selection_end; 1092 const cc::ViewportSelectionBound& end = frame_metadata.selection_end;
1026 1093
1027 if (cached_selection_start_ == start && cached_selection_end_ == end) 1094 DCHECK(selection_controller_);
1028 return; 1095 selection_controller_->OnSelectionBoundsChanged(
1029 1096 start.viewport_rect,
1030 TRACE_EVENT0("input", "RenderWidgetHostViewAndroid::UpdateSelectionBounds"); 1097 SelectionBoundTypeToTouchHandleOrientation(start.type),
1031 1098 start.visible,
1032 cached_selection_start_ = start; 1099 end.viewport_rect,
1033 cached_selection_end_ = end; 1100 SelectionBoundTypeToTouchHandleOrientation(end.type),
1034 1101 end.visible);
1035 content_view_core_->OnSelectionBoundsChanged(
1036 start.viewport_rect.bottom_left(),
1037 end.viewport_rect.bottom_left(),
1038 start.type == cc::SELECTION_BOUND_RIGHT
1039 ? blink::WebTextDirectionRightToLeft
1040 : blink::WebTextDirectionDefault,
1041 end.type == cc::SELECTION_BOUND_LEFT
1042 ? blink::WebTextDirectionRightToLeft
1043 : blink::WebTextDirectionDefault);
1044 } 1102 }
1045 1103
1046 void RenderWidgetHostViewAndroid::AcceleratedSurfaceInitialized(int host_id, 1104 void RenderWidgetHostViewAndroid::AcceleratedSurfaceInitialized(int host_id,
1047 int route_id) { 1105 int route_id) {
1048 accelerated_surface_route_id_ = route_id; 1106 accelerated_surface_route_id_ = route_id;
1049 } 1107 }
1050 1108
1051 void RenderWidgetHostViewAndroid::AcceleratedSurfaceBuffersSwapped( 1109 void RenderWidgetHostViewAndroid::AcceleratedSurfaceBuffersSwapped(
1052 const GpuHostMsg_AcceleratedSurfaceBuffersSwapped_Params& params, 1110 const GpuHostMsg_AcceleratedSurfaceBuffersSwapped_Params& params,
1053 int gpu_host_id) { 1111 int gpu_host_id) {
1054 NOTREACHED() << "Need --composite-to-mailbox or --enable-delegated-renderer"; 1112 NOTREACHED() << "Need --composite-to-mailbox or --enable-delegated-renderer";
1055 } 1113 }
1056 1114
1057 void RenderWidgetHostViewAndroid::AttachLayers() { 1115 void RenderWidgetHostViewAndroid::AttachLayers() {
1058 if (!content_view_core_) 1116 if (!content_view_core_)
1059 return; 1117 return;
1060 if (!layer_.get()) 1118 if (!layer_.get())
1061 return; 1119 return;
1062 1120
1063 content_view_core_->AttachLayer(layer_); 1121 content_view_core_->AttachLayer(layer_);
1064 if (overscroll_effect_enabled_) 1122 if (overscroll_effect_enabled_)
1065 overscroll_effect_->Enable(); 1123 overscroll_effect_->Enable();
1066 layer_->SetHideLayerAndSubtree(!is_showing_); 1124 layer_->SetHideLayerAndSubtree(!is_showing_);
1067 } 1125 }
1068 1126
1069 void RenderWidgetHostViewAndroid::RemoveLayers() { 1127 void RenderWidgetHostViewAndroid::RemoveLayers() {
1070 if (!content_view_core_) 1128 if (!content_view_core_)
1071 return; 1129 return;
1130
1072 if (!layer_.get()) 1131 if (!layer_.get())
1073 return; 1132 return;
1074 1133
1075 content_view_core_->RemoveLayer(layer_); 1134 content_view_core_->RemoveLayer(layer_);
1076 overscroll_effect_->Disable(); 1135 overscroll_effect_->Disable();
1077 } 1136 }
1078 1137
1079 void RenderWidgetHostViewAndroid::SetNeedsAnimate() { 1138 bool RenderWidgetHostViewAndroid::Animate(base::TimeTicks frame_time) {
1080 content_view_core_->GetWindowAndroid()->SetNeedsAnimate(); 1139 bool needs_animate = overscroll_effect_->Animate(frame_time);
1140 if (selection_controller_)
1141 needs_animate |= selection_controller_->Animate(frame_time);
1142 return needs_animate;
1081 } 1143 }
1082 1144
1083 bool RenderWidgetHostViewAndroid::Animate(base::TimeTicks frame_time) { 1145 float RenderWidgetHostViewAndroid::GetDpiScale() const {
1084 return overscroll_effect_->Animate(frame_time); 1146 DCHECK(content_view_core_);
1147 return content_view_core_->GetDpiScale();
1085 } 1148 }
1086 1149
1087 void RenderWidgetHostViewAndroid::AcceleratedSurfacePostSubBuffer( 1150 void RenderWidgetHostViewAndroid::AcceleratedSurfacePostSubBuffer(
1088 const GpuHostMsg_AcceleratedSurfacePostSubBuffer_Params& params, 1151 const GpuHostMsg_AcceleratedSurfacePostSubBuffer_Params& params,
1089 int gpu_host_id) { 1152 int gpu_host_id) {
1090 NOTREACHED(); 1153 NOTREACHED();
1091 } 1154 }
1092 1155
1093 void RenderWidgetHostViewAndroid::AcceleratedSurfaceSuspend() { 1156 void RenderWidgetHostViewAndroid::AcceleratedSurfaceSuspend() {
1094 NOTREACHED(); 1157 NOTREACHED();
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
1139 1202
1140 void RenderWidgetHostViewAndroid::GestureEventAck( 1203 void RenderWidgetHostViewAndroid::GestureEventAck(
1141 const blink::WebGestureEvent& event, 1204 const blink::WebGestureEvent& event,
1142 InputEventAckState ack_result) { 1205 InputEventAckState ack_result) {
1143 if (content_view_core_) 1206 if (content_view_core_)
1144 content_view_core_->OnGestureEventAck(event, ack_result); 1207 content_view_core_->OnGestureEventAck(event, ack_result);
1145 } 1208 }
1146 1209
1147 InputEventAckState RenderWidgetHostViewAndroid::FilterInputEvent( 1210 InputEventAckState RenderWidgetHostViewAndroid::FilterInputEvent(
1148 const blink::WebInputEvent& input_event) { 1211 const blink::WebInputEvent& input_event) {
1212 if (selection_controller_) {
1213 switch (input_event.type) {
1214 case blink::WebInputEvent::GestureLongPress:
1215 case blink::WebInputEvent::GestureLongTap:
1216 selection_controller_->AllowAutomaticInsertionShowing();
1217 selection_controller_->AllowAutomaticSelectionShowing();
1218 break;
1219 case blink::WebInputEvent::GestureTap:
1220 selection_controller_->AllowAutomaticInsertionShowing();
1221 break;
1222 default:
1223 break;
1224 }
1225 }
1226
1149 if (content_view_core_ && 1227 if (content_view_core_ &&
1150 content_view_core_->FilterInputEvent(input_event)) 1228 content_view_core_->FilterInputEvent(input_event))
1151 return INPUT_EVENT_ACK_STATE_CONSUMED; 1229 return INPUT_EVENT_ACK_STATE_CONSUMED;
1152 1230
1153 if (!host_) 1231 if (!host_)
1154 return INPUT_EVENT_ACK_STATE_NOT_CONSUMED; 1232 return INPUT_EVENT_ACK_STATE_NOT_CONSUMED;
1155 1233
1156 if (input_event.type == blink::WebInputEvent::GestureTapDown || 1234 if (input_event.type == blink::WebInputEvent::GestureTapDown ||
1157 input_event.type == blink::WebInputEvent::TouchStart) { 1235 input_event.type == blink::WebInputEvent::TouchStart) {
1158 GpuDataManagerImpl* gpu_data = GpuDataManagerImpl::GetInstance(); 1236 GpuDataManagerImpl* gpu_data = GpuDataManagerImpl::GetInstance();
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
1246 1324
1247 if (host_) 1325 if (host_)
1248 host_->ForwardGestureEventWithLatencyInfo(event, CreateLatencyInfo(event)); 1326 host_->ForwardGestureEventWithLatencyInfo(event, CreateLatencyInfo(event));
1249 } 1327 }
1250 1328
1251 void RenderWidgetHostViewAndroid::MoveCaret(const gfx::Point& point) { 1329 void RenderWidgetHostViewAndroid::MoveCaret(const gfx::Point& point) {
1252 if (host_) 1330 if (host_)
1253 host_->MoveCaret(point); 1331 host_->MoveCaret(point);
1254 } 1332 }
1255 1333
1334 void RenderWidgetHostViewAndroid::HideTextHandles() {
1335 if (selection_controller_)
1336 selection_controller_->HideAndDisallowAutomaticShowing();
1337 }
1338
1256 SkColor RenderWidgetHostViewAndroid::GetCachedBackgroundColor() const { 1339 SkColor RenderWidgetHostViewAndroid::GetCachedBackgroundColor() const {
1257 return cached_background_color_; 1340 return cached_background_color_;
1258 } 1341 }
1259 1342
1260 void RenderWidgetHostViewAndroid::DidOverscroll( 1343 void RenderWidgetHostViewAndroid::DidOverscroll(
1261 const DidOverscrollParams& params) { 1344 const DidOverscrollParams& params) {
1262 if (!content_view_core_ || !layer_ || !is_showing_) 1345 if (!content_view_core_ || !layer_ || !is_showing_)
1263 return; 1346 return;
1264 1347
1265 const float device_scale_factor = content_view_core_->GetDpiScale(); 1348 const float device_scale_factor = GetDpiScale();
1266 if (overscroll_effect_->OnOverscrolled( 1349 if (overscroll_effect_->OnOverscrolled(
1267 content_view_core_->GetLayer(), 1350 content_view_core_->GetLayer(),
1268 base::TimeTicks::Now(), 1351 base::TimeTicks::Now(),
1269 gfx::ScaleVector2d(params.accumulated_overscroll, 1352 gfx::ScaleVector2d(params.accumulated_overscroll,
1270 device_scale_factor), 1353 device_scale_factor),
1271 gfx::ScaleVector2d(params.latest_overscroll_delta, 1354 gfx::ScaleVector2d(params.latest_overscroll_delta,
1272 device_scale_factor), 1355 device_scale_factor),
1273 gfx::ScaleVector2d(params.current_fling_velocity, 1356 gfx::ScaleVector2d(params.current_fling_velocity,
1274 device_scale_factor))) { 1357 device_scale_factor))) {
1275 SetNeedsAnimate(); 1358 SetNeedsAnimate();
1276 } 1359 }
1277 } 1360 }
1278 1361
1279 void RenderWidgetHostViewAndroid::DidStopFlinging() { 1362 void RenderWidgetHostViewAndroid::DidStopFlinging() {
1280 if (content_view_core_) 1363 if (content_view_core_)
1281 content_view_core_->DidStopFlinging(); 1364 content_view_core_->DidStopFlinging();
1282 } 1365 }
1283 1366
1284 void RenderWidgetHostViewAndroid::SetContentViewCore( 1367 void RenderWidgetHostViewAndroid::SetContentViewCore(
1285 ContentViewCoreImpl* content_view_core) { 1368 ContentViewCoreImpl* content_view_core) {
1286 RemoveLayers(); 1369 RemoveLayers();
1287 if (observing_root_window_ && content_view_core_) { 1370 if (observing_root_window_ && content_view_core_) {
1288 content_view_core_->GetWindowAndroid()->RemoveObserver(this); 1371 content_view_core_->GetWindowAndroid()->RemoveObserver(this);
1289 observing_root_window_ = false; 1372 observing_root_window_ = false;
1290 } 1373 }
1291 1374
1292 bool resize = false; 1375 bool resize = false;
1293 if (content_view_core != content_view_core_) { 1376 if (content_view_core != content_view_core_) {
1377 selection_controller_.reset();
1294 ReleaseLocksOnSurface(); 1378 ReleaseLocksOnSurface();
1295 resize = true; 1379 resize = true;
1296 } 1380 }
1297 1381
1298 content_view_core_ = content_view_core; 1382 content_view_core_ = content_view_core;
1299 1383
1300 if (GetBrowserAccessibilityManager()) { 1384 if (GetBrowserAccessibilityManager()) {
1301 base::android::ScopedJavaLocalRef<jobject> obj; 1385 base::android::ScopedJavaLocalRef<jobject> obj;
1302 if (content_view_core_) 1386 if (content_view_core_)
1303 obj = content_view_core_->GetJavaObject(); 1387 obj = content_view_core_->GetJavaObject();
1304 GetBrowserAccessibilityManager()->ToBrowserAccessibilityManagerAndroid()-> 1388 GetBrowserAccessibilityManager()->ToBrowserAccessibilityManagerAndroid()->
1305 SetContentViewCore(obj); 1389 SetContentViewCore(obj);
1306 } 1390 }
1307 1391
1308 AttachLayers(); 1392 AttachLayers();
1309 if (content_view_core_ && !using_synchronous_compositor_) { 1393
1394 if (!content_view_core_)
1395 return;
1396
1397 if (!using_synchronous_compositor_) {
1310 content_view_core_->GetWindowAndroid()->AddObserver(this); 1398 content_view_core_->GetWindowAndroid()->AddObserver(this);
1311 observing_root_window_ = true; 1399 observing_root_window_ = true;
1312 if (needs_begin_frame_) 1400 if (needs_begin_frame_)
1313 content_view_core_->GetWindowAndroid()->RequestVSyncUpdate(); 1401 content_view_core_->GetWindowAndroid()->RequestVSyncUpdate();
1314 } 1402 }
1315 1403
1316 if (resize && content_view_core_) 1404 if (resize)
1317 WasResized(); 1405 WasResized();
1406
1407 if (!selection_controller_)
1408 selection_controller_.reset(new TouchSelectionController(this));
1318 } 1409 }
1319 1410
1320 void RenderWidgetHostViewAndroid::RunAckCallbacks() { 1411 void RenderWidgetHostViewAndroid::RunAckCallbacks() {
1321 while (!ack_callbacks_.empty()) { 1412 while (!ack_callbacks_.empty()) {
1322 ack_callbacks_.front().Run(); 1413 ack_callbacks_.front().Run();
1323 ack_callbacks_.pop(); 1414 ack_callbacks_.pop();
1324 } 1415 }
1325 } 1416 }
1326 1417
1327 void RenderWidgetHostViewAndroid::OnGestureEvent( 1418 void RenderWidgetHostViewAndroid::OnGestureEvent(
(...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after
1469 // supported we should go with that (this degrades quality) 1560 // supported we should go with that (this degrades quality)
1470 // or stick back to the default format. 1561 // or stick back to the default format.
1471 if (base::SysInfo::IsLowEndDevice()) { 1562 if (base::SysInfo::IsLowEndDevice()) {
1472 if (IsReadbackConfigSupported(kRGB_565_SkColorType)) 1563 if (IsReadbackConfigSupported(kRGB_565_SkColorType))
1473 return kRGB_565_SkColorType; 1564 return kRGB_565_SkColorType;
1474 } 1565 }
1475 return kN32_SkColorType; 1566 return kN32_SkColorType;
1476 } 1567 }
1477 1568
1478 void RenderWidgetHostViewAndroid::ShowSelectionHandlesAutomatically() { 1569 void RenderWidgetHostViewAndroid::ShowSelectionHandlesAutomatically() {
1479 if (content_view_core_) 1570 if (selection_controller_)
1480 content_view_core_->ShowSelectionHandlesAutomatically(); 1571 selection_controller_->AllowAutomaticSelectionShowing();
1481 } 1572 }
1482 1573
1483 void RenderWidgetHostViewAndroid::SelectRange( 1574 void RenderWidgetHostViewAndroid::SelectRange(
1484 float x1, float y1, float x2, float y2) { 1575 float x1, float y1, float x2, float y2) {
1485 if (content_view_core_) 1576 if (content_view_core_)
1486 static_cast<WebContentsImpl*>(content_view_core_->GetWebContents())-> 1577 static_cast<WebContentsImpl*>(content_view_core_->GetWebContents())->
1487 SelectRange(gfx::Point(x1, y1), gfx::Point(x2, y2)); 1578 SelectRange(gfx::Point(x1, y1), gfx::Point(x2, y2));
1488 } 1579 }
1489 1580
1490 void RenderWidgetHostViewAndroid::Unselect() { 1581 void RenderWidgetHostViewAndroid::Unselect() {
(...skipping 21 matching lines...) Expand all
1512 results->orientationAngle = display.RotationAsDegree(); 1603 results->orientationAngle = display.RotationAsDegree();
1513 results->orientationType = 1604 results->orientationType =
1514 RenderWidgetHostViewBase::GetOrientationTypeForMobile(display); 1605 RenderWidgetHostViewBase::GetOrientationTypeForMobile(display);
1515 gfx::DeviceDisplayInfo info; 1606 gfx::DeviceDisplayInfo info;
1516 results->depth = info.GetBitsPerPixel(); 1607 results->depth = info.GetBitsPerPixel();
1517 results->depthPerComponent = info.GetBitsPerComponent(); 1608 results->depthPerComponent = info.GetBitsPerComponent();
1518 results->isMonochrome = (results->depthPerComponent == 0); 1609 results->isMonochrome = (results->depthPerComponent == 0);
1519 } 1610 }
1520 1611
1521 } // namespace content 1612 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698