Title: [102048] trunk
- Revision
- 102048
- Author
- [email protected]
- Date
- 2011-12-05 14:33:18 -0800 (Mon, 05 Dec 2011)
Log Message
Last mouse event could be lost if a JS call to eventSender.leapForward is made
https://bugs.webkit.org/show_bug.cgi?id=73366
Patch by Hugo Parente Lima <[email protected]> on 2011-12-05
Reviewed by Kenneth Rohde Christiansen.
Tools:
Empty the entire event queue when requested besides using
sendEvent instead of postEvent to make sure all events were
delivered.
* WebKitTestRunner/qt/EventSenderProxyQt.cpp:
(WTR::EventSenderProxy::EventSenderProxy):
(WTR::EventSenderProxy::sendOrQueueEvent):
(WTR::EventSenderProxy::replaySavedEvents):
LayoutTests:
Add test to check if the test driver doesn't eat mouse events when
a JS call to eventSender.leapForward was made. This bug happened at
least on Qt version of WebKitTestRunner.
* fast/events/dont-loose-last-event-expected.txt: Added.
* fast/events/dont-loose-last-event.html: Added.
Modified Paths
Added Paths
Diff
Modified: trunk/LayoutTests/ChangeLog (102047 => 102048)
--- trunk/LayoutTests/ChangeLog 2011-12-05 22:27:59 UTC (rev 102047)
+++ trunk/LayoutTests/ChangeLog 2011-12-05 22:33:18 UTC (rev 102048)
@@ -1,3 +1,17 @@
+2011-12-05 Hugo Parente Lima <[email protected]>
+
+ Last mouse event could be lost if a JS call to eventSender.leapForward is made
+ https://bugs.webkit.org/show_bug.cgi?id=73366
+
+ Reviewed by Kenneth Rohde Christiansen.
+
+ Add test to check if the test driver doesn't eat mouse events when
+ a JS call to eventSender.leapForward was made. This bug happened at
+ least on Qt version of WebKitTestRunner.
+
+ * fast/events/dont-loose-last-event-expected.txt: Added.
+ * fast/events/dont-loose-last-event.html: Added.
+
2011-12-05 Julien Chaffraix <[email protected]>
TD width in precentage doesn't work.
Added: trunk/LayoutTests/fast/events/dont-loose-last-event-expected.txt (0 => 102048)
--- trunk/LayoutTests/fast/events/dont-loose-last-event-expected.txt (rev 0)
+++ trunk/LayoutTests/fast/events/dont-loose-last-event-expected.txt 2011-12-05 22:33:18 UTC (rev 102048)
@@ -0,0 +1,3 @@
+This should test if the test driver doesn't eat the last event if there's a leapForward call beforehand.
+
+PASS
Added: trunk/LayoutTests/fast/events/dont-loose-last-event.html (0 => 102048)
--- trunk/LayoutTests/fast/events/dont-loose-last-event.html (rev 0)
+++ trunk/LayoutTests/fast/events/dont-loose-last-event.html 2011-12-05 22:33:18 UTC (rev 102048)
@@ -0,0 +1,61 @@
+<html>
+<head>
+<script type="text/_javascript_">
+ var startElem;
+ var targetElem;
+ var consoleElm;
+
+ window._onload_ = function()
+ {
+ startElem = document.getElementById("startElem");
+ targetElem = document.getElementById("targetElem");
+ consoleElm = document.getElementById("console");
+
+ if (!startElem || !targetElem || !consoleElm)
+ return;
+
+ runTest();
+ }
+
+ function pass()
+ {
+ var div = document.createElement("div");
+ document.getElementById("console").appendChild(div);
+ div.innerHTML = "PASS";
+ };
+
+ function runTest()
+ {
+ if (!window.eventSender)
+ return;
+
+ if (window.layoutTestController)
+ layoutTestController.dumpAsText();
+
+ var startX = startElem.offsetLeft + 10;
+ var startY = startElem.offsetTop + startElem.offsetHeight / 2;
+ var endX = targetElem.offsetLeft + 10;
+ var endY = targetElem.offsetTop + targetElem.offsetHeight / 2;
+
+ eventSender.mouseMoveTo(startX, startY);
+ eventSender.leapForward(100);
+ eventSender.mouseMoveTo(endX, endY);
+
+ var testContainer = document.getElementById("test-container");
+ if (testContainer)
+ document.body.removeChild(testContainer);
+ }
+</script>
+</head>
+<body>
+ <p id="description">This should test if the test driver doesn't eat the last event if there's a leapForward call beforehand.</p>
+ <div id="test-container">
+ <br/><br/>
+ <div id="targetElem" style="border: 1px dashed" _onmouseover_="pass()">Pass the mouse over me.<br/><br/></div>
+ <hr/>
+ <div id="startElem">Mouse start location</div>
+ <hr/>
+ </div>
+ <div id="console"></div>
+</body>
+</html>
Modified: trunk/Tools/ChangeLog (102047 => 102048)
--- trunk/Tools/ChangeLog 2011-12-05 22:27:59 UTC (rev 102047)
+++ trunk/Tools/ChangeLog 2011-12-05 22:33:18 UTC (rev 102048)
@@ -1,3 +1,19 @@
+2011-12-05 Hugo Parente Lima <[email protected]>
+
+ Last mouse event could be lost if a JS call to eventSender.leapForward is made
+ https://bugs.webkit.org/show_bug.cgi?id=73366
+
+ Reviewed by Kenneth Rohde Christiansen.
+
+ Empty the entire event queue when requested besides using
+ sendEvent instead of postEvent to make sure all events were
+ delivered.
+
+ * WebKitTestRunner/qt/EventSenderProxyQt.cpp:
+ (WTR::EventSenderProxy::EventSenderProxy):
+ (WTR::EventSenderProxy::sendOrQueueEvent):
+ (WTR::EventSenderProxy::replaySavedEvents):
+
2011-12-05 Adam Barth <[email protected]>
[Chromium] Remove no-longer-used forwarding headers in the WebKit API
Modified: trunk/Tools/WebKitTestRunner/qt/EventSenderProxyQt.cpp (102047 => 102048)
--- trunk/Tools/WebKitTestRunner/qt/EventSenderProxyQt.cpp 2011-12-05 22:27:59 UTC (rev 102047)
+++ trunk/Tools/WebKitTestRunner/qt/EventSenderProxyQt.cpp 2011-12-05 22:33:18 UTC (rev 102048)
@@ -50,7 +50,7 @@
static WTREventQueue eventQueue[1024];
static unsigned endOfQueue;
-static unsigned startOfQueue;
+static bool isReplayingEvents;
EventSenderProxy::EventSenderProxy(TestController* testController)
: m_testController(testController)
@@ -68,7 +68,7 @@
{
memset(eventQueue, 0, sizeof(eventQueue));
endOfQueue = 0;
- startOfQueue = 0;
+ isReplayingEvents = false;
}
static Qt::MouseButton getMouseButton(unsigned button)
@@ -398,32 +398,36 @@
void EventSenderProxy::sendOrQueueEvent(QEvent* event)
{
- if (endOfQueue == startOfQueue && !eventQueue[endOfQueue].m_delay) {
+ if (!endOfQueue && !eventQueue[endOfQueue].m_delay) {
m_testController->mainWebView()->sendEvent(event);
delete event;
return;
}
eventQueue[endOfQueue++].m_event = event;
- eventQueue[endOfQueue].m_delay = 0;
replaySavedEvents();
}
void EventSenderProxy::replaySavedEvents()
{
- if (startOfQueue < endOfQueue) {
- while (!eventQueue[startOfQueue].m_delay && startOfQueue < endOfQueue) {
- QEvent* ev = eventQueue[startOfQueue++].m_event;
- m_testController->mainWebView()->postEvent(ev);
- }
- if (startOfQueue == endOfQueue) {
- startOfQueue = 0;
- endOfQueue = 0;
- } else {
- QTest::qWait(eventQueue[startOfQueue].m_delay);
- eventQueue[startOfQueue].m_delay = 0;
- }
+ if (isReplayingEvents)
+ return;
+
+ isReplayingEvents = true;
+ int i = 0;
+
+ while (i < endOfQueue) {
+ WTREventQueue& ev = eventQueue[i];
+ if (ev.m_delay)
+ QTest::qWait(ev.m_delay);
+ i++;
+ m_testController->mainWebView()->sendEvent(ev.m_event);
+ delete ev.m_event;
+ ev.m_delay = 0;
}
+
+ endOfQueue = 0;
+ isReplayingEvents = false;
}
} // namespace WTR
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes