Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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 "core/events/PointerEventFactory.h" | 5 #include "core/events/PointerEventFactory.h" |
| 6 | 6 |
| 7 #include "core/frame/FrameView.h" | 7 #include "core/frame/FrameView.h" |
| 8 #include "core/page/Page.h" | 8 #include "core/page/Page.h" |
| 9 #include "public/platform/WebPointerProperties.h" | 9 #include "public/platform/WebPointerProperties.h" |
| 10 #include <climits> | 10 #include <climits> |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 63 public: | 63 public: |
| 64 WebTouchPointBuilder(WebPointerProperties::PointerType, | 64 WebTouchPointBuilder(WebPointerProperties::PointerType, |
| 65 int, | 65 int, |
| 66 WebTouchPoint::State); | 66 WebTouchPoint::State); |
| 67 }; | 67 }; |
| 68 | 68 |
| 69 class WebMouseEventBuilder : public WebMouseEvent { | 69 class WebMouseEventBuilder : public WebMouseEvent { |
| 70 public: | 70 public: |
| 71 WebMouseEventBuilder(WebPointerProperties::PointerType, | 71 WebMouseEventBuilder(WebPointerProperties::PointerType, |
| 72 int, | 72 int, |
| 73 WebInputEvent::Modifiers); | 73 WebInputEvent::Modifiers, |
| 74 double); | |
| 74 }; | 75 }; |
| 75 }; | 76 }; |
| 76 | 77 |
| 77 void PointerEventFactoryTest::SetUp() { | 78 void PointerEventFactoryTest::SetUp() { |
| 78 expected_mouse_id_ = 1; | 79 expected_mouse_id_ = 1; |
| 79 mapped_id_start_ = 2; | 80 mapped_id_start_ = 2; |
| 80 } | 81 } |
| 81 | 82 |
| 82 PointerEventFactoryTest::WebTouchPointBuilder::WebTouchPointBuilder( | 83 PointerEventFactoryTest::WebTouchPointBuilder::WebTouchPointBuilder( |
| 83 WebPointerProperties::PointerType pointer_type_param, | 84 WebPointerProperties::PointerType pointer_type_param, |
| 84 int id_param, | 85 int id_param, |
| 85 WebTouchPoint::State state_param) { | 86 WebTouchPoint::State state_param) { |
| 86 id = id_param; | 87 id = id_param; |
| 87 pointer_type = pointer_type_param; | 88 pointer_type = pointer_type_param; |
| 88 force = 1.0; | 89 force = 1.0; |
| 89 state = state_param; | 90 state = state_param; |
| 90 } | 91 } |
| 91 | 92 |
| 92 PointerEventFactoryTest::WebMouseEventBuilder::WebMouseEventBuilder( | 93 PointerEventFactoryTest::WebMouseEventBuilder::WebMouseEventBuilder( |
| 93 WebPointerProperties::PointerType pointer_type_param, | 94 WebPointerProperties::PointerType pointer_type_param, |
| 94 int id_param, | 95 int id_param, |
| 95 WebInputEvent::Modifiers modifiers_param) { | 96 WebInputEvent::Modifiers modifiers_param, |
| 97 double platform_time_stamp) { | |
| 96 pointer_type = pointer_type_param; | 98 pointer_type = pointer_type_param; |
| 97 id = id_param; | 99 id = id_param; |
| 98 modifiers_ = modifiers_param; | 100 modifiers_ = modifiers_param; |
| 99 frame_scale_ = 1; | 101 frame_scale_ = 1; |
| 102 time_stamp_seconds_ = platform_time_stamp; | |
| 100 } | 103 } |
| 101 | 104 |
| 102 PointerEvent* PointerEventFactoryTest::CreateAndCheckTouchCancel( | 105 PointerEvent* PointerEventFactoryTest::CreateAndCheckTouchCancel( |
| 103 WebPointerProperties::PointerType pointer_type, | 106 WebPointerProperties::PointerType pointer_type, |
| 104 int raw_id, | 107 int raw_id, |
| 105 int unique_id, | 108 int unique_id, |
| 106 bool is_primary) { | 109 bool is_primary) { |
| 107 PointerEvent* pointer_event = | 110 TimeTicks now = TimeTicks::Now(); |
| 108 pointer_event_factory_.CreatePointerCancelEvent(unique_id, pointer_type); | 111 PointerEvent* pointer_event = pointer_event_factory_.CreatePointerCancelEvent( |
| 112 unique_id, pointer_type, now); | |
| 109 EXPECT_EQ(unique_id, pointer_event->pointerId()); | 113 EXPECT_EQ(unique_id, pointer_event->pointerId()); |
| 110 EXPECT_EQ(is_primary, pointer_event->isPrimary()); | 114 EXPECT_EQ(is_primary, pointer_event->isPrimary()); |
| 111 EXPECT_EQ(PointerTypeNameForWebPointPointerType(pointer_type), | 115 EXPECT_EQ(PointerTypeNameForWebPointPointerType(pointer_type), |
| 112 pointer_event->pointerType()); | 116 pointer_event->pointerType()); |
| 117 EXPECT_EQ(now, pointer_event->PlatformTimeStamp()); | |
| 113 return pointer_event; | 118 return pointer_event; |
| 114 } | 119 } |
| 115 | 120 |
| 116 void PointerEventFactoryTest::CreateAndCheckPointerTransitionEvent( | 121 void PointerEventFactoryTest::CreateAndCheckPointerTransitionEvent( |
| 117 PointerEvent* pointer_event, | 122 PointerEvent* pointer_event, |
| 118 const AtomicString& type) { | 123 const AtomicString& type) { |
| 119 PointerEvent* clone_pointer_event = | 124 PointerEvent* clone_pointer_event = |
| 120 pointer_event_factory_.CreatePointerBoundaryEvent(pointer_event, type, | 125 pointer_event_factory_.CreatePointerBoundaryEvent(pointer_event, type, |
| 121 nullptr); | 126 nullptr); |
| 122 EXPECT_EQ(clone_pointer_event->pointerType(), pointer_event->pointerType()); | 127 EXPECT_EQ(clone_pointer_event->pointerType(), pointer_event->pointerType()); |
| 123 EXPECT_EQ(clone_pointer_event->pointerId(), pointer_event->pointerId()); | 128 EXPECT_EQ(clone_pointer_event->pointerId(), pointer_event->pointerId()); |
| 124 EXPECT_EQ(clone_pointer_event->isPrimary(), pointer_event->isPrimary()); | 129 EXPECT_EQ(clone_pointer_event->isPrimary(), pointer_event->isPrimary()); |
| 125 EXPECT_EQ(clone_pointer_event->type(), type); | 130 EXPECT_EQ(clone_pointer_event->type(), type); |
| 126 } | 131 } |
| 127 | 132 |
| 128 PointerEvent* PointerEventFactoryTest::CreateAndCheckTouchEvent( | 133 PointerEvent* PointerEventFactoryTest::CreateAndCheckTouchEvent( |
| 129 WebPointerProperties::PointerType pointer_type, | 134 WebPointerProperties::PointerType pointer_type, |
| 130 int raw_id, | 135 int raw_id, |
| 131 int unique_id, | 136 int unique_id, |
| 132 bool is_primary, | 137 bool is_primary, |
| 133 WebTouchPoint::State state, | 138 WebTouchPoint::State state, |
| 134 size_t coalesced_event_count) { | 139 size_t coalesced_event_count) { |
| 135 Vector<WebTouchPoint> coalesced_events; | 140 Vector<std::pair<WebTouchPoint, TimeTicks>> coalesced_events; |
| 141 TimeTicks now = TimeTicks::Now(); | |
| 136 for (size_t i = 0; i < coalesced_event_count; i++) { | 142 for (size_t i = 0; i < coalesced_event_count; i++) { |
| 137 coalesced_events.push_back(PointerEventFactoryTest::WebTouchPointBuilder( | 143 coalesced_events.push_back(std::pair<WebTouchPoint, TimeTicks>( |
| 138 pointer_type, raw_id, state)); | 144 PointerEventFactoryTest::WebTouchPointBuilder(pointer_type, raw_id, |
| 145 state), | |
| 146 now)); | |
| 139 } | 147 } |
| 140 PointerEvent* pointer_event = pointer_event_factory_.Create( | 148 PointerEvent* pointer_event = pointer_event_factory_.Create( |
| 141 PointerEventFactoryTest::WebTouchPointBuilder(pointer_type, raw_id, | 149 PointerEventFactoryTest::WebTouchPointBuilder(pointer_type, raw_id, |
| 142 state), | 150 state), |
| 143 coalesced_events, WebInputEvent::kNoModifiers, nullptr, nullptr); | 151 coalesced_events, WebInputEvent::kNoModifiers, now, nullptr, nullptr); |
| 144 EXPECT_EQ(unique_id, pointer_event->pointerId()); | 152 EXPECT_EQ(unique_id, pointer_event->pointerId()); |
| 145 EXPECT_EQ(is_primary, pointer_event->isPrimary()); | 153 EXPECT_EQ(is_primary, pointer_event->isPrimary()); |
| 154 EXPECT_EQ(now, pointer_event->PlatformTimeStamp()); | |
| 146 const char* expected_pointer_type = | 155 const char* expected_pointer_type = |
| 147 PointerTypeNameForWebPointPointerType(pointer_type); | 156 PointerTypeNameForWebPointPointerType(pointer_type); |
| 148 EXPECT_EQ(expected_pointer_type, pointer_event->pointerType()); | 157 EXPECT_EQ(expected_pointer_type, pointer_event->pointerType()); |
| 149 EXPECT_EQ(coalesced_event_count, pointer_event->getCoalescedEvents().size()); | 158 EXPECT_EQ(coalesced_event_count, pointer_event->getCoalescedEvents().size()); |
| 150 for (size_t i = 0; i < coalesced_event_count; i++) { | 159 for (size_t i = 0; i < coalesced_event_count; i++) { |
| 151 EXPECT_EQ(unique_id, pointer_event->getCoalescedEvents()[i]->pointerId()); | 160 EXPECT_EQ(unique_id, pointer_event->getCoalescedEvents()[i]->pointerId()); |
| 152 EXPECT_EQ(is_primary, pointer_event->getCoalescedEvents()[i]->isPrimary()); | 161 EXPECT_EQ(is_primary, pointer_event->getCoalescedEvents()[i]->isPrimary()); |
| 153 EXPECT_EQ(expected_pointer_type, pointer_event->pointerType()); | 162 EXPECT_EQ(expected_pointer_type, pointer_event->pointerType()); |
| 163 EXPECT_EQ(now, pointer_event->PlatformTimeStamp()); | |
| 154 } | 164 } |
| 155 return pointer_event; | 165 return pointer_event; |
| 156 } | 166 } |
| 157 | 167 |
| 158 PointerEvent* PointerEventFactoryTest::CreateAndCheckMouseEvent( | 168 PointerEvent* PointerEventFactoryTest::CreateAndCheckMouseEvent( |
| 159 WebPointerProperties::PointerType pointer_type, | 169 WebPointerProperties::PointerType pointer_type, |
| 160 int raw_id, | 170 int raw_id, |
| 161 int unique_id, | 171 int unique_id, |
| 162 bool is_primary, | 172 bool is_primary, |
| 163 WebInputEvent::Modifiers modifiers, | 173 WebInputEvent::Modifiers modifiers, |
| 164 size_t coalesced_event_count) { | 174 size_t coalesced_event_count) { |
| 165 Vector<WebMouseEvent> coalesced_events; | 175 Vector<WebMouseEvent> coalesced_events; |
| 176 double base_time = 123; | |
|
dtapuska
2017/04/24 15:27:43
Can we use https://cs.chromium.org/chromium/src/th
Navid Zolghadr
2017/04/24 15:51:45
Makes sense. Done.
| |
| 166 for (size_t i = 0; i < coalesced_event_count; i++) { | 177 for (size_t i = 0; i < coalesced_event_count; i++) { |
| 167 coalesced_events.push_back(PointerEventFactoryTest::WebMouseEventBuilder( | 178 coalesced_events.push_back(PointerEventFactoryTest::WebMouseEventBuilder( |
| 168 pointer_type, raw_id, modifiers)); | 179 pointer_type, raw_id, modifiers, 123 + i)); |
|
dtapuska
2017/04/24 15:27:43
Can this be base_time + i (instead of 123 + i) ?
Navid Zolghadr
2017/04/24 15:51:45
Done.
| |
| 169 } | 180 } |
| 170 PointerEvent* pointer_event = pointer_event_factory_.Create( | 181 PointerEvent* pointer_event = pointer_event_factory_.Create( |
| 171 coalesced_event_count ? EventTypeNames::mousemove | 182 coalesced_event_count ? EventTypeNames::mousemove |
| 172 : EventTypeNames::mousedown, | 183 : EventTypeNames::mousedown, |
| 173 PointerEventFactoryTest::WebMouseEventBuilder(pointer_type, raw_id, | 184 PointerEventFactoryTest::WebMouseEventBuilder(pointer_type, raw_id, |
| 174 modifiers), | 185 modifiers, base_time), |
| 175 coalesced_events, nullptr); | 186 coalesced_events, nullptr); |
| 176 EXPECT_EQ(unique_id, pointer_event->pointerId()); | 187 EXPECT_EQ(unique_id, pointer_event->pointerId()); |
| 177 EXPECT_EQ(is_primary, pointer_event->isPrimary()); | 188 EXPECT_EQ(is_primary, pointer_event->isPrimary()); |
| 189 EXPECT_EQ(TimeTicks::FromSeconds(base_time), | |
| 190 pointer_event->PlatformTimeStamp()); | |
| 178 const char* expected_pointer_type = | 191 const char* expected_pointer_type = |
| 179 PointerTypeNameForWebPointPointerType(pointer_type); | 192 PointerTypeNameForWebPointPointerType(pointer_type); |
| 180 EXPECT_EQ(expected_pointer_type, pointer_event->pointerType()); | 193 EXPECT_EQ(expected_pointer_type, pointer_event->pointerType()); |
| 181 EXPECT_EQ(coalesced_event_count, pointer_event->getCoalescedEvents().size()); | 194 EXPECT_EQ(coalesced_event_count, pointer_event->getCoalescedEvents().size()); |
| 182 for (size_t i = 0; i < coalesced_event_count; i++) { | 195 for (size_t i = 0; i < coalesced_event_count; i++) { |
| 183 EXPECT_EQ(unique_id, pointer_event->getCoalescedEvents()[i]->pointerId()); | 196 EXPECT_EQ(unique_id, pointer_event->getCoalescedEvents()[i]->pointerId()); |
| 184 EXPECT_EQ(is_primary, pointer_event->getCoalescedEvents()[i]->isPrimary()); | 197 EXPECT_EQ(is_primary, pointer_event->getCoalescedEvents()[i]->isPrimary()); |
| 185 EXPECT_EQ(expected_pointer_type, pointer_event->pointerType()); | 198 EXPECT_EQ(expected_pointer_type, pointer_event->pointerType()); |
| 199 EXPECT_EQ(TimeTicks::FromSeconds(base_time + i), | |
| 200 pointer_event->getCoalescedEvents()[i]->PlatformTimeStamp()); | |
| 186 } | 201 } |
| 187 return pointer_event; | 202 return pointer_event; |
| 188 } | 203 } |
| 189 | 204 |
| 190 TEST_F(PointerEventFactoryTest, MousePointer) { | 205 TEST_F(PointerEventFactoryTest, MousePointer) { |
| 191 EXPECT_TRUE(pointer_event_factory_.IsActive(expected_mouse_id_)); | 206 EXPECT_TRUE(pointer_event_factory_.IsActive(expected_mouse_id_)); |
| 192 EXPECT_FALSE(pointer_event_factory_.IsActiveButtonsState(expected_mouse_id_)); | 207 EXPECT_FALSE(pointer_event_factory_.IsActiveButtonsState(expected_mouse_id_)); |
| 193 | 208 |
| 194 PointerEvent* pointer_event1 = CreateAndCheckMouseEvent( | 209 PointerEvent* pointer_event1 = CreateAndCheckMouseEvent( |
| 195 WebPointerProperties::PointerType::kMouse, 0, expected_mouse_id_, true); | 210 WebPointerProperties::PointerType::kMouse, 0, expected_mouse_id_, true); |
| (...skipping 262 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 458 TEST_F(PointerEventFactoryTest, CoalescedEvents) { | 473 TEST_F(PointerEventFactoryTest, CoalescedEvents) { |
| 459 CreateAndCheckMouseEvent(WebPointerProperties::PointerType::kMouse, 0, | 474 CreateAndCheckMouseEvent(WebPointerProperties::PointerType::kMouse, 0, |
| 460 expected_mouse_id_, true, | 475 expected_mouse_id_, true, |
| 461 WebInputEvent::kNoModifiers, 4); | 476 WebInputEvent::kNoModifiers, 4); |
| 462 CreateAndCheckTouchEvent(WebPointerProperties::PointerType::kTouch, 0, | 477 CreateAndCheckTouchEvent(WebPointerProperties::PointerType::kTouch, 0, |
| 463 mapped_id_start_, true, WebTouchPoint::kStateMoved, | 478 mapped_id_start_, true, WebTouchPoint::kStateMoved, |
| 464 3); | 479 3); |
| 465 } | 480 } |
| 466 | 481 |
| 467 } // namespace blink | 482 } // namespace blink |
| OLD | NEW |