OLD | NEW |
---|---|
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 Loading... | |
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 Loading... | |
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 Loading... | |
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 Loading... | |
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 Loading... | |
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 Loading... | |
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 Loading... | |
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 Loading... | |
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 |
OLD | NEW |