diff options
author | jdduke@chromium.org <jdduke@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-04-30 03:06:39 +0000 |
---|---|---|
committer | jdduke@chromium.org <jdduke@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-04-30 03:06:39 +0000 |
commit | bb151d6777bc2a42ba33b52a0633d68722fcd23a (patch) | |
tree | 705d124c2c5b8b440579950def1e27fe5de5f50a | |
parent | 1a98058ebdf2ed615d07059037d2e0847f615046 (diff) | |
download | chromium_src-bb151d6777bc2a42ba33b52a0633d68722fcd23a.zip chromium_src-bb151d6777bc2a42ba33b52a0633d68722fcd23a.tar.gz chromium_src-bb151d6777bc2a42ba33b52a0633d68722fcd23a.tar.bz2 |
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
4 files changed, 50 insertions, 39 deletions
diff --git a/content/browser/renderer_host/input/web_input_event_builders_win.cc b/content/browser/renderer_host/input/web_input_event_builders_win.cc index 2541bca..19e8fc6 100644 --- a/content/browser/renderer_host/input/web_input_event_builders_win.cc +++ b/content/browser/renderer_host/input/web_input_event_builders_win.cc @@ -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; diff --git a/content/browser/renderer_host/input/web_input_event_builders_win.h b/content/browser/renderer_host/input/web_input_event_builders_win.h index d3ec4a7..4cd6d0d 100644 --- a/content/browser/renderer_host/input/web_input_event_builders_win.h +++ b/content/browser/renderer_host/input/web_input_event_builders_win.h @@ -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 diff --git a/content/browser/renderer_host/web_input_event_aura.cc b/content/browser/renderer_host/web_input_event_aura.cc index 792f2f7..dfec167 100644 --- a/content/browser/renderer_host/web_input_event_aura.cc +++ b/content/browser/renderer_host/web_input_event_aura.cc @@ -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); diff --git a/content/browser/renderer_host/web_input_event_aurawin.cc b/content/browser/renderer_host/web_input_event_aurawin.cc index 06e2dbf..549e2f2 100644 --- a/content/browser/renderer_host/web_input_event_aurawin.cc +++ b/content/browser/renderer_host/web_input_event_aurawin.cc @@ -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(); |