Index: Source/WebKit/chromium/tests/WebInputEventConversionTest.cpp |
=================================================================== |
--- Source/WebKit/chromium/tests/WebInputEventConversionTest.cpp (revision 143772) |
+++ Source/WebKit/chromium/tests/WebInputEventConversionTest.cpp (working copy) |
@@ -32,14 +32,23 @@ |
#include "WebInputEventConversion.h" |
+#include "Frame.h" |
+#include "FrameTestHelpers.h" |
+#include "FrameView.h" |
+#include "GestureEvent.h" |
#include "KeyboardEvent.h" |
+#include "MouseEvent.h" |
+#include "Touch.h" |
#include "TouchEvent.h" |
+#include "TouchList.h" |
+#include "URLTestHelpers.h" |
+#include "WebFrame.h" |
+#include "WebSettings.h" |
+#include "WebViewImpl.h" |
#include <gtest/gtest.h> |
-using WebKit::WebInputEvent; |
-using WebKit::WebKeyboardEvent; |
-using WebKit::WebKeyboardEventBuilder; |
-using WebKit::WebMouseEventBuilder; |
+using namespace WebKit; |
+using namespace WebCore; |
namespace { |
@@ -81,4 +90,177 @@ |
EXPECT_EQ(WebInputEvent::Undefined, mouse.type); |
} |
+TEST(WebInputEventConversionTest, InputEventsScaling) |
+{ |
+ const std::string baseURL("http://www.test.com/"); |
+ const std::string fileName("fixed_layout.html"); |
+ |
+ URLTestHelpers::registerMockedURLFromBaseURL(WebString::fromUTF8(baseURL.c_str()), WebString::fromUTF8("fixed_layout.html")); |
+ WebViewImpl* webViewImpl = static_cast<WebViewImpl*>(FrameTestHelpers::createWebViewAndLoad(baseURL + fileName, true)); |
+ webViewImpl->settings()->setApplyDeviceScaleFactorInCompositor(true); |
+ webViewImpl->settings()->setApplyPageScaleFactorInCompositor(true); |
+ webViewImpl->enableFixedLayoutMode(true); |
+ webViewImpl->settings()->setViewportEnabled(true); |
+ int pageWidth = 640; |
+ int pageHeight = 480; |
+ webViewImpl->resize(WebSize(pageWidth, pageHeight)); |
+ webViewImpl->layout(); |
+ |
+ webViewImpl->setPageScaleFactor(2, WebPoint()); |
+ |
+ FrameView* view = webViewImpl->page()->mainFrame()->view(); |
+ RefPtr<Document> document = webViewImpl->page()->mainFrame()->document(); |
+ DOMWindow* domWindow = webViewImpl->page()->mainFrame()->document()->defaultView(); |
+ RenderObject* docRenderer = webViewImpl->page()->mainFrame()->document()->renderer(); |
+ |
+ { |
+ WebMouseEvent webMouseEvent; |
+ webMouseEvent.type = WebInputEvent::MouseMove; |
+ webMouseEvent.x = 10; |
+ webMouseEvent.y = 10; |
+ webMouseEvent.windowX = 10; |
+ webMouseEvent.windowY = 10; |
+ webMouseEvent.globalX = 10; |
+ webMouseEvent.globalY = 10; |
+ webMouseEvent.movementX = 10; |
+ webMouseEvent.movementY = 10; |
+ |
+ PlatformMouseEventBuilder platformMouseBuilder(view, webMouseEvent); |
+ EXPECT_EQ(5, platformMouseBuilder.position().x()); |
+ EXPECT_EQ(5, platformMouseBuilder.position().y()); |
+ EXPECT_EQ(10, platformMouseBuilder.globalPosition().x()); |
+ EXPECT_EQ(10, platformMouseBuilder.globalPosition().y()); |
+ EXPECT_EQ(5, platformMouseBuilder.movementDelta().x()); |
+ EXPECT_EQ(5, platformMouseBuilder.movementDelta().y()); |
+ } |
+ |
+ { |
+ WebGestureEvent webGestureEvent; |
+ webGestureEvent.type = WebInputEvent::GestureScrollUpdate; |
+ webGestureEvent.x = 10; |
+ webGestureEvent.y = 10; |
+ webGestureEvent.globalX = 10; |
+ webGestureEvent.globalY = 10; |
+ webGestureEvent.data.scrollUpdate.deltaX = 10; |
+ webGestureEvent.data.scrollUpdate.deltaY = 10; |
+ |
+ PlatformGestureEventBuilder platformGestureBuilder(view, webGestureEvent); |
+ EXPECT_EQ(5, platformGestureBuilder.position().x()); |
+ EXPECT_EQ(5, platformGestureBuilder.position().y()); |
+ EXPECT_EQ(10, platformGestureBuilder.globalPosition().x()); |
+ EXPECT_EQ(10, platformGestureBuilder.globalPosition().y()); |
+ EXPECT_EQ(5, platformGestureBuilder.deltaX()); |
+ EXPECT_EQ(5, platformGestureBuilder.deltaY()); |
+ } |
+ |
+ { |
+ WebGestureEvent webGestureEvent; |
+ webGestureEvent.type = WebInputEvent::GestureTap; |
+ webGestureEvent.data.tap.width = 10; |
+ webGestureEvent.data.tap.height = 10; |
+ |
+ PlatformGestureEventBuilder platformGestureBuilder(view, webGestureEvent); |
+ EXPECT_EQ(5, platformGestureBuilder.area().width()); |
+ EXPECT_EQ(5, platformGestureBuilder.area().height()); |
+ } |
+ |
+ { |
+ WebGestureEvent webGestureEvent; |
+ webGestureEvent.type = WebInputEvent::GestureTapDown; |
+ webGestureEvent.data.tapDown.width = 10; |
+ webGestureEvent.data.tapDown.height = 10; |
+ |
+ PlatformGestureEventBuilder platformGestureBuilder(view, webGestureEvent); |
+ EXPECT_EQ(5, platformGestureBuilder.area().width()); |
+ EXPECT_EQ(5, platformGestureBuilder.area().height()); |
+ } |
+ |
+ { |
+ WebGestureEvent webGestureEvent; |
+ webGestureEvent.type = WebInputEvent::GestureLongPress; |
+ webGestureEvent.data.longPress.width = 10; |
+ webGestureEvent.data.longPress.height = 10; |
+ |
+ PlatformGestureEventBuilder platformGestureBuilder(view, webGestureEvent); |
+ EXPECT_EQ(5, platformGestureBuilder.area().width()); |
+ EXPECT_EQ(5, platformGestureBuilder.area().height()); |
+ } |
+ |
+ { |
+ WebGestureEvent webGestureEvent; |
+ webGestureEvent.type = WebInputEvent::GestureTwoFingerTap; |
+ webGestureEvent.data.twoFingerTap.firstFingerWidth = 10; |
+ webGestureEvent.data.twoFingerTap.firstFingerHeight = 10; |
+ |
+ PlatformGestureEventBuilder platformGestureBuilder(view, webGestureEvent); |
+ EXPECT_EQ(5, platformGestureBuilder.area().width()); |
+ EXPECT_EQ(5, platformGestureBuilder.area().height()); |
+ } |
+ |
+ { |
+ WebTouchEvent webTouchEvent; |
+ webTouchEvent.type = WebInputEvent::TouchMove; |
+ webTouchEvent.touchesLength = 1; |
+ webTouchEvent.touches[0].state = WebTouchPoint::StateMoved; |
+ webTouchEvent.touches[0].screenPosition.x = 10; |
+ webTouchEvent.touches[0].screenPosition.y = 10; |
+ webTouchEvent.touches[0].position.x = 10; |
+ webTouchEvent.touches[0].position.y = 10; |
+ webTouchEvent.touches[0].radiusX = 10; |
+ webTouchEvent.touches[0].radiusY = 10; |
+ |
+ PlatformTouchEventBuilder platformTouchBuilder(view, webTouchEvent); |
+ EXPECT_EQ(10, platformTouchBuilder.touchPoints()[0].screenPos().x()); |
+ EXPECT_EQ(10, platformTouchBuilder.touchPoints()[0].screenPos().y()); |
+ EXPECT_EQ(5, platformTouchBuilder.touchPoints()[0].pos().x()); |
+ EXPECT_EQ(5, platformTouchBuilder.touchPoints()[0].pos().y()); |
+ EXPECT_EQ(5, platformTouchBuilder.touchPoints()[0].radiusX()); |
+ EXPECT_EQ(5, platformTouchBuilder.touchPoints()[0].radiusY()); |
+ } |
+ |
+ { |
+ PlatformMouseEvent platformMouseEvent(IntPoint(10, 10), IntPoint(10, 10), LeftButton, PlatformEvent::MouseMoved, 1, false, false, false, false, 0); |
+ RefPtr<MouseEvent> mouseEvent = MouseEvent::create(WebCore::eventNames().mousemoveEvent, domWindow, platformMouseEvent, 0, document); |
+ WebMouseEventBuilder webMouseBuilder(view, docRenderer, *mouseEvent); |
+ |
+ EXPECT_EQ(20, webMouseBuilder.x); |
+ EXPECT_EQ(20, webMouseBuilder.y); |
+ EXPECT_EQ(10, webMouseBuilder.globalX); |
+ EXPECT_EQ(10, webMouseBuilder.globalY); |
+ EXPECT_EQ(20, webMouseBuilder.windowX); |
+ EXPECT_EQ(20, webMouseBuilder.windowY); |
+ } |
+ |
+ { |
+ PlatformGestureEvent platformGestureEvent(PlatformEvent::GestureScrollUpdate, IntPoint(10, 10), IntPoint(10, 10), 0, IntSize(10, 10), FloatPoint(10, 10), false, false, false, false); |
+ RefPtr<GestureEvent> gestureEvent = GestureEvent::create(domWindow, platformGestureEvent); |
+ WebGestureEventBuilder webGestureBuilder(view, docRenderer, *gestureEvent); |
+ |
+ EXPECT_EQ(20, webGestureBuilder.x); |
+ EXPECT_EQ(20, webGestureBuilder.y); |
+ EXPECT_EQ(10, webGestureBuilder.globalX); |
+ EXPECT_EQ(10, webGestureBuilder.globalY); |
+ EXPECT_EQ(20, webGestureBuilder.data.scrollUpdate.deltaX); |
+ EXPECT_EQ(20, webGestureBuilder.data.scrollUpdate.deltaY); |
+ } |
+ |
+ { |
+ RefPtr<Touch> touch = Touch::create(webViewImpl->page()->mainFrame(), document.get(), 0, 10, 10, 10, 10, 10, 10, 0, 0); |
+ RefPtr<TouchList> touchList = TouchList::create(); |
+ touchList->append(touch); |
+ RefPtr<TouchEvent> touchEvent = TouchEvent::create(touchList.get(), touchList.get(), touchList.get(), WebCore::eventNames().touchmoveEvent, domWindow, 10, 10, 10, 10, false, false, false, false); |
+ |
+ WebTouchEventBuilder webTouchBuilder(view, docRenderer, *touchEvent); |
+ ASSERT_EQ(1u, webTouchBuilder.touchesLength); |
+ EXPECT_EQ(10, webTouchBuilder.touches[0].screenPosition.x); |
+ EXPECT_EQ(10, webTouchBuilder.touches[0].screenPosition.y); |
+ EXPECT_EQ(20, webTouchBuilder.touches[0].position.x); |
+ EXPECT_EQ(20, webTouchBuilder.touches[0].position.y); |
+ EXPECT_EQ(20, webTouchBuilder.touches[0].radiusX); |
+ EXPECT_EQ(20, webTouchBuilder.touches[0].radiusY); |
+ } |
+ |
+ webViewImpl->close(); |
+} |
+ |
} // anonymous namespace |