Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(161)

Side by Side Diff: Source/core/page/EventHandler.cpp

Issue 967213004: Removed FrameView's windowToContents and contentsToWindow methods. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Created 5 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All rights reserv ed. 2 * Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All rights reserv ed.
3 * Copyright (C) 2006 Alexey Proskuryakov (ap@webkit.org) 3 * Copyright (C) 2006 Alexey Proskuryakov (ap@webkit.org)
4 * Copyright (C) 2012 Digia Plc. and/or its subsidiary(-ies) 4 * Copyright (C) 2012 Digia Plc. and/or its subsidiary(-ies)
5 * 5 *
6 * Redistribution and use in source and binary forms, with or without 6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions 7 * modification, are permitted provided that the following conditions
8 * are met: 8 * are met:
9 * 1. Redistributions of source code must retain the above copyright 9 * 1. Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer. 10 * notice, this list of conditions and the following disclaimer.
(...skipping 496 matching lines...) Expand 10 before | Expand all | Expand 10 after
507 Node* innerNode = event.innerNode(); 507 Node* innerNode = event.innerNode();
508 if (!(innerNode && innerNode->renderer() && m_mouseDownMayStartSelect)) 508 if (!(innerNode && innerNode->renderer() && m_mouseDownMayStartSelect))
509 return false; 509 return false;
510 510
511 // Extend the selection if the Shift key is down, unless the click is in a l ink. 511 // Extend the selection if the Shift key is down, unless the click is in a l ink.
512 bool extendSelection = event.event().shiftKey() && !event.isOverLink(); 512 bool extendSelection = event.event().shiftKey() && !event.isOverLink();
513 513
514 // Don't restart the selection when the mouse is pressed on an 514 // Don't restart the selection when the mouse is pressed on an
515 // existing selection so we can allow for text dragging. 515 // existing selection so we can allow for text dragging.
516 if (FrameView* view = m_frame->view()) { 516 if (FrameView* view = m_frame->view()) {
517 LayoutPoint vPoint = view->windowToContents(event.event().position()); 517 LayoutPoint vPoint = view->rootFrameToContents(event.event().position()) ;
518 if (!extendSelection && m_frame->selection().contains(vPoint)) { 518 if (!extendSelection && m_frame->selection().contains(vPoint)) {
519 m_mouseDownWasSingleClickInSelection = true; 519 m_mouseDownWasSingleClickInSelection = true;
520 return false; 520 return false;
521 } 521 }
522 } 522 }
523 523
524 VisiblePosition visiblePos(innerNode->renderer()->positionForPoint(event.loc alPoint())); 524 VisiblePosition visiblePos(innerNode->renderer()->positionForPoint(event.loc alPoint()));
525 if (visiblePos.isNull()) 525 if (visiblePos.isNull())
526 visiblePos = VisiblePosition(firstPositionInOrBeforeNode(innerNode), DOW NSTREAM); 526 visiblePos = VisiblePosition(firstPositionInOrBeforeNode(innerNode), DOW NSTREAM);
527 Position pos = visiblePos.deepEquivalent(); 527 Position pos = visiblePos.deepEquivalent();
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
602 602
603 m_mouseDownMayStartDrag = singleClick; 603 m_mouseDownMayStartDrag = singleClick;
604 604
605 m_mouseDownWasSingleClickInSelection = false; 605 m_mouseDownWasSingleClickInSelection = false;
606 606
607 m_mouseDown = event.event(); 607 m_mouseDown = event.event();
608 608
609 if (m_frame->document()->isSVGDocument() && m_frame->document()->accessSVGEx tensions().zoomAndPanEnabled()) { 609 if (m_frame->document()->isSVGDocument() && m_frame->document()->accessSVGEx tensions().zoomAndPanEnabled()) {
610 if (event.event().shiftKey() && singleClick) { 610 if (event.event().shiftKey() && singleClick) {
611 m_svgPan = true; 611 m_svgPan = true;
612 m_frame->document()->accessSVGExtensions().startPan(m_frame->view()- >windowToContents(event.event().position())); 612 m_frame->document()->accessSVGExtensions().startPan(m_frame->view()- >rootFrameToContents(event.event().position()));
613 return true; 613 return true;
614 } 614 }
615 } 615 }
616 616
617 // We don't do this at the start of mouse down handling, 617 // We don't do this at the start of mouse down handling,
618 // because we don't want to do it until we know we didn't hit a widget. 618 // because we don't want to do it until we know we didn't hit a widget.
619 if (singleClick) 619 if (singleClick)
620 focusDocumentView(); 620 focusDocumentView();
621 621
622 Node* innerNode = event.innerNode(); 622 Node* innerNode = event.innerNode();
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
706 void EventHandler::updateSelectionForMouseDrag() 706 void EventHandler::updateSelectionForMouseDrag()
707 { 707 {
708 FrameView* view = m_frame->view(); 708 FrameView* view = m_frame->view();
709 if (!view) 709 if (!view)
710 return; 710 return;
711 LayoutView* renderer = m_frame->contentRenderer(); 711 LayoutView* renderer = m_frame->contentRenderer();
712 if (!renderer) 712 if (!renderer)
713 return; 713 return;
714 714
715 HitTestRequest request(HitTestRequest::ReadOnly | HitTestRequest::Active | H itTestRequest::Move); 715 HitTestRequest request(HitTestRequest::ReadOnly | HitTestRequest::Active | H itTestRequest::Move);
716 HitTestResult result(view->windowToContents(m_lastKnownMousePosition)); 716 HitTestResult result(view->rootFrameToContents(m_lastKnownMousePosition));
717 renderer->hitTest(request, result); 717 renderer->hitTest(request, result);
718 updateSelectionForMouseDrag(result); 718 updateSelectionForMouseDrag(result);
719 } 719 }
720 720
721 void EventHandler::updateSelectionForMouseDrag(const HitTestResult& hitTestResul t) 721 void EventHandler::updateSelectionForMouseDrag(const HitTestResult& hitTestResul t)
722 { 722 {
723 if (!m_mouseDownMayStartSelect) 723 if (!m_mouseDownMayStartSelect)
724 return; 724 return;
725 725
726 Node* target = hitTestResult.innerNode(); 726 Node* target = hitTestResult.innerNode();
(...skipping 293 matching lines...) Expand 10 before | Expand all | Expand 10 after
1020 if (!view || !view->shouldSetCursor()) 1020 if (!view || !view->shouldSetCursor())
1021 return; 1021 return;
1022 1022
1023 LayoutView* layoutView = view->layoutView(); 1023 LayoutView* layoutView = view->layoutView();
1024 if (!layoutView) 1024 if (!layoutView)
1025 return; 1025 return;
1026 1026
1027 m_frame->document()->updateLayout(); 1027 m_frame->document()->updateLayout();
1028 1028
1029 HitTestRequest request(HitTestRequest::ReadOnly); 1029 HitTestRequest request(HitTestRequest::ReadOnly);
1030 HitTestResult result(view->windowToContents(m_lastKnownMousePosition)); 1030 HitTestResult result(view->rootFrameToContents(m_lastKnownMousePosition));
1031 layoutView->hitTest(request, result); 1031 layoutView->hitTest(request, result);
1032 1032
1033 OptionalCursor optionalCursor = selectCursor(result); 1033 OptionalCursor optionalCursor = selectCursor(result);
1034 if (optionalCursor.isCursorChange()) { 1034 if (optionalCursor.isCursorChange()) {
1035 m_currentMouseCursor = optionalCursor.cursor(); 1035 m_currentMouseCursor = optionalCursor.cursor();
1036 view->setCursor(m_currentMouseCursor); 1036 view->setCursor(m_currentMouseCursor);
1037 } 1037 }
1038 } 1038 }
1039 1039
1040 OptionalCursor EventHandler::selectCursor(const HitTestResult& result) 1040 OptionalCursor EventHandler::selectCursor(const HitTestResult& result)
(...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after
1201 && m_frame->selection().isCaretOrRange() 1201 && m_frame->selection().isCaretOrRange()
1202 && !m_capturingMouseEventsNode) { 1202 && !m_capturingMouseEventsNode) {
1203 return iBeam; 1203 return iBeam;
1204 } 1204 }
1205 1205
1206 if ((editable || (renderer && renderer->isText() && node->canStartSelection( ))) && !inResizer && !result.scrollbar()) 1206 if ((editable || (renderer && renderer->isText() && node->canStartSelection( ))) && !inResizer && !result.scrollbar())
1207 return iBeam; 1207 return iBeam;
1208 return pointerCursor(); 1208 return pointerCursor();
1209 } 1209 }
1210 1210
1211 static LayoutPoint documentPointForWindowPoint(LocalFrame* frame, const IntPoint & windowPoint) 1211 static LayoutPoint contentPointFromRootFrame(LocalFrame* frame, const IntPoint& pointInRootFrame)
1212 { 1212 {
1213 FrameView* view = frame->view(); 1213 FrameView* view = frame->view();
1214 // FIXME: Is it really OK to use the wrong coordinates here when view is 0? 1214 // FIXME: Is it really OK to use the wrong coordinates here when view is 0?
1215 // Historically the code would just crash; this is clearly no worse than tha t. 1215 // Historically the code would just crash; this is clearly no worse than tha t.
1216 return view ? view->windowToContents(windowPoint) : windowPoint; 1216 return view ? view->rootFrameToContents(pointInRootFrame) : pointInRootFrame ;
1217 } 1217 }
1218 1218
1219 bool EventHandler::handleMousePressEvent(const PlatformMouseEvent& mouseEvent) 1219 bool EventHandler::handleMousePressEvent(const PlatformMouseEvent& mouseEvent)
1220 { 1220 {
1221 TRACE_EVENT0("blink", "EventHandler::handleMousePressEvent"); 1221 TRACE_EVENT0("blink", "EventHandler::handleMousePressEvent");
1222 1222
1223 RefPtrWillBeRawPtr<FrameView> protector(m_frame->view()); 1223 RefPtrWillBeRawPtr<FrameView> protector(m_frame->view());
1224 1224
1225 UserGestureIndicator gestureIndicator(DefinitelyProcessingUserGesture); 1225 UserGestureIndicator gestureIndicator(DefinitelyProcessingUserGesture);
1226 m_frame->localFrameRoot()->eventHandler().m_lastMouseDownUserGestureToken = gestureIndicator.currentToken(); 1226 m_frame->localFrameRoot()->eventHandler().m_lastMouseDownUserGestureToken = gestureIndicator.currentToken();
1227 1227
1228 cancelFakeMouseMoveEvent(); 1228 cancelFakeMouseMoveEvent();
1229 if (m_eventHandlerWillResetCapturingMouseEventsNode) 1229 if (m_eventHandlerWillResetCapturingMouseEventsNode)
1230 m_capturingMouseEventsNode = nullptr; 1230 m_capturingMouseEventsNode = nullptr;
1231 m_mousePressed = true; 1231 m_mousePressed = true;
1232 m_capturesDragging = true; 1232 m_capturesDragging = true;
1233 setLastKnownMousePosition(mouseEvent); 1233 setLastKnownMousePosition(mouseEvent);
1234 m_mouseDownTimestamp = mouseEvent.timestamp(); 1234 m_mouseDownTimestamp = mouseEvent.timestamp();
1235 m_mouseDownMayStartDrag = false; 1235 m_mouseDownMayStartDrag = false;
1236 m_mouseDownMayStartSelect = false; 1236 m_mouseDownMayStartSelect = false;
1237 m_mouseDownMayStartAutoscroll = false; 1237 m_mouseDownMayStartAutoscroll = false;
1238 if (FrameView* view = m_frame->view()) 1238 if (FrameView* view = m_frame->view())
1239 m_mouseDownPos = view->windowToContents(mouseEvent.position()); 1239 m_mouseDownPos = view->rootFrameToContents(mouseEvent.position());
1240 else { 1240 else {
1241 invalidateClick(); 1241 invalidateClick();
1242 return false; 1242 return false;
1243 } 1243 }
1244 1244
1245 HitTestRequest request(HitTestRequest::Active); 1245 HitTestRequest request(HitTestRequest::Active);
1246 // Save the document point we generate in case the window coordinate is inva lidated by what happens 1246 // Save the document point we generate in case the window coordinate is inva lidated by what happens
1247 // when we dispatch the event. 1247 // when we dispatch the event.
1248 LayoutPoint documentPoint = documentPointForWindowPoint(m_frame, mouseEvent. position()); 1248 LayoutPoint documentPoint = contentPointFromRootFrame(m_frame, mouseEvent.po sition());
1249 MouseEventWithHitTestResults mev = m_frame->document()->prepareMouseEvent(re quest, documentPoint, mouseEvent); 1249 MouseEventWithHitTestResults mev = m_frame->document()->prepareMouseEvent(re quest, documentPoint, mouseEvent);
1250 1250
1251 if (!mev.innerNode()) { 1251 if (!mev.innerNode()) {
1252 invalidateClick(); 1252 invalidateClick();
1253 return false; 1253 return false;
1254 } 1254 }
1255 1255
1256 m_mousePressNode = mev.innerNode(); 1256 m_mousePressNode = mev.innerNode();
1257 1257
1258 RefPtrWillBeRawPtr<LocalFrame> subframe = subframeForHitTestResult(mev); 1258 RefPtrWillBeRawPtr<LocalFrame> subframe = subframeForHitTestResult(mev);
(...skipping 20 matching lines...) Expand all
1279 invalidateClick(); 1279 invalidateClick();
1280 return true; 1280 return true;
1281 } 1281 }
1282 #endif 1282 #endif
1283 1283
1284 m_clickCount = mouseEvent.clickCount(); 1284 m_clickCount = mouseEvent.clickCount();
1285 m_clickNode = mev.innerNode()->isTextNode() ? NodeRenderingTraversal::paren t(*mev.innerNode()) : mev.innerNode(); 1285 m_clickNode = mev.innerNode()->isTextNode() ? NodeRenderingTraversal::paren t(*mev.innerNode()) : mev.innerNode();
1286 1286
1287 if (FrameView* view = m_frame->view()) { 1287 if (FrameView* view = m_frame->view()) {
1288 Layer* layer = mev.innerNode()->renderer() ? mev.innerNode()->renderer() ->enclosingLayer() : nullptr; 1288 Layer* layer = mev.innerNode()->renderer() ? mev.innerNode()->renderer() ->enclosingLayer() : nullptr;
1289 IntPoint p = view->windowToContents(mouseEvent.position()); 1289 IntPoint p = view->rootFrameToContents(mouseEvent.position());
1290 if (layer && layer->scrollableArea() && layer->scrollableArea()->isPoint InResizeControl(p, ResizerForPointer)) { 1290 if (layer && layer->scrollableArea() && layer->scrollableArea()->isPoint InResizeControl(p, ResizerForPointer)) {
1291 m_resizeScrollableArea = layer->scrollableArea(); 1291 m_resizeScrollableArea = layer->scrollableArea();
1292 m_resizeScrollableArea->setInResizeMode(true); 1292 m_resizeScrollableArea->setInResizeMode(true);
1293 m_offsetFromResizeCorner = LayoutSize(m_resizeScrollableArea->offset FromResizeCorner(p)); 1293 m_offsetFromResizeCorner = LayoutSize(m_resizeScrollableArea->offset FromResizeCorner(p));
1294 invalidateClick(); 1294 invalidateClick();
1295 return true; 1295 return true;
1296 } 1296 }
1297 } 1297 }
1298 1298
1299 m_frame->selection().setCaretBlinkingSuspended(true); 1299 m_frame->selection().setCaretBlinkingSuspended(true);
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after
1402 setLastKnownMousePosition(mouseEvent); 1402 setLastKnownMousePosition(mouseEvent);
1403 1403
1404 if (m_hoverTimer.isActive()) 1404 if (m_hoverTimer.isActive())
1405 m_hoverTimer.stop(); 1405 m_hoverTimer.stop();
1406 1406
1407 m_cursorUpdateTimer.stop(); 1407 m_cursorUpdateTimer.stop();
1408 1408
1409 cancelFakeMouseMoveEvent(); 1409 cancelFakeMouseMoveEvent();
1410 1410
1411 if (m_svgPan) { 1411 if (m_svgPan) {
1412 m_frame->document()->accessSVGExtensions().updatePan(m_frame->view()->wi ndowToContents(m_lastKnownMousePosition)); 1412 m_frame->document()->accessSVGExtensions().updatePan(m_frame->view()->ro otFrameToContents(m_lastKnownMousePosition));
1413 return true; 1413 return true;
1414 } 1414 }
1415 1415
1416 if (m_frameSetBeingResized) 1416 if (m_frameSetBeingResized)
1417 return !dispatchMouseEvent(EventTypeNames::mousemove, m_frameSetBeingRes ized.get(), 0, mouseEvent, false); 1417 return !dispatchMouseEvent(EventTypeNames::mousemove, m_frameSetBeingRes ized.get(), 0, mouseEvent, false);
1418 1418
1419 // Send events right to a scrollbar if the mouse is pressed. 1419 // Send events right to a scrollbar if the mouse is pressed.
1420 if (m_lastScrollbarUnderMouse && m_mousePressed) { 1420 if (m_lastScrollbarUnderMouse && m_mousePressed) {
1421 m_lastScrollbarUnderMouse->mouseMoved(mouseEvent); 1421 m_lastScrollbarUnderMouse->mouseMoved(mouseEvent);
1422 return true; 1422 return true;
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after
1538 #if OS(WIN) 1538 #if OS(WIN)
1539 if (Page* page = m_frame->page()) 1539 if (Page* page = m_frame->page())
1540 page->autoscrollController().handleMouseReleaseForPanScrolling(m_frame, mouseEvent); 1540 page->autoscrollController().handleMouseReleaseForPanScrolling(m_frame, mouseEvent);
1541 #endif 1541 #endif
1542 1542
1543 m_mousePressed = false; 1543 m_mousePressed = false;
1544 setLastKnownMousePosition(mouseEvent); 1544 setLastKnownMousePosition(mouseEvent);
1545 1545
1546 if (m_svgPan) { 1546 if (m_svgPan) {
1547 m_svgPan = false; 1547 m_svgPan = false;
1548 m_frame->document()->accessSVGExtensions().updatePan(m_frame->view()->wi ndowToContents(m_lastKnownMousePosition)); 1548 m_frame->document()->accessSVGExtensions().updatePan(m_frame->view()->ro otFrameToContents(m_lastKnownMousePosition));
1549 return true; 1549 return true;
1550 } 1550 }
1551 1551
1552 if (m_frameSetBeingResized) 1552 if (m_frameSetBeingResized)
1553 return !dispatchMouseEvent(EventTypeNames::mouseup, m_frameSetBeingResiz ed.get(), m_clickCount, mouseEvent, false); 1553 return !dispatchMouseEvent(EventTypeNames::mouseup, m_frameSetBeingResiz ed.get(), m_clickCount, mouseEvent, false);
1554 1554
1555 if (m_lastScrollbarUnderMouse) { 1555 if (m_lastScrollbarUnderMouse) {
1556 invalidateClick(); 1556 invalidateClick();
1557 m_lastScrollbarUnderMouse->mouseUp(mouseEvent); 1557 m_lastScrollbarUnderMouse->mouseUp(mouseEvent);
1558 bool setUnder = false; 1558 bool setUnder = false;
(...skipping 265 matching lines...) Expand 10 before | Expand all | Expand 10 after
1824 { 1824 {
1825 m_capturingMouseEventsNode = n; 1825 m_capturingMouseEventsNode = n;
1826 m_eventHandlerWillResetCapturingMouseEventsNode = false; 1826 m_eventHandlerWillResetCapturingMouseEventsNode = false;
1827 } 1827 }
1828 1828
1829 MouseEventWithHitTestResults EventHandler::prepareMouseEvent(const HitTestReques t& request, const PlatformMouseEvent& mev) 1829 MouseEventWithHitTestResults EventHandler::prepareMouseEvent(const HitTestReques t& request, const PlatformMouseEvent& mev)
1830 { 1830 {
1831 ASSERT(m_frame); 1831 ASSERT(m_frame);
1832 ASSERT(m_frame->document()); 1832 ASSERT(m_frame->document());
1833 1833
1834 return m_frame->document()->prepareMouseEvent(request, documentPointForWindo wPoint(m_frame, mev.position()), mev); 1834 return m_frame->document()->prepareMouseEvent(request, contentPointFromRootF rame(m_frame, mev.position()), mev);
1835 } 1835 }
1836 1836
1837 void EventHandler::updateMouseEventTargetNode(Node* targetNode, const PlatformMo useEvent& mouseEvent, bool fireMouseOverOut) 1837 void EventHandler::updateMouseEventTargetNode(Node* targetNode, const PlatformMo useEvent& mouseEvent, bool fireMouseOverOut)
1838 { 1838 {
1839 Node* result = targetNode; 1839 Node* result = targetNode;
1840 1840
1841 // If we're capturing, we always go right to that node. 1841 // If we're capturing, we always go right to that node.
1842 if (m_capturingMouseEventsNode) 1842 if (m_capturingMouseEventsNode)
1843 result = m_capturingMouseEventsNode.get(); 1843 result = m_capturingMouseEventsNode.get();
1844 else { 1844 else {
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after
1975 1975
1976 if (!doc->layoutView()) 1976 if (!doc->layoutView())
1977 return false; 1977 return false;
1978 1978
1979 RefPtrWillBeRawPtr<FrameView> protector(m_frame->view()); 1979 RefPtrWillBeRawPtr<FrameView> protector(m_frame->view());
1980 1980
1981 FrameView* view = m_frame->view(); 1981 FrameView* view = m_frame->view();
1982 if (!view) 1982 if (!view)
1983 return false; 1983 return false;
1984 1984
1985 LayoutPoint vPoint = view->windowToContents(event.position()); 1985 LayoutPoint vPoint = view->rootFrameToContents(event.position());
1986 1986
1987 HitTestRequest request(HitTestRequest::ReadOnly); 1987 HitTestRequest request(HitTestRequest::ReadOnly);
1988 HitTestResult result(vPoint); 1988 HitTestResult result(vPoint);
1989 doc->layoutView()->hitTest(request, result); 1989 doc->layoutView()->hitTest(request, result);
1990 1990
1991 Node* node = result.innerNode(); 1991 Node* node = result.innerNode();
1992 // Wheel events should not dispatch to text nodes. 1992 // Wheel events should not dispatch to text nodes.
1993 if (node && node->isTextNode()) 1993 if (node && node->isTextNode())
1994 node = NodeRenderingTraversal::parent(*node); 1994 node = NodeRenderingTraversal::parent(*node);
1995 1995
(...skipping 183 matching lines...) Expand 10 before | Expand all | Expand 10 after
2179 scrollbar = m_scrollbarHandlingScrollGesture.get(); 2179 scrollbar = m_scrollbarHandlingScrollGesture.get();
2180 eventTarget = m_scrollGestureHandlingNode.get(); 2180 eventTarget = m_scrollGestureHandlingNode.get();
2181 } 2181 }
2182 2182
2183 if (!eventTarget) { 2183 if (!eventTarget) {
2184 Document* document = m_frame->document(); 2184 Document* document = m_frame->document();
2185 if (!document->layoutView()) 2185 if (!document->layoutView())
2186 return false; 2186 return false;
2187 2187
2188 FrameView* view = m_frame->view(); 2188 FrameView* view = m_frame->view();
2189 LayoutPoint viewPoint = view->windowToContents(gestureEvent.position()); 2189 LayoutPoint viewPoint = view->rootFrameToContents(gestureEvent.position( ));
2190 HitTestRequest request(HitTestRequest::ReadOnly); 2190 HitTestRequest request(HitTestRequest::ReadOnly);
2191 HitTestResult result(viewPoint); 2191 HitTestResult result(viewPoint);
2192 document->layoutView()->hitTest(request, result); 2192 document->layoutView()->hitTest(request, result);
2193 2193
2194 eventTarget = result.innerNode(); 2194 eventTarget = result.innerNode();
2195 2195
2196 m_lastGestureScrollOverWidget = result.isOverWidget(); 2196 m_lastGestureScrollOverWidget = result.isOverWidget();
2197 m_scrollGestureHandlingNode = eventTarget; 2197 m_scrollGestureHandlingNode = eventTarget;
2198 m_previousGestureScrolledNode = nullptr; 2198 m_previousGestureScrolledNode = nullptr;
2199 2199
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
2245 HitTestRequest::HitTestRequestType hitType = getHitTypeForGestureType(gestur eEvent.type()); 2245 HitTestRequest::HitTestRequestType hitType = getHitTypeForGestureType(gestur eEvent.type());
2246 uint64_t preDispatchDomTreeVersion = m_frame->document()->domTreeVersion(); 2246 uint64_t preDispatchDomTreeVersion = m_frame->document()->domTreeVersion();
2247 uint64_t preDispatchStyleVersion = m_frame->document()->styleVersion(); 2247 uint64_t preDispatchStyleVersion = m_frame->document()->styleVersion();
2248 2248
2249 UserGestureIndicator gestureIndicator(DefinitelyProcessingUserGesture); 2249 UserGestureIndicator gestureIndicator(DefinitelyProcessingUserGesture);
2250 2250
2251 HitTestResult currentHitTest = targetedEvent.hitTestResult(); 2251 HitTestResult currentHitTest = targetedEvent.hitTestResult();
2252 2252
2253 // We use the adjusted position so the application isn't surprised to see a event with 2253 // We use the adjusted position so the application isn't surprised to see a event with
2254 // co-ordinates outside the target's bounds. 2254 // co-ordinates outside the target's bounds.
2255 IntPoint adjustedPoint = frameView->windowToContents(gestureEvent.position() ); 2255 IntPoint adjustedPoint = frameView->rootFrameToContents(gestureEvent.positio n());
2256 2256
2257 unsigned modifiers = gestureEvent.modifiers(); 2257 unsigned modifiers = gestureEvent.modifiers();
2258 PlatformMouseEvent fakeMouseMove(gestureEvent.position(), gestureEvent.globa lPosition(), 2258 PlatformMouseEvent fakeMouseMove(gestureEvent.position(), gestureEvent.globa lPosition(),
2259 NoButton, PlatformEvent::MouseMoved, /* clickCount */ 0, 2259 NoButton, PlatformEvent::MouseMoved, /* clickCount */ 0,
2260 static_cast<PlatformEvent::Modifiers>(modifiers), 2260 static_cast<PlatformEvent::Modifiers>(modifiers),
2261 PlatformMouseEvent::FromTouch, gestureEvent.timestamp()); 2261 PlatformMouseEvent::FromTouch, gestureEvent.timestamp());
2262 dispatchMouseEvent(EventTypeNames::mousemove, currentHitTest.innerNode(), 0, fakeMouseMove, true); 2262 dispatchMouseEvent(EventTypeNames::mousemove, currentHitTest.innerNode(), 0, fakeMouseMove, true);
2263 2263
2264 // Do a new hit-test in case the mousemove event changed the DOM. 2264 // Do a new hit-test in case the mousemove event changed the DOM.
2265 // Note that if the original hit test wasn't over an element (eg. was over a scrollbar) we 2265 // Note that if the original hit test wasn't over an element (eg. was over a scrollbar) we
2266 // don't want to re-hit-test because it may be in the wrong frame (and there 's no way the page 2266 // don't want to re-hit-test because it may be in the wrong frame (and there 's no way the page
2267 // could have seen the event anyway). 2267 // could have seen the event anyway).
2268 // Also note that the position of the frame may have changed, so we need to recompute the content 2268 // Also note that the position of the frame may have changed, so we need to recompute the content
2269 // co-ordinates (updating layout/style as hitTestResultAtPoint normally woul d). 2269 // co-ordinates (updating layout/style as hitTestResultAtPoint normally woul d).
2270 // FIXME: Use a hit-test cache to avoid unnecessary hit tests. http://crbug. com/398920 2270 // FIXME: Use a hit-test cache to avoid unnecessary hit tests. http://crbug. com/398920
2271 if (currentHitTest.innerNode()) { 2271 if (currentHitTest.innerNode()) {
2272 LocalFrame* mainFrame = m_frame->localFrameRoot(); 2272 LocalFrame* mainFrame = m_frame->localFrameRoot();
2273 if (mainFrame && mainFrame->view()) 2273 if (mainFrame && mainFrame->view())
2274 mainFrame->view()->updateLayoutAndStyleIfNeededRecursive(); 2274 mainFrame->view()->updateLayoutAndStyleIfNeededRecursive();
2275 adjustedPoint = frameView->windowToContents(gestureEvent.position()); 2275 adjustedPoint = frameView->rootFrameToContents(gestureEvent.position());
2276 currentHitTest = hitTestResultInFrame(m_frame, adjustedPoint, hitType); 2276 currentHitTest = hitTestResultInFrame(m_frame, adjustedPoint, hitType);
2277 } 2277 }
2278 m_clickNode = currentHitTest.innerNode(); 2278 m_clickNode = currentHitTest.innerNode();
2279 2279
2280 // Capture data for showUnhandledTapUIIfNeeded. 2280 // Capture data for showUnhandledTapUIIfNeeded.
2281 RefPtrWillBeRawPtr<Node> tappedNode = m_clickNode; 2281 RefPtrWillBeRawPtr<Node> tappedNode = m_clickNode;
2282 IntPoint tappedPosition = gestureEvent.position(); 2282 IntPoint tappedPosition = gestureEvent.position();
2283 2283
2284 if (m_clickNode && m_clickNode->isTextNode()) 2284 if (m_clickNode && m_clickNode->isTextNode())
2285 m_clickNode = NodeRenderingTraversal::parent(*m_clickNode); 2285 m_clickNode = NodeRenderingTraversal::parent(*m_clickNode);
2286 2286
2287 PlatformMouseEvent fakeMouseDown(gestureEvent.position(), gestureEvent.globa lPosition(), 2287 PlatformMouseEvent fakeMouseDown(gestureEvent.position(), gestureEvent.globa lPosition(),
2288 LeftButton, PlatformEvent::MousePressed, gestureEvent.tapCount(), 2288 LeftButton, PlatformEvent::MousePressed, gestureEvent.tapCount(),
2289 static_cast<PlatformEvent::Modifiers>(modifiers | PlatformEvent::LeftBut tonDown), 2289 static_cast<PlatformEvent::Modifiers>(modifiers | PlatformEvent::LeftBut tonDown),
2290 PlatformMouseEvent::FromTouch, gestureEvent.timestamp()); 2290 PlatformMouseEvent::FromTouch, gestureEvent.timestamp());
2291 bool swallowMouseDownEvent = !dispatchMouseEvent(EventTypeNames::mousedown, currentHitTest.innerNode(), gestureEvent.tapCount(), fakeMouseDown, true); 2291 bool swallowMouseDownEvent = !dispatchMouseEvent(EventTypeNames::mousedown, currentHitTest.innerNode(), gestureEvent.tapCount(), fakeMouseDown, true);
2292 if (!swallowMouseDownEvent) 2292 if (!swallowMouseDownEvent)
2293 swallowMouseDownEvent = handleMouseFocus(MouseEventWithHitTestResults(fa keMouseDown, currentHitTest)); 2293 swallowMouseDownEvent = handleMouseFocus(MouseEventWithHitTestResults(fa keMouseDown, currentHitTest));
2294 if (!swallowMouseDownEvent) 2294 if (!swallowMouseDownEvent)
2295 swallowMouseDownEvent = handleMousePressEvent(MouseEventWithHitTestResul ts(fakeMouseDown, currentHitTest)); 2295 swallowMouseDownEvent = handleMousePressEvent(MouseEventWithHitTestResul ts(fakeMouseDown, currentHitTest));
2296 2296
2297 // FIXME: Use a hit-test cache to avoid unnecessary hit tests. http://crbug. com/398920 2297 // FIXME: Use a hit-test cache to avoid unnecessary hit tests. http://crbug. com/398920
2298 if (currentHitTest.innerNode()) { 2298 if (currentHitTest.innerNode()) {
2299 LocalFrame* mainFrame = m_frame->localFrameRoot(); 2299 LocalFrame* mainFrame = m_frame->localFrameRoot();
2300 if (mainFrame && mainFrame->view()) 2300 if (mainFrame && mainFrame->view())
2301 mainFrame->view()->updateLayoutAndStyleIfNeededRecursive(); 2301 mainFrame->view()->updateLayoutAndStyleIfNeededRecursive();
2302 adjustedPoint = frameView->windowToContents(gestureEvent.position()); 2302 adjustedPoint = frameView->rootFrameToContents(gestureEvent.position());
2303 currentHitTest = hitTestResultInFrame(m_frame, adjustedPoint, hitType); 2303 currentHitTest = hitTestResultInFrame(m_frame, adjustedPoint, hitType);
2304 } 2304 }
2305 PlatformMouseEvent fakeMouseUp(gestureEvent.position(), gestureEvent.globalP osition(), 2305 PlatformMouseEvent fakeMouseUp(gestureEvent.position(), gestureEvent.globalP osition(),
2306 LeftButton, PlatformEvent::MouseReleased, gestureEvent.tapCount(), 2306 LeftButton, PlatformEvent::MouseReleased, gestureEvent.tapCount(),
2307 static_cast<PlatformEvent::Modifiers>(modifiers), 2307 static_cast<PlatformEvent::Modifiers>(modifiers),
2308 PlatformMouseEvent::FromTouch, gestureEvent.timestamp()); 2308 PlatformMouseEvent::FromTouch, gestureEvent.timestamp());
2309 bool swallowMouseUpEvent = !dispatchMouseEvent(EventTypeNames::mouseup, curr entHitTest.innerNode(), gestureEvent.tapCount(), fakeMouseUp, false); 2309 bool swallowMouseUpEvent = !dispatchMouseEvent(EventTypeNames::mouseup, curr entHitTest.innerNode(), gestureEvent.tapCount(), fakeMouseUp, false);
2310 2310
2311 bool swallowClickEvent = false; 2311 bool swallowClickEvent = false;
2312 if (m_clickNode) { 2312 if (m_clickNode) {
(...skipping 10 matching lines...) Expand all
2323 m_clickNode = nullptr; 2323 m_clickNode = nullptr;
2324 } 2324 }
2325 2325
2326 if (!swallowMouseUpEvent) 2326 if (!swallowMouseUpEvent)
2327 swallowMouseUpEvent = handleMouseReleaseEvent(MouseEventWithHitTestResul ts(fakeMouseUp, currentHitTest)); 2327 swallowMouseUpEvent = handleMouseReleaseEvent(MouseEventWithHitTestResul ts(fakeMouseUp, currentHitTest));
2328 2328
2329 bool swallowed = swallowMouseDownEvent | swallowMouseUpEvent | swallowClickE vent; 2329 bool swallowed = swallowMouseDownEvent | swallowMouseUpEvent | swallowClickE vent;
2330 if (!swallowed && tappedNode) { 2330 if (!swallowed && tappedNode) {
2331 bool domTreeChanged = preDispatchDomTreeVersion != m_frame->document()-> domTreeVersion(); 2331 bool domTreeChanged = preDispatchDomTreeVersion != m_frame->document()-> domTreeVersion();
2332 bool styleChanged = preDispatchStyleVersion != m_frame->document()->styl eVersion(); 2332 bool styleChanged = preDispatchStyleVersion != m_frame->document()->styl eVersion();
2333 m_frame->chromeClient().showUnhandledTapUIIfNeeded(tappedPosition, tappe dNode.get(), domTreeChanged || styleChanged); 2333 IntPoint tappedPositionInViewport = m_frame->page()->frameHost().pinchVi ewport().rootFrameToViewport(tappedPosition);
2334 m_frame->chromeClient().showUnhandledTapUIIfNeeded(tappedPositionInViewp ort, tappedNode.get(), domTreeChanged || styleChanged);
2334 } 2335 }
2335 return swallowed; 2336 return swallowed;
2336 } 2337 }
2337 2338
2338 bool EventHandler::handleGestureLongPress(const GestureEventWithHitTestResults& targetedEvent) 2339 bool EventHandler::handleGestureLongPress(const GestureEventWithHitTestResults& targetedEvent)
2339 { 2340 {
2340 const PlatformGestureEvent& gestureEvent = targetedEvent.event(); 2341 const PlatformGestureEvent& gestureEvent = targetedEvent.event();
2341 IntPoint adjustedPoint = gestureEvent.position(); 2342 IntPoint adjustedPoint = gestureEvent.position();
2342 2343
2343 unsigned modifiers = gestureEvent.modifiers(); 2344 unsigned modifiers = gestureEvent.modifiers();
2344 2345
2345 // FIXME: Ideally we should try to remove the extra mouse-specific hit-tests here (re-using the 2346 // FIXME: Ideally we should try to remove the extra mouse-specific hit-tests here (re-using the
2346 // supplied HitTestResult), but that will require some overhaul of the touch drag-and-drop code 2347 // supplied HitTestResult), but that will require some overhaul of the touch drag-and-drop code
2347 // and LongPress is such a special scenario that it's unlikely to matter muc h in practice. 2348 // and LongPress is such a special scenario that it's unlikely to matter muc h in practice.
2348 2349
2349 m_longTapShouldInvokeContextMenu = false; 2350 m_longTapShouldInvokeContextMenu = false;
2350 if (m_frame->settings() && m_frame->settings()->touchDragDropEnabled() && m_ frame->view()) { 2351 if (m_frame->settings() && m_frame->settings()->touchDragDropEnabled() && m_ frame->view()) {
2351 PlatformMouseEvent mouseDownEvent(adjustedPoint, gestureEvent.globalPosi tion(), LeftButton, PlatformEvent::MousePressed, 1, 2352 PlatformMouseEvent mouseDownEvent(adjustedPoint, gestureEvent.globalPosi tion(), LeftButton, PlatformEvent::MousePressed, 1,
2352 static_cast<PlatformEvent::Modifiers>(modifiers | PlatformEvent::Lef tButtonDown), 2353 static_cast<PlatformEvent::Modifiers>(modifiers | PlatformEvent::Lef tButtonDown),
2353 PlatformMouseEvent::FromTouch, WTF::currentTime()); 2354 PlatformMouseEvent::FromTouch, WTF::currentTime());
2354 m_mouseDown = mouseDownEvent; 2355 m_mouseDown = mouseDownEvent;
2355 2356
2356 PlatformMouseEvent mouseDragEvent(adjustedPoint, gestureEvent.globalPosi tion(), LeftButton, PlatformEvent::MouseMoved, 1, 2357 PlatformMouseEvent mouseDragEvent(adjustedPoint, gestureEvent.globalPosi tion(), LeftButton, PlatformEvent::MouseMoved, 1,
2357 static_cast<PlatformEvent::Modifiers>(modifiers | PlatformEvent::Lef tButtonDown), 2358 static_cast<PlatformEvent::Modifiers>(modifiers | PlatformEvent::Lef tButtonDown),
2358 PlatformMouseEvent::FromTouch, WTF::currentTime()); 2359 PlatformMouseEvent::FromTouch, WTF::currentTime());
2359 HitTestRequest request(HitTestRequest::ReadOnly); 2360 HitTestRequest request(HitTestRequest::ReadOnly);
2360 MouseEventWithHitTestResults mev = prepareMouseEvent(request, mouseDragE vent); 2361 MouseEventWithHitTestResults mev = prepareMouseEvent(request, mouseDragE vent);
2361 m_mouseDownMayStartDrag = true; 2362 m_mouseDownMayStartDrag = true;
2362 dragState().m_dragSrc = nullptr; 2363 dragState().m_dragSrc = nullptr;
2363 m_mouseDownPos = m_frame->view()->windowToContents(mouseDragEvent.positi on()); 2364 m_mouseDownPos = m_frame->view()->rootFrameToContents(mouseDragEvent.pos ition());
2364 RefPtrWillBeRawPtr<FrameView> protector(m_frame->view()); 2365 RefPtrWillBeRawPtr<FrameView> protector(m_frame->view());
2365 if (handleDrag(mev, DragInitiator::Touch)) { 2366 if (handleDrag(mev, DragInitiator::Touch)) {
2366 m_longTapShouldInvokeContextMenu = true; 2367 m_longTapShouldInvokeContextMenu = true;
2367 return true; 2368 return true;
2368 } 2369 }
2369 } 2370 }
2370 #if OS(ANDROID) 2371 #if OS(ANDROID)
2371 bool shouldLongPressSelectWord = true; 2372 bool shouldLongPressSelectWord = true;
2372 #else 2373 #else
2373 bool shouldLongPressSelectWord = m_frame->settings() && m_frame->settings()- >touchEditingEnabled(); 2374 bool shouldLongPressSelectWord = m_frame->settings() && m_frame->settings()- >touchEditingEnabled();
2374 #endif 2375 #endif
2375 if (shouldLongPressSelectWord) { 2376 if (shouldLongPressSelectWord) {
2376 IntPoint hitTestPoint = m_frame->view()->windowToContents(gestureEvent.p osition()); 2377 IntPoint hitTestPoint = m_frame->view()->rootFrameToContents(gestureEven t.position());
2377 HitTestResult result = hitTestResultAtPoint(hitTestPoint); 2378 HitTestResult result = hitTestResultAtPoint(hitTestPoint);
2378 Node* innerNode = result.innerNode(); 2379 Node* innerNode = result.innerNode();
2379 if (!result.isLiveLink() && innerNode && (innerNode->isContentEditable() || innerNode->isTextNode() 2380 if (!result.isLiveLink() && innerNode && (innerNode->isContentEditable() || innerNode->isTextNode()
2380 #if OS(ANDROID) 2381 #if OS(ANDROID)
2381 || innerNode->canStartSelection() 2382 || innerNode->canStartSelection()
2382 #endif 2383 #endif
2383 )) { 2384 )) {
2384 selectClosestWordFromHitTestResult(result, DontAppendTrailingWhitesp ace); 2385 selectClosestWordFromHitTestResult(result, DontAppendTrailingWhitesp ace);
2385 if (m_frame->selection().isRange()) { 2386 if (m_frame->selection().isRange()) {
2386 focusDocumentView(); 2387 focusDocumentView();
(...skipping 11 matching lines...) Expand all
2398 m_longTapShouldInvokeContextMenu = false; 2399 m_longTapShouldInvokeContextMenu = false;
2399 return sendContextMenuEventForGesture(targetedEvent); 2400 return sendContextMenuEventForGesture(targetedEvent);
2400 } 2401 }
2401 #endif 2402 #endif
2402 return false; 2403 return false;
2403 } 2404 }
2404 2405
2405 bool EventHandler::handleScrollGestureOnResizer(Node* eventTarget, const Platfor mGestureEvent& gestureEvent) { 2406 bool EventHandler::handleScrollGestureOnResizer(Node* eventTarget, const Platfor mGestureEvent& gestureEvent) {
2406 if (gestureEvent.type() == PlatformEvent::GestureScrollBegin) { 2407 if (gestureEvent.type() == PlatformEvent::GestureScrollBegin) {
2407 Layer* layer = eventTarget->renderer() ? eventTarget->renderer()->enclos ingLayer() : nullptr; 2408 Layer* layer = eventTarget->renderer() ? eventTarget->renderer()->enclos ingLayer() : nullptr;
2408 IntPoint p = m_frame->view()->windowToContents(gestureEvent.position()); 2409 IntPoint p = m_frame->view()->rootFrameToContents(gestureEvent.position( ));
2409 if (layer && layer->scrollableArea() && layer->scrollableArea()->isPoint InResizeControl(p, ResizerForTouch)) { 2410 if (layer && layer->scrollableArea() && layer->scrollableArea()->isPoint InResizeControl(p, ResizerForTouch)) {
2410 m_resizeScrollableArea = layer->scrollableArea(); 2411 m_resizeScrollableArea = layer->scrollableArea();
2411 m_resizeScrollableArea->setInResizeMode(true); 2412 m_resizeScrollableArea->setInResizeMode(true);
2412 m_offsetFromResizeCorner = LayoutSize(m_resizeScrollableArea->offset FromResizeCorner(p)); 2413 m_offsetFromResizeCorner = LayoutSize(m_resizeScrollableArea->offset FromResizeCorner(p));
2413 return true; 2414 return true;
2414 } 2415 }
2415 } else if (gestureEvent.type() == PlatformEvent::GestureScrollUpdate) { 2416 } else if (gestureEvent.type() == PlatformEvent::GestureScrollUpdate) {
2416 if (m_resizeScrollableArea && m_resizeScrollableArea->inResizeMode()) { 2417 if (m_resizeScrollableArea && m_resizeScrollableArea->inResizeMode()) {
2417 m_resizeScrollableArea->resize(gestureEvent, m_offsetFromResizeCorne r); 2418 m_resizeScrollableArea->resize(gestureEvent, m_offsetFromResizeCorne r);
2418 return true; 2419 return true;
(...skipping 174 matching lines...) Expand 10 before | Expand all | Expand 10 after
2593 ASSERT(result.isRectBasedTest()); 2594 ASSERT(result.isRectBasedTest());
2594 2595
2595 // If the touch is over a scrollbar, don't adjust the touch point since touc h adjustment only takes into account 2596 // If the touch is over a scrollbar, don't adjust the touch point since touc h adjustment only takes into account
2596 // DOM nodes so a touch over a scrollbar will be adjusted towards nearby nod es. This leads to things like textarea 2597 // DOM nodes so a touch over a scrollbar will be adjusted towards nearby nod es. This leads to things like textarea
2597 // scrollbars being untouchable. 2598 // scrollbars being untouchable.
2598 if (result.scrollbar()) { 2599 if (result.scrollbar()) {
2599 targetNode = 0; 2600 targetNode = 0;
2600 return false; 2601 return false;
2601 } 2602 }
2602 2603
2603 IntPoint touchCenter = m_frame->view()->contentsToWindow(result.roundedPoint InMainFrame()); 2604 IntPoint touchCenter = m_frame->view()->contentsToRootFrame(result.roundedPo intInMainFrame());
2604 IntRect touchRect = m_frame->view()->contentsToWindow(result.hitTestLocation ().boundingBox()); 2605 IntRect touchRect = m_frame->view()->contentsToRootFrame(result.hitTestLocat ion().boundingBox());
2605 2606
2606 WillBeHeapVector<RefPtrWillBeMember<Node>, 11> nodes; 2607 WillBeHeapVector<RefPtrWillBeMember<Node>, 11> nodes;
2607 copyToVector(result.listBasedTestResult(), nodes); 2608 copyToVector(result.listBasedTestResult(), nodes);
2608 2609
2609 // FIXME: the explicit Vector conversion copies into a temporary and is wast eful. 2610 // FIXME: the explicit Vector conversion copies into a temporary and is wast eful.
2610 return findBestClickableCandidate(targetNode, targetPoint, touchCenter, touc hRect, WillBeHeapVector<RefPtrWillBeMember<Node>> (nodes)); 2611 return findBestClickableCandidate(targetNode, targetPoint, touchCenter, touc hRect, WillBeHeapVector<RefPtrWillBeMember<Node>> (nodes));
2611 } 2612 }
2612 2613
2613 bool EventHandler::bestContextMenuNodeForHitTestResult(const HitTestResult& resu lt, IntPoint& targetPoint, Node*& targetNode) 2614 bool EventHandler::bestContextMenuNodeForHitTestResult(const HitTestResult& resu lt, IntPoint& targetPoint, Node*& targetNode)
2614 { 2615 {
2615 ASSERT(result.isRectBasedTest()); 2616 ASSERT(result.isRectBasedTest());
2616 IntPoint touchCenter = m_frame->view()->contentsToWindow(result.roundedPoint InMainFrame()); 2617 IntPoint touchCenter = m_frame->view()->contentsToRootFrame(result.roundedPo intInMainFrame());
2617 IntRect touchRect = m_frame->view()->contentsToWindow(result.hitTestLocation ().boundingBox()); 2618 IntRect touchRect = m_frame->view()->contentsToRootFrame(result.hitTestLocat ion().boundingBox());
2618 WillBeHeapVector<RefPtrWillBeMember<Node>, 11> nodes; 2619 WillBeHeapVector<RefPtrWillBeMember<Node>, 11> nodes;
2619 copyToVector(result.listBasedTestResult(), nodes); 2620 copyToVector(result.listBasedTestResult(), nodes);
2620 2621
2621 // FIXME: the explicit Vector conversion copies into a temporary and is wast eful. 2622 // FIXME: the explicit Vector conversion copies into a temporary and is wast eful.
2622 return findBestContextMenuCandidate(targetNode, targetPoint, touchCenter, to uchRect, WillBeHeapVector<RefPtrWillBeMember<Node>>(nodes)); 2623 return findBestContextMenuCandidate(targetNode, targetPoint, touchCenter, to uchRect, WillBeHeapVector<RefPtrWillBeMember<Node>>(nodes));
2623 } 2624 }
2624 2625
2625 bool EventHandler::bestZoomableAreaForTouchPoint(const IntPoint& touchCenter, co nst IntSize& touchRadius, IntRect& targetArea, Node*& targetNode) 2626 bool EventHandler::bestZoomableAreaForTouchPoint(const IntPoint& touchCenter, co nst IntSize& touchRadius, IntRect& targetArea, Node*& targetNode)
2626 { 2627 {
2627 if (touchRadius.isEmpty()) 2628 if (touchRadius.isEmpty())
2628 return false; 2629 return false;
2629 2630
2630 IntPoint hitTestPoint = m_frame->view()->windowToContents(touchCenter); 2631 IntPoint hitTestPoint = m_frame->view()->rootFrameToContents(touchCenter);
2631 2632
2632 HitTestRequest::HitTestRequestType hitType = HitTestRequest::ReadOnly | HitT estRequest::Active | HitTestRequest::ListBased; 2633 HitTestRequest::HitTestRequestType hitType = HitTestRequest::ReadOnly | HitT estRequest::Active | HitTestRequest::ListBased;
2633 HitTestResult result = hitTestResultAtPoint(hitTestPoint, hitType, LayoutSiz e(touchRadius)); 2634 HitTestResult result = hitTestResultAtPoint(hitTestPoint, hitType, LayoutSiz e(touchRadius));
2634 2635
2635 IntRect touchRect(touchCenter - touchRadius, touchRadius + touchRadius); 2636 IntRect touchRect(touchCenter - touchRadius, touchRadius + touchRadius);
2636 WillBeHeapVector<RefPtrWillBeMember<Node>, 11> nodes; 2637 WillBeHeapVector<RefPtrWillBeMember<Node>, 11> nodes;
2637 copyToVector(result.listBasedTestResult(), nodes); 2638 copyToVector(result.listBasedTestResult(), nodes);
2638 2639
2639 // FIXME: the explicit Vector conversion copies into a temporary and is wast eful. 2640 // FIXME: the explicit Vector conversion copies into a temporary and is wast eful.
2640 return findBestZoomableArea(targetNode, targetArea, touchCenter, touchRect, WillBeHeapVector<RefPtrWillBeMember<Node>>(nodes)); 2641 return findBestZoomableArea(targetNode, targetArea, touchCenter, touchRect, WillBeHeapVector<RefPtrWillBeMember<Node>>(nodes));
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
2677 } 2678 }
2678 2679
2679 return eventWithHitTestResults; 2680 return eventWithHitTestResults;
2680 } 2681 }
2681 2682
2682 GestureEventWithHitTestResults EventHandler::hitTestResultForGestureEvent(const PlatformGestureEvent& gestureEvent, HitTestRequest::HitTestRequestType hitType) 2683 GestureEventWithHitTestResults EventHandler::hitTestResultForGestureEvent(const PlatformGestureEvent& gestureEvent, HitTestRequest::HitTestRequestType hitType)
2683 { 2684 {
2684 // Perform the rect-based hit-test (or point-based if adjustment is disabled ). Note that 2685 // Perform the rect-based hit-test (or point-based if adjustment is disabled ). Note that
2685 // we don't yet apply hover/active state here because we need to resolve tou ch adjustment 2686 // we don't yet apply hover/active state here because we need to resolve tou ch adjustment
2686 // first so that we apply hover/active it to the final adjusted node. 2687 // first so that we apply hover/active it to the final adjusted node.
2687 IntPoint hitTestPoint = m_frame->view()->windowToContents(gestureEvent.posit ion()); 2688 IntPoint hitTestPoint = m_frame->view()->rootFrameToContents(gestureEvent.po sition());
2688 LayoutSize padding; 2689 LayoutSize padding;
2689 if (shouldApplyTouchAdjustment(gestureEvent)) { 2690 if (shouldApplyTouchAdjustment(gestureEvent)) {
2690 padding = LayoutSize(gestureEvent.area()); 2691 padding = LayoutSize(gestureEvent.area());
2691 if (!padding.isEmpty()) { 2692 if (!padding.isEmpty()) {
2692 padding.scale(1.f / 2); 2693 padding.scale(1.f / 2);
2693 hitType |= HitTestRequest::ListBased; 2694 hitType |= HitTestRequest::ListBased;
2694 } 2695 }
2695 } 2696 }
2696 HitTestResult hitTestResult = hitTestResultAtPoint(hitTestPoint, hitType | H itTestRequest::ReadOnly, padding); 2697 HitTestResult hitTestResult = hitTestResultAtPoint(hitTestPoint, hitType | H itTestRequest::ReadOnly, padding);
2697 2698
2698 // Adjust the location of the gesture to the most likely nearby node, as app ropriate for the 2699 // Adjust the location of the gesture to the most likely nearby node, as app ropriate for the
2699 // type of event. 2700 // type of event.
2700 PlatformGestureEvent adjustedEvent = gestureEvent; 2701 PlatformGestureEvent adjustedEvent = gestureEvent;
2701 applyTouchAdjustment(&adjustedEvent, &hitTestResult); 2702 applyTouchAdjustment(&adjustedEvent, &hitTestResult);
2702 2703
2703 // Do a new hit-test at the (adjusted) gesture co-ordinates. This is necessa ry because 2704 // Do a new hit-test at the (adjusted) gesture co-ordinates. This is necessa ry because
2704 // rect-based hit testing and touch adjustment sometimes return a different node than 2705 // rect-based hit testing and touch adjustment sometimes return a different node than
2705 // what a point-based hit test would return for the same point. 2706 // what a point-based hit test would return for the same point.
2706 // FIXME: Fix touch adjustment to avoid the need for a redundant hit test. h ttp://crbug.com/398914 2707 // FIXME: Fix touch adjustment to avoid the need for a redundant hit test. h ttp://crbug.com/398914
2707 if (shouldApplyTouchAdjustment(gestureEvent)) { 2708 if (shouldApplyTouchAdjustment(gestureEvent)) {
2708 LocalFrame* hitFrame = hitTestResult.innerNodeFrame(); 2709 LocalFrame* hitFrame = hitTestResult.innerNodeFrame();
2709 if (!hitFrame) 2710 if (!hitFrame)
2710 hitFrame = m_frame; 2711 hitFrame = m_frame;
2711 hitTestResult = hitTestResultInFrame(hitFrame, hitFrame->view()->windowT oContents(adjustedEvent.position()), (hitType | HitTestRequest::ReadOnly) & ~Hit TestRequest::ListBased); 2712 hitTestResult = hitTestResultInFrame(hitFrame, hitFrame->view()->rootFra meToContents(adjustedEvent.position()), (hitType | HitTestRequest::ReadOnly) & ~ HitTestRequest::ListBased);
2712 } 2713 }
2713 2714
2714 // If we did a rect-based hit test it must be resolved to the best single no de by now to 2715 // If we did a rect-based hit test it must be resolved to the best single no de by now to
2715 // ensure consumers don't accidentally use one of the other candidates. 2716 // ensure consumers don't accidentally use one of the other candidates.
2716 ASSERT(!hitTestResult.isRectBasedTest()); 2717 ASSERT(!hitTestResult.isRectBasedTest());
2717 2718
2718 return GestureEventWithHitTestResults(adjustedEvent, hitTestResult); 2719 return GestureEventWithHitTestResults(adjustedEvent, hitTestResult);
2719 } 2720 }
2720 2721
2721 HitTestRequest::HitTestRequestType EventHandler::getHitTypeForGestureType(Platfo rmEvent::Type type) 2722 HitTestRequest::HitTestRequestType EventHandler::getHitTypeForGestureType(Platfo rmEvent::Type type)
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
2766 case PlatformEvent::GestureTwoFingerTap: 2767 case PlatformEvent::GestureTwoFingerTap:
2767 adjusted = bestContextMenuNodeForHitTestResult(*hitTestResult, adjustedP oint, adjustedNode); 2768 adjusted = bestContextMenuNodeForHitTestResult(*hitTestResult, adjustedP oint, adjustedNode);
2768 break; 2769 break;
2769 default: 2770 default:
2770 ASSERT_NOT_REACHED(); 2771 ASSERT_NOT_REACHED();
2771 } 2772 }
2772 2773
2773 // Update the hit-test result to be a point-based result instead of a rect-b ased result. 2774 // Update the hit-test result to be a point-based result instead of a rect-b ased result.
2774 // FIXME: We should do this even when no candidate matches the node filter. crbug.com/398914 2775 // FIXME: We should do this even when no candidate matches the node filter. crbug.com/398914
2775 if (adjusted) { 2776 if (adjusted) {
2776 hitTestResult->resolveRectBasedTest(adjustedNode, m_frame->view()->windo wToContents(adjustedPoint)); 2777 hitTestResult->resolveRectBasedTest(adjustedNode, m_frame->view()->rootF rameToContents(adjustedPoint));
2777 gestureEvent->applyTouchAdjustment(adjustedPoint); 2778 gestureEvent->applyTouchAdjustment(adjustedPoint);
2778 } 2779 }
2779 } 2780 }
2780 2781
2781 bool EventHandler::sendContextMenuEvent(const PlatformMouseEvent& event) 2782 bool EventHandler::sendContextMenuEvent(const PlatformMouseEvent& event)
2782 { 2783 {
2783 Document* doc = m_frame->document(); 2784 Document* doc = m_frame->document();
2784 FrameView* v = m_frame->view(); 2785 FrameView* v = m_frame->view();
2785 if (!v) 2786 if (!v)
2786 return false; 2787 return false;
2787 2788
2788 // Clear mouse press state to avoid initiating a drag while context menu is up. 2789 // Clear mouse press state to avoid initiating a drag while context menu is up.
2789 m_mousePressed = false; 2790 m_mousePressed = false;
2790 LayoutPoint viewportPos = v->windowToContents(event.position()); 2791 LayoutPoint viewportPos = v->rootFrameToContents(event.position());
2791 HitTestRequest request(HitTestRequest::Active); 2792 HitTestRequest request(HitTestRequest::Active);
2792 MouseEventWithHitTestResults mev = doc->prepareMouseEvent(request, viewportP os, event); 2793 MouseEventWithHitTestResults mev = doc->prepareMouseEvent(request, viewportP os, event);
2793 2794
2794 if (!m_frame->selection().contains(viewportPos) 2795 if (!m_frame->selection().contains(viewportPos)
2795 && !mev.scrollbar() 2796 && !mev.scrollbar()
2796 // FIXME: In the editable case, word selection sometimes selects content that isn't underneath the mouse. 2797 // FIXME: In the editable case, word selection sometimes selects content that isn't underneath the mouse.
2797 // If the selection is non-editable, we do word selection to make it eas ier to use the contextual menu items 2798 // If the selection is non-editable, we do word selection to make it eas ier to use the contextual menu items
2798 // available for text selections. But only if we're above text. 2799 // available for text selections. But only if we're above text.
2799 && (m_frame->selection().isContentEditable() || (mev.innerNode() && mev. innerNode()->isTextNode()))) { 2800 && (m_frame->selection().isContentEditable() || (mev.innerNode() && mev. innerNode()->isTextNode()))) {
2800 m_mouseDownMayStartSelect = true; // context menu events are always allo wed to perform a selection 2801 m_mouseDownMayStartSelect = true; // context menu events are always allo wed to perform a selection
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
2833 FrameSelection& selection = m_frame->selection(); 2834 FrameSelection& selection = m_frame->selection();
2834 Position start = selection.selection().start(); 2835 Position start = selection.selection().start();
2835 2836
2836 if (start.deprecatedNode() && (selection.rootEditableElement() || selection. isRange())) { 2837 if (start.deprecatedNode() && (selection.rootEditableElement() || selection. isRange())) {
2837 RefPtrWillBeRawPtr<Range> selectionRange = selection.toNormalizedRange() ; 2838 RefPtrWillBeRawPtr<Range> selectionRange = selection.toNormalizedRange() ;
2838 IntRect firstRect = m_frame->editor().firstRectForRange(selectionRange.g et()); 2839 IntRect firstRect = m_frame->editor().firstRectForRange(selectionRange.g et());
2839 2840
2840 int x = rightAligned ? firstRect.maxX() : firstRect.x(); 2841 int x = rightAligned ? firstRect.maxX() : firstRect.x();
2841 // In a multiline edit, firstRect.maxY() would endup on the next line, s o -1. 2842 // In a multiline edit, firstRect.maxY() would endup on the next line, s o -1.
2842 int y = firstRect.maxY() ? firstRect.maxY() - 1 : 0; 2843 int y = firstRect.maxY() ? firstRect.maxY() - 1 : 0;
2843 locationInViewport = view->contentsToWindow(IntPoint(x, y)); 2844 locationInViewport = view->contentsToViewport(IntPoint(x, y));
2844 } else if (focusedElement) { 2845 } else if (focusedElement) {
2845 IntRect clippedRect = focusedElement->boundsInViewportSpace(); 2846 IntRect clippedRect = focusedElement->boundsInViewportSpace();
2846 locationInViewport = IntPoint(clippedRect.center()); 2847 locationInViewport = IntPoint(clippedRect.center());
2847 } else { 2848 } else {
2848 // FIXME - Almost certainly wrong, this is not in viewport space. crbug. com/458682. 2849 // FIXME - Almost certainly wrong, this is not in viewport space. crbug. com/458602.
2849 locationInViewport = IntPoint( 2850 locationInViewport = IntPoint(
2850 rightAligned ? view->contentsWidth() - kContextMenuMargin : kContext MenuMargin, 2851 rightAligned ? view->contentsWidth() - kContextMenuMargin : kContext MenuMargin,
2851 kContextMenuMargin); 2852 kContextMenuMargin);
2852 } 2853 }
2853 2854
2854 m_frame->view()->setCursor(pointerCursor()); 2855 m_frame->view()->setCursor(pointerCursor());
2855 IntPoint globalPosition = view->hostWindow()->viewportToScreen(IntRect(locat ionInViewport, IntSize())).location(); 2856 IntPoint globalPosition = view->hostWindow()->viewportToScreen(IntRect(locat ionInViewport, IntSize())).location();
2856 2857
2857 Node* targetNode = doc->focusedElement(); 2858 Node* targetNode = doc->focusedElement();
2858 if (!targetNode) 2859 if (!targetNode)
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
2934 m_fakeMouseMoveEventTimer.startOneShot(fakeMouseMoveShortInterval, F ROM_HERE); 2935 m_fakeMouseMoveEventTimer.startOneShot(fakeMouseMoveShortInterval, F ROM_HERE);
2935 } 2936 }
2936 } 2937 }
2937 2938
2938 void EventHandler::dispatchFakeMouseMoveEventSoonInQuad(const FloatQuad& quad) 2939 void EventHandler::dispatchFakeMouseMoveEventSoonInQuad(const FloatQuad& quad)
2939 { 2940 {
2940 FrameView* view = m_frame->view(); 2941 FrameView* view = m_frame->view();
2941 if (!view) 2942 if (!view)
2942 return; 2943 return;
2943 2944
2944 if (!quad.containsPoint(view->windowToContents(m_lastKnownMousePosition))) 2945 if (!quad.containsPoint(view->rootFrameToContents(m_lastKnownMousePosition)) )
2945 return; 2946 return;
2946 2947
2947 dispatchFakeMouseMoveEventSoon(); 2948 dispatchFakeMouseMoveEventSoon();
2948 } 2949 }
2949 2950
2950 void EventHandler::fakeMouseMoveEventTimerFired(Timer<EventHandler>* timer) 2951 void EventHandler::fakeMouseMoveEventTimerFired(Timer<EventHandler>* timer)
2951 { 2952 {
2952 ASSERT_UNUSED(timer, timer == &m_fakeMouseMoveEventTimer); 2953 ASSERT_UNUSED(timer, timer == &m_fakeMouseMoveEventTimer);
2953 ASSERT(!m_mousePressed); 2954 ASSERT(!m_mousePressed);
2954 2955
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
3000 void EventHandler::hoverTimerFired(Timer<EventHandler>*) 3001 void EventHandler::hoverTimerFired(Timer<EventHandler>*)
3001 { 3002 {
3002 m_hoverTimer.stop(); 3003 m_hoverTimer.stop();
3003 3004
3004 ASSERT(m_frame); 3005 ASSERT(m_frame);
3005 ASSERT(m_frame->document()); 3006 ASSERT(m_frame->document());
3006 3007
3007 if (LayoutView* renderer = m_frame->contentRenderer()) { 3008 if (LayoutView* renderer = m_frame->contentRenderer()) {
3008 if (FrameView* view = m_frame->view()) { 3009 if (FrameView* view = m_frame->view()) {
3009 HitTestRequest request(HitTestRequest::Move); 3010 HitTestRequest request(HitTestRequest::Move);
3010 HitTestResult result(view->windowToContents(m_lastKnownMousePosition )); 3011 HitTestResult result(view->rootFrameToContents(m_lastKnownMousePosit ion));
3011 renderer->hitTest(request, result); 3012 renderer->hitTest(request, result);
3012 m_frame->document()->updateHoverActiveState(request, result.innerEle ment()); 3013 m_frame->document()->updateHoverActiveState(request, result.innerEle ment());
3013 } 3014 }
3014 } 3015 }
3015 } 3016 }
3016 3017
3017 void EventHandler::activeIntervalTimerFired(Timer<EventHandler>*) 3018 void EventHandler::activeIntervalTimerFired(Timer<EventHandler>*)
3018 { 3019 {
3019 m_activeIntervalTimer.stop(); 3020 m_activeIntervalTimer.stop();
3020 3021
(...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after
3180 } 3181 }
3181 if (event->type() == EventTypeNames::keypress) { 3182 if (event->type() == EventTypeNames::keypress) {
3182 m_frame->editor().handleKeyboardEvent(event); 3183 m_frame->editor().handleKeyboardEvent(event);
3183 if (event->defaultHandled()) 3184 if (event->defaultHandled())
3184 return; 3185 return;
3185 if (event->charCode() == ' ') 3186 if (event->charCode() == ' ')
3186 defaultSpaceEventHandler(event); 3187 defaultSpaceEventHandler(event);
3187 } 3188 }
3188 } 3189 }
3189 3190
3190 bool EventHandler::dragHysteresisExceeded(const IntPoint& dragViewportLocation) const 3191 bool EventHandler::dragHysteresisExceeded(const IntPoint& dragLocationInRootFram e) const
3191 { 3192 {
3192 FrameView* view = m_frame->view(); 3193 FrameView* view = m_frame->view();
3193 if (!view) 3194 if (!view)
3194 return false; 3195 return false;
3195 IntPoint dragLocation = view->windowToContents(dragViewportLocation); 3196 IntPoint dragLocation = view->rootFrameToContents(dragLocationInRootFrame);
3196 IntSize delta = dragLocation - m_mouseDownPos; 3197 IntSize delta = dragLocation - m_mouseDownPos;
3197 3198
3198 int threshold = GeneralDragHysteresis; 3199 int threshold = GeneralDragHysteresis;
3199 switch (dragState().m_dragType) { 3200 switch (dragState().m_dragType) {
3200 case DragSourceActionSelection: 3201 case DragSourceActionSelection:
3201 threshold = TextDragHysteresis; 3202 threshold = TextDragHysteresis;
3202 break; 3203 break;
3203 case DragSourceActionImage: 3204 case DragSourceActionImage:
3204 threshold = ImageDragHysteresis; 3205 threshold = ImageDragHysteresis;
3205 break; 3206 break;
(...skipping 398 matching lines...) Expand 10 before | Expand all | Expand 10 after
3604 3605
3605 // First do hit tests for any new touch points. 3606 // First do hit tests for any new touch points.
3606 for (i = 0; i < points.size(); ++i) { 3607 for (i = 0; i < points.size(); ++i) {
3607 const PlatformTouchPoint& point = points[i]; 3608 const PlatformTouchPoint& point = points[i];
3608 3609
3609 // Touch events implicitly capture to the touched node, and don't change 3610 // Touch events implicitly capture to the touched node, and don't change
3610 // active/hover states themselves (Gesture events do). So we only need 3611 // active/hover states themselves (Gesture events do). So we only need
3611 // to hit-test on touchstart, and it can be read-only. 3612 // to hit-test on touchstart, and it can be read-only.
3612 if (point.state() == PlatformTouchPoint::TouchPressed) { 3613 if (point.state() == PlatformTouchPoint::TouchPressed) {
3613 HitTestRequest::HitTestRequestType hitType = HitTestRequest::TouchEv ent | HitTestRequest::ReadOnly | HitTestRequest::Active; 3614 HitTestRequest::HitTestRequestType hitType = HitTestRequest::TouchEv ent | HitTestRequest::ReadOnly | HitTestRequest::Active;
3614 LayoutPoint pagePoint = roundedLayoutPoint(m_frame->view()->windowTo Contents(point.pos())); 3615 LayoutPoint pagePoint = roundedLayoutPoint(m_frame->view()->rootFram eToContents(point.pos()));
3615 HitTestResult result; 3616 HitTestResult result;
3616 if (!m_touchSequenceDocument) { 3617 if (!m_touchSequenceDocument) {
3617 result = hitTestResultAtPoint(pagePoint, hitType); 3618 result = hitTestResultAtPoint(pagePoint, hitType);
3618 } else if (m_touchSequenceDocument->frame()) { 3619 } else if (m_touchSequenceDocument->frame()) {
3619 LayoutPoint framePoint = roundedLayoutPoint(m_touchSequenceDocum ent->frame()->view()->windowToContents(point.pos())); 3620 LayoutPoint framePoint = roundedLayoutPoint(m_touchSequenceDocum ent->frame()->view()->rootFrameToContents(point.pos()));
3620 result = hitTestResultInFrame(m_touchSequenceDocument->frame(), framePoint, hitType); 3621 result = hitTestResultInFrame(m_touchSequenceDocument->frame(), framePoint, hitType);
3621 } else 3622 } else
3622 continue; 3623 continue;
3623 3624
3624 Node* node = result.innerNode(); 3625 Node* node = result.innerNode();
3625 if (!node) 3626 if (!node)
3626 continue; 3627 continue;
3627 3628
3628 // Touch events should not go to text nodes 3629 // Touch events should not go to text nodes
3629 if (node->isTextNode()) 3630 if (node->isTextNode())
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
3727 // Document so that there's some valid node here. Perhaps this 3728 // Document so that there's some valid node here. Perhaps this
3728 // should really be LocalDOMWindow, but in all other cases the targe t of 3729 // should really be LocalDOMWindow, but in all other cases the targe t of
3729 // a Touch is a Node so using the window could be a breaking change. 3730 // a Touch is a Node so using the window could be a breaking change.
3730 // Since we know there was no handler invoked, the specific target 3731 // Since we know there was no handler invoked, the specific target
3731 // should be completely irrelevant to the application. 3732 // should be completely irrelevant to the application.
3732 touchTarget = m_touchSequenceDocument; 3733 touchTarget = m_touchSequenceDocument;
3733 targetFrame = m_touchSequenceDocument->frame(); 3734 targetFrame = m_touchSequenceDocument->frame();
3734 } 3735 }
3735 ASSERT(targetFrame); 3736 ASSERT(targetFrame);
3736 3737
3737 // pagePoint should always be relative to the target elements 3738 // pagePoint should always be in the target element's document coordinat es.
3738 // containing frame. 3739 FloatPoint pagePoint = targetFrame->view()->rootFrameToContents(point.po s());
3739 FloatPoint pagePoint = targetFrame->view()->windowToContents(point.pos() );
3740 3740
3741 float scaleFactor = 1.0f / targetFrame->pageZoomFactor(); 3741 float scaleFactor = 1.0f / targetFrame->pageZoomFactor();
3742 3742
3743 FloatPoint adjustedPagePoint = pagePoint.scaledBy(scaleFactor); 3743 FloatPoint adjustedPagePoint = pagePoint.scaledBy(scaleFactor);
3744 FloatSize adjustedRadius = point.radius().scaledBy(scaleFactor); 3744 FloatSize adjustedRadius = point.radius().scaledBy(scaleFactor);
3745 3745
3746 RefPtrWillBeRawPtr<Touch> touch = Touch::create( 3746 RefPtrWillBeRawPtr<Touch> touch = Touch::create(
3747 targetFrame, touchTarget.get(), point.id(), point.screenPos(), adjus tedPagePoint, adjustedRadius, point.rotationAngle(), point.force()); 3747 targetFrame, touchTarget.get(), point.id(), point.screenPos(), adjus tedPagePoint, adjustedRadius, point.rotationAngle(), point.force());
3748 3748
3749 // Ensure this target's touch list exists, even if it ends up empty, so 3749 // Ensure this target's touch list exists, even if it ends up empty, so
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after
3846 m_lastKnownMousePosition = event.position(); 3846 m_lastKnownMousePosition = event.position();
3847 m_lastKnownMouseGlobalPosition = event.globalPosition(); 3847 m_lastKnownMouseGlobalPosition = event.globalPosition();
3848 } 3848 }
3849 3849
3850 bool EventHandler::passMousePressEventToSubframe(MouseEventWithHitTestResults& m ev, LocalFrame* subframe) 3850 bool EventHandler::passMousePressEventToSubframe(MouseEventWithHitTestResults& m ev, LocalFrame* subframe)
3851 { 3851 {
3852 // If we're clicking into a frame that is selected, the frame will appear 3852 // If we're clicking into a frame that is selected, the frame will appear
3853 // greyed out even though we're clicking on the selection. This looks 3853 // greyed out even though we're clicking on the selection. This looks
3854 // really strange (having the whole frame be greyed out), so we deselect the 3854 // really strange (having the whole frame be greyed out), so we deselect the
3855 // selection. 3855 // selection.
3856 IntPoint p = m_frame->view()->windowToContents(mev.event().position()); 3856 IntPoint p = m_frame->view()->rootFrameToContents(mev.event().position());
3857 if (m_frame->selection().contains(p)) { 3857 if (m_frame->selection().contains(p)) {
3858 VisiblePosition visiblePos( 3858 VisiblePosition visiblePos(
3859 mev.innerNode()->renderer()->positionForPoint(mev.localPoint())); 3859 mev.innerNode()->renderer()->positionForPoint(mev.localPoint()));
3860 VisibleSelection newSelection(visiblePos); 3860 VisibleSelection newSelection(visiblePos);
3861 m_frame->selection().setSelection(newSelection); 3861 m_frame->selection().setSelection(newSelection);
3862 } 3862 }
3863 3863
3864 subframe->eventHandler().handleMousePressEvent(mev.event()); 3864 subframe->eventHandler().handleMousePressEvent(mev.event());
3865 return true; 3865 return true;
3866 } 3866 }
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
3919 3919
3920 // If it's in the direction to hide the top controls, only consume when the frame can also scroll. 3920 // If it's in the direction to hide the top controls, only consume when the frame can also scroll.
3921 if (m_frame->view()->scrollPosition().y() < m_frame->view()->maximumScrollPo sition().y()) 3921 if (m_frame->view()->scrollPosition().y() < m_frame->view()->maximumScrollPo sition().y())
3922 return true; 3922 return true;
3923 3923
3924 return false; 3924 return false;
3925 } 3925 }
3926 3926
3927 3927
3928 } // namespace blink 3928 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698