Commit bb151d67 authored by jdduke@chromium.org's avatar jdduke@chromium.org

Use MSG.time for WebInputEvent timestamps on Windows

Previously on Windows, WebInputEvents generated from ui::Events would call
|GetMessageTime()| to initialize the WebInputEvent timestamp. There are no
guarantees that such a call is valid at that time.  Instead, use the MSG.time
timestamp generated when the ui::Event was first created from the HWND message.

BUG=367156

Review URL: https://codereview.chromium.org/252083002

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@267056 0039d316-1c4b-4281-b951-d872f2087c98
parent 1a98058e
......@@ -102,15 +102,15 @@ static void SetToggleKeyState(WebInputEvent* event) {
event->modifiers |= WebInputEvent::CapsLockOn;
}
WebKeyboardEvent WebKeyboardEventBuilder::Build(HWND hwnd, UINT message,
WPARAM wparam, LPARAM lparam) {
WebKeyboardEvent WebKeyboardEventBuilder::Build(HWND hwnd,
UINT message,
WPARAM wparam,
LPARAM lparam,
DWORD time_ms) {
WebKeyboardEvent result;
// TODO(pkasting): http://b/1117926 Are we guaranteed that the message that
// GetMessageTime() refers to is the same one that we're passed in? Perhaps
// one of the construction parameters should be the time passed by the
// caller, who would know for sure.
result.timeStampSeconds = ::GetMessageTime() / 1000.0;
DCHECK(time_ms);
result.timeStampSeconds = time_ms / 1000.0;
result.windowsKeyCode = static_cast<int>(wparam);
// Record the scan code (along with other context bits) for this key event.
......@@ -181,8 +181,11 @@ static LPARAM GetRelativeCursorPos(HWND hwnd) {
return MAKELPARAM(pos.x, pos.y);
}
WebMouseEvent WebMouseEventBuilder::Build(HWND hwnd, UINT message,
WPARAM wparam, LPARAM lparam) {
WebMouseEvent WebMouseEventBuilder::Build(HWND hwnd,
UINT message,
WPARAM wparam,
LPARAM lparam,
DWORD time_ms) {
WebMouseEvent result;
switch (message) {
......@@ -235,11 +238,8 @@ WebMouseEvent WebMouseEventBuilder::Build(HWND hwnd, UINT message,
NOTREACHED();
}
// TODO(pkasting): http://b/1117926 Are we guaranteed that the message that
// GetMessageTime() refers to is the same one that we're passed in? Perhaps
// one of the construction parameters should be the time passed by the
// caller, who would know for sure.
result.timeStampSeconds = ::GetMessageTime() / 1000.0;
DCHECK(time_ms);
result.timeStampSeconds = time_ms / 1000.0;
// set position fields:
......@@ -312,18 +312,17 @@ WebMouseEvent WebMouseEventBuilder::Build(HWND hwnd, UINT message,
// WebMouseWheelEvent ---------------------------------------------------------
WebMouseWheelEvent
WebMouseWheelEventBuilder::Build(HWND hwnd, UINT message,
WPARAM wparam, LPARAM lparam) {
WebMouseWheelEvent WebMouseWheelEventBuilder::Build(HWND hwnd,
UINT message,
WPARAM wparam,
LPARAM lparam,
DWORD time_ms) {
WebMouseWheelEvent result;
result.type = WebInputEvent::MouseWheel;
// TODO(pkasting): http://b/1117926 Are we guaranteed that the message that
// GetMessageTime() refers to is the same one that we're passed in? Perhaps
// one of the construction parameters should be the time passed by the
// caller, who would know for sure.
result.timeStampSeconds = ::GetMessageTime() / 1000.0;
DCHECK(time_ms);
result.timeStampSeconds = time_ms / 1000.0;
result.button = WebMouseEvent::ButtonNone;
......
......@@ -13,20 +13,29 @@ namespace content {
class WebKeyboardEventBuilder {
public:
static blink::WebKeyboardEvent Build(HWND hwnd, UINT message,
WPARAM wparam, LPARAM lparam);
static blink::WebKeyboardEvent Build(HWND hwnd,
UINT message,
WPARAM wparam,
LPARAM lparam,
DWORD time_ms);
};
class WebMouseEventBuilder {
public:
static blink::WebMouseEvent Build(HWND hwnd, UINT message,
WPARAM wparam, LPARAM lparam);
static blink::WebMouseEvent Build(HWND hwnd,
UINT message,
WPARAM wparam,
LPARAM lparam,
DWORD time_ms);
};
class WebMouseWheelEventBuilder {
public:
static blink::WebMouseWheelEvent Build(HWND hwnd, UINT message,
WPARAM wparam, LPARAM lparam);
static blink::WebMouseWheelEvent Build(HWND hwnd,
UINT message,
WPARAM wparam,
LPARAM lparam,
DWORD time_ms);
};
} // namespace content
......
......@@ -63,13 +63,13 @@ blink::WebUChar GetControlCharacter(int windows_key_code, bool shift) {
#endif
#if defined(OS_WIN)
blink::WebMouseEvent MakeUntranslatedWebMouseEventFromNativeEvent(
base::NativeEvent native_event);
const base::NativeEvent& native_event);
blink::WebMouseWheelEvent MakeUntranslatedWebMouseWheelEventFromNativeEvent(
base::NativeEvent native_event);
const base::NativeEvent& native_event);
blink::WebKeyboardEvent MakeWebKeyboardEventFromNativeEvent(
base::NativeEvent native_event);
const base::NativeEvent& native_event);
blink::WebGestureEvent MakeWebGestureEventFromNativeEvent(
base::NativeEvent native_event);
const base::NativeEvent& native_event);
#elif defined(USE_X11)
blink::WebKeyboardEvent MakeWebKeyboardEventFromAuraEvent(
ui::KeyEvent* event);
......
......@@ -14,31 +14,34 @@ namespace content {
// construct our pre-translated events.
blink::WebMouseEvent MakeUntranslatedWebMouseEventFromNativeEvent(
base::NativeEvent native_event) {
const base::NativeEvent& native_event) {
return WebMouseEventBuilder::Build(native_event.hwnd,
native_event.message,
native_event.wParam,
native_event.lParam);
native_event.lParam,
native_event.time);
}
blink::WebMouseWheelEvent MakeUntranslatedWebMouseWheelEventFromNativeEvent(
base::NativeEvent native_event) {
const base::NativeEvent& native_event) {
return WebMouseWheelEventBuilder::Build(native_event.hwnd,
native_event.message,
native_event.wParam,
native_event.lParam);
native_event.lParam,
native_event.time);
}
blink::WebKeyboardEvent MakeWebKeyboardEventFromNativeEvent(
base::NativeEvent native_event) {
const base::NativeEvent& native_event) {
return WebKeyboardEventBuilder::Build(native_event.hwnd,
native_event.message,
native_event.wParam,
native_event.lParam);
native_event.lParam,
native_event.time);
}
blink::WebGestureEvent MakeWebGestureEventFromNativeEvent(
base::NativeEvent native_event) {
const base::NativeEvent& native_event) {
// TODO: Create gestures from native event.
NOTIMPLEMENTED();
return blink::WebGestureEvent();
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment