Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(88)

Side by Side Diff: content/browser/android/content_view_core_impl.cc

Issue 128613003: [Tracking Patch] Unified gesture detection (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Cleanup Created 6 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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"
11 #include "base/command_line.h" 11 #include "base/command_line.h"
12 #include "base/json/json_writer.h" 12 #include "base/json/json_writer.h"
13 #include "base/logging.h" 13 #include "base/logging.h"
14 #include "base/metrics/histogram.h" 14 #include "base/metrics/histogram.h"
15 #include "base/strings/utf_string_conversions.h" 15 #include "base/strings/utf_string_conversions.h"
16 #include "base/values.h" 16 #include "base/values.h"
17 #include "cc/layers/layer.h" 17 #include "cc/layers/layer.h"
18 #include "cc/output/begin_frame_args.h" 18 #include "cc/output/begin_frame_args.h"
19 #include "content/browser/android/gesture_event_type.h" 19 #include "content/browser/android/gesture_event_type.h"
20 #include "content/browser/android/interstitial_page_delegate_android.h" 20 #include "content/browser/android/interstitial_page_delegate_android.h"
21 #include "content/browser/android/load_url_params.h" 21 #include "content/browser/android/load_url_params.h"
22 #include "content/browser/frame_host/interstitial_page_impl.h" 22 #include "content/browser/frame_host/interstitial_page_impl.h"
23 #include "content/browser/frame_host/navigation_controller_impl.h" 23 #include "content/browser/frame_host/navigation_controller_impl.h"
24 #include "content/browser/frame_host/navigation_entry_impl.h" 24 #include "content/browser/frame_host/navigation_entry_impl.h"
25 #include "content/browser/media/android/browser_media_player_manager.h" 25 #include "content/browser/media/android/browser_media_player_manager.h"
26 #include "content/browser/renderer_host/compositor_impl_android.h" 26 #include "content/browser/renderer_host/compositor_impl_android.h"
27 #include "content/browser/renderer_host/input/native_web_touch_event.h"
27 #include "content/browser/renderer_host/input/web_input_event_builders_android.h " 28 #include "content/browser/renderer_host/input/web_input_event_builders_android.h "
28 #include "content/browser/renderer_host/java/java_bound_object.h" 29 #include "content/browser/renderer_host/java/java_bound_object.h"
29 #include "content/browser/renderer_host/java/java_bridge_dispatcher_host_manager .h" 30 #include "content/browser/renderer_host/java/java_bridge_dispatcher_host_manager .h"
30 #include "content/browser/renderer_host/render_view_host_impl.h" 31 #include "content/browser/renderer_host/render_view_host_impl.h"
31 #include "content/browser/renderer_host/render_widget_host_impl.h" 32 #include "content/browser/renderer_host/render_widget_host_impl.h"
32 #include "content/browser/renderer_host/render_widget_host_view_android.h" 33 #include "content/browser/renderer_host/render_widget_host_view_android.h"
33 #include "content/browser/ssl/ssl_host_state.h" 34 #include "content/browser/ssl/ssl_host_state.h"
34 #include "content/browser/web_contents/web_contents_view_android.h" 35 #include "content/browser/web_contents/web_contents_view_android.h"
35 #include "content/common/input/web_input_event_traits.h" 36 #include "content/common/input/web_input_event_traits.h"
36 #include "content/common/input_messages.h" 37 #include "content/common/input_messages.h"
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
103 JNIEnv* env, 104 JNIEnv* env,
104 const gfx::Rect& rect) { 105 const gfx::Rect& rect) {
105 return ScopedJavaLocalRef<jobject>( 106 return ScopedJavaLocalRef<jobject>(
106 Java_ContentViewCore_createRect(env, 107 Java_ContentViewCore_createRect(env,
107 static_cast<int>(rect.x()), 108 static_cast<int>(rect.x()),
108 static_cast<int>(rect.y()), 109 static_cast<int>(rect.y()),
109 static_cast<int>(rect.right()), 110 static_cast<int>(rect.right()),
110 static_cast<int>(rect.bottom()))); 111 static_cast<int>(rect.bottom())));
111 } 112 }
112 113
113 bool PossiblyTriggeredByTouchTimeout(const WebGestureEvent& event) { 114 int ToGestureEventType(WebInputEvent::Type type) {
114 switch (event.type) {
115 case WebInputEvent::GestureShowPress:
116 case WebInputEvent::GestureLongPress:
117 return true;
118 // On Android, a GestureTap may be sent after a certain timeout window
119 // if there is no GestureDoubleTap follow-up.
120 case WebInputEvent::GestureTap:
121 return true;
122 // On Android, a GestureTapCancel may be triggered by the loss of window
123 // focus (e.g., following a GestureLongPress).
124 case WebInputEvent::GestureTapCancel:
125 return true;
126 default:
127 break;
128 }
129 return false;
130 }
131
132 int ToContentViewGestureHandlerType(WebInputEvent::Type type) {
133 switch (type) { 115 switch (type) {
134 case WebInputEvent::GestureScrollBegin: 116 case WebInputEvent::GestureScrollBegin:
135 return SCROLL_START; 117 return SCROLL_START;
136 case WebInputEvent::GestureScrollEnd: 118 case WebInputEvent::GestureScrollEnd:
137 return SCROLL_END; 119 return SCROLL_END;
138 case WebInputEvent::GestureScrollUpdate: 120 case WebInputEvent::GestureScrollUpdate:
139 return SCROLL_BY; 121 return SCROLL_BY;
140 case WebInputEvent::GestureFlingStart: 122 case WebInputEvent::GestureFlingStart:
141 return FLING_START; 123 return FLING_START;
142 case WebInputEvent::GestureFlingCancel: 124 case WebInputEvent::GestureFlingCancel:
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
231 java_ref_(env, obj), 213 java_ref_(env, obj),
232 web_contents_(static_cast<WebContentsImpl*>(web_contents)), 214 web_contents_(static_cast<WebContentsImpl*>(web_contents)),
233 root_layer_(cc::Layer::Create()), 215 root_layer_(cc::Layer::Create()),
234 vsync_interval_(base::TimeDelta::FromMicroseconds( 216 vsync_interval_(base::TimeDelta::FromMicroseconds(
235 kDefaultVSyncIntervalMicros)), 217 kDefaultVSyncIntervalMicros)),
236 expected_browser_composite_time_(base::TimeDelta::FromMicroseconds( 218 expected_browser_composite_time_(base::TimeDelta::FromMicroseconds(
237 kDefaultVSyncIntervalMicros * kDefaultBrowserCompositeVSyncFraction)), 219 kDefaultVSyncIntervalMicros * kDefaultBrowserCompositeVSyncFraction)),
238 view_android_(view_android), 220 view_android_(view_android),
239 window_android_(window_android), 221 window_android_(window_android),
240 device_orientation_(0), 222 device_orientation_(0),
241 geolocation_needs_pause_(false), 223 geolocation_needs_pause_(false) {
242 touch_disposition_gesture_filter_(this),
243 handling_touch_event_(false) {
244 CHECK(web_contents) << 224 CHECK(web_contents) <<
245 "A ContentViewCoreImpl should be created with a valid WebContents."; 225 "A ContentViewCoreImpl should be created with a valid WebContents.";
246 226
247 const gfx::Display& display = 227 const gfx::Display& display =
248 gfx::Screen::GetNativeScreen()->GetPrimaryDisplay(); 228 gfx::Screen::GetNativeScreen()->GetPrimaryDisplay();
249 dpi_scale_ = display.device_scale_factor(); 229 dpi_scale_ = display.device_scale_factor();
250 230
251 // Currently, the only use case we have for overriding a user agent involves 231 // Currently, the only use case we have for overriding a user agent involves
252 // spoofing a desktop Linux user agent for "Request desktop site". 232 // spoofing a desktop Linux user agent for "Request desktop site".
253 // Automatically set it for all WebContents so that it is available when a 233 // Automatically set it for all WebContents so that it is available when a
254 // NavigationEntry requires the user agent to be overridden. 234 // NavigationEntry requires the user agent to be overridden.
255 const char kLinuxInfoStr[] = "X11; Linux x86_64"; 235 const char kLinuxInfoStr[] = "X11; Linux x86_64";
256 std::string product = content::GetContentClient()->GetProduct(); 236 std::string product = content::GetContentClient()->GetProduct();
257 std::string spoofed_ua = 237 std::string spoofed_ua =
258 webkit_glue::BuildUserAgentFromOSAndProduct(kLinuxInfoStr, product); 238 webkit_glue::BuildUserAgentFromOSAndProduct(kLinuxInfoStr, product);
259 web_contents->SetUserAgentOverride(spoofed_ua); 239 web_contents->SetUserAgentOverride(spoofed_ua);
260 240
241 gesture_provider_.reset(new ContentGestureProvider(this, 1.f/ dpi_scale_));
242
261 InitWebContents(); 243 InitWebContents();
262 } 244 }
263 245
264 ContentViewCoreImpl::~ContentViewCoreImpl() { 246 ContentViewCoreImpl::~ContentViewCoreImpl() {
265 JNIEnv* env = base::android::AttachCurrentThread(); 247 JNIEnv* env = base::android::AttachCurrentThread();
266 ScopedJavaLocalRef<jobject> j_obj = java_ref_.get(env); 248 ScopedJavaLocalRef<jobject> j_obj = java_ref_.get(env);
267 java_ref_.reset(); 249 java_ref_.reset();
268 if (!j_obj.is_null()) { 250 if (!j_obj.is_null()) {
269 Java_ContentViewCore_onNativeContentViewCoreDestroyed( 251 Java_ContentViewCore_onNativeContentViewCoreDestroyed(
270 env, j_obj.obj(), reinterpret_cast<intptr_t>(this)); 252 env, j_obj.obj(), reinterpret_cast<intptr_t>(this));
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
365 break; 347 break;
366 } 348 }
367 } 349 }
368 } 350 }
369 351
370 void ContentViewCoreImpl::RenderViewReady() { 352 void ContentViewCoreImpl::RenderViewReady() {
371 if (device_orientation_ != 0) 353 if (device_orientation_ != 0)
372 SendOrientationChangeEventInternal(); 354 SendOrientationChangeEventInternal();
373 } 355 }
374 356
375 void ContentViewCoreImpl::ForwardGestureEvent( 357 void ContentViewCoreImpl::OnGestureEvent(const blink::WebGestureEvent& event) {
376 const blink::WebGestureEvent& event) { 358 SendGestureEvent(event);
377 RenderWidgetHostViewAndroid* rwhv = GetRenderWidgetHostViewAndroid();
378 if (rwhv)
379 rwhv->SendGestureEvent(event);
380 } 359 }
381 360
382 RenderWidgetHostViewAndroid* 361 RenderWidgetHostViewAndroid*
383 ContentViewCoreImpl::GetRenderWidgetHostViewAndroid() { 362 ContentViewCoreImpl::GetRenderWidgetHostViewAndroid() {
384 RenderWidgetHostView* rwhv = NULL; 363 RenderWidgetHostView* rwhv = NULL;
385 if (web_contents_) { 364 if (web_contents_) {
386 rwhv = web_contents_->GetRenderWidgetHostView(); 365 rwhv = web_contents_->GetRenderWidgetHostView();
387 if (web_contents_->ShowingInterstitialPage()) { 366 if (web_contents_->ShowingInterstitialPage()) {
388 rwhv = static_cast<InterstitialPageImpl*>( 367 rwhv = static_cast<InterstitialPageImpl*>(
389 web_contents_->GetInterstitialPage())-> 368 web_contents_->GetInterstitialPage())->
(...skipping 167 matching lines...) Expand 10 before | Expand all | Expand 10 after
557 env->SetIntArrayRegion(enabled_array.obj(), i, 1, &enabled); 536 env->SetIntArrayRegion(enabled_array.obj(), i, 1, &enabled);
558 } 537 }
559 ScopedJavaLocalRef<jobjectArray> items_array( 538 ScopedJavaLocalRef<jobjectArray> items_array(
560 base::android::ToJavaArrayOfStrings(env, labels)); 539 base::android::ToJavaArrayOfStrings(env, labels));
561 Java_ContentViewCore_showSelectPopup(env, j_obj.obj(), 540 Java_ContentViewCore_showSelectPopup(env, j_obj.obj(),
562 items_array.obj(), enabled_array.obj(), 541 items_array.obj(), enabled_array.obj(),
563 multiple, selected_array.obj()); 542 multiple, selected_array.obj());
564 } 543 }
565 544
566 void ContentViewCoreImpl::ConfirmTouchEvent(InputEventAckState ack_result) { 545 void ContentViewCoreImpl::ConfirmTouchEvent(InputEventAckState ack_result) {
567 touch_disposition_gesture_filter_.OnTouchEventAck(ack_result); 546 gesture_provider_->OnTouchEventAck(ack_result);
568 } 547 }
569 548
570 void ContentViewCoreImpl::OnGestureEventAck(const blink::WebGestureEvent& event, 549 void ContentViewCoreImpl::OnGestureEventAck(const blink::WebGestureEvent& event,
571 InputEventAckState ack_result) { 550 InputEventAckState ack_result) {
572 JNIEnv* env = AttachCurrentThread(); 551 JNIEnv* env = AttachCurrentThread();
573 ScopedJavaLocalRef<jobject> j_obj = java_ref_.get(env); 552 ScopedJavaLocalRef<jobject> j_obj = java_ref_.get(env);
574 if (j_obj.is_null()) 553 if (j_obj.is_null())
575 return; 554 return;
576 555
577 switch (event.type) { 556 switch (event.type) {
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
625 event.type != WebInputEvent::GestureLongPress) 604 event.type != WebInputEvent::GestureLongPress)
626 return false; 605 return false;
627 606
628 JNIEnv* env = AttachCurrentThread(); 607 JNIEnv* env = AttachCurrentThread();
629 ScopedJavaLocalRef<jobject> j_obj = java_ref_.get(env); 608 ScopedJavaLocalRef<jobject> j_obj = java_ref_.get(env);
630 if (j_obj.is_null()) 609 if (j_obj.is_null())
631 return false; 610 return false;
632 611
633 const blink::WebGestureEvent& gesture = 612 const blink::WebGestureEvent& gesture =
634 static_cast<const blink::WebGestureEvent&>(event); 613 static_cast<const blink::WebGestureEvent&>(event);
635 int gesture_type = ToContentViewGestureHandlerType(event.type); 614 int gesture_type = ToGestureEventType(event.type);
636 return Java_ContentViewCore_filterTapOrPressEvent(env, 615 return Java_ContentViewCore_filterTapOrPressEvent(env,
637 j_obj.obj(), 616 j_obj.obj(),
638 gesture_type, 617 gesture_type,
639 gesture.x, 618 gesture.x,
640 gesture.y); 619 gesture.y);
641 } 620 }
642 621
643 bool ContentViewCoreImpl::HasFocus() { 622 bool ContentViewCoreImpl::HasFocus() {
644 JNIEnv* env = AttachCurrentThread(); 623 JNIEnv* env = AttachCurrentThread();
645 ScopedJavaLocalRef<jobject> obj = java_ref_.get(env); 624 ScopedJavaLocalRef<jobject> obj = java_ref_.get(env);
(...skipping 363 matching lines...) Expand 10 before | Expand all | Expand 10 after
1009 988
1010 void ContentViewCoreImpl::SendOrientationChangeEvent(JNIEnv* env, 989 void ContentViewCoreImpl::SendOrientationChangeEvent(JNIEnv* env,
1011 jobject obj, 990 jobject obj,
1012 jint orientation) { 991 jint orientation) {
1013 if (device_orientation_ != orientation) { 992 if (device_orientation_ != orientation) {
1014 device_orientation_ = orientation; 993 device_orientation_ = orientation;
1015 SendOrientationChangeEventInternal(); 994 SendOrientationChangeEventInternal();
1016 } 995 }
1017 } 996 }
1018 997
1019 void ContentViewCoreImpl::OnTouchEventHandlingBegin(JNIEnv* env, 998 jboolean ContentViewCoreImpl::OnTouchEvent(JNIEnv* env,
1020 jobject obj, 999 jobject obj,
1021 jobject motion_event) { 1000 jobject motion_event) {
1022 DCHECK(!handling_touch_event_);
1023 handling_touch_event_ = true;
1024
1025 pending_touch_event_ =
1026 WebTouchEventBuilder::Build(motion_event, GetDpiScale());
1027
1028 pending_gesture_packet_ =
1029 GestureEventPacket::FromTouch(pending_touch_event_);
1030 }
1031
1032 void ContentViewCoreImpl::OnTouchEventHandlingEnd(JNIEnv* env, jobject obj) {
1033 DCHECK(handling_touch_event_);
1034 handling_touch_event_ = false;
1035
1036 RenderWidgetHostViewAndroid* rwhv = GetRenderWidgetHostViewAndroid(); 1001 RenderWidgetHostViewAndroid* rwhv = GetRenderWidgetHostViewAndroid();
1037 if (!rwhv) 1002 if (!rwhv)
1038 return; 1003 return false;
1039 1004
1040 // Note: Order is important here, as the touch may be ack'ed synchronously 1005 NativeWebTouchEvent touch_event(motion_event, false, GetDpiScale());
1041 TouchDispositionGestureFilter::PacketResult result = 1006
1042 touch_disposition_gesture_filter_.OnGestureEventPacket( 1007 if (!gesture_provider_->OnTouchEvent(touch_event))
1043 pending_gesture_packet_); 1008 return false;
1044 if (result != TouchDispositionGestureFilter::SUCCESS) { 1009
1045 NOTREACHED() << "Invalid touch gesture sequence detected."; 1010 rwhv->SendTouchEvent(touch_event);
1046 return; 1011 return true;
1047 }
1048 rwhv->SendTouchEvent(pending_touch_event_);
1049 } 1012 }
1050 1013
1051 float ContentViewCoreImpl::GetTouchPaddingDip() { 1014 float ContentViewCoreImpl::GetTouchPaddingDip() {
1052 return 48.0f / GetDpiScale(); 1015 return 48.0f / GetDpiScale();
1053 } 1016 }
1054 1017
1055 float ContentViewCoreImpl::GetDpiScale() const { 1018 float ContentViewCoreImpl::GetDpiScale() const {
1056 return dpi_scale_; 1019 return dpi_scale_;
1057 } 1020 }
1058 1021
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
1108 } 1071 }
1109 1072
1110 WebGestureEvent ContentViewCoreImpl::MakeGestureEvent( 1073 WebGestureEvent ContentViewCoreImpl::MakeGestureEvent(
1111 WebInputEvent::Type type, int64 time_ms, float x, float y) const { 1074 WebInputEvent::Type type, int64 time_ms, float x, float y) const {
1112 return WebGestureEventBuilder::Build( 1075 return WebGestureEventBuilder::Build(
1113 type, time_ms / 1000.0, x / GetDpiScale(), y / GetDpiScale()); 1076 type, time_ms / 1000.0, x / GetDpiScale(), y / GetDpiScale());
1114 } 1077 }
1115 1078
1116 void ContentViewCoreImpl::SendGestureEvent( 1079 void ContentViewCoreImpl::SendGestureEvent(
1117 const blink::WebGestureEvent& event) { 1080 const blink::WebGestureEvent& event) {
1118 // Gestures received while |handling_touch_event_| will accumulate until 1081 RenderWidgetHostViewAndroid* rwhv = GetRenderWidgetHostViewAndroid();
1119 // touch handling finishes, at which point the gestures will be pushed to the 1082 if (rwhv)
1120 // |touch_disposition_gesture_filter_|. 1083 rwhv->SendGestureEvent(event);
1121 if (handling_touch_event_) {
1122 pending_gesture_packet_.Push(event);
1123 return;
1124 }
1125
1126 // TODO(jdduke): In general, timeout-based gestures *should* have the same
1127 // timestamp as the initial TouchStart of the current sequence. We should
1128 // verify that this is true, and use that as another timeout check.
1129 if (PossiblyTriggeredByTouchTimeout(event)) {
1130 TouchDispositionGestureFilter::PacketResult result =
1131 touch_disposition_gesture_filter_.OnGestureEventPacket(
1132 GestureEventPacket::FromTouchTimeout(event));
1133 DCHECK_EQ(TouchDispositionGestureFilter::SUCCESS, result);
1134 return;
1135 }
1136
1137 // If |event| was not (directly or indirectly) touch-derived, treat it as
1138 // a synthetic gesture event.
1139 SendSyntheticGestureEvent(event);
1140 }
1141
1142 void ContentViewCoreImpl::SendSyntheticGestureEvent(
1143 const blink::WebGestureEvent& event) {
1144 // Synthetic gestures (e.g., those not generated directly by touches
1145 // for which we expect an ack), should be forwarded directly.
1146 ForwardGestureEvent(event);
1147 } 1084 }
1148 1085
1149 void ContentViewCoreImpl::ScrollBegin(JNIEnv* env, 1086 void ContentViewCoreImpl::ScrollBegin(JNIEnv* env,
1150 jobject obj, 1087 jobject obj,
1151 jlong time_ms, 1088 jlong time_ms,
1152 jfloat x, 1089 jfloat x,
1153 jfloat y, 1090 jfloat y,
1154 jfloat hintx, 1091 jfloat hintx,
1155 jfloat hinty) { 1092 jfloat hinty) {
1156 WebGestureEvent event = MakeGestureEvent( 1093 WebGestureEvent event = MakeGestureEvent(
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
1198 jfloat x, jfloat y, 1135 jfloat x, jfloat y,
1199 jboolean disambiguation_popup_tap) { 1136 jboolean disambiguation_popup_tap) {
1200 WebGestureEvent event = MakeGestureEvent( 1137 WebGestureEvent event = MakeGestureEvent(
1201 WebInputEvent::GestureTap, time_ms, x, y); 1138 WebInputEvent::GestureTap, time_ms, x, y);
1202 1139
1203 event.data.tap.tapCount = 1; 1140 event.data.tap.tapCount = 1;
1204 1141
1205 // Disambiguation popup gestures are treated as synthetic because their 1142 // Disambiguation popup gestures are treated as synthetic because their
1206 // generating touches were never forwarded to the renderer. 1143 // generating touches were never forwarded to the renderer.
1207 if (disambiguation_popup_tap) { 1144 if (disambiguation_popup_tap) {
1208 SendSyntheticGestureEvent(event); 1145 SendGestureEvent(event);
1209 return; 1146 return;
1210 } 1147 }
1211 1148
1212 const float touch_padding_dip = GetTouchPaddingDip(); 1149 const float touch_padding_dip = GetTouchPaddingDip();
1213 event.data.tap.width = touch_padding_dip; 1150 event.data.tap.width = touch_padding_dip;
1214 event.data.tap.height = touch_padding_dip; 1151 event.data.tap.height = touch_padding_dip;
1215 SendGestureEvent(event); 1152 SendGestureEvent(event);
1216 } 1153 }
1217 1154
1218 void ContentViewCoreImpl::SingleTapUnconfirmed(JNIEnv* env, jobject obj,
1219 jlong time_ms,
1220 jfloat x, jfloat y) {
1221 WebGestureEvent event = MakeGestureEvent(
1222 WebInputEvent::GestureTapUnconfirmed, time_ms, x, y);
1223
1224 event.data.tap.tapCount = 1;
1225
1226 const float touch_padding_dip = GetTouchPaddingDip();
1227 event.data.tap.width = touch_padding_dip;
1228 event.data.tap.height = touch_padding_dip;
1229
1230 SendGestureEvent(event);
1231 }
1232
1233 void ContentViewCoreImpl::ShowPress(JNIEnv* env, jobject obj,
1234 jlong time_ms,
1235 jfloat x, jfloat y) {
1236 WebGestureEvent event = MakeGestureEvent(
1237 WebInputEvent::GestureShowPress, time_ms, x, y);
1238 SendGestureEvent(event);
1239 }
1240
1241 void ContentViewCoreImpl::TapCancel(JNIEnv* env,
1242 jobject obj,
1243 jlong time_ms,
1244 jfloat x,
1245 jfloat y) {
1246 WebGestureEvent event = MakeGestureEvent(
1247 WebInputEvent::GestureTapCancel, time_ms, x, y);
1248 SendGestureEvent(event);
1249 }
1250
1251 void ContentViewCoreImpl::TapDown(JNIEnv* env, jobject obj,
1252 jlong time_ms,
1253 jfloat x, jfloat y) {
1254 WebGestureEvent event = MakeGestureEvent(
1255 WebInputEvent::GestureTapDown, time_ms, x, y);
1256 SendGestureEvent(event);
1257 }
1258
1259 void ContentViewCoreImpl::DoubleTap(JNIEnv* env, jobject obj, jlong time_ms, 1155 void ContentViewCoreImpl::DoubleTap(JNIEnv* env, jobject obj, jlong time_ms,
1260 jfloat x, jfloat y) { 1156 jfloat x, jfloat y) {
1261 WebGestureEvent event = MakeGestureEvent( 1157 WebGestureEvent event = MakeGestureEvent(
1262 WebInputEvent::GestureDoubleTap, time_ms, x, y); 1158 WebInputEvent::GestureDoubleTap, time_ms, x, y);
1263 SendGestureEvent(event); 1159 SendGestureEvent(event);
1264 } 1160 }
1265 1161
1266 void ContentViewCoreImpl::LongPress(JNIEnv* env, jobject obj, jlong time_ms, 1162 void ContentViewCoreImpl::LongPress(JNIEnv* env, jobject obj, jlong time_ms,
1267 jfloat x, jfloat y, 1163 jfloat x, jfloat y,
1268 jboolean disambiguation_popup_tap) { 1164 jboolean disambiguation_popup_tap) {
1269 WebGestureEvent event = MakeGestureEvent( 1165 WebGestureEvent event = MakeGestureEvent(
1270 WebInputEvent::GestureLongPress, time_ms, x, y); 1166 WebInputEvent::GestureLongPress, time_ms, x, y);
1271 1167
1272 // Disambiguation popup gestures are treated as synthetic because their 1168 // Disambiguation popup gestures are treated as synthetic because their
1273 // generating touches were never forwarded to the renderer. 1169 // generating touches were never forwarded to the renderer.
1274 if (disambiguation_popup_tap) { 1170 if (disambiguation_popup_tap) {
1275 SendSyntheticGestureEvent(event); 1171 SendGestureEvent(event);
1276 return; 1172 return;
1277 } 1173 }
1278 1174
1279 const float touch_padding_dip = GetTouchPaddingDip();
1280 event.data.longPress.width = touch_padding_dip;
1281 event.data.longPress.height = touch_padding_dip;
1282 SendGestureEvent(event);
1283 }
1284
1285 void ContentViewCoreImpl::LongTap(JNIEnv* env, jobject obj, jlong time_ms,
1286 jfloat x, jfloat y,
1287 jboolean disambiguation_popup_tap) {
1288 WebGestureEvent event = MakeGestureEvent(
1289 WebInputEvent::GestureLongTap, time_ms, x, y);
1290
1291 // Disambiguation popup gestures are treated as synthetic because their
1292 // generating touches were never forwarded to the renderer.
1293 if (disambiguation_popup_tap) {
1294 SendSyntheticGestureEvent(event);
1295 return;
1296 }
1297
1298 const float touch_padding_dip = GetTouchPaddingDip(); 1175 const float touch_padding_dip = GetTouchPaddingDip();
1299 event.data.longPress.width = touch_padding_dip; 1176 event.data.longPress.width = touch_padding_dip;
1300 event.data.longPress.height = touch_padding_dip; 1177 event.data.longPress.height = touch_padding_dip;
1301 SendGestureEvent(event); 1178 SendGestureEvent(event);
1302 } 1179 }
1303 1180
1304 void ContentViewCoreImpl::PinchBegin(JNIEnv* env, jobject obj, jlong time_ms, 1181 void ContentViewCoreImpl::PinchBegin(JNIEnv* env, jobject obj, jlong time_ms,
1305 jfloat x, jfloat y) { 1182 jfloat x, jfloat y) {
1306 WebGestureEvent event = MakeGestureEvent( 1183 WebGestureEvent event = MakeGestureEvent(
1307 WebInputEvent::GesturePinchBegin, time_ms, x, y); 1184 WebInputEvent::GesturePinchBegin, time_ms, x, y);
(...skipping 27 matching lines...) Expand all
1335 } 1212 }
1336 1213
1337 void ContentViewCoreImpl::MoveCaret(JNIEnv* env, jobject obj, 1214 void ContentViewCoreImpl::MoveCaret(JNIEnv* env, jobject obj,
1338 jfloat x, jfloat y) { 1215 jfloat x, jfloat y) {
1339 if (GetRenderWidgetHostViewAndroid()) { 1216 if (GetRenderWidgetHostViewAndroid()) {
1340 GetRenderWidgetHostViewAndroid()->MoveCaret( 1217 GetRenderWidgetHostViewAndroid()->MoveCaret(
1341 gfx::Point(x / GetDpiScale(), y / GetDpiScale())); 1218 gfx::Point(x / GetDpiScale(), y / GetDpiScale()));
1342 } 1219 }
1343 } 1220 }
1344 1221
1222 void ContentViewCoreImpl::ResetGestureDetectors(JNIEnv* env, jobject obj) {
1223 gesture_provider_->ResetGestureDetectors();
1224 }
1225
1226 void ContentViewCoreImpl::IgnoreRemainingTouchEvents(JNIEnv* env, jobject obj) {
1227 gesture_provider_->CancelActiveTouchSequence();
1228 }
1229
1230 void ContentViewCoreImpl::OnWindowFocusLost(JNIEnv* env, jobject obj) {
1231 gesture_provider_->CancelActiveTouchSequence();
1232 }
1233
1234 void ContentViewCoreImpl::UpdateDoubleTapSupportForPage(JNIEnv* env,
1235 jobject obj,
1236 jboolean has_support) {
1237 gesture_provider_->UpdateDoubleTapSupportForPage(has_support);
1238 }
1239
1240 void ContentViewCoreImpl::UpdateDoubleTapSupport(JNIEnv* env,
1241 jobject obj,
1242 jboolean has_support) {
1243 gesture_provider_->UpdateDoubleTapSupportForPlatform(has_support);
1244 }
1245
1246 void ContentViewCoreImpl::UpdateMultiTouchZoomSupport(JNIEnv* env,
1247 jobject obj,
1248 jboolean has_support) {
1249 gesture_provider_->UpdateMultiTouchSupport(has_support);
1250 }
1251
1345 void ContentViewCoreImpl::LoadIfNecessary(JNIEnv* env, jobject obj) { 1252 void ContentViewCoreImpl::LoadIfNecessary(JNIEnv* env, jobject obj) {
1346 web_contents_->GetController().LoadIfNecessary(); 1253 web_contents_->GetController().LoadIfNecessary();
1347 } 1254 }
1348 1255
1349 void ContentViewCoreImpl::RequestRestoreLoad(JNIEnv* env, jobject obj) { 1256 void ContentViewCoreImpl::RequestRestoreLoad(JNIEnv* env, jobject obj) {
1350 web_contents_->GetController().SetNeedsReload(); 1257 web_contents_->GetController().SetNeedsReload();
1351 } 1258 }
1352 1259
1353 void ContentViewCoreImpl::StopLoading(JNIEnv* env, jobject obj) { 1260 void ContentViewCoreImpl::StopLoading(JNIEnv* env, jobject obj) {
1354 web_contents_->Stop(); 1261 web_contents_->Stop();
(...skipping 417 matching lines...) Expand 10 before | Expand all | Expand 10 after
1772 // If it was actually enabled globally, enable it for this RenderWidget now. 1679 // If it was actually enabled globally, enable it for this RenderWidget now.
1773 if (accessibility_state->IsAccessibleBrowser() && host_impl) 1680 if (accessibility_state->IsAccessibleBrowser() && host_impl)
1774 host_impl->AddAccessibilityMode(AccessibilityModeComplete); 1681 host_impl->AddAccessibilityMode(AccessibilityModeComplete);
1775 } else { 1682 } else {
1776 accessibility_state->ResetAccessibilityMode(); 1683 accessibility_state->ResetAccessibilityMode();
1777 if (host_impl) 1684 if (host_impl)
1778 host_impl->ResetAccessibilityMode(); 1685 host_impl->ResetAccessibilityMode();
1779 } 1686 }
1780 } 1687 }
1781 1688
1782 void ContentViewCoreImpl::SendSingleTapUma(JNIEnv* env,
1783 jobject obj,
1784 jint type,
1785 jint count) {
1786 UMA_HISTOGRAM_ENUMERATION("Event.SingleTapType", type, count);
1787 }
1788
1789 void ContentViewCoreImpl::SendActionAfterDoubleTapUma(JNIEnv* env,
1790 jobject obj,
1791 jint type,
1792 jboolean has_delay,
1793 jint count) {
1794 // This UMA stat tracks a user's action after a double tap within
1795 // k seconds (where k == 5 currently). This UMA will tell us if
1796 // removing the tap gesture delay will lead to significantly more
1797 // accidental navigations after a double tap.
1798 if (has_delay) {
1799 UMA_HISTOGRAM_ENUMERATION("Event.ActionAfterDoubleTapWithDelay", type,
1800 count);
1801 } else {
1802 UMA_HISTOGRAM_ENUMERATION("Event.ActionAfterDoubleTapNoDelay", type,
1803 count);
1804 }
1805 }
1806
1807 void ContentViewCoreImpl::SendOrientationChangeEventInternal() { 1689 void ContentViewCoreImpl::SendOrientationChangeEventInternal() {
1808 RenderWidgetHostViewAndroid* rwhv = GetRenderWidgetHostViewAndroid(); 1690 RenderWidgetHostViewAndroid* rwhv = GetRenderWidgetHostViewAndroid();
1809 if (rwhv) 1691 if (rwhv)
1810 rwhv->UpdateScreenInfo(rwhv->GetNativeView()); 1692 rwhv->UpdateScreenInfo(rwhv->GetNativeView());
1811 1693
1812 RenderViewHostImpl* rvhi = static_cast<RenderViewHostImpl*>( 1694 RenderViewHostImpl* rvhi = static_cast<RenderViewHostImpl*>(
1813 web_contents_->GetRenderViewHost()); 1695 web_contents_->GetRenderViewHost());
1814 rvhi->SendOrientationChangeEvent(device_orientation_); 1696 rvhi->SendOrientationChangeEvent(device_orientation_);
1815 } 1697 }
1816 1698
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
1861 reinterpret_cast<ui::ViewAndroid*>(view_android), 1743 reinterpret_cast<ui::ViewAndroid*>(view_android),
1862 reinterpret_cast<ui::WindowAndroid*>(window_android)); 1744 reinterpret_cast<ui::WindowAndroid*>(window_android));
1863 return reinterpret_cast<intptr_t>(view); 1745 return reinterpret_cast<intptr_t>(view);
1864 } 1746 }
1865 1747
1866 bool RegisterContentViewCore(JNIEnv* env) { 1748 bool RegisterContentViewCore(JNIEnv* env) {
1867 return RegisterNativesImpl(env); 1749 return RegisterNativesImpl(env);
1868 } 1750 }
1869 1751
1870 } // namespace content 1752 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698