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

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

Issue 1774913004: Firing got/lost pointer capture events (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 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 // 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 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
62 62
63 WebInputEventResult PointerEventManager::dispatchPointerEvent( 63 WebInputEventResult PointerEventManager::dispatchPointerEvent(
64 PassRefPtrWillBeRawPtr<EventTarget> prpTarget, 64 PassRefPtrWillBeRawPtr<EventTarget> prpTarget,
65 PassRefPtrWillBeRawPtr<PointerEvent> prpPointerEvent, 65 PassRefPtrWillBeRawPtr<PointerEvent> prpPointerEvent,
66 bool checkForListener) 66 bool checkForListener)
67 { 67 {
68 RefPtrWillBeRawPtr<EventTarget> target = prpTarget; 68 RefPtrWillBeRawPtr<EventTarget> target = prpTarget;
69 RefPtrWillBeRawPtr<PointerEvent> pointerEvent = prpPointerEvent; 69 RefPtrWillBeRawPtr<PointerEvent> pointerEvent = prpPointerEvent;
70 70
71 // Set whether node under pointer has received pointerover or not. 71 // Set whether node under pointer has received pointerover or not.
72 int pointerId = pointerEvent->pointerId(); 72 const int pointerId = pointerEvent->pointerId();
73 if ((pointerEvent->type() == EventTypeNames::pointerout 73 const AtomicString& pointerType = pointerEvent->type();
74 || pointerEvent->type() == EventTypeNames::pointerover) 74 if ((pointerType == EventTypeNames::pointerout
75 || pointerType == EventTypeNames::pointerover)
75 && m_nodeUnderPointer.contains(pointerId)) { 76 && m_nodeUnderPointer.contains(pointerId)) {
76 RefPtrWillBeRawPtr<EventTarget> targetUnderPointer = 77 RefPtrWillBeRawPtr<EventTarget> targetUnderPointer =
77 m_nodeUnderPointer.get(pointerId).target; 78 m_nodeUnderPointer.get(pointerId).target;
78 if (targetUnderPointer == target) { 79 if (targetUnderPointer == target) {
79 m_nodeUnderPointer.set(pointerId, EventTargetAttributes 80 m_nodeUnderPointer.set(pointerId, EventTargetAttributes
80 (targetUnderPointer, 81 (targetUnderPointer,
81 pointerEvent->type() == EventTypeNames::pointerover)); 82 pointerType == EventTypeNames::pointerover));
82 } 83 }
83 } 84 }
85
86 // TODO(crbug.com/587955): The following if is a hack to work around this bu g
mustaq 2016/03/10 19:28:19 nit: remove "if"
Navid Zolghadr 2016/03/10 20:27:35 Sure.
87 if (pointerType == EventTypeNames::pointerover && pointerId == 1) {
88 m_nodeUnderPointer.set(pointerId, EventTargetAttributes
89 (target, true));
90 }
mustaq 2016/03/10 19:28:19 This deserves a comment: why not resetting the bit
Navid Zolghadr 2016/03/10 20:27:35 Since it was a hack anyways and should be removed
mustaq 2016/03/10 21:06:57 This is significant enough to call for a test. I u
91
84 if (!RuntimeEnabledFeatures::pointerEventEnabled()) 92 if (!RuntimeEnabledFeatures::pointerEventEnabled())
85 return WebInputEventResult::NotHandled; 93 return WebInputEventResult::NotHandled;
86 if (!checkForListener || target->hasEventListeners(pointerEvent->type())) { 94 if (!checkForListener || target->hasEventListeners(pointerType)) {
87 DispatchEventResult dispatchResult = target->dispatchEvent(pointerEvent) ; 95 DispatchEventResult dispatchResult = target->dispatchEvent(pointerEvent) ;
88 return EventHandler::toWebInputEventResult(dispatchResult); 96 return EventHandler::toWebInputEventResult(dispatchResult);
89 } 97 }
90 return WebInputEventResult::NotHandled; 98 return WebInputEventResult::NotHandled;
91 } 99 }
92 100
93 PassRefPtrWillBeRawPtr<EventTarget> PointerEventManager::getEffectiveTargetForPo interEvent( 101 PassRefPtrWillBeRawPtr<EventTarget> PointerEventManager::getEffectiveTargetForPo interEvent(
94 PassRefPtrWillBeRawPtr<EventTarget> target, int pointerId) 102 PassRefPtrWillBeRawPtr<EventTarget> target, int pointerId)
95 { 103 {
96 if (EventTarget* capturingTarget = getCapturingNode(pointerId)) 104 if (EventTarget* capturingTarget = getCapturingNode(pointerId))
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
133 if (capturingTarget == exitedTarget) 141 if (capturingTarget == exitedTarget)
134 enteredTarget = nullptr; 142 enteredTarget = nullptr;
135 else if (capturingTarget == enteredTarget) 143 else if (capturingTarget == enteredTarget)
136 exitedTarget = nullptr; 144 exitedTarget = nullptr;
137 else 145 else
138 return; 146 return;
139 } 147 }
140 148
141 // Dispatch pointerout/mouseout events 149 // Dispatch pointerout/mouseout events
142 if (isInDocument(exitedTarget)) { 150 if (isInDocument(exitedTarget)) {
143 dispatchPointerEvent(exitedTarget, m_pointerEventFactory.create( 151 dispatchPointerEvent(exitedTarget, m_pointerEventFactory.createPointerTr ansition(
144 pointerEvent, EventTypeNames::pointerout, enteredTarget)); 152 pointerEvent, EventTypeNames::pointerout, enteredTarget));
145 if (sendMouseEvent) { 153 if (sendMouseEvent) {
146 dispatchMouseEvent(exitedTarget, 154 dispatchMouseEvent(exitedTarget,
147 EventTypeNames::mouseout, mouseEvent, enteredTarget); 155 EventTypeNames::mouseout, mouseEvent, enteredTarget);
148 } 156 }
149 } 157 }
150 158
151 // Create lists of all exited/entered ancestors, locate the common ancestor 159 // Create lists of all exited/entered ancestors, locate the common ancestor
152 WillBeHeapVector<RefPtrWillBeMember<Node>, 32> exitedAncestors; 160 WillBeHeapVector<RefPtrWillBeMember<Node>, 32> exitedAncestors;
153 WillBeHeapVector<RefPtrWillBeMember<Node>, 32> enteredAncestors; 161 WillBeHeapVector<RefPtrWillBeMember<Node>, 32> enteredAncestors;
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
200 for (size_t j = 0; j < exitedAncestors.size(); j++) { 208 for (size_t j = 0; j < exitedAncestors.size(); j++) {
201 if (exitedAncestors[j]->hasCapturingEventListeners(EventTypeNames::mouse leave) 209 if (exitedAncestors[j]->hasCapturingEventListeners(EventTypeNames::mouse leave)
202 || (RuntimeEnabledFeatures::pointerEventEnabled() 210 || (RuntimeEnabledFeatures::pointerEventEnabled()
203 && exitedAncestors[j]->hasCapturingEventListeners(EventTypeNames::po interleave))) 211 && exitedAncestors[j]->hasCapturingEventListeners(EventTypeNames::po interleave)))
204 exitedNodeHasCapturingAncestor = true; 212 exitedNodeHasCapturingAncestor = true;
205 } 213 }
206 214
207 // Dispatch pointerleave/mouseleave events, in child-to-parent order. 215 // Dispatch pointerleave/mouseleave events, in child-to-parent order.
208 for (size_t j = 0; j < exitedAncestorIndex; j++) { 216 for (size_t j = 0; j < exitedAncestorIndex; j++) {
209 dispatchPointerEvent(exitedAncestors[j].get(), 217 dispatchPointerEvent(exitedAncestors[j].get(),
210 m_pointerEventFactory.create( 218 m_pointerEventFactory.createPointerTransition(
211 pointerEvent, EventTypeNames::pointerleave, enteredTarget), 219 pointerEvent, EventTypeNames::pointerleave, enteredTarget),
212 !exitedNodeHasCapturingAncestor); 220 !exitedNodeHasCapturingAncestor);
213 if (sendMouseEvent) { 221 if (sendMouseEvent) {
214 dispatchMouseEvent(exitedAncestors[j].get(), 222 dispatchMouseEvent(exitedAncestors[j].get(),
215 EventTypeNames::mouseleave, mouseEvent, enteredTarget, 223 EventTypeNames::mouseleave, mouseEvent, enteredTarget,
216 0, !exitedNodeHasCapturingAncestor); 224 0, !exitedNodeHasCapturingAncestor);
217 } 225 }
218 } 226 }
219 227
220 // Dispatch pointerover/mouseover. 228 // Dispatch pointerover/mouseover.
221 if (isInDocument(enteredTarget)) { 229 if (isInDocument(enteredTarget)) {
222 dispatchPointerEvent(enteredTarget, m_pointerEventFactory.create( 230 dispatchPointerEvent(enteredTarget, m_pointerEventFactory.createPointerT ransition(
223 pointerEvent, EventTypeNames::pointerover, exitedTarget)); 231 pointerEvent, EventTypeNames::pointerover, exitedTarget));
224 if (sendMouseEvent) { 232 if (sendMouseEvent) {
225 dispatchMouseEvent(enteredTarget, 233 dispatchMouseEvent(enteredTarget,
226 EventTypeNames::mouseover, mouseEvent, exitedTarget); 234 EventTypeNames::mouseover, mouseEvent, exitedTarget);
227 } 235 }
228 } 236 }
229 237
230 // Defer locating capturing pointeenter/mouseenter listener until /after/ di spatching the leave events because 238 // Defer locating capturing pointeenter/mouseenter listener until /after/ di spatching the leave events because
231 // the leave handlers might set a capturing enter handler. 239 // the leave handlers might set a capturing enter handler.
232 bool enteredNodeHasCapturingAncestor = false; 240 bool enteredNodeHasCapturingAncestor = false;
233 for (size_t i = 0; i < enteredAncestors.size(); i++) { 241 for (size_t i = 0; i < enteredAncestors.size(); i++) {
234 if (enteredAncestors[i]->hasCapturingEventListeners(EventTypeNames::mous eenter) 242 if (enteredAncestors[i]->hasCapturingEventListeners(EventTypeNames::mous eenter)
235 || (RuntimeEnabledFeatures::pointerEventEnabled() 243 || (RuntimeEnabledFeatures::pointerEventEnabled()
236 && enteredAncestors[i]->hasCapturingEventListeners(EventTypeNames::p ointerenter))) 244 && enteredAncestors[i]->hasCapturingEventListeners(EventTypeNames::p ointerenter)))
237 enteredNodeHasCapturingAncestor = true; 245 enteredNodeHasCapturingAncestor = true;
238 } 246 }
239 247
240 // Dispatch pointerenter/mouseenter events, in parent-to-child order. 248 // Dispatch pointerenter/mouseenter events, in parent-to-child order.
241 for (size_t i = enteredAncestorIndex; i > 0; i--) { 249 for (size_t i = enteredAncestorIndex; i > 0; i--) {
242 dispatchPointerEvent(enteredAncestors[i-1].get(), 250 dispatchPointerEvent(enteredAncestors[i-1].get(),
243 m_pointerEventFactory.create( 251 m_pointerEventFactory.createPointerTransition(
244 pointerEvent, EventTypeNames::pointerenter, exitedTarget), 252 pointerEvent, EventTypeNames::pointerenter, exitedTarget),
245 !enteredNodeHasCapturingAncestor); 253 !enteredNodeHasCapturingAncestor);
246 if (sendMouseEvent) { 254 if (sendMouseEvent) {
247 dispatchMouseEvent(enteredAncestors[i-1].get(), 255 dispatchMouseEvent(enteredAncestors[i-1].get(),
248 EventTypeNames::mouseenter, mouseEvent, exitedTarget, 256 EventTypeNames::mouseenter, mouseEvent, exitedTarget,
249 0, !enteredNodeHasCapturingAncestor); 257 0, !enteredNodeHasCapturingAncestor);
250 } 258 }
251 } 259 }
252 } 260 }
253 261
254 void PointerEventManager::setNodeUnderPointer( 262 void PointerEventManager::setNodeUnderPointer(
255 PassRefPtrWillBeRawPtr<PointerEvent> prpPointerEvent, 263 PassRefPtrWillBeRawPtr<PointerEvent> prpPointerEvent,
256 PassRefPtrWillBeRawPtr<EventTarget> prpTarget) 264 PassRefPtrWillBeRawPtr<EventTarget> prpTarget)
257 { 265 {
258 RefPtrWillBeRawPtr<PointerEvent> pointerEvent = prpPointerEvent; 266 RefPtrWillBeRawPtr<PointerEvent> pointerEvent = prpPointerEvent;
259 RefPtrWillBeRawPtr<EventTarget> target = prpTarget; 267 RefPtrWillBeRawPtr<EventTarget> target = prpTarget;
260 if (m_nodeUnderPointer.contains(pointerEvent->pointerId())) { 268 if (m_nodeUnderPointer.contains(pointerEvent->pointerId())) {
261 EventTargetAttributes node = m_nodeUnderPointer.get( 269 EventTargetAttributes node = m_nodeUnderPointer.get(
262 pointerEvent->pointerId()); 270 pointerEvent->pointerId());
263 if (!target) { 271 if (!target) {
264 m_nodeUnderPointer.remove(pointerEvent->pointerId()); 272 m_nodeUnderPointer.remove(pointerEvent->pointerId());
265 } else { 273 } else if (target
274 != m_nodeUnderPointer.get(pointerEvent->pointerId()).target) {
266 m_nodeUnderPointer.set(pointerEvent->pointerId(), 275 m_nodeUnderPointer.set(pointerEvent->pointerId(),
267 EventTargetAttributes(target, false)); 276 EventTargetAttributes(target, false));
268 } 277 }
269 sendNodeTransitionEvents(node.target, target, pointerEvent); 278 sendNodeTransitionEvents(node.target, target, pointerEvent);
270 } else if (target) { 279 } else if (target) {
271 m_nodeUnderPointer.add(pointerEvent->pointerId(), 280 m_nodeUnderPointer.add(pointerEvent->pointerId(),
272 EventTargetAttributes(target, false)); 281 EventTargetAttributes(target, false));
273 sendNodeTransitionEvents(nullptr, target, pointerEvent); 282 sendNodeTransitionEvents(nullptr, target, pointerEvent);
274 } 283 }
275 } 284 }
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
330 { 339 {
331 RefPtrWillBeRawPtr<Node> target = prpTarget; 340 RefPtrWillBeRawPtr<Node> target = prpTarget;
332 RefPtrWillBeRawPtr<PointerEvent> pointerEvent = 341 RefPtrWillBeRawPtr<PointerEvent> pointerEvent =
333 m_pointerEventFactory.create(mouseEventType, mouseEvent, 342 m_pointerEventFactory.create(mouseEventType, mouseEvent,
334 relatedTarget, view); 343 relatedTarget, view);
335 344
336 processPendingPointerCapture(pointerEvent, target, mouseEvent, true); 345 processPendingPointerCapture(pointerEvent, target, mouseEvent, true);
337 346
338 // TODO(crbug.com/587955): We should call setNodeUnderPointer here but it ca uses sending 347 // TODO(crbug.com/587955): We should call setNodeUnderPointer here but it ca uses sending
339 // transition events that should be first removed from EventHandler. 348 // transition events that should be first removed from EventHandler.
349 // setNodeUnderPointer(pointerEvent, target);
340 350
341 RefPtrWillBeRawPtr<EventTarget> effectiveTarget = 351 RefPtrWillBeRawPtr<EventTarget> effectiveTarget =
342 getEffectiveTargetForPointerEvent(target, pointerEvent->pointerId()); 352 getEffectiveTargetForPointerEvent(target, pointerEvent->pointerId());
343 353
344 WebInputEventResult result = 354 WebInputEventResult result =
345 dispatchPointerEvent(effectiveTarget, pointerEvent); 355 dispatchPointerEvent(effectiveTarget, pointerEvent);
346 356
347 if (result != WebInputEventResult::NotHandled 357 if (result != WebInputEventResult::NotHandled
348 && pointerEvent->type() == EventTypeNames::pointerdown) 358 && pointerEvent->type() == EventTypeNames::pointerdown)
349 m_preventMouseEventForPointerTypeMouse = true; 359 m_preventMouseEventForPointerTypeMouse = true;
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
383 if (MouseEvent::platformModifiersToButtons(modifiers) == 393 if (MouseEvent::platformModifiersToButtons(modifiers) ==
384 static_cast<unsigned short>(MouseEvent::Buttons::None)) 394 static_cast<unsigned short>(MouseEvent::Buttons::None))
385 m_preventMouseEventForPointerTypeMouse = false; 395 m_preventMouseEventForPointerTypeMouse = false;
386 } 396 }
387 397
388 void PointerEventManager::processPendingPointerCapture( 398 void PointerEventManager::processPendingPointerCapture(
389 const PassRefPtrWillBeRawPtr<PointerEvent> prpPointerEvent, 399 const PassRefPtrWillBeRawPtr<PointerEvent> prpPointerEvent,
390 const PassRefPtrWillBeRawPtr<EventTarget> prpHitTestTarget, 400 const PassRefPtrWillBeRawPtr<EventTarget> prpHitTestTarget,
391 const PlatformMouseEvent& mouseEvent, bool sendMouseEvent) 401 const PlatformMouseEvent& mouseEvent, bool sendMouseEvent)
392 { 402 {
393 // TODO(nzolghadr): Process sending got/lostpointercapture
394 RefPtrWillBeRawPtr<PointerEvent> pointerEvent = prpPointerEvent; 403 RefPtrWillBeRawPtr<PointerEvent> pointerEvent = prpPointerEvent;
395 RefPtrWillBeRawPtr<EventTarget> hitTestTarget = prpHitTestTarget; 404 RefPtrWillBeRawPtr<EventTarget> hitTestTarget = prpHitTestTarget;
396 int pointerId = pointerEvent->pointerId(); 405 int pointerId = pointerEvent->pointerId();
397 bool hasPointerCaptureTarget = m_pointerCaptureTarget.contains(pointerId);
398 bool hasPendingPointerCaptureTarget = m_pendingPointerCaptureTarget.contains (pointerId);
399 const RefPtrWillBeRawPtr<EventTarget> pointerCaptureTarget = 406 const RefPtrWillBeRawPtr<EventTarget> pointerCaptureTarget =
400 hasPointerCaptureTarget ? m_pointerCaptureTarget.get(pointerId) : nullpt r; 407 m_pointerCaptureTarget.contains(pointerId)
408 ? m_pointerCaptureTarget.get(pointerId) : nullptr;
401 const RefPtrWillBeRawPtr<EventTarget> pendingPointerCaptureTarget = 409 const RefPtrWillBeRawPtr<EventTarget> pendingPointerCaptureTarget =
402 hasPendingPointerCaptureTarget ? m_pendingPointerCaptureTarget.get(point erId) : nullptr; 410 m_pendingPointerCaptureTarget.contains(pointerId)
411 ? m_pendingPointerCaptureTarget.get(pointerId) : nullptr;
412 const EventTargetAttributes &nodeUnderPointerAtt =
413 m_nodeUnderPointer.contains(pointerId)
414 ? m_nodeUnderPointer.get(pointerId) : EventTargetAttributes();
403 415
404 if (hasPendingPointerCaptureTarget 416 if (pointerCaptureTarget != pendingPointerCaptureTarget) {
405 && (pointerCaptureTarget != pendingPointerCaptureTarget)) { 417 if (pendingPointerCaptureTarget != nodeUnderPointerAtt.target
406 if (!hasPointerCaptureTarget 418 && nodeUnderPointerAtt.hasRecievedOverEvent) {
407 && pendingPointerCaptureTarget != hitTestTarget 419 sendNodeTransitionEvents(nodeUnderPointerAtt.target, nullptr,
408 && m_nodeUnderPointer.contains(pointerId) 420 pointerEvent, mouseEvent, sendMouseEvent);
409 && m_nodeUnderPointer.get(pointerId).hasRecievedOverEvent) { 421 }
410 sendNodeTransitionEvents(hitTestTarget, nullptr, pointerEvent, 422 if (pointerCaptureTarget) {
411 mouseEvent, sendMouseEvent); 423 // Re-target lostpointercapture to the document when the element is
424 // no longer participating in the tree.
425 EventTarget* target = pointerCaptureTarget.get();
426 if (target->toNode()
427 && !target->toNode()->inDocument()) {
428 target = target->toNode()->ownerDocument();
429 }
430 if (target) {
431 dispatchPointerEvent(target,
432 m_pointerEventFactory.createPointerCapture(
433 pointerEvent, EventTypeNames::lostpointercapture));
434 }
412 } 435 }
413 } 436 }
414 437
415 // Set pointerCaptureTarget from pendingPointerCaptureTarget. This does 438 // Set pointerCaptureTarget from pendingPointerCaptureTarget. This does
416 // affect the behavior of sendNodeTransitionEvents function. So the 439 // affect the behavior of sendNodeTransitionEvents function. So the
417 // ordering of the surrounding blocks of code is important. 440 // ordering of the surrounding blocks of code for sending transition events
418 if (!hasPendingPointerCaptureTarget) 441 // are important.
442 if (pendingPointerCaptureTarget)
443 m_pointerCaptureTarget.set(pointerId, pendingPointerCaptureTarget);
444 else
419 m_pointerCaptureTarget.remove(pointerId); 445 m_pointerCaptureTarget.remove(pointerId);
420 else
421 m_pointerCaptureTarget.set(pointerId, m_pendingPointerCaptureTarget.get( pointerId));
422 446
423 if (hasPointerCaptureTarget && (pointerCaptureTarget != pendingPointerCaptur eTarget)) { 447 if (pointerCaptureTarget != pendingPointerCaptureTarget) {
424 if (!hasPendingPointerCaptureTarget && pointerCaptureTarget != hitTestTa rget) { 448 if (pendingPointerCaptureTarget) {
449 dispatchPointerEvent(pendingPointerCaptureTarget,
450 m_pointerEventFactory.createPointerCapture(
451 pointerEvent, EventTypeNames::gotpointercapture));
452 }
453 if ((pendingPointerCaptureTarget == hitTestTarget
454 || !pendingPointerCaptureTarget)
455 && (nodeUnderPointerAtt.target != hitTestTarget
456 || !nodeUnderPointerAtt.hasRecievedOverEvent)) {
425 sendNodeTransitionEvents(nullptr, hitTestTarget, pointerEvent, 457 sendNodeTransitionEvents(nullptr, hitTestTarget, pointerEvent,
426 mouseEvent, sendMouseEvent); 458 mouseEvent, sendMouseEvent);
427 } 459 }
428 } 460 }
429
430 } 461 }
431 462
432 void PointerEventManager::removeTargetFromPointerCapturingMapping( 463 void PointerEventManager::removeTargetFromPointerCapturingMapping(
433 PointerCapturingMap& map, const EventTarget* target) 464 PointerCapturingMap& map, const EventTarget* target)
434 { 465 {
435 // We could have kept a reverse mapping to make this deletion possibly 466 // We could have kept a reverse mapping to make this deletion possibly
436 // faster but it adds some code complication which might not be worth of 467 // faster but it adds some code complication which might not be worth of
437 // the performance improvement considering there might not be a lot of 468 // the performance improvement considering there might not be a lot of
438 // active pointer or pointer captures at the same time. 469 // active pointer or pointer captures at the same time.
439 PointerCapturingMap tmp = map; 470 PointerCapturingMap tmp = map;
(...skipping 17 matching lines...) Expand all
457 if (m_pointerEventFactory.remove(pointerEvent)) { 488 if (m_pointerEventFactory.remove(pointerEvent)) {
458 int pointerId = pointerEvent->pointerId(); 489 int pointerId = pointerEvent->pointerId();
459 m_pendingPointerCaptureTarget.remove(pointerId); 490 m_pendingPointerCaptureTarget.remove(pointerId);
460 m_pointerCaptureTarget.remove(pointerId); 491 m_pointerCaptureTarget.remove(pointerId);
461 m_nodeUnderPointer.remove(pointerId); 492 m_nodeUnderPointer.remove(pointerId);
462 } 493 }
463 } 494 }
464 495
465 void PointerEventManager::elementRemoved(EventTarget* target) 496 void PointerEventManager::elementRemoved(EventTarget* target)
466 { 497 {
467 removeTargetFromPointerCapturingMapping(m_pointerCaptureTarget, target);
468 removeTargetFromPointerCapturingMapping(m_pendingPointerCaptureTarget, targe t); 498 removeTargetFromPointerCapturingMapping(m_pendingPointerCaptureTarget, targe t);
469 // TODO(nzolghadr): Process sending lostpointercapture to the document
470 } 499 }
471 500
472 void PointerEventManager::setPointerCapture(int pointerId, EventTarget* target) 501 void PointerEventManager::setPointerCapture(int pointerId, EventTarget* target)
473 { 502 {
474 if (m_pointerEventFactory.isActiveButtonsState(pointerId)) 503 if (m_pointerEventFactory.isActiveButtonsState(pointerId))
475 m_pendingPointerCaptureTarget.set(pointerId, target); 504 m_pendingPointerCaptureTarget.set(pointerId, target);
476 } 505 }
477 506
478 void PointerEventManager::releasePointerCapture(int pointerId, EventTarget* targ et) 507 void PointerEventManager::releasePointerCapture(int pointerId, EventTarget* targ et)
479 { 508 {
(...skipping 15 matching lines...) Expand all
495 { 524 {
496 #if ENABLE(OILPAN) 525 #if ENABLE(OILPAN)
497 visitor->trace(m_nodeUnderPointer); 526 visitor->trace(m_nodeUnderPointer);
498 visitor->trace(m_pointerCaptureTarget); 527 visitor->trace(m_pointerCaptureTarget);
499 visitor->trace(m_pendingPointerCaptureTarget); 528 visitor->trace(m_pendingPointerCaptureTarget);
500 #endif 529 #endif
501 } 530 }
502 531
503 532
504 } // namespace blink 533 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698