| Index: trunk/Source/core/frame/EventHandlerRegistry.cpp
|
| ===================================================================
|
| --- trunk/Source/core/frame/EventHandlerRegistry.cpp (revision 177995)
|
| +++ trunk/Source/core/frame/EventHandlerRegistry.cpp (working copy)
|
| @@ -9,8 +9,6 @@
|
| #include "core/frame/LocalDOMWindow.h"
|
| #include "core/frame/LocalFrame.h"
|
| #include "core/html/HTMLFrameOwnerElement.h"
|
| -#include "core/page/Chrome.h"
|
| -#include "core/page/ChromeClient.h"
|
| #include "core/page/Page.h"
|
| #include "core/page/scrolling/ScrollingCoordinator.h"
|
|
|
| @@ -32,8 +30,6 @@
|
| *result = ScrollEvent;
|
| } else if (eventType == EventTypeNames::wheel || eventType == EventTypeNames::mousewheel) {
|
| *result = WheelEvent;
|
| - } else if (isTouchEventType(eventType)) {
|
| - *result = TouchEvent;
|
| #if ASSERT_ENABLED
|
| } else if (eventType == EventTypeNames::load || eventType == EventTypeNames::mousemove || eventType == EventTypeNames::touchstart) {
|
| *result = EventsForTesting;
|
| @@ -52,7 +48,6 @@
|
|
|
| bool EventHandlerRegistry::hasEventHandlers(EventHandlerClass handlerClass) const
|
| {
|
| - checkConsistency();
|
| return m_targets[handlerClass].size();
|
| }
|
|
|
| @@ -84,15 +79,14 @@
|
|
|
| void EventHandlerRegistry::updateEventHandlerInternal(ChangeOperation op, EventHandlerClass handlerClass, EventTarget* target)
|
| {
|
| - bool hadHandlers = m_targets[handlerClass].size();
|
| - bool targetSetChanged = updateEventHandlerTargets(op, handlerClass, target);
|
| - bool hasHandlers = m_targets[handlerClass].size();
|
| + bool hadHandlers = hasEventHandlers(handlerClass);
|
| + updateEventHandlerTargets(op, handlerClass, target);
|
| + bool hasHandlers = hasEventHandlers(handlerClass);
|
|
|
| - if (hadHandlers != hasHandlers)
|
| + if (hadHandlers != hasHandlers) {
|
| notifyHasHandlersChanged(handlerClass, hasHandlers);
|
| -
|
| - if (targetSetChanged)
|
| - notifyDidAddOrRemoveEventHandlerTarget(handlerClass);
|
| + }
|
| + checkConsistency();
|
| }
|
|
|
| void EventHandlerRegistry::updateEventHandlerOfType(ChangeOperation op, const AtomicString& eventType, EventTarget* target)
|
| @@ -125,41 +119,38 @@
|
|
|
| void EventHandlerRegistry::didMoveIntoFrameHost(EventTarget& target)
|
| {
|
| - if (!target.hasEventListeners())
|
| - return;
|
| -
|
| - Vector<AtomicString> eventTypes = target.eventTypes();
|
| - for (size_t i = 0; i < eventTypes.size(); ++i) {
|
| - EventHandlerClass handlerClass;
|
| - if (!eventTypeToClass(eventTypes[i], &handlerClass))
|
| - continue;
|
| - for (unsigned count = target.getEventListeners(eventTypes[i]).size(); count > 0; --count)
|
| - didAddEventHandler(target, handlerClass);
|
| - }
|
| + updateAllEventHandlers(Add, target);
|
| }
|
|
|
| void EventHandlerRegistry::didMoveOutOfFrameHost(EventTarget& target)
|
| {
|
| - didRemoveAllEventHandlers(target);
|
| + updateAllEventHandlers(RemoveAll, target);
|
| }
|
|
|
| -void EventHandlerRegistry::didMoveBetweenFrameHosts(EventTarget& target, FrameHost* oldFrameHost, FrameHost* newFrameHost)
|
| +void EventHandlerRegistry::didRemoveAllEventHandlers(EventTarget& target)
|
| {
|
| - ASSERT(newFrameHost != oldFrameHost);
|
| for (size_t i = 0; i < EventHandlerClassCount; ++i) {
|
| EventHandlerClass handlerClass = static_cast<EventHandlerClass>(i);
|
| - const EventTargetSet* targets = &oldFrameHost->eventHandlerRegistry().m_targets[handlerClass];
|
| - for (unsigned count = targets->count(&target); count > 0; --count)
|
| - newFrameHost->eventHandlerRegistry().didAddEventHandler(target, handlerClass);
|
| - oldFrameHost->eventHandlerRegistry().didRemoveAllEventHandlers(target);
|
| + updateEventHandlerInternal(RemoveAll, handlerClass, &target);
|
| }
|
| }
|
|
|
| -void EventHandlerRegistry::didRemoveAllEventHandlers(EventTarget& target)
|
| +void EventHandlerRegistry::updateAllEventHandlers(ChangeOperation op, EventTarget& target)
|
| {
|
| - for (size_t i = 0; i < EventHandlerClassCount; ++i) {
|
| - EventHandlerClass handlerClass = static_cast<EventHandlerClass>(i);
|
| - updateEventHandlerInternal(RemoveAll, handlerClass, &target);
|
| + if (!target.hasEventListeners())
|
| + return;
|
| +
|
| + Vector<AtomicString> eventTypes = target.eventTypes();
|
| + for (size_t i = 0; i < eventTypes.size(); ++i) {
|
| + EventHandlerClass handlerClass;
|
| + if (!eventTypeToClass(eventTypes[i], &handlerClass))
|
| + continue;
|
| + if (op == RemoveAll) {
|
| + updateEventHandlerInternal(op, handlerClass, &target);
|
| + continue;
|
| + }
|
| + for (unsigned count = target.getEventListeners(eventTypes[i]).size(); count > 0; --count)
|
| + updateEventHandlerInternal(op, handlerClass, &target);
|
| }
|
| }
|
|
|
| @@ -176,9 +167,6 @@
|
| if (scrollingCoordinator)
|
| scrollingCoordinator->updateHaveWheelEventHandlers();
|
| break;
|
| - case TouchEvent:
|
| - m_frameHost.chrome().client().needTouchEvents(hasActiveHandlers);
|
| - break;
|
| #if ASSERT_ENABLED
|
| case EventsForTesting:
|
| break;
|
| @@ -189,13 +177,6 @@
|
| }
|
| }
|
|
|
| -void EventHandlerRegistry::notifyDidAddOrRemoveEventHandlerTarget(EventHandlerClass handlerClass)
|
| -{
|
| - ScrollingCoordinator* scrollingCoordinator = m_frameHost.page().scrollingCoordinator();
|
| - if (scrollingCoordinator && handlerClass == TouchEvent)
|
| - scrollingCoordinator->touchEventTargetRectsDidChange();
|
| -}
|
| -
|
| void EventHandlerRegistry::trace(Visitor* visitor)
|
| {
|
| visitor->registerWeakMembers<EventHandlerRegistry, &EventHandlerRegistry::clearWeakMembers>(this);
|
|
|