| Index: Source/core/page/EventHandler.cpp
|
| diff --git a/Source/core/page/EventHandler.cpp b/Source/core/page/EventHandler.cpp
|
| index 80806dd7237d024f6c439967ec75745697dd8d36..a321f597a4d176856c3a5447cb8ae2249fd0857c 100644
|
| --- a/Source/core/page/EventHandler.cpp
|
| +++ b/Source/core/page/EventHandler.cpp
|
| @@ -88,6 +88,7 @@
|
| #include "core/svg/SVGDocument.h"
|
| #include "core/svg/SVGElementInstance.h"
|
| #include "core/svg/SVGUseElement.h"
|
| +#include "heap/Handle.h"
|
| #include "platform/PlatformGestureEvent.h"
|
| #include "platform/PlatformKeyboardEvent.h"
|
| #include "platform/PlatformTouchEvent.h"
|
| @@ -3582,18 +3583,18 @@ bool EventHandler::handleTouchEvent(const PlatformTouchEvent& event)
|
| // for an overview of how these lists fit together.
|
|
|
| // Holds the complete set of touches on the screen and will be used as the 'touches' list in the JS event.
|
| - RefPtr<TouchList> touches = TouchList::create();
|
| + RefPtrWillBeRawPtr<TouchList> touches = TouchList::create();
|
|
|
| // A different view on the 'touches' list above, filtered and grouped by event target. Used for the
|
| // 'targetTouches' list in the JS event.
|
| - typedef HashMap<EventTarget*, RefPtr<TouchList> > TargetTouchesMap;
|
| - TargetTouchesMap touchesByTarget;
|
| + typedef WillBeHeapHashMap<EventTarget*, RefPtrWillBeMember<TouchList> > TargetTouchesHeapMap;
|
| + TargetTouchesHeapMap touchesByTarget;
|
|
|
| // Array of touches per state, used to assemble the 'changedTouches' list in the JS event.
|
| typedef HashSet<RefPtr<EventTarget> > EventTargetSet;
|
| struct {
|
| // The touches corresponding to the particular change state this struct instance represents.
|
| - RefPtr<TouchList> m_touches;
|
| + RefPtrWillBeRawPtr<TouchList> m_touches;
|
| // Set of targets involved in m_touches.
|
| EventTargetSet m_targets;
|
| } changedTouches[PlatformTouchPoint::TouchStateEnd];
|
| @@ -3711,14 +3712,14 @@ bool EventHandler::handleTouchEvent(const PlatformTouchEvent& event)
|
| int adjustedRadiusX = lroundf(point.radiusX() / scaleFactor);
|
| int adjustedRadiusY = lroundf(point.radiusY() / scaleFactor);
|
|
|
| - RefPtr<Touch> touch = Touch::create(targetFrame, touchTarget.get(), point.id(),
|
| + RefPtrWillBeRawPtr<Touch> touch = Touch::create(targetFrame, touchTarget.get(), point.id(),
|
| point.screenPos().x(), point.screenPos().y(),
|
| adjustedPageX, adjustedPageY,
|
| adjustedRadiusX, adjustedRadiusY,
|
| point.rotationAngle(), point.force());
|
|
|
| // Ensure this target's touch list exists, even if it ends up empty, so it can always be passed to TouchEvent::Create below.
|
| - TargetTouchesMap::iterator targetTouchesIterator = touchesByTarget.find(touchTarget.get());
|
| + TargetTouchesHeapMap::iterator targetTouchesIterator = touchesByTarget.find(touchTarget.get());
|
| if (targetTouchesIterator == touchesByTarget.end()) {
|
| touchesByTarget.set(touchTarget.get(), TouchList::create());
|
| targetTouchesIterator = touchesByTarget.find(touchTarget.get());
|
| @@ -3751,20 +3752,20 @@ bool EventHandler::handleTouchEvent(const PlatformTouchEvent& event)
|
|
|
| // Now iterate the changedTouches list and m_targets within it, sending events to the targets as required.
|
| bool swallowedEvent = false;
|
| - RefPtr<TouchList> emptyList = TouchList::create();
|
| + RefPtrWillBeRawPtr<TouchList> emptyList = TouchList::create();
|
| for (unsigned state = 0; state != PlatformTouchPoint::TouchStateEnd; ++state) {
|
| if (!changedTouches[state].m_touches)
|
| continue;
|
|
|
| // When sending a touch cancel event, use empty touches and targetTouches lists.
|
| bool isTouchCancelEvent = (state == PlatformTouchPoint::TouchCancelled);
|
| - RefPtr<TouchList>& effectiveTouches(isTouchCancelEvent ? emptyList : touches);
|
| + RefPtrWillBeRawPtr<TouchList>& effectiveTouches(isTouchCancelEvent ? emptyList : touches);
|
| const AtomicString& stateName(eventNameForTouchPointState(static_cast<PlatformTouchPoint::State>(state)));
|
| const EventTargetSet& targetsForState = changedTouches[state].m_targets;
|
|
|
| for (EventTargetSet::const_iterator it = targetsForState.begin(); it != targetsForState.end(); ++it) {
|
| EventTarget* touchEventTarget = it->get();
|
| - RefPtr<TouchList> targetTouches(isTouchCancelEvent ? emptyList : touchesByTarget.get(touchEventTarget));
|
| + RefPtrWillBeRawPtr<TouchList> targetTouches(isTouchCancelEvent ? emptyList.get() : touchesByTarget.get(touchEventTarget));
|
| ASSERT(targetTouches);
|
|
|
| RefPtr<TouchEvent> touchEvent =
|
|
|