OLD | NEW |
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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/input/GestureManager.h" | 5 #include "core/input/GestureManager.h" |
6 | 6 |
7 #include "core/dom/Document.h" | 7 #include "core/dom/Document.h" |
8 #include "core/dom/DocumentUserGestureToken.h" | 8 #include "core/dom/DocumentUserGestureToken.h" |
9 #include "core/editing/SelectionController.h" | 9 #include "core/editing/SelectionController.h" |
10 #include "core/events/GestureEvent.h" | 10 #include "core/events/GestureEvent.h" |
(...skipping 167 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
178 LocalFrame* main_frame = frame_->LocalFrameRoot(); | 178 LocalFrame* main_frame = frame_->LocalFrameRoot(); |
179 if (main_frame && main_frame->View()) | 179 if (main_frame && main_frame->View()) |
180 main_frame->View()->UpdateLifecycleToCompositingCleanPlusScrolling(); | 180 main_frame->View()->UpdateLifecycleToCompositingCleanPlusScrolling(); |
181 adjusted_point = frame_view->RootFrameToContents( | 181 adjusted_point = frame_view->RootFrameToContents( |
182 FlooredIntPoint(gesture_event.PositionInRootFrame())); | 182 FlooredIntPoint(gesture_event.PositionInRootFrame())); |
183 current_hit_test = EventHandlingUtil::HitTestResultInFrame( | 183 current_hit_test = EventHandlingUtil::HitTestResultInFrame( |
184 frame_, adjusted_point, hit_type); | 184 frame_, adjusted_point, hit_type); |
185 } | 185 } |
186 | 186 |
187 // Capture data for showUnhandledTapUIIfNeeded. | 187 // Capture data for showUnhandledTapUIIfNeeded. |
188 Node* tapped_node = current_hit_test.InnerNode(); | |
189 IntPoint tapped_position = | 188 IntPoint tapped_position = |
190 FlooredIntPoint(gesture_event.PositionInRootFrame()); | 189 FlooredIntPoint(gesture_event.PositionInRootFrame()); |
191 Node* tapped_non_text_node = tapped_node; | 190 Node* tapped_node = current_hit_test.InnerNode(); |
| 191 Element* tapped_element = |
| 192 EventHandlingUtil::ParentElementIfNeeded(tapped_node); |
192 UserGestureIndicator gesture_indicator(DocumentUserGestureToken::Create( | 193 UserGestureIndicator gesture_indicator(DocumentUserGestureToken::Create( |
193 tapped_node ? &tapped_node->GetDocument() : nullptr)); | 194 tapped_node ? &tapped_node->GetDocument() : nullptr)); |
194 | 195 |
195 if (tapped_non_text_node && tapped_non_text_node->IsTextNode()) | 196 mouse_event_manager_->SetClickElement(tapped_element); |
196 tapped_non_text_node = FlatTreeTraversal::Parent(*tapped_non_text_node); | |
197 | |
198 mouse_event_manager_->SetClickNode(tapped_non_text_node); | |
199 | 197 |
200 WebMouseEvent fake_mouse_down( | 198 WebMouseEvent fake_mouse_down( |
201 WebInputEvent::kMouseDown, gesture_event, | 199 WebInputEvent::kMouseDown, gesture_event, |
202 WebPointerProperties::Button::kLeft, gesture_event.TapCount(), | 200 WebPointerProperties::Button::kLeft, gesture_event.TapCount(), |
203 static_cast<WebInputEvent::Modifiers>( | 201 static_cast<WebInputEvent::Modifiers>( |
204 modifiers | WebInputEvent::Modifiers::kLeftButtonDown | | 202 modifiers | WebInputEvent::Modifiers::kLeftButtonDown | |
205 WebInputEvent::Modifiers::kIsCompatibilityEventForTouch), | 203 WebInputEvent::Modifiers::kIsCompatibilityEventForTouch), |
206 gesture_event.TimeStampSeconds()); | 204 gesture_event.TimeStampSeconds()); |
207 | 205 |
208 // TODO(mustaq): We suppress MEs plus all it's side effects. What would that | 206 // TODO(mustaq): We suppress MEs plus all it's side effects. What would that |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
255 modifiers | WebInputEvent::Modifiers::kIsCompatibilityEventForTouch), | 253 modifiers | WebInputEvent::Modifiers::kIsCompatibilityEventForTouch), |
256 gesture_event.TimeStampSeconds()); | 254 gesture_event.TimeStampSeconds()); |
257 WebInputEventResult mouse_up_event_result = | 255 WebInputEventResult mouse_up_event_result = |
258 suppress_mouse_events_from_gestures_ | 256 suppress_mouse_events_from_gestures_ |
259 ? WebInputEventResult::kHandledSuppressed | 257 ? WebInputEventResult::kHandledSuppressed |
260 : mouse_event_manager_->SetMousePositionAndDispatchMouseEvent( | 258 : mouse_event_manager_->SetMousePositionAndDispatchMouseEvent( |
261 current_hit_test.InnerNode(), current_hit_test.CanvasRegionId(), | 259 current_hit_test.InnerNode(), current_hit_test.CanvasRegionId(), |
262 EventTypeNames::mouseup, fake_mouse_up); | 260 EventTypeNames::mouseup, fake_mouse_up); |
263 | 261 |
264 WebInputEventResult click_event_result = WebInputEventResult::kNotHandled; | 262 WebInputEventResult click_event_result = WebInputEventResult::kNotHandled; |
265 if (tapped_non_text_node) { | 263 if (tapped_element) { |
266 if (current_hit_test.InnerNode()) { | 264 if (current_hit_test.InnerNode()) { |
267 // Updates distribution because a mouseup (or mousedown) event listener | 265 // Updates distribution because a mouseup (or mousedown) event listener |
268 // can make the tree dirty at dispatchMouseEvent() invocation above. | 266 // can make the tree dirty at dispatchMouseEvent() invocation above. |
269 // Unless distribution is updated, commonAncestor would hit DCHECK. Both | 267 // Unless distribution is updated, commonAncestor would hit DCHECK. Both |
270 // tappedNonTextNode and currentHitTest.innerNode()) don't need to be | 268 // tappedNonTextNode and currentHitTest.innerNode()) don't need to be |
271 // updated because commonAncestor() will exit early if their documents are | 269 // updated because commonAncestor() will exit early if their documents are |
272 // different. | 270 // different. |
273 tapped_non_text_node->UpdateDistribution(); | 271 tapped_element->UpdateDistribution(); |
274 Node* click_target_node = current_hit_test.InnerNode()->CommonAncestor( | 272 Node* click_target_node = current_hit_test.InnerNode()->CommonAncestor( |
275 *tapped_non_text_node, EventHandlingUtil::ParentForClickEvent); | 273 *tapped_element, EventHandlingUtil::ParentForClickEvent); |
276 click_event_result = | 274 click_event_result = |
277 mouse_event_manager_->SetMousePositionAndDispatchMouseEvent( | 275 mouse_event_manager_->SetMousePositionAndDispatchMouseEvent( |
278 click_target_node, String(), EventTypeNames::click, | 276 click_target_node, String(), EventTypeNames::click, |
279 fake_mouse_up); | 277 fake_mouse_up); |
280 } | 278 } |
281 mouse_event_manager_->SetClickNode(nullptr); | 279 mouse_event_manager_->SetClickElement(nullptr); |
282 } | 280 } |
283 | 281 |
284 if (mouse_up_event_result == WebInputEventResult::kNotHandled) | 282 if (mouse_up_event_result == WebInputEventResult::kNotHandled) |
285 mouse_up_event_result = mouse_event_manager_->HandleMouseReleaseEvent( | 283 mouse_up_event_result = mouse_event_manager_->HandleMouseReleaseEvent( |
286 MouseEventWithHitTestResults(fake_mouse_up, current_hit_test)); | 284 MouseEventWithHitTestResults(fake_mouse_up, current_hit_test)); |
287 mouse_event_manager_->ClearDragHeuristicState(); | 285 mouse_event_manager_->ClearDragHeuristicState(); |
288 | 286 |
289 WebInputEventResult event_result = EventHandlingUtil::MergeEventResult( | 287 WebInputEventResult event_result = EventHandlingUtil::MergeEventResult( |
290 EventHandlingUtil::MergeEventResult(mouse_down_event_result, | 288 EventHandlingUtil::MergeEventResult(mouse_down_event_result, |
291 mouse_up_event_result), | 289 mouse_up_event_result), |
(...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
432 } | 430 } |
433 return WebInputEventResult::kNotHandled; | 431 return WebInputEventResult::kNotHandled; |
434 } | 432 } |
435 | 433 |
436 WTF::Optional<WTF::TimeTicks> GestureManager::GetLastShowPressTimestamp() | 434 WTF::Optional<WTF::TimeTicks> GestureManager::GetLastShowPressTimestamp() |
437 const { | 435 const { |
438 return last_show_press_timestamp_; | 436 return last_show_press_timestamp_; |
439 } | 437 } |
440 | 438 |
441 } // namespace blink | 439 } // namespace blink |
OLD | NEW |