OSDN Git Service

Pass touch event time from Java to WebKit
authorGrace Kloba <klobag@google.com>
Wed, 3 Feb 2010 03:08:37 +0000 (19:08 -0800)
committerGrace Kloba <klobag@google.com>
Wed, 3 Feb 2010 03:08:37 +0000 (19:08 -0800)
WebCore/dom/Event.h
WebCore/page/EventHandler.cpp
WebCore/platform/PlatformTouchEvent.h
WebCore/plugins/android/PluginViewAndroid.cpp
WebKit/android/jni/WebViewCore.cpp
WebKit/android/jni/WebViewCore.h
WebKit/android/plugins/SkANP.cpp
WebKit/android/plugins/SkANP.h
WebKit/android/plugins/android_npapi.h

index 7ec85a7..4774ccb 100644 (file)
@@ -153,6 +153,10 @@ namespace WebCore {
         bool createdByDOM() const { return m_createdByDOM; }
         void setCreatedByDOM(bool createdByDOM) { m_createdByDOM = createdByDOM; }
 
+#if PLATFORM(ANDROID)
+        void setCreateTime(DOMTimeStamp time) { m_createTime = time; }
+#endif
+
     protected:
         Event();
         Event(const AtomicString& type, bool canBubble, bool cancelable);
index 8b6b602..d0ca86b 100644 (file)
@@ -2659,6 +2659,7 @@ int EventHandler::handleTouchEvent(const PlatformTouchEvent& e)
         default:
             return false;
     }
+    te->setCreateTime(static_cast<DOMTimeStamp>(e.eventTime()));
     ExceptionCode ec = 0;
     m_touch->target()->dispatchEvent(te.get(), ec);
     if (type == TouchEventEnd || type == TouchEventCancel)
index 6c8629c..320dbbd 100644 (file)
@@ -41,10 +41,11 @@ namespace WebCore {
         {
         }
 
-        PlatformTouchEvent(const IntPoint& pos, const IntPoint& globalPos, TouchEventType eventType)
+        PlatformTouchEvent(const IntPoint& pos, const IntPoint& globalPos, TouchEventType eventType, long eventTime)
             : m_position(pos)
             , m_globalPosition(globalPos)
             , m_eventType(eventType)
+            , m_eventTime(eventTime)
         {
         }
 
@@ -54,11 +55,13 @@ namespace WebCore {
         int globalX() const { return m_globalPosition.x(); }
         int globalY() const { return m_globalPosition.y(); }
         TouchEventType eventType() const { return m_eventType; }
+        long eventTime() const { return m_eventTime; }
 
     private:
         IntPoint m_position;
         IntPoint m_globalPosition;
         TouchEventType m_eventType;
+        long m_eventTime;
     };
 
 } // namespace WebCore
index ed7a694..0317ed6 100644 (file)
@@ -183,7 +183,7 @@ void PluginView::handleTouchEvent(TouchEvent* event)
         return;
 
     ANPEvent evt;
-    SkANP::InitEvent(&evt, kTouch_ANPEventType);
+    SkANP::InitEvent(&evt, kTouch_ANPEventType, event->timeStamp());
 
     bool ignoreRet = false;
     const AtomicString& type = event->type();
index 8f5cc45..66646b9 100644 (file)
@@ -2149,7 +2149,7 @@ void WebViewCore::click(WebCore::Frame* frame, WebCore::Node* node) {
     }
 }
 
-int WebViewCore::handleTouchEvent(int action, int x, int y)
+int WebViewCore::handleTouchEvent(int action, int x, int y, long time)
 {
     int preventDefault = 0;
 
@@ -2186,7 +2186,7 @@ int WebViewCore::handleTouchEvent(int action, int x, int y)
         break;
     }
     WebCore::IntPoint pt(x - m_scrollOffsetX, y - m_scrollOffsetY);
-    WebCore::PlatformTouchEvent te(pt, pt, type);
+    WebCore::PlatformTouchEvent te(pt, pt, type, time);
     preventDefault = m_mainFrame->eventHandler()->handleTouchEvent(te);
 #endif
 
@@ -2948,14 +2948,14 @@ static jstring FindAddress(JNIEnv *env, jobject obj, jstring addr,
     return ret;
 }
 
-static jint HandleTouchEvent(JNIEnv *env, jobject obj, jint action, jint x, jint y)
+static jint HandleTouchEvent(JNIEnv *env, jobject obj, jint action, jint x, jint y, jlong time)
 {
 #ifdef ANDROID_INSTRUMENT
     TimeCounterAuto counter(TimeCounter::WebViewCoreTimeCounter);
 #endif
     WebViewCore* viewImpl = GET_NATIVE_VIEW(env, obj);
     LOG_ASSERT(viewImpl, "viewImpl not set in %s", __FUNCTION__);
-    return viewImpl->handleTouchEvent(action, x, y);
+    return viewImpl->handleTouchEvent(action, x, y, time);
 }
 
 static void TouchUp(JNIEnv *env, jobject obj, jint touchGeneration,
@@ -3360,7 +3360,7 @@ static JNINativeMethod gJavaWebViewCoreMethods[] = {
         (void*) SaveDocumentState },
     { "nativeFindAddress", "(Ljava/lang/String;Z)Ljava/lang/String;",
         (void*) FindAddress },
-    { "nativeHandleTouchEvent", "(III)I",
+    { "nativeHandleTouchEvent", "(IIIJ)I",
             (void*) HandleTouchEvent },
     { "nativeTouchUp", "(IIIII)V",
         (void*) TouchUp },
index f1893ff..ee87d84 100644 (file)
@@ -283,7 +283,7 @@ namespace android {
         /**
          * Handle touch event
          */
-        int handleTouchEvent(int action, int x, int y);
+        int handleTouchEvent(int action, int x, int y, long time);
 
         /**
          * Handle motionUp event from the UI thread (called touchUp in the
index 9bbb09e..bb3fe45 100644 (file)
@@ -26,6 +26,7 @@
 // must include config.h first for webkit to fiddle with new/delete
 #include "config.h"
 #include "SkANP.h"
+#include <wtf/CurrentTime.h>
 
 SkRect* SkANP::SetRect(SkRect* dst, const ANPRectF& src) {
     dst->set(SkFloatToScalar(src.left),
@@ -102,4 +103,11 @@ bool SkANP::SetBitmap(ANPBitmap* dst, const SkBitmap& src) {
 void SkANP::InitEvent(ANPEvent* event, ANPEventType et) {
     event->inSize = sizeof(ANPEvent);
     event->eventType = et;
+    event->timeStamp = currentTime() * 1000.0;
+}
+
+void SkANP::InitEvent(ANPEvent* event, ANPEventType et, long time) {
+    event->inSize = sizeof(ANPEvent);
+    event->eventType = et;
+    event->timeStamp = time;
 }
index 5c2a936..8590e10 100644 (file)
@@ -74,6 +74,7 @@ public:
     static bool SetBitmap(ANPBitmap* dst, const SkBitmap& src);
     
     static void InitEvent(ANPEvent* event, ANPEventType et);
+    static void InitEvent(ANPEvent* event, ANPEventType et, long time);
 };
 
 #endif
index 4173528..1f2072d 100644 (file)
@@ -893,6 +893,7 @@ typedef uint32_t ANPLifecycleAction;
 /* This is what is passed to NPP_HandleEvent() */
 struct ANPEvent {
     uint32_t        inSize;  // size of this struct in bytes
+    uint32_t        timeStamp;
     ANPEventType    eventType;
     // use based on the value in eventType
     union {