Upstream version 7.36.149.0
[platform/framework/web/crosswalk.git] / src / third_party / WebKit / Source / web / tests / WebInputEventConversionTest.cpp
index d293855..222b3ff 100644 (file)
 
 #include "config.h"
 
-#include "WebInputEventConversion.h"
+#include "web/WebInputEventConversion.h"
 
-#include <gtest/gtest.h>
-#include "FrameTestHelpers.h"
-#include "URLTestHelpers.h"
-#include "WebFrame.h"
-#include "WebSettings.h"
-#include "WebViewImpl.h"
+#include "core/dom/Touch.h"
+#include "core/dom/TouchList.h"
 #include "core/events/GestureEvent.h"
 #include "core/events/KeyboardEvent.h"
 #include "core/events/MouseEvent.h"
-#include "core/dom/Touch.h"
 #include "core/events/TouchEvent.h"
-#include "core/dom/TouchList.h"
+#include "core/frame/FrameHost.h"
 #include "core/frame/FrameView.h"
 #include "core/frame/LocalFrame.h"
+#include "public/web/WebFrame.h"
+#include "public/web/WebSettings.h"
+#include "web/WebViewImpl.h"
+#include "web/tests/FrameTestHelpers.h"
+#include "web/tests/URLTestHelpers.h"
+#include <gtest/gtest.h>
 
 using namespace blink;
 using namespace WebCore;
 
 namespace {
 
-PassRefPtr<WebCore::KeyboardEvent> createKeyboardEventWithLocation(WebCore::KeyboardEvent::KeyLocationCode location)
+PassRefPtrWillBeRawPtr<WebCore::KeyboardEvent> createKeyboardEventWithLocation(WebCore::KeyboardEvent::KeyLocationCode location)
 {
     return WebCore::KeyboardEvent::create("keydown", true, true, 0, "", location, false, false, false, false, false);
 }
 
 int getModifiersForKeyLocationCode(WebCore::KeyboardEvent::KeyLocationCode location)
 {
-    RefPtr<WebCore::KeyboardEvent> event = createKeyboardEventWithLocation(location);
+    RefPtrWillBeRawPtr<WebCore::KeyboardEvent> event = createKeyboardEventWithLocation(location);
     blink::WebKeyboardEventBuilder convertedEvent(*event);
     return convertedEvent.modifiers;
 }
@@ -85,7 +86,7 @@ TEST(WebInputEventConversionTest, WebKeyboardEventBuilder)
 
 TEST(WebInputEventConversionTest, WebTouchEventBuilder)
 {
-    RefPtr<WebCore::TouchEvent> event = WebCore::TouchEvent::create();
+    RefPtrWillBeRawPtr<WebCore::TouchEvent> event = WebCore::TouchEvent::create();
     WebMouseEventBuilder mouse(0, 0, *event);
     EXPECT_EQ(WebInputEvent::Undefined, mouse.type);
 }
@@ -104,7 +105,7 @@ TEST(WebInputEventConversionTest, InputEventsScaling)
     webViewImpl->resize(WebSize(pageWidth, pageHeight));
     webViewImpl->layout();
 
-    webViewImpl->setPageScaleFactor(2, WebPoint());
+    webViewImpl->setPageScaleFactor(2);
 
     FrameView* view = webViewImpl->page()->mainFrame()->view();
     RefPtr<Document> document = webViewImpl->page()->mainFrame()->document();
@@ -249,7 +250,7 @@ TEST(WebInputEventConversionTest, InputEventsScaling)
     // which expect CSS pixel coordinates.
     {
         PlatformMouseEvent platformMouseEvent(IntPoint(10, 10), IntPoint(10, 10), LeftButton, PlatformEvent::MouseMoved, 1, false, false, false, false, 0);
-        RefPtr<MouseEvent> mouseEvent = MouseEvent::create(WebCore::EventTypeNames::mousemove, domWindow, platformMouseEvent, 0, document);
+        RefPtrWillBeRawPtr<MouseEvent> mouseEvent = MouseEvent::create(WebCore::EventTypeNames::mousemove, domWindow, platformMouseEvent, 0, document);
         WebMouseEventBuilder webMouseBuilder(view, docRenderer, *mouseEvent);
 
         EXPECT_EQ(10, webMouseBuilder.x);
@@ -262,14 +263,14 @@ TEST(WebInputEventConversionTest, InputEventsScaling)
 
     {
         PlatformMouseEvent platformMouseEvent(IntPoint(10, 10), IntPoint(10, 10), NoButton, PlatformEvent::MouseMoved, 1, false, false, false, false, 0);
-        RefPtr<MouseEvent> mouseEvent = MouseEvent::create(WebCore::EventTypeNames::mousemove, domWindow, platformMouseEvent, 0, document);
+        RefPtrWillBeRawPtr<MouseEvent> mouseEvent = MouseEvent::create(WebCore::EventTypeNames::mousemove, domWindow, platformMouseEvent, 0, document);
         WebMouseEventBuilder webMouseBuilder(view, docRenderer, *mouseEvent);
         EXPECT_EQ(WebMouseEvent::ButtonNone, webMouseBuilder.button);
     }
 
     {
         PlatformGestureEvent platformGestureEvent(PlatformEvent::GestureScrollUpdate, IntPoint(10, 10), IntPoint(10, 10), IntSize(10, 10), 0, false, false, false, false, 10, 10, 10, 10);
-        RefPtr<GestureEvent> gestureEvent = GestureEvent::create(domWindow, platformGestureEvent);
+        RefPtrWillBeRawPtr<GestureEvent> gestureEvent = GestureEvent::create(domWindow, platformGestureEvent);
         WebGestureEventBuilder webGestureBuilder(view, docRenderer, *gestureEvent);
 
         EXPECT_EQ(10, webGestureBuilder.x);
@@ -284,7 +285,7 @@ TEST(WebInputEventConversionTest, InputEventsScaling)
         RefPtrWillBeRawPtr<Touch> touch = Touch::create(webViewImpl->page()->mainFrame(), document.get(), 0, 10, 10, 10, 10, 10, 10, 0, 0);
         RefPtrWillBeRawPtr<TouchList> touchList = TouchList::create();
         touchList->append(touch);
-        RefPtr<TouchEvent> touchEvent = TouchEvent::create(touchList.get(), touchList.get(), touchList.get(), WebCore::EventTypeNames::touchmove, domWindow, 10, 10, 10, 10, false, false, false, false);
+        RefPtrWillBeRawPtr<TouchEvent> touchEvent = TouchEvent::create(touchList.get(), touchList.get(), touchList.get(), WebCore::EventTypeNames::touchmove, domWindow, 10, 10, 10, 10, false, false, false, false, false);
 
         WebTouchEventBuilder webTouchBuilder(view, docRenderer, *touchEvent);
         ASSERT_EQ(1u, webTouchBuilder.touchesLength);
@@ -294,6 +295,7 @@ TEST(WebInputEventConversionTest, InputEventsScaling)
         EXPECT_EQ(10, webTouchBuilder.touches[0].position.y);
         EXPECT_EQ(10, webTouchBuilder.touches[0].radiusX);
         EXPECT_EQ(10, webTouchBuilder.touches[0].radiusY);
+        EXPECT_FALSE(webTouchBuilder.cancelable);
     }
 }
 
@@ -311,7 +313,7 @@ TEST(WebInputEventConversionTest, InputEventsTransform)
     webViewImpl->resize(WebSize(pageWidth, pageHeight));
     webViewImpl->layout();
 
-    webViewImpl->setPageScaleFactor(2, WebPoint());
+    webViewImpl->setPageScaleFactor(2);
     webViewImpl->setRootLayerTransform(WebSize(10, 20), 1.5);
 
     FrameView* view = webViewImpl->page()->mainFrame()->view();
@@ -481,7 +483,7 @@ TEST(WebInputEventConversionTest, InputEventsConversions)
         EXPECT_EQ(10, platformGestureBuilder.globalPosition().y());
         EXPECT_EQ(1, platformGestureBuilder.tapCount());
 
-        RefPtr<WebCore::GestureEvent> coreGestureEvent = WebCore::GestureEvent::create(domWindow, platformGestureBuilder);
+        RefPtrWillBeRawPtr<WebCore::GestureEvent> coreGestureEvent = WebCore::GestureEvent::create(domWindow, platformGestureBuilder);
         WebGestureEventBuilder recreatedWebGestureEvent(view, docRenderer, *coreGestureEvent);
         EXPECT_EQ(webGestureEvent.type, recreatedWebGestureEvent.type);
         EXPECT_EQ(webGestureEvent.x, recreatedWebGestureEvent.x);
@@ -492,4 +494,102 @@ TEST(WebInputEventConversionTest, InputEventsConversions)
     }
 }
 
+static void setupVirtualViewportPinch(WebSettings* settings)
+{
+    settings->setPinchVirtualViewportEnabled(true);
+    settings->setAcceleratedCompositingEnabled(true);
+}
+
+TEST(WebInputEventConversionTest, PinchViewportOffset)
+{
+    const std::string baseURL("http://www.test4.com/");
+    const std::string fileName("fixed_layout.html");
+
+    URLTestHelpers::registerMockedURLFromBaseURL(WebString::fromUTF8(baseURL.c_str()), WebString::fromUTF8("fixed_layout.html"));
+    FrameTestHelpers::WebViewHelper webViewHelper;
+    WebViewImpl* webViewImpl = webViewHelper.initializeAndLoad(baseURL + fileName, true, 0, 0, setupVirtualViewportPinch);
+    int pageWidth = 640;
+    int pageHeight = 480;
+    webViewImpl->resize(WebSize(pageWidth, pageHeight));
+    webViewImpl->layout();
+
+    webViewImpl->setPageScaleFactor(2);
+
+    IntPoint pinchOffset(35, 60);
+    webViewImpl->page()->frameHost().pinchViewport().setLocation(pinchOffset);
+
+    FrameView* view = webViewImpl->page()->mainFrame()->view();
+
+    {
+        WebMouseEvent webMouseEvent;
+        webMouseEvent.type = WebInputEvent::MouseMove;
+        webMouseEvent.x = 10;
+        webMouseEvent.y = 10;
+        webMouseEvent.windowX = 10;
+        webMouseEvent.windowY = 10;
+        webMouseEvent.globalX = 10;
+        webMouseEvent.globalY = 10;
+
+        PlatformMouseEventBuilder platformMouseBuilder(view, webMouseEvent);
+        EXPECT_EQ(5 + pinchOffset.x(), platformMouseBuilder.position().x());
+        EXPECT_EQ(5 + pinchOffset.y(), platformMouseBuilder.position().y());
+        EXPECT_EQ(10, platformMouseBuilder.globalPosition().x());
+        EXPECT_EQ(10, platformMouseBuilder.globalPosition().y());
+    }
+
+    {
+        WebMouseWheelEvent webMouseWheelEvent;
+        webMouseWheelEvent.type = WebInputEvent::MouseWheel;
+        webMouseWheelEvent.x = 10;
+        webMouseWheelEvent.y = 10;
+        webMouseWheelEvent.windowX = 10;
+        webMouseWheelEvent.windowY = 10;
+        webMouseWheelEvent.globalX = 10;
+        webMouseWheelEvent.globalY = 10;
+
+        PlatformWheelEventBuilder platformWheelBuilder(view, webMouseWheelEvent);
+        EXPECT_EQ(5 + pinchOffset.x(), platformWheelBuilder.position().x());
+        EXPECT_EQ(5 + pinchOffset.y(), platformWheelBuilder.position().y());
+        EXPECT_EQ(10, platformWheelBuilder.globalPosition().x());
+        EXPECT_EQ(10, platformWheelBuilder.globalPosition().y());
+    }
+
+    {
+        WebGestureEvent webGestureEvent;
+        webGestureEvent.type = WebInputEvent::GestureScrollUpdate;
+        webGestureEvent.x = 10;
+        webGestureEvent.y = 10;
+        webGestureEvent.globalX = 10;
+        webGestureEvent.globalY = 10;
+
+        PlatformGestureEventBuilder platformGestureBuilder(view, webGestureEvent);
+        EXPECT_EQ(5 + pinchOffset.x(), platformGestureBuilder.position().x());
+        EXPECT_EQ(5 + pinchOffset.y(), platformGestureBuilder.position().y());
+        EXPECT_EQ(10, platformGestureBuilder.globalPosition().x());
+        EXPECT_EQ(10, platformGestureBuilder.globalPosition().y());
+    }
+
+    {
+        WebTouchEvent webTouchEvent;
+        webTouchEvent.type = WebInputEvent::TouchMove;
+        webTouchEvent.touchesLength = 1;
+        webTouchEvent.touches[0].state = WebTouchPoint::StateMoved;
+        webTouchEvent.touches[0].screenPosition.x = 10.6f;
+        webTouchEvent.touches[0].screenPosition.y = 10.4f;
+        webTouchEvent.touches[0].position.x = 10.6f;
+        webTouchEvent.touches[0].position.y = 10.4f;
+
+        EXPECT_FLOAT_EQ(10.6f, webTouchEvent.touches[0].screenPosition.x);
+        EXPECT_FLOAT_EQ(10.4f, webTouchEvent.touches[0].screenPosition.y);
+        EXPECT_FLOAT_EQ(10.6f, webTouchEvent.touches[0].position.x);
+        EXPECT_FLOAT_EQ(10.4f, webTouchEvent.touches[0].position.y);
+
+        PlatformTouchEventBuilder platformTouchBuilder(view, webTouchEvent);
+        EXPECT_EQ(10, platformTouchBuilder.touchPoints()[0].screenPos().x());
+        EXPECT_EQ(10, platformTouchBuilder.touchPoints()[0].screenPos().y());
+        EXPECT_EQ(5 + pinchOffset.x(), platformTouchBuilder.touchPoints()[0].pos().x());
+        EXPECT_EQ(5 + pinchOffset.y(), platformTouchBuilder.touchPoints()[0].pos().y());
+    }
+}
+
 } // anonymous namespace