| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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/frame/EventHandlerRegistry.h" | 5 #include "core/frame/EventHandlerRegistry.h" |
| 6 | 6 |
| 7 #include "core/events/EventListenerOptions.h" | 7 #include "core/events/EventListenerOptions.h" |
| 8 #include "core/events/EventUtil.h" | 8 #include "core/events/EventUtil.h" |
| 9 #include "core/frame/LocalDOMWindow.h" | 9 #include "core/frame/LocalDOMWindow.h" |
| 10 #include "core/frame/LocalFrame.h" | 10 #include "core/frame/LocalFrame.h" |
| (...skipping 16 matching lines...) Expand all Loading... |
| 27 return WebEventListenerProperties::Passive; | 27 return WebEventListenerProperties::Passive; |
| 28 return WebEventListenerProperties::Nothing; | 28 return WebEventListenerProperties::Nothing; |
| 29 } | 29 } |
| 30 | 30 |
| 31 } // namespace | 31 } // namespace |
| 32 | 32 |
| 33 EventHandlerRegistry::EventHandlerRegistry(FrameHost& frameHost) | 33 EventHandlerRegistry::EventHandlerRegistry(FrameHost& frameHost) |
| 34 : m_frameHost(&frameHost) {} | 34 : m_frameHost(&frameHost) {} |
| 35 | 35 |
| 36 EventHandlerRegistry::~EventHandlerRegistry() { | 36 EventHandlerRegistry::~EventHandlerRegistry() { |
| 37 checkConsistency(); | 37 for (size_t i = 0; i < EventHandlerClassCount; ++i) { |
| 38 EventHandlerClass handlerClass = static_cast<EventHandlerClass>(i); |
| 39 checkConsistency(handlerClass); |
| 40 } |
| 38 } | 41 } |
| 39 | 42 |
| 40 bool EventHandlerRegistry::eventTypeToClass( | 43 bool EventHandlerRegistry::eventTypeToClass( |
| 41 const AtomicString& eventType, | 44 const AtomicString& eventType, |
| 42 const AddEventListenerOptions& options, | 45 const AddEventListenerOptions& options, |
| 43 EventHandlerClass* result) { | 46 EventHandlerClass* result) { |
| 44 if (eventType == EventTypeNames::scroll) { | 47 if (eventType == EventTypeNames::scroll) { |
| 45 *result = ScrollEvent; | 48 *result = ScrollEvent; |
| 46 } else if (eventType == EventTypeNames::wheel || | 49 } else if (eventType == EventTypeNames::wheel || |
| 47 eventType == EventTypeNames::mousewheel) { | 50 eventType == EventTypeNames::mousewheel) { |
| (...skipping 18 matching lines...) Expand all Loading... |
| 66 *result = EventsForTesting; | 69 *result = EventsForTesting; |
| 67 #endif | 70 #endif |
| 68 } else { | 71 } else { |
| 69 return false; | 72 return false; |
| 70 } | 73 } |
| 71 return true; | 74 return true; |
| 72 } | 75 } |
| 73 | 76 |
| 74 const EventTargetSet* EventHandlerRegistry::eventHandlerTargets( | 77 const EventTargetSet* EventHandlerRegistry::eventHandlerTargets( |
| 75 EventHandlerClass handlerClass) const { | 78 EventHandlerClass handlerClass) const { |
| 76 checkConsistency(); | 79 checkConsistency(handlerClass); |
| 77 return &m_targets[handlerClass]; | 80 return &m_targets[handlerClass]; |
| 78 } | 81 } |
| 79 | 82 |
| 80 bool EventHandlerRegistry::hasEventHandlers( | 83 bool EventHandlerRegistry::hasEventHandlers( |
| 81 EventHandlerClass handlerClass) const { | 84 EventHandlerClass handlerClass) const { |
| 82 checkConsistency(); | 85 checkConsistency(handlerClass); |
| 83 return m_targets[handlerClass].size(); | 86 return m_targets[handlerClass].size(); |
| 84 } | 87 } |
| 85 | 88 |
| 86 bool EventHandlerRegistry::updateEventHandlerTargets( | 89 bool EventHandlerRegistry::updateEventHandlerTargets( |
| 87 ChangeOperation op, | 90 ChangeOperation op, |
| 88 EventHandlerClass handlerClass, | 91 EventHandlerClass handlerClass, |
| 89 EventTarget* target) { | 92 EventTarget* target) { |
| 90 EventTargetSet* targets = &m_targets[handlerClass]; | 93 EventTargetSet* targets = &m_targets[handlerClass]; |
| 91 if (op == Add) { | 94 if (op == Add) { |
| 92 if (!targets->add(target).isNewEntry) { | 95 if (!targets->add(target).isNewEntry) { |
| (...skipping 208 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 301 // handlers here. | 304 // handlers here. |
| 302 } else { | 305 } else { |
| 303 ASSERT_NOT_REACHED(); | 306 ASSERT_NOT_REACHED(); |
| 304 } | 307 } |
| 305 } | 308 } |
| 306 for (size_t i = 0; i < targetsToRemove.size(); ++i) | 309 for (size_t i = 0; i < targetsToRemove.size(); ++i) |
| 307 updateEventHandlerInternal(RemoveAll, handlerClass, targetsToRemove[i]); | 310 updateEventHandlerInternal(RemoveAll, handlerClass, targetsToRemove[i]); |
| 308 } | 311 } |
| 309 } | 312 } |
| 310 | 313 |
| 311 void EventHandlerRegistry::checkConsistency() const { | 314 void EventHandlerRegistry::checkConsistency( |
| 315 EventHandlerClass handlerClass) const { |
| 312 #if DCHECK_IS_ON() | 316 #if DCHECK_IS_ON() |
| 313 for (size_t i = 0; i < EventHandlerClassCount; ++i) { | 317 const EventTargetSet* targets = &m_targets[handlerClass]; |
| 314 EventHandlerClass handlerClass = static_cast<EventHandlerClass>(i); | 318 for (const auto& eventTarget : *targets) { |
| 315 const EventTargetSet* targets = &m_targets[handlerClass]; | 319 if (Node* node = eventTarget.key->toNode()) { |
| 316 for (const auto& eventTarget : *targets) { | 320 // See the comment for |documentDetached| if either of these assertions |
| 317 if (Node* node = eventTarget.key->toNode()) { | 321 // fails. |
| 318 // See the comment for |documentDetached| if either of these assertions | 322 DCHECK(node->document().frameHost()); |
| 319 // fails. | 323 DCHECK(node->document().frameHost() == m_frameHost); |
| 320 ASSERT(node->document().frameHost()); | 324 } else if (LocalDOMWindow* window = eventTarget.key->toLocalDOMWindow()) { |
| 321 ASSERT(node->document().frameHost() == m_frameHost); | 325 // If any of these assertions fail, LocalDOMWindow failed to unregister |
| 322 } else if (LocalDOMWindow* window = eventTarget.key->toLocalDOMWindow()) { | 326 // its handlers properly. |
| 323 // If any of these assertions fail, LocalDOMWindow failed to unregister | 327 DCHECK(window->frame()); |
| 324 // its handlers properly. | 328 DCHECK(window->frame()->host()); |
| 325 ASSERT(window->frame()); | 329 DCHECK(window->frame()->host() == m_frameHost); |
| 326 ASSERT(window->frame()->host()); | |
| 327 ASSERT(window->frame()->host() == m_frameHost); | |
| 328 } | |
| 329 } | 330 } |
| 330 } | 331 } |
| 331 #endif // DCHECK_IS_ON() | 332 #endif // DCHECK_IS_ON() |
| 332 } | 333 } |
| 333 | 334 |
| 334 } // namespace blink | 335 } // namespace blink |
| OLD | NEW |