| 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 136 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 147 IntPoint adjustedPoint = frameView->rootFrameToContents( | 147 IntPoint adjustedPoint = frameView->rootFrameToContents( |
| 148 flooredIntPoint(gestureEvent.positionInRootFrame())); | 148 flooredIntPoint(gestureEvent.positionInRootFrame())); |
| 149 | 149 |
| 150 const unsigned modifiers = gestureEvent.modifiers(); | 150 const unsigned modifiers = gestureEvent.modifiers(); |
| 151 | 151 |
| 152 if (!m_suppressMouseEventsFromGestures) { | 152 if (!m_suppressMouseEventsFromGestures) { |
| 153 WebMouseEvent fakeMouseMove( | 153 WebMouseEvent fakeMouseMove( |
| 154 WebInputEvent::MouseMove, gestureEvent, | 154 WebInputEvent::MouseMove, gestureEvent, |
| 155 WebPointerProperties::Button::NoButton, | 155 WebPointerProperties::Button::NoButton, |
| 156 /* clickCount */ 0, | 156 /* clickCount */ 0, |
| 157 static_cast<PlatformEvent::Modifiers>( | 157 static_cast<WebInputEvent::Modifiers>( |
| 158 modifiers | WebInputEvent::Modifiers::IsCompatibilityEventForTouch), | 158 modifiers | WebInputEvent::Modifiers::IsCompatibilityEventForTouch), |
| 159 gestureEvent.timeStampSeconds()); | 159 gestureEvent.timeStampSeconds()); |
| 160 m_mouseEventManager->setMousePositionAndDispatchMouseEvent( | 160 m_mouseEventManager->setMousePositionAndDispatchMouseEvent( |
| 161 currentHitTest.innerNode(), currentHitTest.canvasRegionId(), | 161 currentHitTest.innerNode(), currentHitTest.canvasRegionId(), |
| 162 EventTypeNames::mousemove, fakeMouseMove); | 162 EventTypeNames::mousemove, fakeMouseMove); |
| 163 } | 163 } |
| 164 | 164 |
| 165 // Do a new hit-test in case the mousemove event changed the DOM. | 165 // Do a new hit-test in case the mousemove event changed the DOM. |
| 166 // Note that if the original hit test wasn't over an element (eg. was over a | 166 // Note that if the original hit test wasn't over an element (eg. was over a |
| 167 // scrollbar) we don't want to re-hit-test because it may be in the wrong | 167 // scrollbar) we don't want to re-hit-test because it may be in the wrong |
| (...skipping 21 matching lines...) Expand all Loading... |
| 189 tappedNode ? &tappedNode->document() : nullptr)); | 189 tappedNode ? &tappedNode->document() : nullptr)); |
| 190 | 190 |
| 191 if (tappedNonTextNode && tappedNonTextNode->isTextNode()) | 191 if (tappedNonTextNode && tappedNonTextNode->isTextNode()) |
| 192 tappedNonTextNode = FlatTreeTraversal::parent(*tappedNonTextNode); | 192 tappedNonTextNode = FlatTreeTraversal::parent(*tappedNonTextNode); |
| 193 | 193 |
| 194 m_mouseEventManager->setClickNode(tappedNonTextNode); | 194 m_mouseEventManager->setClickNode(tappedNonTextNode); |
| 195 | 195 |
| 196 WebMouseEvent fakeMouseDown( | 196 WebMouseEvent fakeMouseDown( |
| 197 WebInputEvent::MouseDown, gestureEvent, | 197 WebInputEvent::MouseDown, gestureEvent, |
| 198 WebPointerProperties::Button::Left, gestureEvent.tapCount(), | 198 WebPointerProperties::Button::Left, gestureEvent.tapCount(), |
| 199 static_cast<PlatformEvent::Modifiers>( | 199 static_cast<WebInputEvent::Modifiers>( |
| 200 modifiers | WebInputEvent::Modifiers::LeftButtonDown | | 200 modifiers | WebInputEvent::Modifiers::LeftButtonDown | |
| 201 WebInputEvent::Modifiers::IsCompatibilityEventForTouch), | 201 WebInputEvent::Modifiers::IsCompatibilityEventForTouch), |
| 202 gestureEvent.timeStampSeconds()); | 202 gestureEvent.timeStampSeconds()); |
| 203 | 203 |
| 204 // TODO(mustaq): We suppress MEs plus all it's side effects. What would that | 204 // TODO(mustaq): We suppress MEs plus all it's side effects. What would that |
| 205 // mean for for TEs? What's the right balance here? crbug.com/617255 | 205 // mean for for TEs? What's the right balance here? crbug.com/617255 |
| 206 WebInputEventResult mouseDownEventResult = | 206 WebInputEventResult mouseDownEventResult = |
| 207 WebInputEventResult::HandledSuppressed; | 207 WebInputEventResult::HandledSuppressed; |
| 208 if (!m_suppressMouseEventsFromGestures) { | 208 if (!m_suppressMouseEventsFromGestures) { |
| 209 m_mouseEventManager->setClickCount(gestureEvent.tapCount()); | 209 m_mouseEventManager->setClickCount(gestureEvent.tapCount()); |
| (...skipping 26 matching lines...) Expand all Loading... |
| 236 if (mainFrame && mainFrame->view()) | 236 if (mainFrame && mainFrame->view()) |
| 237 mainFrame->view()->updateAllLifecyclePhases(); | 237 mainFrame->view()->updateAllLifecyclePhases(); |
| 238 adjustedPoint = frameView->rootFrameToContents(tappedPosition); | 238 adjustedPoint = frameView->rootFrameToContents(tappedPosition); |
| 239 currentHitTest = EventHandlingUtil::hitTestResultInFrame( | 239 currentHitTest = EventHandlingUtil::hitTestResultInFrame( |
| 240 m_frame, adjustedPoint, hitType); | 240 m_frame, adjustedPoint, hitType); |
| 241 } | 241 } |
| 242 | 242 |
| 243 WebMouseEvent fakeMouseUp( | 243 WebMouseEvent fakeMouseUp( |
| 244 WebInputEvent::MouseUp, gestureEvent, WebPointerProperties::Button::Left, | 244 WebInputEvent::MouseUp, gestureEvent, WebPointerProperties::Button::Left, |
| 245 gestureEvent.tapCount(), | 245 gestureEvent.tapCount(), |
| 246 static_cast<PlatformEvent::Modifiers>( | 246 static_cast<WebInputEvent::Modifiers>( |
| 247 modifiers | WebInputEvent::Modifiers::IsCompatibilityEventForTouch), | 247 modifiers | WebInputEvent::Modifiers::IsCompatibilityEventForTouch), |
| 248 gestureEvent.timeStampSeconds()); | 248 gestureEvent.timeStampSeconds()); |
| 249 WebInputEventResult mouseUpEventResult = | 249 WebInputEventResult mouseUpEventResult = |
| 250 m_suppressMouseEventsFromGestures | 250 m_suppressMouseEventsFromGestures |
| 251 ? WebInputEventResult::HandledSuppressed | 251 ? WebInputEventResult::HandledSuppressed |
| 252 : m_mouseEventManager->setMousePositionAndDispatchMouseEvent( | 252 : m_mouseEventManager->setMousePositionAndDispatchMouseEvent( |
| 253 currentHitTest.innerNode(), currentHitTest.canvasRegionId(), | 253 currentHitTest.innerNode(), currentHitTest.canvasRegionId(), |
| 254 EventTypeNames::mouseup, fakeMouseUp); | 254 EventTypeNames::mouseup, fakeMouseUp); |
| 255 | 255 |
| 256 WebInputEventResult clickEventResult = WebInputEventResult::NotHandled; | 256 WebInputEventResult clickEventResult = WebInputEventResult::NotHandled; |
| (...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 358 const GestureEventWithHitTestResults& targetedEvent) { | 358 const GestureEventWithHitTestResults& targetedEvent) { |
| 359 const WebGestureEvent& gestureEvent = targetedEvent.event(); | 359 const WebGestureEvent& gestureEvent = targetedEvent.event(); |
| 360 unsigned modifiers = gestureEvent.modifiers(); | 360 unsigned modifiers = gestureEvent.modifiers(); |
| 361 | 361 |
| 362 if (!m_suppressMouseEventsFromGestures) { | 362 if (!m_suppressMouseEventsFromGestures) { |
| 363 // Send MouseMove event prior to handling (https://crbug.com/485290). | 363 // Send MouseMove event prior to handling (https://crbug.com/485290). |
| 364 WebMouseEvent fakeMouseMove( | 364 WebMouseEvent fakeMouseMove( |
| 365 WebInputEvent::MouseMove, gestureEvent, | 365 WebInputEvent::MouseMove, gestureEvent, |
| 366 WebPointerProperties::Button::NoButton, | 366 WebPointerProperties::Button::NoButton, |
| 367 /* clickCount */ 0, | 367 /* clickCount */ 0, |
| 368 static_cast<PlatformEvent::Modifiers>( | 368 static_cast<WebInputEvent::Modifiers>( |
| 369 modifiers | WebInputEvent::IsCompatibilityEventForTouch), | 369 modifiers | WebInputEvent::IsCompatibilityEventForTouch), |
| 370 gestureEvent.timeStampSeconds()); | 370 gestureEvent.timeStampSeconds()); |
| 371 m_mouseEventManager->setMousePositionAndDispatchMouseEvent( | 371 m_mouseEventManager->setMousePositionAndDispatchMouseEvent( |
| 372 targetedEvent.hitTestResult().innerNode(), | 372 targetedEvent.hitTestResult().innerNode(), |
| 373 targetedEvent.canvasRegionId(), EventTypeNames::mousemove, | 373 targetedEvent.canvasRegionId(), EventTypeNames::mousemove, |
| 374 fakeMouseMove); | 374 fakeMouseMove); |
| 375 } | 375 } |
| 376 | 376 |
| 377 WebInputEvent::Type eventType = WebInputEvent::MouseDown; | 377 WebInputEvent::Type eventType = WebInputEvent::MouseDown; |
| 378 if (m_frame->settings() && m_frame->settings()->getShowContextMenuOnMouseUp()) | 378 if (m_frame->settings() && m_frame->settings()->getShowContextMenuOnMouseUp()) |
| 379 eventType = WebInputEvent::MouseUp; | 379 eventType = WebInputEvent::MouseUp; |
| 380 | 380 |
| 381 WebMouseEvent mouseEvent( | 381 WebMouseEvent mouseEvent( |
| 382 eventType, gestureEvent, WebPointerProperties::Button::Right, | 382 eventType, gestureEvent, WebPointerProperties::Button::Right, |
| 383 /* clickCount */ 1, | 383 /* clickCount */ 1, |
| 384 static_cast<PlatformEvent::Modifiers>( | 384 static_cast<WebInputEvent::Modifiers>( |
| 385 modifiers | PlatformEvent::Modifiers::RightButtonDown | | 385 modifiers | WebInputEvent::Modifiers::RightButtonDown | |
| 386 WebInputEvent::IsCompatibilityEventForTouch), | 386 WebInputEvent::IsCompatibilityEventForTouch), |
| 387 gestureEvent.timeStampSeconds()); | 387 gestureEvent.timeStampSeconds()); |
| 388 | 388 |
| 389 if (!m_suppressMouseEventsFromGestures && m_frame->view()) { | 389 if (!m_suppressMouseEventsFromGestures && m_frame->view()) { |
| 390 HitTestRequest request(HitTestRequest::Active); | 390 HitTestRequest request(HitTestRequest::Active); |
| 391 LayoutPoint documentPoint = m_frame->view()->rootFrameToContents( | 391 LayoutPoint documentPoint = m_frame->view()->rootFrameToContents( |
| 392 flooredIntPoint(targetedEvent.event().positionInRootFrame())); | 392 flooredIntPoint(targetedEvent.event().positionInRootFrame())); |
| 393 MouseEventWithHitTestResults mev = | 393 MouseEventWithHitTestResults mev = |
| 394 m_frame->document()->performMouseEventHitTest(request, documentPoint, | 394 m_frame->document()->performMouseEventHitTest(request, documentPoint, |
| 395 mouseEvent); | 395 mouseEvent); |
| (...skipping 28 matching lines...) Expand all Loading... |
| 424 return nullptr; | 424 return nullptr; |
| 425 | 425 |
| 426 return &m_frame->page()->frameHost(); | 426 return &m_frame->page()->frameHost(); |
| 427 } | 427 } |
| 428 | 428 |
| 429 TimeTicks GestureManager::getLastShowPressTimestamp() const { | 429 TimeTicks GestureManager::getLastShowPressTimestamp() const { |
| 430 return m_lastShowPressTimestamp; | 430 return m_lastShowPressTimestamp; |
| 431 } | 431 } |
| 432 | 432 |
| 433 } // namespace blink | 433 } // namespace blink |
| OLD | NEW |