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

Unified Diff: Tools/DumpRenderTree/chromium/TestRunner/src/EventSender.cpp

Issue 15425005: Don't force layout for mouse event hit tests (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: touch adjustment in window.internals also needs layout Created 7 years, 7 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
« no previous file with comments | « Tools/DumpRenderTree/chromium/TestRunner/src/EventSender.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Tools/DumpRenderTree/chromium/TestRunner/src/EventSender.cpp
diff --git a/Tools/DumpRenderTree/chromium/TestRunner/src/EventSender.cpp b/Tools/DumpRenderTree/chromium/TestRunner/src/EventSender.cpp
index 0686fefd165bc2c2831d5c576691d70cc81dc2fb..0815ad1f3dcf6276a56829efa4610e875a24cf02 100644
--- a/Tools/DumpRenderTree/chromium/TestRunner/src/EventSender.cpp
+++ b/Tools/DumpRenderTree/chromium/TestRunner/src/EventSender.cpp
@@ -304,6 +304,8 @@ EventSender::EventSender()
bindMethod("zoomPageOut", &EventSender::zoomPageOut);
bindMethod("scalePageBy", &EventSender::scalePageBy);
+ bindProperty("forceLayoutOnEvents", &forceLayoutOnEvents);
+
// When set to true (the default value), we batch mouse move and mouse up
// events so we can simulate drag & drop.
bindProperty("dragMode", &dragMode);
@@ -337,6 +339,7 @@ void EventSender::reset()
currentDragEffectsAllowed = WebKit::WebDragOperationNone;
pressedButton = WebMouseEvent::ButtonNone;
dragMode.set(true);
+ forceLayoutOnEvents.set(true);
#ifdef WIN32
wmKeyDown.set(WM_KEYDOWN);
wmKeyUp.set(WM_KEYUP);
@@ -424,6 +427,9 @@ void EventSender::mouseDown(const CppArgumentList& arguments, CppVariant* result
if (result) // Could be 0 if invoked asynchronously.
result->setNull();
+ if (shouldForceLayoutOnEvents())
+ webview()->layout();
+
int buttonNumber = getButtonNumberFromSingleArg(arguments);
WEBKIT_ASSERT(buttonNumber != -1);
@@ -444,6 +450,9 @@ void EventSender::mouseUp(const CppArgumentList& arguments, CppVariant* result)
if (result) // Could be 0 if invoked asynchronously.
result->setNull();
+ if (shouldForceLayoutOnEvents())
+ webview()->layout();
+
int buttonNumber = getButtonNumberFromSingleArg(arguments);
WEBKIT_ASSERT(buttonNumber != -1);
@@ -502,6 +511,8 @@ void EventSender::mouseMoveTo(const CppArgumentList& arguments, CppVariant* resu
if (arguments.size() < 2 || !arguments[0].isNumber() || !arguments[1].isNumber())
return;
+ if (shouldForceLayoutOnEvents())
+ webview()->layout();
WebPoint mousePos(arguments[0].toInt32(), arguments[1].toInt32());
@@ -654,7 +665,8 @@ void EventSender::keyDown(const CppArgumentList& arguments, CppVariant* result)
eventUp.type = WebInputEvent::KeyUp;
// EventSender.m forces a layout here, with at least one
// test (fast/forms/focus-control-to-page.html) relying on this.
- webview()->layout();
+ if (shouldForceLayoutOnEvents())
+ webview()->layout();
// In the browser, if a keyboard event corresponds to an editor command,
// the command will be dispatched to the renderer just before dispatching
@@ -700,7 +712,8 @@ void EventSender::dispatchMessage(const CppArgumentList& arguments, CppVariant*
if (msg == WM_DEADCHAR || msg == WM_SYSDEADCHAR)
return;
- webview()->layout();
+ if (shouldForceLayoutOnEvents())
+ webview()->layout();
unsigned long lparam = static_cast<unsigned long>(arguments[2].toDouble());
webview()->handleInputEvent(WebInputEventFactory::keyboardEvent(0, msg, arguments[1].toInt32(), lparam));
@@ -854,7 +867,8 @@ static vector<WebString> makeMenuItemStringsFor(WebContextMenuData* contextMenu,
void EventSender::contextClick(const CppArgumentList& arguments, CppVariant* result)
{
- webview()->layout();
+ if (shouldForceLayoutOnEvents())
+ webview()->layout();
updateClickCountForButton(WebMouseEvent::ButtonRight);
@@ -1035,7 +1049,8 @@ void EventSender::cancelTouchPoint(const CppArgumentList& arguments, CppVariant*
void EventSender::sendCurrentTouchEvent(const WebInputEvent::Type type)
{
WEBKIT_ASSERT(static_cast<unsigned>(WebTouchEvent::touchesLengthCap) > touchPoints.size());
- webview()->layout();
+ if (shouldForceLayoutOnEvents())
+ webview()->layout();
WebTouchEvent touchEvent;
touchEvent.type = type;
@@ -1072,6 +1087,12 @@ void EventSender::handleMouseWheel(const CppArgumentList& arguments, CppVariant*
if (arguments.size() < 2 || !arguments[0].isNumber() || !arguments[1].isNumber())
return;
+ // Force a layout here just to make sure every position has been
+ // determined before we send events (as well as all the other methods
+ // that send an event do).
+ if (shouldForceLayoutOnEvents())
+ webview()->layout();
+
int horizontal = arguments[0].toInt32();
int vertical = arguments[1].toInt32();
int paged = false;
@@ -1285,6 +1306,10 @@ void EventSender::gestureEvent(WebInputEvent::Type type, const CppArgumentList&
event.globalX = event.x;
event.globalY = event.y;
event.timeStampSeconds = getCurrentEventTimeSec(m_delegate);
+
+ if (shouldForceLayoutOnEvents())
+ webview()->layout();
+
webview()->handleInputEvent(event);
// Long press might start a drag drop session. Complete it if so.
@@ -1302,6 +1327,10 @@ void EventSender::gestureFlingCancel(const CppArgumentList&, CppVariant* result)
WebGestureEvent event;
event.type = WebInputEvent::GestureFlingCancel;
event.timeStampSeconds = getCurrentEventTimeSec(m_delegate);
+
+ if (shouldForceLayoutOnEvents())
+ webview()->layout();
+
webview()->handleInputEvent(event);
}
@@ -1326,6 +1355,10 @@ void EventSender::gestureFlingStart(const CppArgumentList& arguments, CppVariant
event.data.flingStart.velocityX = static_cast<float>(arguments[2].toDouble());
event.data.flingStart.velocityY = static_cast<float>(arguments[3].toDouble());
event.timeStampSeconds = getCurrentEventTimeSec(m_delegate);
+
+ if (shouldForceLayoutOnEvents())
+ webview()->layout();
+
webview()->handleInputEvent(event);
}
« no previous file with comments | « Tools/DumpRenderTree/chromium/TestRunner/src/EventSender.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698