Changeset 280917 in webkit
- Timestamp:
- Aug 11, 2021, 10:22:04 AM (5 years ago)
- Location:
- branches/safari-611.3.10.0-branch/Source/WebCore/page
- Files:
-
- 2 edited
-
PointerCaptureController.cpp (modified) (30 diffs)
-
PointerCaptureController.h (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
branches/safari-611.3.10.0-branch/Source/WebCore/page/PointerCaptureController.cpp
r275575 r280917 50 50 Element* PointerCaptureController::pointerCaptureElement(Document* document, PointerID pointerId) const 51 51 { 52 auto iterator = m_activePointerIdsToCapturingData.find(pointerId); 53 if (iterator != m_activePointerIdsToCapturingData.end()) { 54 auto pointerCaptureElement = iterator->value.targetOverride; 52 if (auto capturingData = m_activePointerIdsToCapturingData.get(pointerId)) { 53 auto pointerCaptureElement = capturingData->targetOverride; 55 54 if (pointerCaptureElement && &pointerCaptureElement->document() == document) 56 55 return pointerCaptureElement.get(); … … 64 63 65 64 // 1. If the pointerId provided as the method's argument does not match any of the active pointers, then throw a DOMException with the name NotFoundError. 66 auto iterator = m_activePointerIdsToCapturingData.find(pointerId);67 if ( iterator == m_activePointerIdsToCapturingData.end())65 RefPtr capturingData = m_activePointerIdsToCapturingData.get(pointerId); 66 if (!capturingData) 68 67 return Exception { NotFoundError }; 69 68 … … 82 81 // 4. If the pointer is not in the active buttons state, then terminate these steps. 83 82 // 5. For the specified pointerId, set the pending pointer capture target override to the Element on which this method was invoked. 84 auto& capturingData = iterator->value; 85 if (capturingData.pointerIsPressed) 86 capturingData.pendingTargetOverride = capturingTarget; 83 if (capturingData->pointerIsPressed) 84 capturingData->pendingTargetOverride = capturingTarget; 87 85 88 86 updateHaveAnyCapturingElement(); … … 99 97 // 1. If the pointerId provided as the method's argument does not match any of the active pointers and these steps are not 100 98 // being invoked as a result of the implicit release of pointer capture, then throw a DOMException with the name NotFoundError. 101 auto iterator = m_activePointerIdsToCapturingData.find(pointerId);102 if ( iterator == m_activePointerIdsToCapturingData.end())99 RefPtr capturingData = m_activePointerIdsToCapturingData.get(pointerId); 100 if (!capturingData) 103 101 return Exception { NotFoundError }; 104 102 … … 108 106 109 107 // 3. For the specified pointerId, clear the pending pointer capture target override, if set. 110 iterator->value.pendingTargetOverride = nullptr;108 capturingData->pendingTargetOverride = nullptr; 111 109 112 110 // FIXME: This leaves value.targetOverride set: webkit.org/b/221342. … … 127 125 return false; 128 126 129 auto iterator = m_activePointerIdsToCapturingData.find(pointerId);130 return iterator != m_activePointerIdsToCapturingData.end() && iterator->value.pendingTargetOverride == capturingTarget;127 auto capturingData = m_activePointerIdsToCapturingData.get(pointerId); 128 return capturingData && capturingData->pendingTargetOverride == capturingTarget; 131 129 } 132 130 … … 138 136 // method has been called if any element is set to be captured or pending to be captured. 139 137 for (auto& capturingData : m_activePointerIdsToCapturingData.values()) { 140 capturingData .pendingTargetOverride = nullptr;141 capturingData .targetOverride = nullptr;138 capturingData->pendingTargetOverride = nullptr; 139 capturingData->targetOverride = nullptr; 142 140 } 143 141 … … 150 148 return; 151 149 152 for (auto& keyAndValue : m_activePointerIdsToCapturingData) { 153 auto& capturingData = keyAndValue.value; 154 if (capturingData.pendingTargetOverride == &element || capturingData.targetOverride == &element) { 150 for (auto [pointerId, capturingData] : m_activePointerIdsToCapturingData) { 151 if (capturingData->pendingTargetOverride == &element || capturingData->targetOverride == &element) { 155 152 // https://w3c.github.io/pointerevents/#implicit-release-of-pointer-capture 156 153 // When the pointer capture target override is no longer connected, the pending pointer capture target override and pointer capture target 157 154 // override nodes SHOULD be cleared and also a PointerEvent named lostpointercapture corresponding to the captured pointer SHOULD be fired 158 155 // at the document. 159 ASSERT(isInBounds<PointerID>(keyAndValue.key)); 160 auto pointerId = static_cast<PointerID>(keyAndValue.key); 161 auto pointerType = capturingData.pointerType; 156 ASSERT(isInBounds<PointerID>(pointerId)); 157 auto pointerType = capturingData->pointerType; 162 158 releasePointerCapture(&element, pointerId); 163 159 // FIXME: Spec doesn't specify which task source to use. … … 173 169 m_haveAnyCapturingElement = false; 174 170 175 CapturingData capturingData; 176 capturingData.pointerType = PointerEvent::mousePointerType(); 177 m_activePointerIdsToCapturingData.add(mousePointerID, capturingData); 171 m_activePointerIdsToCapturingData.add(mousePointerID, CapturingData::create(PointerEvent::mousePointerType())); 178 172 } 179 173 … … 181 175 { 182 176 m_haveAnyCapturingElement = WTF::anyOf(m_activePointerIdsToCapturingData.values(), [&](auto& capturingData) { 183 return capturingData .hasAnyElement();177 return capturingData->hasAnyElement(); 184 178 }); 185 179 } … … 193 187 bool PointerCaptureController::hasCancelledPointerEventForIdentifier(PointerID pointerId) const 194 188 { 195 auto iterator = m_activePointerIdsToCapturingData.find(pointerId);196 return iterator != m_activePointerIdsToCapturingData.end() && iterator->value.cancelled;189 RefPtr capturingData = m_activePointerIdsToCapturingData.get(pointerId); 190 return capturingData && capturingData->cancelled; 197 191 } 198 192 199 193 bool PointerCaptureController::preventsCompatibilityMouseEventsForIdentifier(PointerID pointerId) const 200 194 { 201 auto iterator = m_activePointerIdsToCapturingData.find(pointerId);202 return iterator != m_activePointerIdsToCapturingData.end() && iterator->value.preventsCompatibilityMouseEvents;195 RefPtr capturingData = m_activePointerIdsToCapturingData.get(pointerId); 196 return capturingData && capturingData->preventsCompatibilityMouseEvents; 203 197 } 204 198 … … 206 200 static bool hierarchyHasCapturingEventListeners(Element* target, const AtomString& eventName) 207 201 { 208 for ( ContainerNode* curr = target; curr; curr = curr->parentInComposedTree()) {209 if (curr ->hasCapturingEventListeners(eventName))202 for (RefPtr<ContainerNode> currentNode = target; currentNode; currentNode = currentNode->parentInComposedTree()) { 203 if (currentNode->hasCapturingEventListeners(eventName)) 210 204 return true; 211 205 } … … 215 209 void PointerCaptureController::dispatchEventForTouchAtIndex(EventTarget& target, const PlatformTouchEvent& platformTouchEvent, unsigned index, bool isPrimary, WindowProxy& view) 216 210 { 217 ASSERT(is<Element>(target));211 RELEASE_ASSERT(is<Element>(target)); 218 212 219 213 auto dispatchOverOrOutEvent = [&](const String& type, EventTarget* target) { … … 221 215 }; 222 216 223 auto dispatchEnterOrLeaveEvent = [&](const String& type) { 224 auto* targetElement = &downcast<Element>(target); 225 217 auto dispatchEnterOrLeaveEvent = [&](const String& type, Element& targetElement) { 226 218 bool hasCapturingListenerInHierarchy = false; 227 for ( ContainerNode* curr = targetElement; curr; curr = curr->parentInComposedTree()) {228 if (curr ->hasCapturingEventListeners(type)) {219 for (RefPtr<ContainerNode> currentNode = &targetElement; currentNode; currentNode = currentNode->parentInComposedTree()) { 220 if (currentNode->hasCapturingEventListeners(type)) { 229 221 hasCapturingListenerInHierarchy = true; 230 222 break; … … 233 225 234 226 Vector<Ref<Element>, 32> targetChain; 235 for ( Element* element =targetElement; element; element = element->parentElementInComposedTree()) {227 for (RefPtr element = &targetElement; element; element = element->parentElementInComposedTree()) { 236 228 if (hasCapturingListenerInHierarchy || element->hasEventListeners(type)) 237 229 targetChain.append(*element); … … 249 241 auto pointerEvent = PointerEvent::create(platformTouchEvent, index, isPrimary, view); 250 242 251 auto&capturingData = ensureCapturingDataForPointerEvent(pointerEvent);243 Ref capturingData = ensureCapturingDataForPointerEvent(pointerEvent); 252 244 253 245 // Check if the target changed, which would require dispatching boundary events. 254 RefPtr<Element> previousTarget = capturingData .previousTarget;246 RefPtr<Element> previousTarget = capturingData->previousTarget; 255 247 RefPtr<Element> currentTarget = downcast<Element>(&target); 256 248 257 capturingData .previousTarget = currentTarget;249 capturingData->previousTarget = currentTarget; 258 250 259 251 if (pointerEvent->type() == eventNames().pointermoveEvent && previousTarget != currentTarget) { … … 266 258 267 259 Vector<Ref<Element>, 32> leftElementsChain; 268 for ( Element*element = previousTarget.get(); element; element = element->parentElementInComposedTree())260 for (RefPtr element = previousTarget.get(); element; element = element->parentElementInComposedTree()) 269 261 leftElementsChain.append(*element); 270 262 Vector<Ref<Element>, 32> enteredElementsChain; 271 for ( Element*element = currentTarget.get(); element; element = element->parentElementInComposedTree())263 for (RefPtr element = currentTarget.get(); element; element = element->parentElementInComposedTree()) 272 264 enteredElementsChain.append(*element); 273 265 … … 305 297 // pointerenter prior to dispatching the pointerdown event. 306 298 dispatchOverOrOutEvent(eventNames().pointeroverEvent, currentTarget.get()); 307 dispatchEnterOrLeaveEvent(eventNames().pointerenterEvent );299 dispatchEnterOrLeaveEvent(eventNames().pointerenterEvent, *currentTarget); 308 300 } 309 301 … … 315 307 // pointer event named pointerleave after dispatching the pointerup event. 316 308 dispatchOverOrOutEvent(eventNames().pointeroutEvent, currentTarget.get()); 317 dispatchEnterOrLeaveEvent(eventNames().pointerleaveEvent );318 capturingData .previousTarget = nullptr;309 dispatchEnterOrLeaveEvent(eventNames().pointerleaveEvent, *currentTarget); 310 capturingData->previousTarget = nullptr; 319 311 320 312 touchWithIdentifierWasRemoved(pointerEvent->pointerId()); … … 328 320 // for instance in the case of a long press to initiate a system drag. 329 321 for (auto& capturingData : m_activePointerIdsToCapturingData.values()) { 330 if (capturingData .pointerType == PointerEvent::touchPointerType() && capturingData.pointerIsPressed && !capturingData.cancelled)322 if (capturingData->pointerType == PointerEvent::touchPointerType() && capturingData->pointerIsPressed && !capturingData->cancelled) 331 323 return nullptr; 332 324 } … … 335 327 const auto& names = eventNames(); 336 328 337 auto iterator = m_activePointerIdsToCapturingData.find(pointerId);338 bool pointerIsPressed = iterator != m_activePointerIdsToCapturingData.end() ? iterator->value.pointerIsPressed : false;329 RefPtr capturingData = m_activePointerIdsToCapturingData.get(pointerId); 330 bool pointerIsPressed = capturingData ? capturingData->pointerIsPressed : false; 339 331 340 332 short newButton = mouseEvent.button(); 341 short previousMouseButton = iterator != m_activePointerIdsToCapturingData.end() ? iterator->value.previousMouseButton : -1;333 short previousMouseButton = capturingData ? capturingData->previousMouseButton : -1; 342 334 short button = (type == names.mousemoveEvent && newButton == previousMouseButton) ? -1 : newButton; 343 335 … … 361 353 362 354 auto pointerEvent = PointerEvent::create(button, mouseEvent, pointerId, pointerType); 363 if ( iterator != m_activePointerIdsToCapturingData.end())364 iterator->value.previousMouseButton = newButton;355 if (capturingData) 356 capturingData->previousMouseButton = newButton; 365 357 else if (pointerEvent) 366 ensureCapturingDataForPointerEvent(*pointerEvent) .previousMouseButton = newButton;358 ensureCapturingDataForPointerEvent(*pointerEvent)->previousMouseButton = newButton; 367 359 368 360 return pointerEvent; … … 398 390 399 391 if (event.pointerType() != PointerEvent::touchPointerType()) { 400 auto iterator = m_activePointerIdsToCapturingData.find(pointerId); 401 if (iterator != m_activePointerIdsToCapturingData.end()) 402 iterator->value.pointerIsPressed = isPointerdown; 392 if (RefPtr capturingData = m_activePointerIdsToCapturingData.get(pointerId)) 393 capturingData->pointerIsPressed = isPointerdown; 403 394 return; 404 395 } … … 419 410 // to the target (as normal) indicating that capture is active. 420 411 421 auto &capturingData = ensureCapturingDataForPointerEvent(event);422 capturingData .pointerIsPressed = true;412 auto capturingData = ensureCapturingDataForPointerEvent(event); 413 capturingData->pointerIsPressed = true; 423 414 setPointerCapture(downcast<Element>(target), pointerId); 424 415 } 425 416 426 PointerCaptureController::CapturingData& PointerCaptureController::ensureCapturingDataForPointerEvent(const PointerEvent& event) 427 { 428 return m_activePointerIdsToCapturingData.ensure(event.pointerId(), [&event] { 429 CapturingData capturingData; 430 capturingData.pointerType = event.pointerType(); 431 return capturingData; 417 auto PointerCaptureController::ensureCapturingDataForPointerEvent(const PointerEvent& event) -> Ref<CapturingData> 418 { 419 return m_activePointerIdsToCapturingData.ensure(event.pointerId(), [pointerType = event.pointerType()] { 420 return CapturingData::create(pointerType); 432 421 }).iterator->value; 433 422 } … … 435 424 void PointerCaptureController::pointerEventWasDispatched(const PointerEvent& event) 436 425 { 437 auto iterator = m_activePointerIdsToCapturingData.find(event.pointerId());438 if ( iterator != m_activePointerIdsToCapturingData.end()) {439 auto& capturingData = iterator->value;440 capturingData.isPrimary = event.isPrimary(); 441 442 // Immediately after firing the pointerup or pointercancel events, a user agent MUST clear the pending pointer capture target 443 // override for the pointerId of the pointerup or pointercancel event that was just dispatched, and then run Process Pending444 // Pointer Capture steps to fire lostpointercapture if necessary.445 // https://w3c.github.io/pointerevents/#implicit-release-of-pointer-capture446 if (event.type() == eventNames().pointerupEvent) {447 capturingData.pendingTargetOverride = nullptr;448 processPendingPointerCapture(event.pointerId());449 }450 451 // If a mouse pointer has moved while it isn't pressed, make sure we reset the preventsCompatibilityMouseEvents flag since 452 // we could otherwise prevent compatibility mouse events while those are only supposed to be prevented while the pointer is pressed.453 if (event.type() == eventNames().pointermoveEvent && capturingData.pointerType == PointerEvent::mousePointerType() && !capturingData.pointerIsPressed)454 capturingData.preventsCompatibilityMouseEvents = false;455 456 // If the pointer event dispatched was pointerdown and the event was canceled, then set the PREVENT MOUSE EVENT flag for this pointerType. 457 // https://www.w3.org/TR/pointerevents/#mapping-for-devices-that-support-hover458 if (event.type() == eventNames().pointerdownEvent)459 capturingData.preventsCompatibilityMouseEvents = event.defaultPrevented();460 }426 RefPtr capturingData = m_activePointerIdsToCapturingData.get(event.pointerId()); 427 if (!capturingData) 428 return; 429 430 capturingData->isPrimary = event.isPrimary(); 431 432 // Immediately after firing the pointerup or pointercancel events, a user agent MUST clear the pending pointer capture target 433 // override for the pointerId of the pointerup or pointercancel event that was just dispatched, and then run Process Pending 434 // Pointer Capture steps to fire lostpointercapture if necessary. 435 // https://w3c.github.io/pointerevents/#implicit-release-of-pointer-capture 436 if (event.type() == eventNames().pointerupEvent) { 437 capturingData->pendingTargetOverride = nullptr; 438 processPendingPointerCapture(event.pointerId()); 439 } 440 441 // If a mouse pointer has moved while it isn't pressed, make sure we reset the preventsCompatibilityMouseEvents flag since 442 // we could otherwise prevent compatibility mouse events while those are only supposed to be prevented while the pointer is pressed. 443 if (event.type() == eventNames().pointermoveEvent && capturingData->pointerType == PointerEvent::mousePointerType() && !capturingData->pointerIsPressed) 444 capturingData->preventsCompatibilityMouseEvents = false; 445 446 // If the pointer event dispatched was pointerdown and the event was canceled, then set the PREVENT MOUSE EVENT flag for this pointerType. 447 // https://www.w3.org/TR/pointerevents/#mapping-for-devices-that-support-hover 448 if (event.type() == eventNames().pointerdownEvent) 449 capturingData->preventsCompatibilityMouseEvents = event.defaultPrevented(); 461 450 } 462 451 … … 480 469 // the pointer with no capture. 481 470 482 auto iterator = m_activePointerIdsToCapturingData.find(pointerId); 483 if (iterator == m_activePointerIdsToCapturingData.end()) 484 return; 485 486 auto& capturingData = iterator->value; 487 if (capturingData.cancelled) 488 return; 489 490 capturingData.pendingTargetOverride = nullptr; 491 capturingData.cancelled = true; 471 RefPtr capturingData = m_activePointerIdsToCapturingData.get(pointerId); 472 if (!capturingData || capturingData->cancelled) 473 return; 474 475 capturingData->pendingTargetOverride = nullptr; 476 capturingData->cancelled = true; 492 477 493 478 #if ENABLE(TOUCH_EVENTS) && PLATFORM(IOS_FAMILY) 494 capturingData .previousTarget = nullptr;479 capturingData->previousTarget = nullptr; 495 480 #endif 496 481 497 482 auto target = [&]() -> RefPtr<Element> { 498 if (capturingData .targetOverride)499 return capturingData .targetOverride;483 if (capturingData->targetOverride) 484 return capturingData->targetOverride; 500 485 constexpr OptionSet<HitTestRequest::RequestType> hitType { HitTestRequest::ReadOnly, HitTestRequest::Active, HitTestRequest::DisallowUserAgentShadowContent, HitTestRequest::AllowChildFrameContent }; 501 return m_page.mainFrame().eventHandler().hitTestResultAtPoint(documentPoint, hitType).innerNonSharedElement();486 return Ref(m_page.mainFrame())->eventHandler().hitTestResultAtPoint(documentPoint, hitType).innerNonSharedElement(); 502 487 }(); 503 488 … … 507 492 // After firing the pointercancel event, a user agent MUST also fire a pointer event named pointerout 508 493 // followed by firing a pointer event named pointerleave. 509 auto isPrimary = capturingData .isPrimary ? PointerEvent::IsPrimary::Yes : PointerEvent::IsPrimary::No;510 auto cancelEvent = PointerEvent::create(eventNames().pointercancelEvent, pointerId, capturingData .pointerType, isPrimary);494 auto isPrimary = capturingData->isPrimary ? PointerEvent::IsPrimary::Yes : PointerEvent::IsPrimary::No; 495 auto cancelEvent = PointerEvent::create(eventNames().pointercancelEvent, pointerId, capturingData->pointerType, isPrimary); 511 496 target->dispatchEvent(cancelEvent); 512 target->dispatchEvent(PointerEvent::create(eventNames().pointeroutEvent, pointerId, capturingData .pointerType, isPrimary));513 target->dispatchEvent(PointerEvent::create(eventNames().pointerleaveEvent, pointerId, capturingData .pointerType, isPrimary));497 target->dispatchEvent(PointerEvent::create(eventNames().pointeroutEvent, pointerId, capturingData->pointerType, isPrimary)); 498 target->dispatchEvent(PointerEvent::create(eventNames().pointerleaveEvent, pointerId, capturingData->pointerType, isPrimary)); 514 499 processPendingPointerCapture(pointerId); 515 500 } … … 517 502 void PointerCaptureController::processPendingPointerCapture(PointerID pointerId) 518 503 { 519 auto iterator = m_activePointerIdsToCapturingData.find(pointerId);520 if ( iterator == m_activePointerIdsToCapturingData.end())504 RefPtr capturingData = m_activePointerIdsToCapturingData.get(pointerId); 505 if (!capturingData) 521 506 return; 522 507 … … 526 511 m_processingPendingPointerCapture = true; 527 512 528 auto& capturingData = iterator->value;529 530 513 // Cache the pending target override since it could be modified during the dispatch of events in this function. 531 auto pendingTargetOverride = capturingData .pendingTargetOverride;514 auto pendingTargetOverride = capturingData->pendingTargetOverride; 532 515 533 516 // https://w3c.github.io/pointerevents/#process-pending-pointer-capture 534 517 // 1. If the pointer capture target override for this pointer is set and is not equal to the pending pointer capture target override, 535 518 // then fire a pointer event named lostpointercapture at the pointer capture target override node. 536 if (capturingData .targetOverride && capturingData.targetOverride != pendingTargetOverride) {537 if (capturingData .targetOverride->isConnected())538 capturingData .targetOverride->dispatchEvent(PointerEvent::createForPointerCapture(eventNames().lostpointercaptureEvent, pointerId, capturingData.isPrimary, capturingData.pointerType));539 if (capturingData .pointerType == PointerEvent::mousePointerType()) {540 if ( auto* frame = capturingData.targetOverride->document().frame())519 if (capturingData->targetOverride && capturingData->targetOverride != pendingTargetOverride) { 520 if (capturingData->targetOverride->isConnected()) 521 capturingData->targetOverride->dispatchEvent(PointerEvent::createForPointerCapture(eventNames().lostpointercaptureEvent, pointerId, capturingData->isPrimary, capturingData->pointerType)); 522 if (capturingData->pointerType == PointerEvent::mousePointerType()) { 523 if (RefPtr frame = capturingData->targetOverride->document().frame()) 541 524 frame->eventHandler().pointerCaptureElementDidChange(nullptr); 542 525 } … … 545 528 // 2. If the pending pointer capture target override for this pointer is set and is not equal to the pointer capture target override, 546 529 // then fire a pointer event named gotpointercapture at the pending pointer capture target override. 547 if (capturingData .pendingTargetOverride && capturingData.targetOverride != pendingTargetOverride) {548 if (capturingData .pointerType == PointerEvent::mousePointerType()) {549 if ( auto*frame = pendingTargetOverride->document().frame())530 if (capturingData->pendingTargetOverride && capturingData->targetOverride != pendingTargetOverride) { 531 if (capturingData->pointerType == PointerEvent::mousePointerType()) { 532 if (RefPtr frame = pendingTargetOverride->document().frame()) 550 533 frame->eventHandler().pointerCaptureElementDidChange(pendingTargetOverride.get()); 551 534 } 552 pendingTargetOverride->dispatchEvent(PointerEvent::createForPointerCapture(eventNames().gotpointercaptureEvent, pointerId, capturingData .isPrimary, capturingData.pointerType));535 pendingTargetOverride->dispatchEvent(PointerEvent::createForPointerCapture(eventNames().gotpointercaptureEvent, pointerId, capturingData->isPrimary, capturingData->pointerType)); 553 536 } 554 537 555 538 // 3. Set the pointer capture target override to the pending pointer capture target override, if set. Otherwise, clear the pointer 556 539 // capture target override. 557 capturingData .targetOverride = pendingTargetOverride;540 capturingData->targetOverride = pendingTargetOverride; 558 541 559 542 m_processingPendingPointerCapture = false; -
branches/safari-611.3.10.0-branch/Source/WebCore/page/PointerCaptureController.h
r275575 r280917 70 70 71 71 private: 72 struct CapturingData { 72 struct CapturingData : public RefCounted<CapturingData> { 73 static Ref<CapturingData> create(const String& pointerType) 74 { 75 return adoptRef(*new CapturingData(pointerType)); 76 } 77 73 78 RefPtr<Element> pendingTargetOverride; 74 79 RefPtr<Element> targetOverride; … … 89 94 bool pointerIsPressed { false }; 90 95 short previousMouseButton { -1 }; 96 97 private: 98 CapturingData(const String& pointerType) 99 : pointerType(pointerType) 100 { } 91 101 }; 92 102 93 CapturingData&ensureCapturingDataForPointerEvent(const PointerEvent&);103 Ref<CapturingData> ensureCapturingDataForPointerEvent(const PointerEvent&); 94 104 void pointerEventWillBeDispatched(const PointerEvent&, EventTarget*); 95 105 void pointerEventWasDispatched(const PointerEvent&); … … 100 110 // While PointerID is defined as int32_t, we use int64_t here so that we may use a value outside of the int32_t range to have safe 101 111 // empty and removed values, allowing any int32_t to be provided through the API for lookup in this hashmap. 102 using PointerIdToCapturingDataMap = HashMap<int64_t, CapturingData, WTF::IntHash<int64_t>, WTF::SignedWithZeroKeyHashTraits<int64_t>>;112 using PointerIdToCapturingDataMap = HashMap<int64_t, Ref<CapturingData>, WTF::IntHash<int64_t>, WTF::SignedWithZeroKeyHashTraits<int64_t>>; 103 113 PointerIdToCapturingDataMap m_activePointerIdsToCapturingData; 104 114 bool m_processingPendingPointerCapture { false };
Note:
See TracChangeset
for help on using the changeset viewer.