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