| 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/android/build_info.h" | 9 #include "base/android/build_info.h" |
| 10 #include "base/basictypes.h" | 10 #include "base/basictypes.h" |
| (...skipping 27 matching lines...) Expand all Loading... |
| 38 #include "content/browser/devtools/render_view_devtools_agent_host.h" | 38 #include "content/browser/devtools/render_view_devtools_agent_host.h" |
| 39 #include "content/browser/gpu/compositor_util.h" | 39 #include "content/browser/gpu/compositor_util.h" |
| 40 #include "content/browser/gpu/gpu_data_manager_impl.h" | 40 #include "content/browser/gpu/gpu_data_manager_impl.h" |
| 41 #include "content/browser/gpu/gpu_process_host_ui_shim.h" | 41 #include "content/browser/gpu/gpu_process_host_ui_shim.h" |
| 42 #include "content/browser/gpu/gpu_surface_tracker.h" | 42 #include "content/browser/gpu/gpu_surface_tracker.h" |
| 43 #include "content/browser/media/media_web_contents_observer.h" | 43 #include "content/browser/media/media_web_contents_observer.h" |
| 44 #include "content/browser/renderer_host/compositor_impl_android.h" | 44 #include "content/browser/renderer_host/compositor_impl_android.h" |
| 45 #include "content/browser/renderer_host/dip_util.h" | 45 #include "content/browser/renderer_host/dip_util.h" |
| 46 #include "content/browser/renderer_host/image_transport_factory_android.h" | 46 #include "content/browser/renderer_host/image_transport_factory_android.h" |
| 47 #include "content/browser/renderer_host/input/synthetic_gesture_target_android.h
" | 47 #include "content/browser/renderer_host/input/synthetic_gesture_target_android.h
" |
| 48 #include "content/browser/renderer_host/input/touch_selection_controller.h" | |
| 49 #include "content/browser/renderer_host/input/web_input_event_builders_android.h
" | 48 #include "content/browser/renderer_host/input/web_input_event_builders_android.h
" |
| 50 #include "content/browser/renderer_host/input/web_input_event_util.h" | 49 #include "content/browser/renderer_host/input/web_input_event_util.h" |
| 51 #include "content/browser/renderer_host/render_process_host_impl.h" | 50 #include "content/browser/renderer_host/render_process_host_impl.h" |
| 52 #include "content/browser/renderer_host/render_view_host_impl.h" | 51 #include "content/browser/renderer_host/render_view_host_impl.h" |
| 53 #include "content/browser/renderer_host/render_widget_host_impl.h" | 52 #include "content/browser/renderer_host/render_widget_host_impl.h" |
| 54 #include "content/common/gpu/client/gl_helper.h" | 53 #include "content/common/gpu/client/gl_helper.h" |
| 55 #include "content/common/gpu/gpu_messages.h" | 54 #include "content/common/gpu/gpu_messages.h" |
| 56 #include "content/common/input/did_overscroll_params.h" | 55 #include "content/common/input/did_overscroll_params.h" |
| 57 #include "content/common/input_messages.h" | 56 #include "content/common/input_messages.h" |
| 58 #include "content/common/view_messages.h" | 57 #include "content/common/view_messages.h" |
| (...skipping 11 matching lines...) Expand all Loading... |
| 70 #include "ui/base/android/window_android_compositor.h" | 69 #include "ui/base/android/window_android_compositor.h" |
| 71 #include "ui/events/gesture_detection/gesture_provider_config_helper.h" | 70 #include "ui/events/gesture_detection/gesture_provider_config_helper.h" |
| 72 #include "ui/events/gesture_detection/motion_event.h" | 71 #include "ui/events/gesture_detection/motion_event.h" |
| 73 #include "ui/gfx/android/device_display_info.h" | 72 #include "ui/gfx/android/device_display_info.h" |
| 74 #include "ui/gfx/android/java_bitmap.h" | 73 #include "ui/gfx/android/java_bitmap.h" |
| 75 #include "ui/gfx/android/view_configuration.h" | 74 #include "ui/gfx/android/view_configuration.h" |
| 76 #include "ui/gfx/display.h" | 75 #include "ui/gfx/display.h" |
| 77 #include "ui/gfx/geometry/dip_util.h" | 76 #include "ui/gfx/geometry/dip_util.h" |
| 78 #include "ui/gfx/screen.h" | 77 #include "ui/gfx/screen.h" |
| 79 #include "ui/gfx/size_conversions.h" | 78 #include "ui/gfx/size_conversions.h" |
| 79 #include "ui/touch_selection/touch_selection_controller.h" |
| 80 | 80 |
| 81 namespace content { | 81 namespace content { |
| 82 | 82 |
| 83 namespace { | 83 namespace { |
| 84 | 84 |
| 85 const int kUndefinedOutputSurfaceId = -1; | 85 const int kUndefinedOutputSurfaceId = -1; |
| 86 | 86 |
| 87 // Used to accomodate finite precision when comparing scaled viewport and | 87 // Used to accomodate finite precision when comparing scaled viewport and |
| 88 // content widths. While this value may seem large, width=device-width on an N7 | 88 // content widths. While this value may seem large, width=device-width on an N7 |
| 89 // V1 saw errors of ~0.065 between computed window and content widths. | 89 // V1 saw errors of ~0.065 between computed window and content widths. |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 130 latency_info.AddLatencyNumberWithTimestamp( | 130 latency_info.AddLatencyNumberWithTimestamp( |
| 131 ui::INPUT_EVENT_LATENCY_ORIGINAL_COMPONENT, | 131 ui::INPUT_EVENT_LATENCY_ORIGINAL_COMPONENT, |
| 132 0, | 132 0, |
| 133 0, | 133 0, |
| 134 base::TimeTicks() + base::TimeDelta::FromMicroseconds(time_micros), | 134 base::TimeTicks() + base::TimeDelta::FromMicroseconds(time_micros), |
| 135 1); | 135 1); |
| 136 } | 136 } |
| 137 return latency_info; | 137 return latency_info; |
| 138 } | 138 } |
| 139 | 139 |
| 140 scoped_ptr<TouchSelectionController> CreateSelectionController( | 140 scoped_ptr<ui::TouchSelectionController> CreateSelectionController( |
| 141 TouchSelectionControllerClient* client, | 141 ui::TouchSelectionControllerClient* client, |
| 142 ContentViewCore* content_view_core) { | 142 ContentViewCore* content_view_core) { |
| 143 DCHECK(client); | 143 DCHECK(client); |
| 144 DCHECK(content_view_core); | 144 DCHECK(content_view_core); |
| 145 int tap_timeout_ms = gfx::ViewConfiguration::GetTapTimeoutInMs(); | 145 int tap_timeout_ms = gfx::ViewConfiguration::GetTapTimeoutInMs(); |
| 146 int touch_slop_pixels = gfx::ViewConfiguration::GetTouchSlopInPixels(); | 146 int touch_slop_pixels = gfx::ViewConfiguration::GetTouchSlopInPixels(); |
| 147 return make_scoped_ptr(new TouchSelectionController( | 147 return make_scoped_ptr(new ui::TouchSelectionController( |
| 148 client, | 148 client, |
| 149 base::TimeDelta::FromMilliseconds(tap_timeout_ms), | 149 base::TimeDelta::FromMilliseconds(tap_timeout_ms), |
| 150 touch_slop_pixels / content_view_core->GetDpiScale())); | 150 touch_slop_pixels / content_view_core->GetDpiScale())); |
| 151 } | 151 } |
| 152 | 152 |
| 153 scoped_ptr<OverscrollControllerAndroid> CreateOverscrollController( | 153 scoped_ptr<OverscrollControllerAndroid> CreateOverscrollController( |
| 154 ContentViewCore* content_view_core) { | 154 ContentViewCore* content_view_core) { |
| 155 DCHECK(content_view_core); | 155 DCHECK(content_view_core); |
| 156 ui::WindowAndroid* window = content_view_core->GetWindowAndroid(); | 156 ui::WindowAndroid* window = content_view_core->GetWindowAndroid(); |
| 157 DCHECK(window); | 157 DCHECK(window); |
| (...skipping 944 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1102 } | 1102 } |
| 1103 | 1103 |
| 1104 void RenderWidgetHostViewAndroid::SelectBetweenCoordinates( | 1104 void RenderWidgetHostViewAndroid::SelectBetweenCoordinates( |
| 1105 const gfx::PointF& base, | 1105 const gfx::PointF& base, |
| 1106 const gfx::PointF& extent) { | 1106 const gfx::PointF& extent) { |
| 1107 DCHECK(content_view_core_); | 1107 DCHECK(content_view_core_); |
| 1108 content_view_core_->SelectBetweenCoordinates(base, extent); | 1108 content_view_core_->SelectBetweenCoordinates(base, extent); |
| 1109 } | 1109 } |
| 1110 | 1110 |
| 1111 void RenderWidgetHostViewAndroid::OnSelectionEvent( | 1111 void RenderWidgetHostViewAndroid::OnSelectionEvent( |
| 1112 SelectionEventType event, | 1112 ui::SelectionEventType event, |
| 1113 const gfx::PointF& position) { | 1113 const gfx::PointF& position) { |
| 1114 DCHECK(content_view_core_); | 1114 DCHECK(content_view_core_); |
| 1115 // Showing the selection action bar can alter the current View coordinates in | 1115 // Showing the selection action bar can alter the current View coordinates in |
| 1116 // such a way that the current MotionEvent stream is suddenly shifted in | 1116 // such a way that the current MotionEvent stream is suddenly shifted in |
| 1117 // space. Avoid the associated scroll jump by pre-emptively cancelling gesture | 1117 // space. Avoid the associated scroll jump by pre-emptively cancelling gesture |
| 1118 // detection; scrolling after the selection is activated is unnecessary. | 1118 // detection; scrolling after the selection is activated is unnecessary. |
| 1119 if (event == SelectionEventType::SELECTION_SHOWN) | 1119 if (event == ui::SelectionEventType::SELECTION_SHOWN) |
| 1120 ResetGestureDetection(); | 1120 ResetGestureDetection(); |
| 1121 content_view_core_->OnSelectionEvent(event, position); | 1121 content_view_core_->OnSelectionEvent(event, position); |
| 1122 } | 1122 } |
| 1123 | 1123 |
| 1124 scoped_ptr<TouchHandleDrawable> RenderWidgetHostViewAndroid::CreateDrawable() { | 1124 scoped_ptr<ui::TouchHandleDrawable> |
| 1125 RenderWidgetHostViewAndroid::CreateDrawable() { |
| 1125 DCHECK(content_view_core_); | 1126 DCHECK(content_view_core_); |
| 1126 if (using_synchronous_compositor_) | 1127 if (using_synchronous_compositor_) |
| 1127 return content_view_core_->CreatePopupTouchHandleDrawable(); | 1128 return content_view_core_->CreatePopupTouchHandleDrawable(); |
| 1128 | 1129 |
| 1129 return scoped_ptr<TouchHandleDrawable>(new CompositedTouchHandleDrawable( | 1130 return scoped_ptr<ui::TouchHandleDrawable>(new CompositedTouchHandleDrawable( |
| 1130 content_view_core_->GetLayer().get(), | 1131 content_view_core_->GetLayer().get(), |
| 1131 content_view_core_->GetDpiScale(), | 1132 content_view_core_->GetDpiScale(), |
| 1132 // Use the activity context (instead of the application context) to ensure | 1133 // Use the activity context (instead of the application context) to ensure |
| 1133 // proper handle theming. | 1134 // proper handle theming. |
| 1134 content_view_core_->GetContext().obj())); | 1135 content_view_core_->GetContext().obj())); |
| 1135 } | 1136 } |
| 1136 | 1137 |
| 1137 void RenderWidgetHostViewAndroid::SynchronousCopyContents( | 1138 void RenderWidgetHostViewAndroid::SynchronousCopyContents( |
| 1138 const gfx::Rect& src_subrect_in_pixel, | 1139 const gfx::Rect& src_subrect_in_pixel, |
| 1139 const gfx::Size& dst_size_in_pixel, | 1140 const gfx::Size& dst_size_in_pixel, |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1173 !has_fixed_page_scale && !has_mobile_viewport); | 1174 !has_fixed_page_scale && !has_mobile_viewport); |
| 1174 | 1175 |
| 1175 if (!content_view_core_) | 1176 if (!content_view_core_) |
| 1176 return; | 1177 return; |
| 1177 | 1178 |
| 1178 if (overscroll_controller_) | 1179 if (overscroll_controller_) |
| 1179 overscroll_controller_->OnFrameMetadataUpdated(frame_metadata); | 1180 overscroll_controller_->OnFrameMetadataUpdated(frame_metadata); |
| 1180 | 1181 |
| 1181 if (selection_controller_) { | 1182 if (selection_controller_) { |
| 1182 selection_controller_->OnSelectionBoundsChanged( | 1183 selection_controller_->OnSelectionBoundsChanged( |
| 1183 frame_metadata.selection_start, frame_metadata.selection_end); | 1184 ui::SelectionBound(frame_metadata.selection_start), |
| 1185 ui::SelectionBound(frame_metadata.selection_end)); |
| 1184 } | 1186 } |
| 1185 | 1187 |
| 1186 // All offsets and sizes are in CSS pixels. | 1188 // All offsets and sizes are in CSS pixels. |
| 1187 content_view_core_->UpdateFrameInfo( | 1189 content_view_core_->UpdateFrameInfo( |
| 1188 frame_metadata.root_scroll_offset, | 1190 frame_metadata.root_scroll_offset, |
| 1189 frame_metadata.page_scale_factor, | 1191 frame_metadata.page_scale_factor, |
| 1190 gfx::Vector2dF(frame_metadata.min_page_scale_factor, | 1192 gfx::Vector2dF(frame_metadata.min_page_scale_factor, |
| 1191 frame_metadata.max_page_scale_factor), | 1193 frame_metadata.max_page_scale_factor), |
| 1192 frame_metadata.root_layer_size, | 1194 frame_metadata.root_layer_size, |
| 1193 frame_metadata.scrollable_viewport_size, | 1195 frame_metadata.scrollable_viewport_size, |
| (...skipping 558 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1752 results->orientationAngle = display.RotationAsDegree(); | 1754 results->orientationAngle = display.RotationAsDegree(); |
| 1753 results->orientationType = | 1755 results->orientationType = |
| 1754 RenderWidgetHostViewBase::GetOrientationTypeForMobile(display); | 1756 RenderWidgetHostViewBase::GetOrientationTypeForMobile(display); |
| 1755 gfx::DeviceDisplayInfo info; | 1757 gfx::DeviceDisplayInfo info; |
| 1756 results->depth = info.GetBitsPerPixel(); | 1758 results->depth = info.GetBitsPerPixel(); |
| 1757 results->depthPerComponent = info.GetBitsPerComponent(); | 1759 results->depthPerComponent = info.GetBitsPerComponent(); |
| 1758 results->isMonochrome = (results->depthPerComponent == 0); | 1760 results->isMonochrome = (results->depthPerComponent == 0); |
| 1759 } | 1761 } |
| 1760 | 1762 |
| 1761 } // namespace content | 1763 } // namespace content |
| OLD | NEW |