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

Unified Diff: content/browser/android/content_view_core_impl.cc

Issue 178193022: [Android] Always insert a TouchCancel if window or tab focus is lost (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase 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 side-by-side diff with in-line comments
Download patch
Index: content/browser/android/content_view_core_impl.cc
diff --git a/content/browser/android/content_view_core_impl.cc b/content/browser/android/content_view_core_impl.cc
index 3452b26e4bb65034c8d8ec8b13b33e09dc7dce50..b2a5b045a93231bd460af02043af871e7adece1c 100644
--- a/content/browser/android/content_view_core_impl.cc
+++ b/content/browser/android/content_view_core_impl.cc
@@ -26,6 +26,7 @@
#include "content/browser/renderer_host/compositor_impl_android.h"
#include "content/browser/renderer_host/input/motion_event_android.h"
#include "content/browser/renderer_host/input/web_input_event_builders_android.h"
+#include "content/browser/renderer_host/input/web_input_event_util.h"
#include "content/browser/renderer_host/java/java_bound_object.h"
#include "content/browser/renderer_host/java/java_bridge_dispatcher_host_manager.h"
#include "content/browser/renderer_host/render_view_host_impl.h"
@@ -994,6 +995,26 @@ void ContentViewCoreImpl::SendOrientationChangeEvent(JNIEnv* env,
}
}
+void ContentViewCoreImpl::CancelActiveTouchSequenceIfNecessary() {
+ RenderWidgetHostViewAndroid* rwhv = GetRenderWidgetHostViewAndroid();
+ // Avoid synthesizing a touch cancel event if it cannot be forwarded.
+ if (!rwhv)
+ return;
+
+ const ui::MotionEvent* current_down_event =
+ gesture_provider_.GetCurrentDownEvent();
+ if (!current_down_event)
+ return;
+
+ scoped_ptr<ui::MotionEvent> cancel_event = current_down_event->Cancel();
+ DCHECK(cancel_event);
+ if (!gesture_provider_.OnTouchEvent(*cancel_event))
+ return;
+
+ rwhv->SendTouchEvent(
+ CreateWebTouchEventFromMotionEvent(*cancel_event, 1.f / GetDpiScale()));
+}
+
jboolean ContentViewCoreImpl::OnTouchEvent(JNIEnv* env,
jobject obj,
jobject motion_event) {
@@ -1006,7 +1027,7 @@ jboolean ContentViewCoreImpl::OnTouchEvent(JNIEnv* env,
if (!gesture_provider_.OnTouchEvent(event))
return false;
- rwhv->SendTouchEvent(WebTouchEventBuilder::Build(event, GetDpiScale()));
+ rwhv->SendTouchEvent(WebTouchEventBuilder::Build(event, 1.f / GetDpiScale()));
return true;
}
@@ -1187,11 +1208,11 @@ void ContentViewCoreImpl::ResetGestureDetectors(JNIEnv* env, jobject obj) {
}
void ContentViewCoreImpl::IgnoreRemainingTouchEvents(JNIEnv* env, jobject obj) {
- gesture_provider_.CancelActiveTouchSequence();
+ CancelActiveTouchSequenceIfNecessary();
}
void ContentViewCoreImpl::OnWindowFocusLost(JNIEnv* env, jobject obj) {
- gesture_provider_.CancelActiveTouchSequence();
+ CancelActiveTouchSequenceIfNecessary();
}
void ContentViewCoreImpl::SetDoubleTapSupportForPageEnabled(JNIEnv* env,
« no previous file with comments | « content/browser/android/content_view_core_impl.h ('k') | content/browser/renderer_host/input/content_gesture_provider.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698