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

Side by Side Diff: third_party/WebKit/Source/core/frame/EventHandlerRegistry.cpp

Issue 2653463003: Fix assertion hit on debug build for EventHandlerRegistry (Closed)
Patch Set: Fix a typo. Created 3 years, 11 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
« no previous file with comments | « third_party/WebKit/Source/core/frame/EventHandlerRegistry.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
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
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/core/frame/EventHandlerRegistry.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698