OLD | NEW |
1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 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/android/content_view_core_impl.h" | 5 #include "content/browser/android/content_view_core_impl.h" |
6 | 6 |
7 #include "base/android/jni_android.h" | 7 #include "base/android/jni_android.h" |
8 #include "base/android/jni_array.h" | 8 #include "base/android/jni_array.h" |
9 #include "base/android/jni_string.h" | 9 #include "base/android/jni_string.h" |
10 #include "base/android/scoped_java_ref.h" | 10 #include "base/android/scoped_java_ref.h" |
(...skipping 241 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
252 web_contents_(static_cast<WebContentsImpl*>(web_contents)), | 252 web_contents_(static_cast<WebContentsImpl*>(web_contents)), |
253 root_layer_(cc::Layer::Create()), | 253 root_layer_(cc::Layer::Create()), |
254 vsync_interval_(base::TimeDelta::FromMicroseconds( | 254 vsync_interval_(base::TimeDelta::FromMicroseconds( |
255 kDefaultVSyncIntervalMicros)), | 255 kDefaultVSyncIntervalMicros)), |
256 expected_browser_composite_time_(base::TimeDelta::FromMicroseconds( | 256 expected_browser_composite_time_(base::TimeDelta::FromMicroseconds( |
257 kDefaultVSyncIntervalMicros * kDefaultBrowserCompositeVSyncFraction)), | 257 kDefaultVSyncIntervalMicros * kDefaultBrowserCompositeVSyncFraction)), |
258 view_android_(view_android), | 258 view_android_(view_android), |
259 window_android_(window_android), | 259 window_android_(window_android), |
260 device_orientation_(0), | 260 device_orientation_(0), |
261 geolocation_needs_pause_(false), | 261 geolocation_needs_pause_(false), |
262 gesture_event_queue_(this), | 262 touch_disposition_gesture_filter_(this), |
263 handling_touch_event_(false) { | 263 handling_touch_event_(false) { |
264 CHECK(web_contents) << | 264 CHECK(web_contents) << |
265 "A ContentViewCoreImpl should be created with a valid WebContents."; | 265 "A ContentViewCoreImpl should be created with a valid WebContents."; |
266 | 266 |
267 const gfx::Display& display = | 267 const gfx::Display& display = |
268 gfx::Screen::GetNativeScreen()->GetPrimaryDisplay(); | 268 gfx::Screen::GetNativeScreen()->GetPrimaryDisplay(); |
269 dpi_scale_ = display.device_scale_factor(); | 269 dpi_scale_ = display.device_scale_factor(); |
270 | 270 |
271 // Currently, the only use case we have for overriding a user agent involves | 271 // Currently, the only use case we have for overriding a user agent involves |
272 // spoofing a desktop Linux user agent for "Request desktop site". | 272 // spoofing a desktop Linux user agent for "Request desktop site". |
(...skipping 306 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
579 env->SetIntArrayRegion(enabled_array.obj(), i, 1, &enabled); | 579 env->SetIntArrayRegion(enabled_array.obj(), i, 1, &enabled); |
580 } | 580 } |
581 ScopedJavaLocalRef<jobjectArray> items_array( | 581 ScopedJavaLocalRef<jobjectArray> items_array( |
582 base::android::ToJavaArrayOfStrings(env, labels)); | 582 base::android::ToJavaArrayOfStrings(env, labels)); |
583 Java_ContentViewCore_showSelectPopup(env, j_obj.obj(), | 583 Java_ContentViewCore_showSelectPopup(env, j_obj.obj(), |
584 items_array.obj(), enabled_array.obj(), | 584 items_array.obj(), enabled_array.obj(), |
585 multiple, selected_array.obj()); | 585 multiple, selected_array.obj()); |
586 } | 586 } |
587 | 587 |
588 void ContentViewCoreImpl::ConfirmTouchEvent(InputEventAckState ack_result) { | 588 void ContentViewCoreImpl::ConfirmTouchEvent(InputEventAckState ack_result) { |
589 gesture_event_queue_.OnTouchEventAck(ack_result); | 589 touch_disposition_gesture_filter_.OnTouchEventAck(ack_result); |
590 } | 590 } |
591 | 591 |
592 void ContentViewCoreImpl::OnGestureEventAck(const blink::WebGestureEvent& event, | 592 void ContentViewCoreImpl::OnGestureEventAck(const blink::WebGestureEvent& event, |
593 InputEventAckState ack_result) { | 593 InputEventAckState ack_result) { |
594 JNIEnv* env = AttachCurrentThread(); | 594 JNIEnv* env = AttachCurrentThread(); |
595 ScopedJavaLocalRef<jobject> j_obj = java_ref_.get(env); | 595 ScopedJavaLocalRef<jobject> j_obj = java_ref_.get(env); |
596 if (j_obj.is_null()) | 596 if (j_obj.is_null()) |
597 return; | 597 return; |
598 | 598 |
599 switch (event.type) { | 599 switch (event.type) { |
(...skipping 444 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1044 | 1044 |
1045 void ContentViewCoreImpl::OnTouchEventHandlingEnd(JNIEnv* env, jobject obj) { | 1045 void ContentViewCoreImpl::OnTouchEventHandlingEnd(JNIEnv* env, jobject obj) { |
1046 DCHECK(handling_touch_event_); | 1046 DCHECK(handling_touch_event_); |
1047 handling_touch_event_ = false; | 1047 handling_touch_event_ = false; |
1048 | 1048 |
1049 RenderWidgetHostViewAndroid* rwhv = GetRenderWidgetHostViewAndroid(); | 1049 RenderWidgetHostViewAndroid* rwhv = GetRenderWidgetHostViewAndroid(); |
1050 if (!rwhv) | 1050 if (!rwhv) |
1051 return; | 1051 return; |
1052 | 1052 |
1053 // Note: Order is important here, as the touch may be ack'ed synchronously | 1053 // Note: Order is important here, as the touch may be ack'ed synchronously |
1054 gesture_event_queue_.OnGestureEventPacket(pending_gesture_packet_); | 1054 touch_disposition_gesture_filter_.OnGestureEventPacket( |
| 1055 pending_gesture_packet_); |
1055 rwhv->SendTouchEvent(pending_touch_event_); | 1056 rwhv->SendTouchEvent(pending_touch_event_); |
1056 } | 1057 } |
1057 | 1058 |
1058 float ContentViewCoreImpl::GetTouchPaddingDip() { | 1059 float ContentViewCoreImpl::GetTouchPaddingDip() { |
1059 return 48.0f / GetDpiScale(); | 1060 return 48.0f / GetDpiScale(); |
1060 } | 1061 } |
1061 | 1062 |
1062 float ContentViewCoreImpl::GetDpiScale() const { | 1063 float ContentViewCoreImpl::GetDpiScale() const { |
1063 return dpi_scale_; | 1064 return dpi_scale_; |
1064 } | 1065 } |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1117 WebGestureEvent ContentViewCoreImpl::MakeGestureEvent( | 1118 WebGestureEvent ContentViewCoreImpl::MakeGestureEvent( |
1118 WebInputEvent::Type type, int64 time_ms, float x, float y) const { | 1119 WebInputEvent::Type type, int64 time_ms, float x, float y) const { |
1119 return WebGestureEventBuilder::Build( | 1120 return WebGestureEventBuilder::Build( |
1120 type, time_ms / 1000.0, x / GetDpiScale(), y / GetDpiScale()); | 1121 type, time_ms / 1000.0, x / GetDpiScale(), y / GetDpiScale()); |
1121 } | 1122 } |
1122 | 1123 |
1123 void ContentViewCoreImpl::SendGestureEvent( | 1124 void ContentViewCoreImpl::SendGestureEvent( |
1124 const blink::WebGestureEvent& event) { | 1125 const blink::WebGestureEvent& event) { |
1125 // Gestures received while |handling_touch_event_| will accumulate until | 1126 // Gestures received while |handling_touch_event_| will accumulate until |
1126 // touch handling finishes, at which point the gestures will be pushed to the | 1127 // touch handling finishes, at which point the gestures will be pushed to the |
1127 // |gesture_event_queue_|. | 1128 // |touch_disposition_gesture_filter_|. |
1128 if (handling_touch_event_) { | 1129 if (handling_touch_event_) { |
1129 pending_gesture_packet_.Push(event); | 1130 pending_gesture_packet_.Push(event); |
1130 return; | 1131 return; |
1131 } | 1132 } |
1132 | 1133 |
1133 // TODO(jdduke): In general, timeout-based gestures *should* have the same | 1134 // TODO(jdduke): In general, timeout-based gestures *should* have the same |
1134 // timestamp as the initial TouchStart of the current sequence. We should | 1135 // timestamp as the initial TouchStart of the current sequence. We should |
1135 // verify that this is true, and use that as another timeout check. | 1136 // verify that this is true, and use that as another timeout check. |
1136 if (PossiblyTriggeredByTouchTimeout(event)) { | 1137 if (PossiblyTriggeredByTouchTimeout(event)) { |
1137 gesture_event_queue_.OnGestureEventPacket( | 1138 touch_disposition_gesture_filter_.OnGestureEventPacket( |
1138 GestureEventPacket::FromTouchTimeout(event)); | 1139 GestureEventPacket::FromTouchTimeout(event)); |
1139 return; | 1140 return; |
1140 } | 1141 } |
1141 | 1142 |
1142 // If |event| was not (directly or indirectly) touch-derived, treat it as | 1143 // If |event| was not (directly or indirectly) touch-derived, treat it as |
1143 // a synthetic gesture event. | 1144 // a synthetic gesture event. |
1144 SendSyntheticGestureEvent(event); | 1145 SendSyntheticGestureEvent(event); |
1145 } | 1146 } |
1146 | 1147 |
1147 void ContentViewCoreImpl::SendSyntheticGestureEvent( | 1148 void ContentViewCoreImpl::SendSyntheticGestureEvent( |
(...skipping 720 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1868 reinterpret_cast<ui::ViewAndroid*>(view_android), | 1869 reinterpret_cast<ui::ViewAndroid*>(view_android), |
1869 reinterpret_cast<ui::WindowAndroid*>(window_android)); | 1870 reinterpret_cast<ui::WindowAndroid*>(window_android)); |
1870 return reinterpret_cast<intptr_t>(view); | 1871 return reinterpret_cast<intptr_t>(view); |
1871 } | 1872 } |
1872 | 1873 |
1873 bool RegisterContentViewCore(JNIEnv* env) { | 1874 bool RegisterContentViewCore(JNIEnv* env) { |
1874 return RegisterNativesImpl(env); | 1875 return RegisterNativesImpl(env); |
1875 } | 1876 } |
1876 | 1877 |
1877 } // namespace content | 1878 } // namespace content |
OLD | NEW |