| 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/editing/SelectionController.h" | 8 #include "core/editing/SelectionController.h" |
| 9 #include "core/events/GestureEvent.h" | 9 #include "core/events/GestureEvent.h" |
| 10 #include "core/frame/FrameHost.h" | 10 #include "core/frame/FrameHost.h" |
| 11 #include "core/frame/FrameView.h" | 11 #include "core/frame/FrameView.h" |
| 12 #include "core/frame/Settings.h" | 12 #include "core/frame/Settings.h" |
| 13 #include "core/frame/VisualViewport.h" | 13 #include "core/frame/VisualViewport.h" |
| 14 #include "core/input/EventHandler.h" | 14 #include "core/input/EventHandler.h" |
| 15 #include "core/input/EventHandlingUtil.h" | 15 #include "core/input/EventHandlingUtil.h" |
| 16 #include "core/page/ChromeClient.h" | 16 #include "core/page/ChromeClient.h" |
| 17 #include "core/page/Page.h" | 17 #include "core/page/Page.h" |
| 18 | 18 |
| 19 namespace blink { | 19 namespace blink { |
| 20 | 20 |
| 21 GestureManager::GestureManager(LocalFrame* frame, | 21 GestureManager::GestureManager(LocalFrame* frame, |
| 22 ScrollManager* scrollManager, | 22 ScrollManager* scrollManager, |
| 23 MouseEventManager* mouseEventManager, |
| 23 PointerEventManager* pointerEventManager, | 24 PointerEventManager* pointerEventManager, |
| 24 SelectionController* selectionController) | 25 SelectionController* selectionController) |
| 25 : m_frame(frame), | 26 : m_frame(frame), |
| 26 m_scrollManager(scrollManager), | 27 m_scrollManager(scrollManager), |
| 28 m_mouseEventManager(mouseEventManager), |
| 27 m_pointerEventManager(pointerEventManager), | 29 m_pointerEventManager(pointerEventManager), |
| 28 m_selectionController(selectionController) { | 30 m_selectionController(selectionController) { |
| 29 clear(); | 31 clear(); |
| 30 } | 32 } |
| 31 | 33 |
| 32 void GestureManager::clear() { | 34 void GestureManager::clear() { |
| 33 m_suppressMouseEventsFromGestures = false; | 35 m_suppressMouseEventsFromGestures = false; |
| 34 m_longTapShouldInvokeContextMenu = false; | 36 m_longTapShouldInvokeContextMenu = false; |
| 35 m_lastShowPressTimestamp = 0; | 37 m_lastShowPressTimestamp = 0; |
| 36 } | 38 } |
| 37 | 39 |
| 38 DEFINE_TRACE(GestureManager) { | 40 DEFINE_TRACE(GestureManager) { |
| 39 visitor->trace(m_frame); | 41 visitor->trace(m_frame); |
| 42 visitor->trace(m_scrollManager); |
| 43 visitor->trace(m_mouseEventManager); |
| 44 visitor->trace(m_pointerEventManager); |
| 40 visitor->trace(m_selectionController); | 45 visitor->trace(m_selectionController); |
| 41 visitor->trace(m_pointerEventManager); | |
| 42 visitor->trace(m_scrollManager); | |
| 43 } | 46 } |
| 44 | 47 |
| 45 HitTestRequest::HitTestRequestType GestureManager::getHitTypeForGestureType( | 48 HitTestRequest::HitTestRequestType GestureManager::getHitTypeForGestureType( |
| 46 PlatformEvent::EventType type) { | 49 PlatformEvent::EventType type) { |
| 47 HitTestRequest::HitTestRequestType hitType = HitTestRequest::TouchEvent; | 50 HitTestRequest::HitTestRequestType hitType = HitTestRequest::TouchEvent; |
| 48 switch (type) { | 51 switch (type) { |
| 49 case PlatformEvent::GestureShowPress: | 52 case PlatformEvent::GestureShowPress: |
| 50 case PlatformEvent::GestureTapUnconfirmed: | 53 case PlatformEvent::GestureTapUnconfirmed: |
| 51 return hitType | HitTestRequest::Active; | 54 return hitType | HitTestRequest::Active; |
| 52 case PlatformEvent::GestureTapDownCancel: | 55 case PlatformEvent::GestureTapDownCancel: |
| (...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 146 | 149 |
| 147 const unsigned modifiers = gestureEvent.getModifiers(); | 150 const unsigned modifiers = gestureEvent.getModifiers(); |
| 148 | 151 |
| 149 if (!m_suppressMouseEventsFromGestures) { | 152 if (!m_suppressMouseEventsFromGestures) { |
| 150 PlatformMouseEvent fakeMouseMove( | 153 PlatformMouseEvent fakeMouseMove( |
| 151 gestureEvent.position(), gestureEvent.globalPosition(), | 154 gestureEvent.position(), gestureEvent.globalPosition(), |
| 152 WebPointerProperties::Button::NoButton, PlatformEvent::MouseMoved, | 155 WebPointerProperties::Button::NoButton, PlatformEvent::MouseMoved, |
| 153 /* clickCount */ 0, static_cast<PlatformEvent::Modifiers>(modifiers), | 156 /* clickCount */ 0, static_cast<PlatformEvent::Modifiers>(modifiers), |
| 154 PlatformMouseEvent::FromTouch, gestureEvent.timestamp(), | 157 PlatformMouseEvent::FromTouch, gestureEvent.timestamp(), |
| 155 WebPointerProperties::PointerType::Mouse); | 158 WebPointerProperties::PointerType::Mouse); |
| 156 m_frame->eventHandler().dispatchMouseEvent(EventTypeNames::mousemove, | 159 m_mouseEventManager->setMousePositionAndDispatchMouseEvent( |
| 157 currentHitTest.innerNode(), 0, | 160 currentHitTest.innerNode(), EventTypeNames::mousemove, fakeMouseMove); |
| 158 fakeMouseMove); | |
| 159 } | 161 } |
| 160 | 162 |
| 161 // Do a new hit-test in case the mousemove event changed the DOM. | 163 // Do a new hit-test in case the mousemove event changed the DOM. |
| 162 // Note that if the original hit test wasn't over an element (eg. was over a s
crollbar) we | 164 // Note that if the original hit test wasn't over an element (eg. was over a s
crollbar) we |
| 163 // don't want to re-hit-test because it may be in the wrong frame (and there's
no way the page | 165 // don't want to re-hit-test because it may be in the wrong frame (and there's
no way the page |
| 164 // could have seen the event anyway). | 166 // could have seen the event anyway). |
| 165 // Also note that the position of the frame may have changed, so we need to re
compute the content | 167 // Also note that the position of the frame may have changed, so we need to re
compute the content |
| 166 // co-ordinates (updating layout/style as hitTestResultAtPoint normally would)
. | 168 // co-ordinates (updating layout/style as hitTestResultAtPoint normally would)
. |
| 167 // FIXME: Use a hit-test cache to avoid unnecessary hit tests. http://crbug.co
m/398920 | 169 // FIXME: Use a hit-test cache to avoid unnecessary hit tests. http://crbug.co
m/398920 |
| 168 if (currentHitTest.innerNode()) { | 170 if (currentHitTest.innerNode()) { |
| 169 LocalFrame* mainFrame = m_frame->localFrameRoot(); | 171 LocalFrame* mainFrame = m_frame->localFrameRoot(); |
| 170 if (mainFrame && mainFrame->view()) | 172 if (mainFrame && mainFrame->view()) |
| 171 mainFrame->view()->updateLifecycleToCompositingCleanPlusScrolling(); | 173 mainFrame->view()->updateLifecycleToCompositingCleanPlusScrolling(); |
| 172 adjustedPoint = frameView->rootFrameToContents(gestureEvent.position()); | 174 adjustedPoint = frameView->rootFrameToContents(gestureEvent.position()); |
| 173 currentHitTest = EventHandlingUtil::hitTestResultInFrame( | 175 currentHitTest = EventHandlingUtil::hitTestResultInFrame( |
| 174 m_frame, adjustedPoint, hitType); | 176 m_frame, adjustedPoint, hitType); |
| 175 } | 177 } |
| 176 | 178 |
| 177 // Capture data for showUnhandledTapUIIfNeeded. | 179 // Capture data for showUnhandledTapUIIfNeeded. |
| 178 Node* tappedNode = currentHitTest.innerNode(); | 180 Node* tappedNode = currentHitTest.innerNode(); |
| 179 IntPoint tappedPosition = gestureEvent.position(); | 181 IntPoint tappedPosition = gestureEvent.position(); |
| 180 Node* tappedNonTextNode = tappedNode; | 182 Node* tappedNonTextNode = tappedNode; |
| 181 | 183 |
| 182 if (tappedNonTextNode && tappedNonTextNode->isTextNode()) | 184 if (tappedNonTextNode && tappedNonTextNode->isTextNode()) |
| 183 tappedNonTextNode = FlatTreeTraversal::parent(*tappedNonTextNode); | 185 tappedNonTextNode = FlatTreeTraversal::parent(*tappedNonTextNode); |
| 184 | 186 |
| 185 m_frame->eventHandler().setClickNode(tappedNonTextNode); | 187 m_mouseEventManager->setClickNode(tappedNonTextNode); |
| 186 | 188 |
| 187 PlatformMouseEvent fakeMouseDown( | 189 PlatformMouseEvent fakeMouseDown( |
| 188 gestureEvent.position(), gestureEvent.globalPosition(), | 190 gestureEvent.position(), gestureEvent.globalPosition(), |
| 189 WebPointerProperties::Button::Left, PlatformEvent::MousePressed, | 191 WebPointerProperties::Button::Left, PlatformEvent::MousePressed, |
| 190 gestureEvent.tapCount(), static_cast<PlatformEvent::Modifiers>( | 192 gestureEvent.tapCount(), static_cast<PlatformEvent::Modifiers>( |
| 191 modifiers | PlatformEvent::LeftButtonDown), | 193 modifiers | PlatformEvent::LeftButtonDown), |
| 192 PlatformMouseEvent::FromTouch, gestureEvent.timestamp(), | 194 PlatformMouseEvent::FromTouch, gestureEvent.timestamp(), |
| 193 WebPointerProperties::PointerType::Mouse); | 195 WebPointerProperties::PointerType::Mouse); |
| 194 | 196 |
| 195 // TODO(mustaq): We suppress MEs plus all it's side effects. What would that | 197 // TODO(mustaq): We suppress MEs plus all it's side effects. What would that |
| 196 // mean for for TEs? What's the right balance here? crbug.com/617255 | 198 // mean for for TEs? What's the right balance here? crbug.com/617255 |
| 197 WebInputEventResult mouseDownEventResult = | 199 WebInputEventResult mouseDownEventResult = |
| 198 WebInputEventResult::HandledSuppressed; | 200 WebInputEventResult::HandledSuppressed; |
| 199 if (!m_suppressMouseEventsFromGestures) { | 201 if (!m_suppressMouseEventsFromGestures) { |
| 200 mouseDownEventResult = m_frame->eventHandler().dispatchMouseEvent( | 202 m_mouseEventManager->setClickCount(gestureEvent.tapCount()); |
| 201 EventTypeNames::mousedown, currentHitTest.innerNode(), | 203 |
| 202 gestureEvent.tapCount(), fakeMouseDown); | 204 mouseDownEventResult = |
| 205 m_mouseEventManager->setMousePositionAndDispatchMouseEvent( |
| 206 currentHitTest.innerNode(), EventTypeNames::mousedown, |
| 207 fakeMouseDown); |
| 203 m_selectionController->initializeSelectionState(); | 208 m_selectionController->initializeSelectionState(); |
| 204 if (mouseDownEventResult == WebInputEventResult::NotHandled) | 209 if (mouseDownEventResult == WebInputEventResult::NotHandled) |
| 205 mouseDownEventResult = m_frame->eventHandler().handleMouseFocus( | 210 mouseDownEventResult = m_mouseEventManager->handleMouseFocus( |
| 206 currentHitTest, | 211 currentHitTest, |
| 207 InputDeviceCapabilities::firesTouchEventsSourceCapabilities()); | 212 InputDeviceCapabilities::firesTouchEventsSourceCapabilities()); |
| 208 if (mouseDownEventResult == WebInputEventResult::NotHandled) | 213 if (mouseDownEventResult == WebInputEventResult::NotHandled) |
| 209 mouseDownEventResult = m_frame->eventHandler().handleMousePressEvent( | 214 mouseDownEventResult = m_mouseEventManager->handleMousePressEvent( |
| 210 MouseEventWithHitTestResults(fakeMouseDown, currentHitTest)); | 215 MouseEventWithHitTestResults(fakeMouseDown, currentHitTest)); |
| 211 } | 216 } |
| 212 | 217 |
| 213 if (currentHitTest.innerNode()) { | 218 if (currentHitTest.innerNode()) { |
| 214 DCHECK(gestureEvent.type() == PlatformEvent::GestureTap); | 219 DCHECK(gestureEvent.type() == PlatformEvent::GestureTap); |
| 215 HitTestResult result = currentHitTest; | 220 HitTestResult result = currentHitTest; |
| 216 result.setToShadowHostIfInUserAgentShadowRoot(); | 221 result.setToShadowHostIfInUserAgentShadowRoot(); |
| 217 m_frame->chromeClient().onMouseDown(result.innerNode()); | 222 m_frame->chromeClient().onMouseDown(result.innerNode()); |
| 218 } | 223 } |
| 219 | 224 |
| 220 // FIXME: Use a hit-test cache to avoid unnecessary hit tests. http://crbug.co
m/398920 | 225 // FIXME: Use a hit-test cache to avoid unnecessary hit tests. http://crbug.co
m/398920 |
| 221 if (currentHitTest.innerNode()) { | 226 if (currentHitTest.innerNode()) { |
| 222 LocalFrame* mainFrame = m_frame->localFrameRoot(); | 227 LocalFrame* mainFrame = m_frame->localFrameRoot(); |
| 223 if (mainFrame && mainFrame->view()) | 228 if (mainFrame && mainFrame->view()) |
| 224 mainFrame->view()->updateAllLifecyclePhases(); | 229 mainFrame->view()->updateAllLifecyclePhases(); |
| 225 adjustedPoint = frameView->rootFrameToContents(gestureEvent.position()); | 230 adjustedPoint = frameView->rootFrameToContents(gestureEvent.position()); |
| 226 currentHitTest = EventHandlingUtil::hitTestResultInFrame( | 231 currentHitTest = EventHandlingUtil::hitTestResultInFrame( |
| 227 m_frame, adjustedPoint, hitType); | 232 m_frame, adjustedPoint, hitType); |
| 228 } | 233 } |
| 229 | 234 |
| 230 PlatformMouseEvent fakeMouseUp( | 235 PlatformMouseEvent fakeMouseUp( |
| 231 gestureEvent.position(), gestureEvent.globalPosition(), | 236 gestureEvent.position(), gestureEvent.globalPosition(), |
| 232 WebPointerProperties::Button::Left, PlatformEvent::MouseReleased, | 237 WebPointerProperties::Button::Left, PlatformEvent::MouseReleased, |
| 233 gestureEvent.tapCount(), static_cast<PlatformEvent::Modifiers>(modifiers), | 238 gestureEvent.tapCount(), static_cast<PlatformEvent::Modifiers>(modifiers), |
| 234 PlatformMouseEvent::FromTouch, gestureEvent.timestamp(), | 239 PlatformMouseEvent::FromTouch, gestureEvent.timestamp(), |
| 235 WebPointerProperties::PointerType::Mouse); | 240 WebPointerProperties::PointerType::Mouse); |
| 236 WebInputEventResult mouseUpEventResult = | 241 WebInputEventResult mouseUpEventResult = |
| 237 m_suppressMouseEventsFromGestures | 242 m_suppressMouseEventsFromGestures |
| 238 ? WebInputEventResult::HandledSuppressed | 243 ? WebInputEventResult::HandledSuppressed |
| 239 : m_frame->eventHandler().dispatchMouseEvent( | 244 : m_mouseEventManager->setMousePositionAndDispatchMouseEvent( |
| 240 EventTypeNames::mouseup, currentHitTest.innerNode(), | 245 currentHitTest.innerNode(), EventTypeNames::mouseup, |
| 241 gestureEvent.tapCount(), fakeMouseUp); | 246 fakeMouseUp); |
| 242 | 247 |
| 243 WebInputEventResult clickEventResult = WebInputEventResult::NotHandled; | 248 WebInputEventResult clickEventResult = WebInputEventResult::NotHandled; |
| 244 if (tappedNonTextNode) { | 249 if (tappedNonTextNode) { |
| 245 if (currentHitTest.innerNode()) { | 250 if (currentHitTest.innerNode()) { |
| 246 // Updates distribution because a mouseup (or mousedown) event listener ca
n make the | 251 // Updates distribution because a mouseup (or mousedown) event listener ca
n make the |
| 247 // tree dirty at dispatchMouseEvent() invocation above. | 252 // tree dirty at dispatchMouseEvent() invocation above. |
| 248 // Unless distribution is updated, commonAncestor would hit DCHECK. | 253 // Unless distribution is updated, commonAncestor would hit DCHECK. |
| 249 // Both tappedNonTextNode and currentHitTest.innerNode()) don't need to be
updated | 254 // Both tappedNonTextNode and currentHitTest.innerNode()) don't need to be
updated |
| 250 // because commonAncestor() will exit early if their documents are differe
nt. | 255 // because commonAncestor() will exit early if their documents are differe
nt. |
| 251 tappedNonTextNode->updateDistribution(); | 256 tappedNonTextNode->updateDistribution(); |
| 252 Node* clickTargetNode = currentHitTest.innerNode()->commonAncestor( | 257 Node* clickTargetNode = currentHitTest.innerNode()->commonAncestor( |
| 253 *tappedNonTextNode, EventHandler::parentForClickEvent); | 258 *tappedNonTextNode, EventHandlingUtil::parentForClickEvent); |
| 254 clickEventResult = m_frame->eventHandler().dispatchMouseEvent( | 259 clickEventResult = |
| 255 EventTypeNames::click, clickTargetNode, gestureEvent.tapCount(), | 260 m_mouseEventManager->setMousePositionAndDispatchMouseEvent( |
| 256 fakeMouseUp); | 261 clickTargetNode, EventTypeNames::click, fakeMouseUp); |
| 257 } | 262 } |
| 258 m_frame->eventHandler().setClickNode(nullptr); | 263 m_mouseEventManager->setClickNode(nullptr); |
| 259 } | 264 } |
| 260 | 265 |
| 261 if (mouseUpEventResult == WebInputEventResult::NotHandled) | 266 if (mouseUpEventResult == WebInputEventResult::NotHandled) |
| 262 mouseUpEventResult = m_frame->eventHandler().handleMouseReleaseEvent( | 267 mouseUpEventResult = m_mouseEventManager->handleMouseReleaseEvent( |
| 263 MouseEventWithHitTestResults(fakeMouseUp, currentHitTest)); | 268 MouseEventWithHitTestResults(fakeMouseUp, currentHitTest)); |
| 264 m_frame->eventHandler().clearDragHeuristicState(); | 269 m_mouseEventManager->clearDragHeuristicState(); |
| 265 | 270 |
| 266 WebInputEventResult eventResult = EventHandlingUtil::mergeEventResult( | 271 WebInputEventResult eventResult = EventHandlingUtil::mergeEventResult( |
| 267 EventHandlingUtil::mergeEventResult(mouseDownEventResult, | 272 EventHandlingUtil::mergeEventResult(mouseDownEventResult, |
| 268 mouseUpEventResult), | 273 mouseUpEventResult), |
| 269 clickEventResult); | 274 clickEventResult); |
| 270 if (eventResult == WebInputEventResult::NotHandled && tappedNode && | 275 if (eventResult == WebInputEventResult::NotHandled && tappedNode && |
| 271 m_frame->page()) { | 276 m_frame->page()) { |
| 272 bool domTreeChanged = | 277 bool domTreeChanged = |
| 273 preDispatchDomTreeVersion != m_frame->document()->domTreeVersion(); | 278 preDispatchDomTreeVersion != m_frame->document()->domTreeVersion(); |
| 274 bool styleChanged = | 279 bool styleChanged = |
| (...skipping 19 matching lines...) Expand all Loading... |
| 294 m_frame->view()->rootFrameToContents(gestureEvent.position()); | 299 m_frame->view()->rootFrameToContents(gestureEvent.position()); |
| 295 HitTestResult hitTestResult = | 300 HitTestResult hitTestResult = |
| 296 m_frame->eventHandler().hitTestResultAtPoint(hitTestPoint); | 301 m_frame->eventHandler().hitTestResultAtPoint(hitTestPoint); |
| 297 | 302 |
| 298 m_longTapShouldInvokeContextMenu = false; | 303 m_longTapShouldInvokeContextMenu = false; |
| 299 bool hitTestContainsLinks = hitTestResult.URLElement() || | 304 bool hitTestContainsLinks = hitTestResult.URLElement() || |
| 300 !hitTestResult.absoluteImageURL().isNull() || | 305 !hitTestResult.absoluteImageURL().isNull() || |
| 301 !hitTestResult.absoluteMediaURL().isNull(); | 306 !hitTestResult.absoluteMediaURL().isNull(); |
| 302 | 307 |
| 303 if (!hitTestContainsLinks && | 308 if (!hitTestContainsLinks && |
| 304 m_frame->eventHandler().handleDragDropIfPossible(targetedEvent)) { | 309 m_mouseEventManager->handleDragDropIfPossible(targetedEvent)) { |
| 305 m_longTapShouldInvokeContextMenu = true; | 310 m_longTapShouldInvokeContextMenu = true; |
| 306 return WebInputEventResult::HandledSystem; | 311 return WebInputEventResult::HandledSystem; |
| 307 } | 312 } |
| 308 | 313 |
| 309 if (m_selectionController->handleGestureLongPress(gestureEvent, | 314 if (m_selectionController->handleGestureLongPress(gestureEvent, |
| 310 hitTestResult)) { | 315 hitTestResult)) { |
| 311 m_frame->eventHandler().focusDocumentView(); | 316 m_mouseEventManager->focusDocumentView(); |
| 312 return WebInputEventResult::HandledSystem; | 317 return WebInputEventResult::HandledSystem; |
| 313 } | 318 } |
| 314 | 319 |
| 315 return sendContextMenuEventForGesture(targetedEvent); | 320 return sendContextMenuEventForGesture(targetedEvent); |
| 316 } | 321 } |
| 317 | 322 |
| 318 WebInputEventResult GestureManager::handleGestureLongTap( | 323 WebInputEventResult GestureManager::handleGestureLongTap( |
| 319 const GestureEventWithHitTestResults& targetedEvent) { | 324 const GestureEventWithHitTestResults& targetedEvent) { |
| 320 #if !OS(ANDROID) | 325 #if !OS(ANDROID) |
| 321 if (m_longTapShouldInvokeContextMenu) { | 326 if (m_longTapShouldInvokeContextMenu) { |
| (...skipping 15 matching lines...) Expand all Loading... |
| 337 unsigned modifiers = gestureEvent.getModifiers(); | 342 unsigned modifiers = gestureEvent.getModifiers(); |
| 338 | 343 |
| 339 if (!m_suppressMouseEventsFromGestures) { | 344 if (!m_suppressMouseEventsFromGestures) { |
| 340 // Send MouseMoved event prior to handling (https://crbug.com/485290). | 345 // Send MouseMoved event prior to handling (https://crbug.com/485290). |
| 341 PlatformMouseEvent fakeMouseMove( | 346 PlatformMouseEvent fakeMouseMove( |
| 342 gestureEvent.position(), gestureEvent.globalPosition(), | 347 gestureEvent.position(), gestureEvent.globalPosition(), |
| 343 WebPointerProperties::Button::NoButton, PlatformEvent::MouseMoved, | 348 WebPointerProperties::Button::NoButton, PlatformEvent::MouseMoved, |
| 344 /* clickCount */ 0, static_cast<PlatformEvent::Modifiers>(modifiers), | 349 /* clickCount */ 0, static_cast<PlatformEvent::Modifiers>(modifiers), |
| 345 PlatformMouseEvent::FromTouch, gestureEvent.timestamp(), | 350 PlatformMouseEvent::FromTouch, gestureEvent.timestamp(), |
| 346 WebPointerProperties::PointerType::Mouse); | 351 WebPointerProperties::PointerType::Mouse); |
| 347 m_frame->eventHandler().dispatchMouseEvent( | 352 m_mouseEventManager->setMousePositionAndDispatchMouseEvent( |
| 348 EventTypeNames::mousemove, targetedEvent.hitTestResult().innerNode(), 0, | 353 targetedEvent.hitTestResult().innerNode(), EventTypeNames::mousemove, |
| 349 fakeMouseMove); | 354 fakeMouseMove); |
| 350 } | 355 } |
| 351 | 356 |
| 352 PlatformEvent::EventType eventType = PlatformEvent::MousePressed; | 357 PlatformEvent::EventType eventType = PlatformEvent::MousePressed; |
| 353 if (m_frame->settings() && m_frame->settings()->showContextMenuOnMouseUp()) | 358 if (m_frame->settings() && m_frame->settings()->showContextMenuOnMouseUp()) |
| 354 eventType = PlatformEvent::MouseReleased; | 359 eventType = PlatformEvent::MouseReleased; |
| 355 PlatformMouseEvent mouseEvent( | 360 PlatformMouseEvent mouseEvent( |
| 356 targetedEvent.event().position(), targetedEvent.event().globalPosition(), | 361 targetedEvent.event().position(), targetedEvent.event().globalPosition(), |
| 357 WebPointerProperties::Button::NoButton, eventType, /* clickCount */ 0, | 362 WebPointerProperties::Button::NoButton, eventType, /* clickCount */ 0, |
| 358 static_cast<PlatformEvent::Modifiers>(modifiers), | 363 static_cast<PlatformEvent::Modifiers>(modifiers), |
| 359 PlatformMouseEvent::FromTouch, WTF::monotonicallyIncreasingTime(), | 364 PlatformMouseEvent::FromTouch, WTF::monotonicallyIncreasingTime(), |
| 360 WebPointerProperties::PointerType::Mouse); | 365 WebPointerProperties::PointerType::Mouse); |
| 361 | 366 |
| 362 if (!m_suppressMouseEventsFromGestures && m_frame->view()) { | 367 if (!m_suppressMouseEventsFromGestures && m_frame->view()) { |
| 363 HitTestRequest request(HitTestRequest::Active); | 368 HitTestRequest request(HitTestRequest::Active); |
| 364 LayoutPoint documentPoint = | 369 LayoutPoint documentPoint = |
| 365 m_frame->view()->rootFrameToContents(targetedEvent.event().position()); | 370 m_frame->view()->rootFrameToContents(targetedEvent.event().position()); |
| 366 MouseEventWithHitTestResults mev = m_frame->document()->prepareMouseEvent( | 371 MouseEventWithHitTestResults mev = |
| 367 request, documentPoint, mouseEvent); | 372 m_frame->document()->performMouseEventHitTest(request, documentPoint, |
| 373 mouseEvent); |
| 368 | 374 |
| 369 WebInputEventResult eventResult = | 375 WebInputEventResult eventResult = |
| 370 m_frame->eventHandler().dispatchMouseEvent( | 376 m_mouseEventManager->setMousePositionAndDispatchMouseEvent( |
| 371 EventTypeNames::mousedown, mev.innerNode(), /* clickCount */ 0, | 377 mev.innerNode(), EventTypeNames::mousedown, mouseEvent); |
| 372 mouseEvent); | |
| 373 | 378 |
| 374 if (eventResult == WebInputEventResult::NotHandled) | 379 if (eventResult == WebInputEventResult::NotHandled) |
| 375 eventResult = m_frame->eventHandler().handleMouseFocus( | 380 eventResult = m_mouseEventManager->handleMouseFocus( |
| 376 mev.hitTestResult(), | 381 mev.hitTestResult(), |
| 377 InputDeviceCapabilities::firesTouchEventsSourceCapabilities()); | 382 InputDeviceCapabilities::firesTouchEventsSourceCapabilities()); |
| 378 | 383 |
| 379 if (eventResult == WebInputEventResult::NotHandled) | 384 if (eventResult == WebInputEventResult::NotHandled) |
| 380 m_frame->eventHandler().handleMousePressEvent(mev); | 385 m_mouseEventManager->handleMousePressEvent(mev); |
| 381 } | 386 } |
| 382 | 387 |
| 383 return m_frame->eventHandler().sendContextMenuEvent(mouseEvent); | 388 return m_frame->eventHandler().sendContextMenuEvent(mouseEvent); |
| 384 } | 389 } |
| 385 | 390 |
| 386 WebInputEventResult GestureManager::handleGestureShowPress() { | 391 WebInputEventResult GestureManager::handleGestureShowPress() { |
| 387 m_lastShowPressTimestamp = WTF::monotonicallyIncreasingTime(); | 392 m_lastShowPressTimestamp = WTF::monotonicallyIncreasingTime(); |
| 388 | 393 |
| 389 FrameView* view = m_frame->view(); | 394 FrameView* view = m_frame->view(); |
| 390 if (!view) | 395 if (!view) |
| (...skipping 16 matching lines...) Expand all Loading... |
| 407 return nullptr; | 412 return nullptr; |
| 408 | 413 |
| 409 return &m_frame->page()->frameHost(); | 414 return &m_frame->page()->frameHost(); |
| 410 } | 415 } |
| 411 | 416 |
| 412 double GestureManager::getLastShowPressTimestamp() const { | 417 double GestureManager::getLastShowPressTimestamp() const { |
| 413 return m_lastShowPressTimestamp; | 418 return m_lastShowPressTimestamp; |
| 414 } | 419 } |
| 415 | 420 |
| 416 } // namespace blink | 421 } // namespace blink |
| OLD | NEW |