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

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

Powered by Google App Engine
This is Rietveld 408576698