Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "content/shell/renderer/test_runner/event_sender.h" | 5 #include "content/shell/renderer/test_runner/event_sender.h" |
| 6 | 6 |
| 7 #include "base/basictypes.h" | 7 #include "base/basictypes.h" |
| 8 #include "base/logging.h" | 8 #include "base/logging.h" |
| 9 #include "base/strings/stringprintf.h" | 9 #include "base/strings/stringprintf.h" |
| 10 #include "content/public/common/page_zoom.h" | 10 #include "content/public/common/page_zoom.h" |
| (...skipping 343 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 354 void TouchEnd(); | 354 void TouchEnd(); |
| 355 void LeapForward(int milliseconds); | 355 void LeapForward(int milliseconds); |
| 356 void BeginDragWithFiles(const std::vector<std::string>& files); | 356 void BeginDragWithFiles(const std::vector<std::string>& files); |
| 357 void AddTouchPoint(gin::Arguments* args); | 357 void AddTouchPoint(gin::Arguments* args); |
| 358 void MouseDragBegin(); | 358 void MouseDragBegin(); |
| 359 void MouseDragEnd(); | 359 void MouseDragEnd(); |
| 360 void GestureScrollBegin(gin::Arguments* args); | 360 void GestureScrollBegin(gin::Arguments* args); |
| 361 void GestureScrollEnd(gin::Arguments* args); | 361 void GestureScrollEnd(gin::Arguments* args); |
| 362 void GestureScrollUpdate(gin::Arguments* args); | 362 void GestureScrollUpdate(gin::Arguments* args); |
| 363 void GestureScrollUpdateWithoutPropagation(gin::Arguments* args); | 363 void GestureScrollUpdateWithoutPropagation(gin::Arguments* args); |
| 364 void GestureTap(gin::Arguments* args); | 364 bool GestureTap(gin::Arguments* args); |
| 365 void GestureTapDown(gin::Arguments* args); | 365 void GestureTapDown(gin::Arguments* args); |
| 366 void GestureShowPress(gin::Arguments* args); | 366 void GestureShowPress(gin::Arguments* args); |
| 367 void GestureTapCancel(gin::Arguments* args); | 367 void GestureTapCancel(gin::Arguments* args); |
| 368 void GestureLongPress(gin::Arguments* args); | 368 void GestureLongPress(gin::Arguments* args); |
| 369 void GestureLongTap(gin::Arguments* args); | 369 void GestureLongTap(gin::Arguments* args); |
| 370 void GestureTwoFingerTap(gin::Arguments* args); | 370 void GestureTwoFingerTap(gin::Arguments* args); |
| 371 void ContinuousMouseScrollBy(gin::Arguments* args); | 371 void ContinuousMouseScrollBy(gin::Arguments* args); |
| 372 void MouseMoveTo(gin::Arguments* args); | 372 void MouseMoveTo(gin::Arguments* args); |
| 373 void TrackpadScrollBegin(); | 373 void TrackpadScrollBegin(); |
| 374 void TrackpadScroll(gin::Arguments* args); | 374 void TrackpadScroll(gin::Arguments* args); |
| (...skipping 360 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 735 if (sender_) | 735 if (sender_) |
| 736 sender_->GestureScrollUpdate(args); | 736 sender_->GestureScrollUpdate(args); |
| 737 } | 737 } |
| 738 | 738 |
| 739 void EventSenderBindings::GestureScrollUpdateWithoutPropagation( | 739 void EventSenderBindings::GestureScrollUpdateWithoutPropagation( |
| 740 gin::Arguments* args) { | 740 gin::Arguments* args) { |
| 741 if (sender_) | 741 if (sender_) |
| 742 sender_->GestureScrollUpdateWithoutPropagation(args); | 742 sender_->GestureScrollUpdateWithoutPropagation(args); |
| 743 } | 743 } |
| 744 | 744 |
| 745 void EventSenderBindings::GestureTap(gin::Arguments* args) { | 745 bool EventSenderBindings::GestureTap(gin::Arguments* args) { |
| 746 if (sender_) | 746 if (sender_) |
| 747 sender_->GestureTap(args); | 747 return sender_->GestureTap(args); |
| 748 return false; // TODO(donnd): true? | |
|
Rick Byers
2014/05/29 20:57:47
yeah this is goofy (should probably throw instead
donnd
2014/05/31 03:14:57
Done.
| |
| 748 } | 749 } |
| 749 | 750 |
| 750 void EventSenderBindings::GestureTapDown(gin::Arguments* args) { | 751 void EventSenderBindings::GestureTapDown(gin::Arguments* args) { |
| 751 if (sender_) | 752 if (sender_) |
| 752 sender_->GestureTapDown(args); | 753 sender_->GestureTapDown(args); |
| 753 } | 754 } |
| 754 | 755 |
| 755 void EventSenderBindings::GestureShowPress(gin::Arguments* args) { | 756 void EventSenderBindings::GestureShowPress(gin::Arguments* args) { |
| 756 if (sender_) | 757 if (sender_) |
| 757 sender_->GestureShowPress(args); | 758 sender_->GestureShowPress(args); |
| (...skipping 926 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1684 } | 1685 } |
| 1685 | 1686 |
| 1686 void EventSender::GestureScrollUpdate(gin::Arguments* args) { | 1687 void EventSender::GestureScrollUpdate(gin::Arguments* args) { |
| 1687 GestureEvent(WebInputEvent::GestureScrollUpdate, args); | 1688 GestureEvent(WebInputEvent::GestureScrollUpdate, args); |
| 1688 } | 1689 } |
| 1689 | 1690 |
| 1690 void EventSender::GestureScrollUpdateWithoutPropagation(gin::Arguments* args) { | 1691 void EventSender::GestureScrollUpdateWithoutPropagation(gin::Arguments* args) { |
| 1691 GestureEvent(WebInputEvent::GestureScrollUpdateWithoutPropagation, args); | 1692 GestureEvent(WebInputEvent::GestureScrollUpdateWithoutPropagation, args); |
| 1692 } | 1693 } |
| 1693 | 1694 |
| 1694 void EventSender::GestureTap(gin::Arguments* args) { | 1695 bool EventSender::GestureTap(gin::Arguments* args) { |
|
Rick Byers
2014/05/29 20:57:47
I'm new to gin (gin is a new lightweight javascrip
donnd
2014/05/31 03:14:57
Done.
| |
| 1695 GestureEvent(WebInputEvent::GestureTap, args); | 1696 return GestureEvent(WebInputEvent::GestureTap, args); |
| 1696 } | 1697 } |
| 1697 | 1698 |
| 1698 void EventSender::GestureTapDown(gin::Arguments* args) { | 1699 void EventSender::GestureTapDown(gin::Arguments* args) { |
| 1699 GestureEvent(WebInputEvent::GestureTapDown, args); | 1700 GestureEvent(WebInputEvent::GestureTapDown, args); |
| 1700 } | 1701 } |
| 1701 | 1702 |
| 1702 void EventSender::GestureShowPress(gin::Arguments* args) { | 1703 void EventSender::GestureShowPress(gin::Arguments* args) { |
| 1703 GestureEvent(WebInputEvent::GestureShowPress, args); | 1704 GestureEvent(WebInputEvent::GestureShowPress, args); |
| 1704 } | 1705 } |
| 1705 | 1706 |
| (...skipping 177 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1883 for (size_t i = 0; i < touch_points_.size(); ++i) { | 1884 for (size_t i = 0; i < touch_points_.size(); ++i) { |
| 1884 WebTouchPoint* touch_point = &touch_points_[i]; | 1885 WebTouchPoint* touch_point = &touch_points_[i]; |
| 1885 if (touch_point->state == WebTouchPoint::StateReleased) { | 1886 if (touch_point->state == WebTouchPoint::StateReleased) { |
| 1886 touch_points_.erase(touch_points_.begin() + i); | 1887 touch_points_.erase(touch_points_.begin() + i); |
| 1887 --i; | 1888 --i; |
| 1888 } else | 1889 } else |
| 1889 touch_point->state = WebTouchPoint::StateStationary; | 1890 touch_point->state = WebTouchPoint::StateStationary; |
| 1890 } | 1891 } |
| 1891 } | 1892 } |
| 1892 | 1893 |
| 1893 void EventSender::GestureEvent(WebInputEvent::Type type, | 1894 bool EventSender::GestureEvent(WebInputEvent::Type type, |
| 1894 gin::Arguments* args) { | 1895 gin::Arguments* args) { |
| 1895 double x; | 1896 double x; |
| 1896 double y; | 1897 double y; |
| 1897 args->GetNext(&x); | 1898 args->GetNext(&x); |
| 1898 args->GetNext(&y); | 1899 args->GetNext(&y); |
| 1899 WebPoint point(x, y); | 1900 WebPoint point(x, y); |
| 1900 | 1901 |
| 1901 WebGestureEvent event; | 1902 WebGestureEvent event; |
| 1902 event.type = type; | 1903 event.type = type; |
| 1903 | 1904 |
| (...skipping 17 matching lines...) Expand all Loading... | |
| 1921 case WebInputEvent::GestureScrollEnd: | 1922 case WebInputEvent::GestureScrollEnd: |
| 1922 case WebInputEvent::GestureFlingStart: | 1923 case WebInputEvent::GestureFlingStart: |
| 1923 event.x = current_gesture_location_.x; | 1924 event.x = current_gesture_location_.x; |
| 1924 event.y = current_gesture_location_.y; | 1925 event.y = current_gesture_location_.y; |
| 1925 break; | 1926 break; |
| 1926 case WebInputEvent::GestureTap: | 1927 case WebInputEvent::GestureTap: |
| 1927 if (!args->PeekNext().IsEmpty()) { | 1928 if (!args->PeekNext().IsEmpty()) { |
| 1928 float tap_count; | 1929 float tap_count; |
| 1929 if (!args->GetNext(&tap_count)) { | 1930 if (!args->GetNext(&tap_count)) { |
| 1930 args->ThrowError(); | 1931 args->ThrowError(); |
| 1931 return; | 1932 return false; |
|
Rick Byers
2014/05/29 20:57:47
If the right way to set a return value to JS is ar
donnd
2014/05/31 03:14:57
Done.
| |
| 1932 } | 1933 } |
| 1933 event.data.tap.tapCount = tap_count; | 1934 event.data.tap.tapCount = tap_count; |
| 1934 } else { | 1935 } else { |
| 1935 event.data.tap.tapCount = 1; | 1936 event.data.tap.tapCount = 1; |
| 1936 } | 1937 } |
| 1937 | 1938 |
| 1938 event.x = point.x; | 1939 event.x = point.x; |
| 1939 event.y = point.y; | 1940 event.y = point.y; |
| 1940 break; | 1941 break; |
| 1941 case WebInputEvent::GestureTapUnconfirmed: | 1942 case WebInputEvent::GestureTapUnconfirmed: |
| 1942 if (!args->PeekNext().IsEmpty()) { | 1943 if (!args->PeekNext().IsEmpty()) { |
| 1943 float tap_count; | 1944 float tap_count; |
| 1944 if (!args->GetNext(&tap_count)) { | 1945 if (!args->GetNext(&tap_count)) { |
| 1945 args->ThrowError(); | 1946 args->ThrowError(); |
| 1946 return; | 1947 return false; |
| 1947 } | 1948 } |
| 1948 event.data.tap.tapCount = tap_count; | 1949 event.data.tap.tapCount = tap_count; |
| 1949 } else { | 1950 } else { |
| 1950 event.data.tap.tapCount = 1; | 1951 event.data.tap.tapCount = 1; |
| 1951 } | 1952 } |
| 1952 event.x = point.x; | 1953 event.x = point.x; |
| 1953 event.y = point.y; | 1954 event.y = point.y; |
| 1954 break; | 1955 break; |
| 1955 case WebInputEvent::GestureTapDown: | 1956 case WebInputEvent::GestureTapDown: |
| 1956 event.x = point.x; | 1957 event.x = point.x; |
| 1957 event.y = point.y; | 1958 event.y = point.y; |
| 1958 if (!args->PeekNext().IsEmpty()) { | 1959 if (!args->PeekNext().IsEmpty()) { |
| 1959 float width; | 1960 float width; |
| 1960 if (!args->GetNext(&width)) { | 1961 if (!args->GetNext(&width)) { |
| 1961 args->ThrowError(); | 1962 args->ThrowError(); |
| 1962 return; | 1963 return false; |
| 1963 } | 1964 } |
| 1964 event.data.tapDown.width = width; | 1965 event.data.tapDown.width = width; |
| 1965 } | 1966 } |
| 1966 if (!args->PeekNext().IsEmpty()) { | 1967 if (!args->PeekNext().IsEmpty()) { |
| 1967 float height; | 1968 float height; |
| 1968 if (!args->GetNext(&height)) { | 1969 if (!args->GetNext(&height)) { |
| 1969 args->ThrowError(); | 1970 args->ThrowError(); |
| 1970 return; | 1971 return false; |
| 1971 } | 1972 } |
| 1972 event.data.tapDown.height = height; | 1973 event.data.tapDown.height = height; |
| 1973 } | 1974 } |
| 1974 break; | 1975 break; |
| 1975 case WebInputEvent::GestureShowPress: | 1976 case WebInputEvent::GestureShowPress: |
| 1976 event.x = point.x; | 1977 event.x = point.x; |
| 1977 event.y = point.y; | 1978 event.y = point.y; |
| 1978 if (!args->PeekNext().IsEmpty()) { | 1979 if (!args->PeekNext().IsEmpty()) { |
| 1979 float width; | 1980 float width; |
| 1980 if (!args->GetNext(&width)) { | 1981 if (!args->GetNext(&width)) { |
| 1981 args->ThrowError(); | 1982 args->ThrowError(); |
| 1982 return; | 1983 return false; |
| 1983 } | 1984 } |
| 1984 event.data.showPress.width = width; | 1985 event.data.showPress.width = width; |
| 1985 if (!args->PeekNext().IsEmpty()) { | 1986 if (!args->PeekNext().IsEmpty()) { |
| 1986 float height; | 1987 float height; |
| 1987 if (!args->GetNext(&height)) { | 1988 if (!args->GetNext(&height)) { |
| 1988 args->ThrowError(); | 1989 args->ThrowError(); |
| 1989 return; | 1990 return false; |
| 1990 } | 1991 } |
| 1991 event.data.showPress.height = height; | 1992 event.data.showPress.height = height; |
| 1992 } | 1993 } |
| 1993 } | 1994 } |
| 1994 break; | 1995 break; |
| 1995 case WebInputEvent::GestureTapCancel: | 1996 case WebInputEvent::GestureTapCancel: |
| 1996 event.x = point.x; | 1997 event.x = point.x; |
| 1997 event.y = point.y; | 1998 event.y = point.y; |
| 1998 break; | 1999 break; |
| 1999 case WebInputEvent::GestureLongPress: | 2000 case WebInputEvent::GestureLongPress: |
| 2000 event.x = point.x; | 2001 event.x = point.x; |
| 2001 event.y = point.y; | 2002 event.y = point.y; |
| 2002 if (!args->PeekNext().IsEmpty()) { | 2003 if (!args->PeekNext().IsEmpty()) { |
| 2003 float width; | 2004 float width; |
| 2004 if (!args->GetNext(&width)) { | 2005 if (!args->GetNext(&width)) { |
| 2005 args->ThrowError(); | 2006 args->ThrowError(); |
| 2006 return; | 2007 return false; |
| 2007 } | 2008 } |
| 2008 event.data.longPress.width = width; | 2009 event.data.longPress.width = width; |
| 2009 if (!args->PeekNext().IsEmpty()) { | 2010 if (!args->PeekNext().IsEmpty()) { |
| 2010 float height; | 2011 float height; |
| 2011 if (!args->GetNext(&height)) { | 2012 if (!args->GetNext(&height)) { |
| 2012 args->ThrowError(); | 2013 args->ThrowError(); |
| 2013 return; | 2014 return false; |
| 2014 } | 2015 } |
| 2015 event.data.longPress.height = height; | 2016 event.data.longPress.height = height; |
| 2016 } | 2017 } |
| 2017 } | 2018 } |
| 2018 break; | 2019 break; |
| 2019 case WebInputEvent::GestureLongTap: | 2020 case WebInputEvent::GestureLongTap: |
| 2020 event.x = point.x; | 2021 event.x = point.x; |
| 2021 event.y = point.y; | 2022 event.y = point.y; |
| 2022 if (!args->PeekNext().IsEmpty()) { | 2023 if (!args->PeekNext().IsEmpty()) { |
| 2023 float width; | 2024 float width; |
| 2024 if (!args->GetNext(&width)) { | 2025 if (!args->GetNext(&width)) { |
| 2025 args->ThrowError(); | 2026 args->ThrowError(); |
| 2026 return; | 2027 return false; |
| 2027 } | 2028 } |
| 2028 event.data.longPress.width = width; | 2029 event.data.longPress.width = width; |
| 2029 if (!args->PeekNext().IsEmpty()) { | 2030 if (!args->PeekNext().IsEmpty()) { |
| 2030 float height; | 2031 float height; |
| 2031 if (!args->GetNext(&height)) { | 2032 if (!args->GetNext(&height)) { |
| 2032 args->ThrowError(); | 2033 args->ThrowError(); |
| 2033 return; | 2034 return false; |
| 2034 } | 2035 } |
| 2035 event.data.longPress.height = height; | 2036 event.data.longPress.height = height; |
| 2036 } | 2037 } |
| 2037 } | 2038 } |
| 2038 break; | 2039 break; |
| 2039 case WebInputEvent::GestureTwoFingerTap: | 2040 case WebInputEvent::GestureTwoFingerTap: |
| 2040 event.x = point.x; | 2041 event.x = point.x; |
| 2041 event.y = point.y; | 2042 event.y = point.y; |
| 2042 if (!args->PeekNext().IsEmpty()) { | 2043 if (!args->PeekNext().IsEmpty()) { |
| 2043 float first_finger_width; | 2044 float first_finger_width; |
| 2044 if (!args->GetNext(&first_finger_width)) { | 2045 if (!args->GetNext(&first_finger_width)) { |
| 2045 args->ThrowError(); | 2046 args->ThrowError(); |
| 2046 return; | 2047 return false; |
| 2047 } | 2048 } |
| 2048 event.data.twoFingerTap.firstFingerWidth = first_finger_width; | 2049 event.data.twoFingerTap.firstFingerWidth = first_finger_width; |
| 2049 if (!args->PeekNext().IsEmpty()) { | 2050 if (!args->PeekNext().IsEmpty()) { |
| 2050 float first_finger_height; | 2051 float first_finger_height; |
| 2051 if (!args->GetNext(&first_finger_height)) { | 2052 if (!args->GetNext(&first_finger_height)) { |
| 2052 args->ThrowError(); | 2053 args->ThrowError(); |
| 2053 return; | 2054 return false; |
| 2054 } | 2055 } |
| 2055 event.data.twoFingerTap.firstFingerHeight = first_finger_height; | 2056 event.data.twoFingerTap.firstFingerHeight = first_finger_height; |
| 2056 } | 2057 } |
| 2057 } | 2058 } |
| 2058 break; | 2059 break; |
| 2059 default: | 2060 default: |
| 2060 NOTREACHED(); | 2061 NOTREACHED(); |
| 2061 } | 2062 } |
| 2062 | 2063 |
| 2063 event.globalX = event.x; | 2064 event.globalX = event.x; |
| 2064 event.globalY = event.y; | 2065 event.globalY = event.y; |
| 2065 event.timeStampSeconds = GetCurrentEventTimeSec(); | 2066 event.timeStampSeconds = GetCurrentEventTimeSec(); |
| 2066 | 2067 |
| 2067 if (force_layout_on_events_) | 2068 if (force_layout_on_events_) |
| 2068 view_->layout(); | 2069 view_->layout(); |
| 2069 | 2070 |
| 2070 view_->handleInputEvent(event); | 2071 bool result = view_->handleInputEvent(event); |
| 2071 | 2072 |
| 2072 // Long press might start a drag drop session. Complete it if so. | 2073 // Long press might start a drag drop session. Complete it if so. |
| 2073 if (type == WebInputEvent::GestureLongPress && !current_drag_data_.isNull()) { | 2074 if (type == WebInputEvent::GestureLongPress && !current_drag_data_.isNull()) { |
| 2074 WebMouseEvent mouse_event; | 2075 WebMouseEvent mouse_event; |
| 2075 InitMouseEvent(WebInputEvent::MouseDown, | 2076 InitMouseEvent(WebInputEvent::MouseDown, |
| 2076 pressed_button_, | 2077 pressed_button_, |
| 2077 point, | 2078 point, |
| 2078 GetCurrentEventTimeSec(), | 2079 GetCurrentEventTimeSec(), |
| 2079 click_count_, | 2080 click_count_, |
| 2080 0, | 2081 0, |
| 2081 &mouse_event); | 2082 &mouse_event); |
| 2082 | 2083 |
| 2083 FinishDragAndDrop(mouse_event, blink::WebDragOperationNone); | 2084 FinishDragAndDrop(mouse_event, blink::WebDragOperationNone); |
| 2085 result = true; | |
| 2084 } | 2086 } |
| 2087 return result; | |
| 2085 } | 2088 } |
| 2086 | 2089 |
| 2087 void EventSender::UpdateClickCountForButton( | 2090 void EventSender::UpdateClickCountForButton( |
| 2088 WebMouseEvent::Button button_type) { | 2091 WebMouseEvent::Button button_type) { |
| 2089 if ((GetCurrentEventTimeSec() - last_click_time_sec_ < | 2092 if ((GetCurrentEventTimeSec() - last_click_time_sec_ < |
| 2090 kMultipleClickTimeSec) && | 2093 kMultipleClickTimeSec) && |
| 2091 (!OutsideMultiClickRadius(last_mouse_pos_, last_click_pos_)) && | 2094 (!OutsideMultiClickRadius(last_mouse_pos_, last_click_pos_)) && |
| 2092 (button_type == last_button_type_)) { | 2095 (button_type == last_button_type_)) { |
| 2093 ++click_count_; | 2096 ++click_count_; |
| 2094 } else { | 2097 } else { |
| (...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2241 } | 2244 } |
| 2242 default: | 2245 default: |
| 2243 NOTREACHED(); | 2246 NOTREACHED(); |
| 2244 } | 2247 } |
| 2245 } | 2248 } |
| 2246 | 2249 |
| 2247 replaying_saved_events_ = false; | 2250 replaying_saved_events_ = false; |
| 2248 } | 2251 } |
| 2249 | 2252 |
| 2250 } // namespace content | 2253 } // namespace content |
| OLD | NEW |