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

Side by Side Diff: third_party/WebKit/Source/core/input/PointerEventManager.cpp

Issue 1853743005: Oilpan: Remove WillBe types (part 13) (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 8 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 // 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/PointerEventManager.h" 5 #include "core/input/PointerEventManager.h"
6 6
7 #include "core/dom/shadow/FlatTreeTraversal.h" 7 #include "core/dom/shadow/FlatTreeTraversal.h"
8 #include "core/events/MouseEvent.h" 8 #include "core/events/MouseEvent.h"
9 #include "core/input/EventHandler.h" 9 #include "core/input/EventHandler.h"
10 10
(...skipping 13 matching lines...) Expand all
24 case PlatformTouchPoint::TouchMoved: 24 case PlatformTouchPoint::TouchMoved:
25 return EventTypeNames::pointermove; 25 return EventTypeNames::pointermove;
26 case PlatformTouchPoint::TouchStationary: 26 case PlatformTouchPoint::TouchStationary:
27 // Fall through to default 27 // Fall through to default
28 default: 28 default:
29 ASSERT_NOT_REACHED(); 29 ASSERT_NOT_REACHED();
30 return emptyAtom; 30 return emptyAtom;
31 } 31 }
32 } 32 }
33 33
34 bool isInDocument(PassRefPtrWillBeRawPtr<EventTarget> n) 34 bool isInDocument(RawPtr<EventTarget> n)
35 { 35 {
36 return n && n->toNode() && n->toNode()->inDocument(); 36 return n && n->toNode() && n->toNode()->inDocument();
37 } 37 }
38 38
39 WebInputEventResult dispatchMouseEvent( 39 WebInputEventResult dispatchMouseEvent(
40 PassRefPtrWillBeRawPtr<EventTarget> prpTarget, 40 RawPtr<EventTarget> prpTarget,
41 const AtomicString& mouseEventType, 41 const AtomicString& mouseEventType,
42 const PlatformMouseEvent& mouseEvent, 42 const PlatformMouseEvent& mouseEvent,
43 PassRefPtrWillBeRawPtr<EventTarget> prpRelatedTarget, 43 RawPtr<EventTarget> prpRelatedTarget,
44 int detail = 0, 44 int detail = 0,
45 bool checkForListener = false) 45 bool checkForListener = false)
46 { 46 {
47 RefPtrWillBeRawPtr<EventTarget> target = prpTarget; 47 RawPtr<EventTarget> target = prpTarget;
48 RefPtrWillBeRawPtr<EventTarget> relatedTarget = prpRelatedTarget; 48 RawPtr<EventTarget> relatedTarget = prpRelatedTarget;
49 if (target && target->toNode() 49 if (target && target->toNode()
50 && (!checkForListener || target->hasEventListeners(mouseEventType))) { 50 && (!checkForListener || target->hasEventListeners(mouseEventType))) {
51 RefPtrWillBeRawPtr<Node> targetNode = target->toNode(); 51 RawPtr<Node> targetNode = target->toNode();
52 RefPtrWillBeRawPtr<MouseEvent> event = MouseEvent::create(mouseEventType , 52 RawPtr<MouseEvent> event = MouseEvent::create(mouseEventType,
53 targetNode->document().domWindow(), mouseEvent, detail, 53 targetNode->document().domWindow(), mouseEvent, detail,
54 relatedTarget ? relatedTarget->toNode() : nullptr); 54 relatedTarget ? relatedTarget->toNode() : nullptr);
55 DispatchEventResult dispatchResult = target->dispatchEvent(event); 55 DispatchEventResult dispatchResult = target->dispatchEvent(event);
56 return EventHandler::toWebInputEventResult(dispatchResult); 56 return EventHandler::toWebInputEventResult(dispatchResult);
57 } 57 }
58 return WebInputEventResult::NotHandled; 58 return WebInputEventResult::NotHandled;
59 } 59 }
60 60
61 } // namespace 61 } // namespace
62 62
63 WebInputEventResult PointerEventManager::dispatchPointerEvent( 63 WebInputEventResult PointerEventManager::dispatchPointerEvent(
64 PassRefPtrWillBeRawPtr<EventTarget> prpTarget, 64 RawPtr<EventTarget> prpTarget,
65 PassRefPtrWillBeRawPtr<PointerEvent> prpPointerEvent, 65 RawPtr<PointerEvent> prpPointerEvent,
66 bool checkForListener) 66 bool checkForListener)
67 { 67 {
68 RefPtrWillBeRawPtr<EventTarget> target = prpTarget; 68 RawPtr<EventTarget> target = prpTarget;
69 RefPtrWillBeRawPtr<PointerEvent> pointerEvent = prpPointerEvent; 69 RawPtr<PointerEvent> pointerEvent = prpPointerEvent;
70 70
71 if (!target) 71 if (!target)
72 return WebInputEventResult::NotHandled; 72 return WebInputEventResult::NotHandled;
73 73
74 // Set whether node under pointer has received pointerover or not. 74 // Set whether node under pointer has received pointerover or not.
75 const int pointerId = pointerEvent->pointerId(); 75 const int pointerId = pointerEvent->pointerId();
76 const AtomicString& eventType = pointerEvent->type(); 76 const AtomicString& eventType = pointerEvent->type();
77 if ((eventType == EventTypeNames::pointerout 77 if ((eventType == EventTypeNames::pointerout
78 || eventType == EventTypeNames::pointerover) 78 || eventType == EventTypeNames::pointerover)
79 && m_nodeUnderPointer.contains(pointerId)) { 79 && m_nodeUnderPointer.contains(pointerId)) {
80 RefPtrWillBeRawPtr<EventTarget> targetUnderPointer = 80 RawPtr<EventTarget> targetUnderPointer =
81 m_nodeUnderPointer.get(pointerId).target; 81 m_nodeUnderPointer.get(pointerId).target;
82 if (targetUnderPointer == target) { 82 if (targetUnderPointer == target) {
83 m_nodeUnderPointer.set(pointerId, EventTargetAttributes 83 m_nodeUnderPointer.set(pointerId, EventTargetAttributes
84 (targetUnderPointer, 84 (targetUnderPointer,
85 eventType == EventTypeNames::pointerover)); 85 eventType == EventTypeNames::pointerover));
86 } 86 }
87 } 87 }
88 88
89 if (!RuntimeEnabledFeatures::pointerEventEnabled()) 89 if (!RuntimeEnabledFeatures::pointerEventEnabled())
90 return WebInputEventResult::NotHandled; 90 return WebInputEventResult::NotHandled;
91 if (!checkForListener || target->hasEventListeners(eventType)) { 91 if (!checkForListener || target->hasEventListeners(eventType)) {
92 DispatchEventResult dispatchResult = target->dispatchEvent(pointerEvent) ; 92 DispatchEventResult dispatchResult = target->dispatchEvent(pointerEvent) ;
93 return EventHandler::toWebInputEventResult(dispatchResult); 93 return EventHandler::toWebInputEventResult(dispatchResult);
94 } 94 }
95 return WebInputEventResult::NotHandled; 95 return WebInputEventResult::NotHandled;
96 } 96 }
97 97
98 PassRefPtrWillBeRawPtr<EventTarget> PointerEventManager::getEffectiveTargetForPo interEvent( 98 RawPtr<EventTarget> PointerEventManager::getEffectiveTargetForPointerEvent(
99 PassRefPtrWillBeRawPtr<EventTarget> target, int pointerId) 99 RawPtr<EventTarget> target, int pointerId)
100 { 100 {
101 if (EventTarget* capturingTarget = getCapturingNode(pointerId)) 101 if (EventTarget* capturingTarget = getCapturingNode(pointerId))
102 return capturingTarget; 102 return capturingTarget;
103 return target; 103 return target;
104 } 104 }
105 105
106 void PointerEventManager::sendMouseAndPossiblyPointerNodeTransitionEvents( 106 void PointerEventManager::sendMouseAndPossiblyPointerNodeTransitionEvents(
107 PassRefPtrWillBeRawPtr<Node> exitedNode, 107 RawPtr<Node> exitedNode,
108 PassRefPtrWillBeRawPtr<Node> enteredNode, 108 RawPtr<Node> enteredNode,
109 const PlatformMouseEvent& mouseEvent, 109 const PlatformMouseEvent& mouseEvent,
110 PassRefPtrWillBeRawPtr<AbstractView> view, 110 RawPtr<AbstractView> view,
111 bool isFrameBoundaryTransition) 111 bool isFrameBoundaryTransition)
112 { 112 {
113 // Pointer event type does not matter as it will be overridden in the sendNo deTransitionEvents 113 // Pointer event type does not matter as it will be overridden in the sendNo deTransitionEvents
114 RefPtrWillBeRawPtr<PointerEvent> pointerEvent = 114 RawPtr<PointerEvent> pointerEvent =
115 m_pointerEventFactory.create(EventTypeNames::mouseout, mouseEvent, 115 m_pointerEventFactory.create(EventTypeNames::mouseout, mouseEvent,
116 nullptr, view); 116 nullptr, view);
117 117
118 // TODO(crbug/545647): This state should reset with pointercancel too. 118 // TODO(crbug/545647): This state should reset with pointercancel too.
119 // This function also gets called for compat mouse events of touch at this 119 // This function also gets called for compat mouse events of touch at this
120 // stage. So if the event is not frame boundary transition it is only a 120 // stage. So if the event is not frame boundary transition it is only a
121 // compatibility mouse event and we do not need to change pointer event 121 // compatibility mouse event and we do not need to change pointer event
122 // behavior regarding preventMouseEvent state in that case. 122 // behavior regarding preventMouseEvent state in that case.
123 if (isFrameBoundaryTransition && pointerEvent->buttons() == 0) { 123 if (isFrameBoundaryTransition && pointerEvent->buttons() == 0) {
124 m_preventMouseEventForPointerTypeMouse = false; 124 m_preventMouseEventForPointerTypeMouse = false;
125 } 125 }
126 126
127 processCaptureAndPositionOfPointerEvent(pointerEvent, enteredNode, 127 processCaptureAndPositionOfPointerEvent(pointerEvent, enteredNode,
128 exitedNode, mouseEvent, true, isFrameBoundaryTransition); 128 exitedNode, mouseEvent, true, isFrameBoundaryTransition);
129 } 129 }
130 130
131 void PointerEventManager::sendNodeTransitionEvents( 131 void PointerEventManager::sendNodeTransitionEvents(
132 PassRefPtrWillBeRawPtr<EventTarget> prpExitedTarget, 132 RawPtr<EventTarget> prpExitedTarget,
133 PassRefPtrWillBeRawPtr<EventTarget> prpEnteredTarget, 133 RawPtr<EventTarget> prpEnteredTarget,
134 PassRefPtrWillBeRawPtr<PointerEvent> prpPointerEvent, 134 RawPtr<PointerEvent> prpPointerEvent,
135 const PlatformMouseEvent& mouseEvent, bool sendMouseEvent) 135 const PlatformMouseEvent& mouseEvent, bool sendMouseEvent)
136 { 136 {
137 RefPtrWillBeRawPtr<EventTarget> exitedTarget = prpExitedTarget; 137 RawPtr<EventTarget> exitedTarget = prpExitedTarget;
138 RefPtrWillBeRawPtr<EventTarget> enteredTarget = prpEnteredTarget; 138 RawPtr<EventTarget> enteredTarget = prpEnteredTarget;
139 RefPtrWillBeRawPtr<PointerEvent> pointerEvent = prpPointerEvent; 139 RawPtr<PointerEvent> pointerEvent = prpPointerEvent;
140 140
141 if (exitedTarget == enteredTarget) 141 if (exitedTarget == enteredTarget)
142 return; 142 return;
143 143
144 if (EventTarget* capturingTarget = getCapturingNode(pointerEvent->pointerId( ))) { 144 if (EventTarget* capturingTarget = getCapturingNode(pointerEvent->pointerId( ))) {
145 if (capturingTarget == exitedTarget) 145 if (capturingTarget == exitedTarget)
146 enteredTarget = nullptr; 146 enteredTarget = nullptr;
147 else if (capturingTarget == enteredTarget) 147 else if (capturingTarget == enteredTarget)
148 exitedTarget = nullptr; 148 exitedTarget = nullptr;
149 else 149 else
150 return; 150 return;
151 } 151 }
152 152
153 // Dispatch pointerout/mouseout events 153 // Dispatch pointerout/mouseout events
154 if (isInDocument(exitedTarget)) { 154 if (isInDocument(exitedTarget)) {
155 if (!sendMouseEvent) { 155 if (!sendMouseEvent) {
156 dispatchPointerEvent(exitedTarget, m_pointerEventFactory.createPoint erTransitionEvent( 156 dispatchPointerEvent(exitedTarget, m_pointerEventFactory.createPoint erTransitionEvent(
157 pointerEvent, EventTypeNames::pointerout, enteredTarget)); 157 pointerEvent, EventTypeNames::pointerout, enteredTarget));
158 } else { 158 } else {
159 dispatchMouseEvent(exitedTarget, 159 dispatchMouseEvent(exitedTarget,
160 EventTypeNames::mouseout, mouseEvent, enteredTarget); 160 EventTypeNames::mouseout, mouseEvent, enteredTarget);
161 } 161 }
162 } 162 }
163 163
164 // Create lists of all exited/entered ancestors, locate the common ancestor 164 // Create lists of all exited/entered ancestors, locate the common ancestor
165 WillBeHeapVector<RefPtrWillBeMember<Node>, 32> exitedAncestors; 165 HeapVector<Member<Node>, 32> exitedAncestors;
166 WillBeHeapVector<RefPtrWillBeMember<Node>, 32> enteredAncestors; 166 HeapVector<Member<Node>, 32> enteredAncestors;
167 if (isInDocument(exitedTarget)) { 167 if (isInDocument(exitedTarget)) {
168 RefPtrWillBeRawPtr<Node> exitedNode = exitedTarget->toNode(); 168 RawPtr<Node> exitedNode = exitedTarget->toNode();
169 exitedNode->updateDistribution(); 169 exitedNode->updateDistribution();
170 for (RefPtrWillBeRawPtr<Node> node = exitedNode; node; node = FlatTreeTr aversal::parent(*node)) 170 for (RawPtr<Node> node = exitedNode; node; node = FlatTreeTraversal::par ent(*node))
171 exitedAncestors.append(node); 171 exitedAncestors.append(node);
172 } 172 }
173 173
174 if (isInDocument(enteredTarget)) { 174 if (isInDocument(enteredTarget)) {
175 RefPtrWillBeRawPtr<Node> enteredNode = enteredTarget->toNode(); 175 RawPtr<Node> enteredNode = enteredTarget->toNode();
176 enteredNode->updateDistribution(); 176 enteredNode->updateDistribution();
177 for (RefPtrWillBeRawPtr<Node> node = enteredNode; node; node = FlatTreeT raversal::parent(*node)) 177 for (RawPtr<Node> node = enteredNode; node; node = FlatTreeTraversal::pa rent(*node))
178 enteredAncestors.append(node); 178 enteredAncestors.append(node);
179 } 179 }
180 180
181 // A note on mouseenter and mouseleave: These are non-bubbling events, and t hey are dispatched if there 181 // A note on mouseenter and mouseleave: These are non-bubbling events, and t hey are dispatched if there
182 // is a capturing event handler on an ancestor or a normal event handler on the element itself. This special 182 // is a capturing event handler on an ancestor or a normal event handler on the element itself. This special
183 // handling is necessary to avoid O(n^2) capturing event handler checks. 183 // handling is necessary to avoid O(n^2) capturing event handler checks.
184 // 184 //
185 // Note, however, that this optimization can possibly cause some unanswere d/missing/redundant mouseenter or 185 // Note, however, that this optimization can possibly cause some unanswere d/missing/redundant mouseenter or
186 // mouseleave events in certain contrived eventhandling scenarios, e.g., whe n: 186 // mouseleave events in certain contrived eventhandling scenarios, e.g., whe n:
187 // - the mouseleave handler for a node sets the only capturing-mouseleave-li stener in its ancestor, or 187 // - the mouseleave handler for a node sets the only capturing-mouseleave-li stener in its ancestor, or
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
261 !enteredNodeHasCapturingAncestor); 261 !enteredNodeHasCapturingAncestor);
262 } else { 262 } else {
263 dispatchMouseEvent(enteredAncestors[i-1].get(), 263 dispatchMouseEvent(enteredAncestors[i-1].get(),
264 EventTypeNames::mouseenter, mouseEvent, exitedTarget, 264 EventTypeNames::mouseenter, mouseEvent, exitedTarget,
265 0, !enteredNodeHasCapturingAncestor); 265 0, !enteredNodeHasCapturingAncestor);
266 } 266 }
267 } 267 }
268 } 268 }
269 269
270 void PointerEventManager::setNodeUnderPointer( 270 void PointerEventManager::setNodeUnderPointer(
271 PassRefPtrWillBeRawPtr<PointerEvent> prpPointerEvent, 271 RawPtr<PointerEvent> prpPointerEvent,
272 PassRefPtrWillBeRawPtr<EventTarget> prpTarget, 272 RawPtr<EventTarget> prpTarget,
273 bool sendEvent) 273 bool sendEvent)
274 { 274 {
275 RefPtrWillBeRawPtr<PointerEvent> pointerEvent = prpPointerEvent; 275 RawPtr<PointerEvent> pointerEvent = prpPointerEvent;
276 RefPtrWillBeRawPtr<EventTarget> target = prpTarget; 276 RawPtr<EventTarget> target = prpTarget;
277 if (m_nodeUnderPointer.contains(pointerEvent->pointerId())) { 277 if (m_nodeUnderPointer.contains(pointerEvent->pointerId())) {
278 EventTargetAttributes node = m_nodeUnderPointer.get( 278 EventTargetAttributes node = m_nodeUnderPointer.get(
279 pointerEvent->pointerId()); 279 pointerEvent->pointerId());
280 if (!target) { 280 if (!target) {
281 m_nodeUnderPointer.remove(pointerEvent->pointerId()); 281 m_nodeUnderPointer.remove(pointerEvent->pointerId());
282 } else if (target 282 } else if (target
283 != m_nodeUnderPointer.get(pointerEvent->pointerId()).target) { 283 != m_nodeUnderPointer.get(pointerEvent->pointerId()).target) {
284 m_nodeUnderPointer.set(pointerEvent->pointerId(), 284 m_nodeUnderPointer.set(pointerEvent->pointerId(),
285 EventTargetAttributes(target, false)); 285 EventTargetAttributes(target, false));
286 } 286 }
287 if (sendEvent) 287 if (sendEvent)
288 sendNodeTransitionEvents(node.target, target, pointerEvent); 288 sendNodeTransitionEvents(node.target, target, pointerEvent);
289 } else if (target) { 289 } else if (target) {
290 m_nodeUnderPointer.add(pointerEvent->pointerId(), 290 m_nodeUnderPointer.add(pointerEvent->pointerId(),
291 EventTargetAttributes(target, false)); 291 EventTargetAttributes(target, false));
292 if (sendEvent) 292 if (sendEvent)
293 sendNodeTransitionEvents(nullptr, target, pointerEvent); 293 sendNodeTransitionEvents(nullptr, target, pointerEvent);
294 } 294 }
295 } 295 }
296 296
297 void PointerEventManager::sendTouchCancelPointerEvent(PassRefPtrWillBeRawPtr<Eve ntTarget> prpTarget, const PlatformTouchPoint& point) 297 void PointerEventManager::sendTouchCancelPointerEvent(RawPtr<EventTarget> prpTar get, const PlatformTouchPoint& point)
298 { 298 {
299 RefPtrWillBeRawPtr<EventTarget> target = prpTarget; 299 RawPtr<EventTarget> target = prpTarget;
300 RefPtrWillBeRawPtr<PointerEvent> pointerEvent = m_pointerEventFactory.create PointerCancelEvent(point); 300 RawPtr<PointerEvent> pointerEvent = m_pointerEventFactory.createPointerCance lEvent(point);
301 301
302 302
303 processCaptureAndPositionOfPointerEvent(pointerEvent, target); 303 processCaptureAndPositionOfPointerEvent(pointerEvent, target);
304 304
305 // TODO(nzolghadr): crbug.com/579553 dealing with implicit touch capturing v s pointer event capturing 305 // TODO(nzolghadr): crbug.com/579553 dealing with implicit touch capturing v s pointer event capturing
306 dispatchPointerEvent( 306 dispatchPointerEvent(
307 getEffectiveTargetForPointerEvent(target, pointerEvent->pointerId()), 307 getEffectiveTargetForPointerEvent(target, pointerEvent->pointerId()),
308 pointerEvent.get()); 308 pointerEvent.get());
309 309
310 setNodeUnderPointer(pointerEvent, nullptr); 310 setNodeUnderPointer(pointerEvent, nullptr);
311 311
312 removePointer(pointerEvent); 312 removePointer(pointerEvent);
313 } 313 }
314 314
315 WebInputEventResult PointerEventManager::sendTouchPointerEvent( 315 WebInputEventResult PointerEventManager::sendTouchPointerEvent(
316 PassRefPtrWillBeRawPtr<EventTarget> prpTarget, 316 RawPtr<EventTarget> prpTarget,
317 const PlatformTouchPoint& touchPoint, PlatformEvent::Modifiers modifiers, 317 const PlatformTouchPoint& touchPoint, PlatformEvent::Modifiers modifiers,
318 const double width, const double height, 318 const double width, const double height,
319 const double clientX, const double clientY) 319 const double clientX, const double clientY)
320 { 320 {
321 RefPtrWillBeRawPtr<EventTarget> target = prpTarget; 321 RawPtr<EventTarget> target = prpTarget;
322 322
323 RefPtrWillBeRawPtr<PointerEvent> pointerEvent = 323 RawPtr<PointerEvent> pointerEvent =
324 m_pointerEventFactory.create( 324 m_pointerEventFactory.create(
325 pointerEventNameForTouchPointState(touchPoint.state()), 325 pointerEventNameForTouchPointState(touchPoint.state()),
326 touchPoint, modifiers, width, height, clientX, clientY); 326 touchPoint, modifiers, width, height, clientX, clientY);
327 327
328 processCaptureAndPositionOfPointerEvent(pointerEvent, target); 328 processCaptureAndPositionOfPointerEvent(pointerEvent, target);
329 329
330 // TODO(nzolghadr): crbug.com/579553 dealing with implicit touch capturing v s pointer event capturing 330 // TODO(nzolghadr): crbug.com/579553 dealing with implicit touch capturing v s pointer event capturing
331 WebInputEventResult result = dispatchPointerEvent( 331 WebInputEventResult result = dispatchPointerEvent(
332 getEffectiveTargetForPointerEvent(target, pointerEvent->pointerId()), 332 getEffectiveTargetForPointerEvent(target, pointerEvent->pointerId()),
333 pointerEvent.get()); 333 pointerEvent.get());
334 334
335 if (touchPoint.state() == PlatformTouchPoint::TouchReleased 335 if (touchPoint.state() == PlatformTouchPoint::TouchReleased
336 || touchPoint.state() == PlatformTouchPoint::TouchCancelled) { 336 || touchPoint.state() == PlatformTouchPoint::TouchCancelled) {
337 setNodeUnderPointer(pointerEvent, nullptr); 337 setNodeUnderPointer(pointerEvent, nullptr);
338 removePointer(pointerEvent); 338 removePointer(pointerEvent);
339 } 339 }
340 340
341 return result; 341 return result;
342 } 342 }
343 343
344 WebInputEventResult PointerEventManager::sendMousePointerEvent( 344 WebInputEventResult PointerEventManager::sendMousePointerEvent(
345 PassRefPtrWillBeRawPtr<Node> prpTarget, const AtomicString& mouseEventType, 345 RawPtr<Node> prpTarget, const AtomicString& mouseEventType,
346 int clickCount, const PlatformMouseEvent& mouseEvent, 346 int clickCount, const PlatformMouseEvent& mouseEvent,
347 PassRefPtrWillBeRawPtr<Node> relatedTarget, 347 RawPtr<Node> relatedTarget,
348 PassRefPtrWillBeRawPtr<AbstractView> view, 348 RawPtr<AbstractView> view,
349 PassRefPtrWillBeRawPtr<Node> lastNodeUnderMouse) 349 RawPtr<Node> lastNodeUnderMouse)
350 { 350 {
351 RefPtrWillBeRawPtr<Node> target = prpTarget; 351 RawPtr<Node> target = prpTarget;
352 352
353 RefPtrWillBeRawPtr<PointerEvent> pointerEvent = 353 RawPtr<PointerEvent> pointerEvent =
354 m_pointerEventFactory.create(mouseEventType, mouseEvent, 354 m_pointerEventFactory.create(mouseEventType, mouseEvent,
355 relatedTarget, view); 355 relatedTarget, view);
356 356
357 // This is for when the mouse is released outside of the page. 357 // This is for when the mouse is released outside of the page.
358 if (pointerEvent->type() == EventTypeNames::pointermove 358 if (pointerEvent->type() == EventTypeNames::pointermove
359 && !pointerEvent->buttons()) { 359 && !pointerEvent->buttons()) {
360 m_preventMouseEventForPointerTypeMouse = false; 360 m_preventMouseEventForPointerTypeMouse = false;
361 } 361 }
362 362
363 processCaptureAndPositionOfPointerEvent(pointerEvent, target, 363 processCaptureAndPositionOfPointerEvent(pointerEvent, target,
364 lastNodeUnderMouse, mouseEvent, true, true); 364 lastNodeUnderMouse, mouseEvent, true, true);
365 365
366 RefPtrWillBeRawPtr<EventTarget> effectiveTarget = 366 RawPtr<EventTarget> effectiveTarget =
367 getEffectiveTargetForPointerEvent(target, pointerEvent->pointerId()); 367 getEffectiveTargetForPointerEvent(target, pointerEvent->pointerId());
368 368
369 WebInputEventResult result = 369 WebInputEventResult result =
370 dispatchPointerEvent(effectiveTarget, pointerEvent); 370 dispatchPointerEvent(effectiveTarget, pointerEvent);
371 371
372 if (result != WebInputEventResult::NotHandled 372 if (result != WebInputEventResult::NotHandled
373 && pointerEvent->type() == EventTypeNames::pointerdown) 373 && pointerEvent->type() == EventTypeNames::pointerdown)
374 m_preventMouseEventForPointerTypeMouse = true; 374 m_preventMouseEventForPointerTypeMouse = true;
375 375
376 if (!m_preventMouseEventForPointerTypeMouse) { 376 if (!m_preventMouseEventForPointerTypeMouse) {
(...skipping 20 matching lines...) Expand all
397 } 397 }
398 398
399 void PointerEventManager::clear() 399 void PointerEventManager::clear()
400 { 400 {
401 m_preventMouseEventForPointerTypeMouse = false; 401 m_preventMouseEventForPointerTypeMouse = false;
402 m_pointerEventFactory.clear(); 402 m_pointerEventFactory.clear();
403 m_nodeUnderPointer.clear(); 403 m_nodeUnderPointer.clear();
404 } 404 }
405 405
406 void PointerEventManager::processCaptureAndPositionOfPointerEvent( 406 void PointerEventManager::processCaptureAndPositionOfPointerEvent(
407 const PassRefPtrWillBeRawPtr<PointerEvent> prpPointerEvent, 407 const RawPtr<PointerEvent> prpPointerEvent,
408 const PassRefPtrWillBeRawPtr<EventTarget> prpHitTestTarget, 408 const RawPtr<EventTarget> prpHitTestTarget,
409 const PassRefPtrWillBeRawPtr<EventTarget> lastNodeUnderMouse, 409 const RawPtr<EventTarget> lastNodeUnderMouse,
410 const PlatformMouseEvent& mouseEvent, 410 const PlatformMouseEvent& mouseEvent,
411 bool sendMouseEvent, bool setPointerPosition) 411 bool sendMouseEvent, bool setPointerPosition)
412 { 412 {
413 RefPtrWillBeRawPtr<PointerEvent> pointerEvent = prpPointerEvent; 413 RawPtr<PointerEvent> pointerEvent = prpPointerEvent;
414 RefPtrWillBeRawPtr<EventTarget> hitTestTarget = prpHitTestTarget; 414 RawPtr<EventTarget> hitTestTarget = prpHitTestTarget;
415 bool isCaptureChanged = false; 415 bool isCaptureChanged = false;
416 416
417 if (setPointerPosition) { 417 if (setPointerPosition) {
418 isCaptureChanged = processPendingPointerCapture(pointerEvent, 418 isCaptureChanged = processPendingPointerCapture(pointerEvent,
419 hitTestTarget, mouseEvent, sendMouseEvent); 419 hitTestTarget, mouseEvent, sendMouseEvent);
420 // If there was a change in capturing processPendingPointerCapture has 420 // If there was a change in capturing processPendingPointerCapture has
421 // already taken care of transition events. So we don't need to send the 421 // already taken care of transition events. So we don't need to send the
422 // transition events here. 422 // transition events here.
423 setNodeUnderPointer(pointerEvent, hitTestTarget, !isCaptureChanged); 423 setNodeUnderPointer(pointerEvent, hitTestTarget, !isCaptureChanged);
424 } 424 }
425 if (sendMouseEvent && !isCaptureChanged) { 425 if (sendMouseEvent && !isCaptureChanged) {
426 // lastNodeUnderMouse is needed here because it is still stored in Event Handler. 426 // lastNodeUnderMouse is needed here because it is still stored in Event Handler.
427 sendNodeTransitionEvents(lastNodeUnderMouse, hitTestTarget, 427 sendNodeTransitionEvents(lastNodeUnderMouse, hitTestTarget,
428 pointerEvent, mouseEvent, true); 428 pointerEvent, mouseEvent, true);
429 } 429 }
430 } 430 }
431 431
432 bool PointerEventManager::processPendingPointerCapture( 432 bool PointerEventManager::processPendingPointerCapture(
433 const PassRefPtrWillBeRawPtr<PointerEvent> prpPointerEvent, 433 const RawPtr<PointerEvent> prpPointerEvent,
434 const PassRefPtrWillBeRawPtr<EventTarget> prpHitTestTarget, 434 const RawPtr<EventTarget> prpHitTestTarget,
435 const PlatformMouseEvent& mouseEvent, bool sendMouseEvent) 435 const PlatformMouseEvent& mouseEvent, bool sendMouseEvent)
436 { 436 {
437 RefPtrWillBeRawPtr<PointerEvent> pointerEvent = prpPointerEvent; 437 RawPtr<PointerEvent> pointerEvent = prpPointerEvent;
438 RefPtrWillBeRawPtr<EventTarget> hitTestTarget = prpHitTestTarget; 438 RawPtr<EventTarget> hitTestTarget = prpHitTestTarget;
439 int pointerId = pointerEvent->pointerId(); 439 int pointerId = pointerEvent->pointerId();
440 const RefPtrWillBeRawPtr<EventTarget> pointerCaptureTarget = 440 const RawPtr<EventTarget> pointerCaptureTarget =
441 m_pointerCaptureTarget.contains(pointerId) 441 m_pointerCaptureTarget.contains(pointerId)
442 ? m_pointerCaptureTarget.get(pointerId) : nullptr; 442 ? m_pointerCaptureTarget.get(pointerId) : nullptr;
443 const RefPtrWillBeRawPtr<EventTarget> pendingPointerCaptureTarget = 443 const RawPtr<EventTarget> pendingPointerCaptureTarget =
444 m_pendingPointerCaptureTarget.contains(pointerId) 444 m_pendingPointerCaptureTarget.contains(pointerId)
445 ? m_pendingPointerCaptureTarget.get(pointerId) : nullptr; 445 ? m_pendingPointerCaptureTarget.get(pointerId) : nullptr;
446 const EventTargetAttributes &nodeUnderPointerAtt = 446 const EventTargetAttributes &nodeUnderPointerAtt =
447 m_nodeUnderPointer.contains(pointerId) 447 m_nodeUnderPointer.contains(pointerId)
448 ? m_nodeUnderPointer.get(pointerId) : EventTargetAttributes(); 448 ? m_nodeUnderPointer.get(pointerId) : EventTargetAttributes();
449 const bool isCaptureChanged = 449 const bool isCaptureChanged =
450 pointerCaptureTarget != pendingPointerCaptureTarget; 450 pointerCaptureTarget != pendingPointerCaptureTarget;
451 451
452 if (isCaptureChanged) { 452 if (isCaptureChanged) {
453 if ((hitTestTarget != nodeUnderPointerAtt.target 453 if ((hitTestTarget != nodeUnderPointerAtt.target
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
521 } 521 }
522 522
523 EventTarget* PointerEventManager::getCapturingNode(int pointerId) 523 EventTarget* PointerEventManager::getCapturingNode(int pointerId)
524 { 524 {
525 if (m_pointerCaptureTarget.contains(pointerId)) 525 if (m_pointerCaptureTarget.contains(pointerId))
526 return m_pointerCaptureTarget.get(pointerId); 526 return m_pointerCaptureTarget.get(pointerId);
527 return nullptr; 527 return nullptr;
528 } 528 }
529 529
530 void PointerEventManager::removePointer( 530 void PointerEventManager::removePointer(
531 const PassRefPtrWillBeRawPtr<PointerEvent> prpPointerEvent) 531 const RawPtr<PointerEvent> prpPointerEvent)
532 { 532 {
533 RefPtrWillBeRawPtr<PointerEvent> pointerEvent = prpPointerEvent; 533 RawPtr<PointerEvent> pointerEvent = prpPointerEvent;
534 if (m_pointerEventFactory.remove(pointerEvent)) { 534 if (m_pointerEventFactory.remove(pointerEvent)) {
535 int pointerId = pointerEvent->pointerId(); 535 int pointerId = pointerEvent->pointerId();
536 m_pendingPointerCaptureTarget.remove(pointerId); 536 m_pendingPointerCaptureTarget.remove(pointerId);
537 m_pointerCaptureTarget.remove(pointerId); 537 m_pointerCaptureTarget.remove(pointerId);
538 m_nodeUnderPointer.remove(pointerId); 538 m_nodeUnderPointer.remove(pointerId);
539 } 539 }
540 } 540 }
541 541
542 void PointerEventManager::elementRemoved(EventTarget* target) 542 void PointerEventManager::elementRemoved(EventTarget* target)
543 { 543 {
(...skipping 26 matching lines...) Expand all
570 { 570 {
571 #if ENABLE(OILPAN) 571 #if ENABLE(OILPAN)
572 visitor->trace(m_nodeUnderPointer); 572 visitor->trace(m_nodeUnderPointer);
573 visitor->trace(m_pointerCaptureTarget); 573 visitor->trace(m_pointerCaptureTarget);
574 visitor->trace(m_pendingPointerCaptureTarget); 574 visitor->trace(m_pendingPointerCaptureTarget);
575 #endif 575 #endif
576 } 576 }
577 577
578 578
579 } // namespace blink 579 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698