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 254 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
265 | 265 |
266 void EventHandlerRegistry::clearWeakMembers(Visitor* visitor) { | 266 void EventHandlerRegistry::clearWeakMembers(Visitor* visitor) { |
267 Vector<UntracedMember<EventTarget>> deadTargets; | 267 Vector<UntracedMember<EventTarget>> deadTargets; |
268 for (size_t i = 0; i < EventHandlerClassCount; ++i) { | 268 for (size_t i = 0; i < EventHandlerClassCount; ++i) { |
269 EventHandlerClass handlerClass = static_cast<EventHandlerClass>(i); | 269 EventHandlerClass handlerClass = static_cast<EventHandlerClass>(i); |
270 const EventTargetSet* targets = &m_targets[handlerClass]; | 270 const EventTargetSet* targets = &m_targets[handlerClass]; |
271 for (const auto& eventTarget : *targets) { | 271 for (const auto& eventTarget : *targets) { |
272 Node* node = eventTarget.key->toNode(); | 272 Node* node = eventTarget.key->toNode(); |
273 LocalDOMWindow* window = eventTarget.key->toLocalDOMWindow(); | 273 LocalDOMWindow* window = eventTarget.key->toLocalDOMWindow(); |
274 if (node && !ThreadHeap::isHeapObjectAlive(node)) { | 274 if (node && !ThreadHeap::isHeapObjectAlive(node)) { |
275 deadTargets.append(node); | 275 deadTargets.push_back(node); |
276 } else if (window && !ThreadHeap::isHeapObjectAlive(window)) { | 276 } else if (window && !ThreadHeap::isHeapObjectAlive(window)) { |
277 deadTargets.append(window); | 277 deadTargets.push_back(window); |
278 } | 278 } |
279 } | 279 } |
280 } | 280 } |
281 for (size_t i = 0; i < deadTargets.size(); ++i) | 281 for (size_t i = 0; i < deadTargets.size(); ++i) |
282 didRemoveAllEventHandlers(*deadTargets[i]); | 282 didRemoveAllEventHandlers(*deadTargets[i]); |
283 } | 283 } |
284 | 284 |
285 void EventHandlerRegistry::documentDetached(Document& document) { | 285 void EventHandlerRegistry::documentDetached(Document& document) { |
286 // Remove all event targets under the detached document. | 286 // Remove all event targets under the detached document. |
287 for (size_t handlerClassIndex = 0; handlerClassIndex < EventHandlerClassCount; | 287 for (size_t handlerClassIndex = 0; handlerClassIndex < EventHandlerClassCount; |
288 ++handlerClassIndex) { | 288 ++handlerClassIndex) { |
289 EventHandlerClass handlerClass = | 289 EventHandlerClass handlerClass = |
290 static_cast<EventHandlerClass>(handlerClassIndex); | 290 static_cast<EventHandlerClass>(handlerClassIndex); |
291 Vector<UntracedMember<EventTarget>> targetsToRemove; | 291 Vector<UntracedMember<EventTarget>> targetsToRemove; |
292 const EventTargetSet* targets = &m_targets[handlerClass]; | 292 const EventTargetSet* targets = &m_targets[handlerClass]; |
293 for (const auto& eventTarget : *targets) { | 293 for (const auto& eventTarget : *targets) { |
294 if (Node* node = eventTarget.key->toNode()) { | 294 if (Node* node = eventTarget.key->toNode()) { |
295 for (Document* doc = &node->document(); doc; | 295 for (Document* doc = &node->document(); doc; |
296 doc = doc->localOwner() ? &doc->localOwner()->document() : 0) { | 296 doc = doc->localOwner() ? &doc->localOwner()->document() : 0) { |
297 if (doc == &document) { | 297 if (doc == &document) { |
298 targetsToRemove.append(eventTarget.key); | 298 targetsToRemove.push_back(eventTarget.key); |
299 break; | 299 break; |
300 } | 300 } |
301 } | 301 } |
302 } else if (eventTarget.key->toLocalDOMWindow()) { | 302 } else if (eventTarget.key->toLocalDOMWindow()) { |
303 // DOMWindows may outlive their documents, so we shouldn't remove their | 303 // DOMWindows may outlive their documents, so we shouldn't remove their |
304 // handlers here. | 304 // handlers here. |
305 } else { | 305 } else { |
306 ASSERT_NOT_REACHED(); | 306 ASSERT_NOT_REACHED(); |
307 } | 307 } |
308 } | 308 } |
(...skipping 19 matching lines...) Expand all Loading... |
328 ASSERT(window->frame()); | 328 ASSERT(window->frame()); |
329 ASSERT(window->frame()->host()); | 329 ASSERT(window->frame()->host()); |
330 ASSERT(window->frame()->host() == m_frameHost); | 330 ASSERT(window->frame()->host() == m_frameHost); |
331 } | 331 } |
332 } | 332 } |
333 } | 333 } |
334 #endif // ENABLE(ASSERT) | 334 #endif // ENABLE(ASSERT) |
335 } | 335 } |
336 | 336 |
337 } // namespace blink | 337 } // namespace blink |
OLD | NEW |