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