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

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

Issue 1397073002: [Oilpan] Create UnsafePtr to store on-heap pointers in Vector (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Work for nits Created 5 years, 2 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
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 "config.h" 5 #include "config.h"
6 #include "core/frame/EventHandlerRegistry.h" 6 #include "core/frame/EventHandlerRegistry.h"
7 7
8 #include "core/frame/LocalDOMWindow.h" 8 #include "core/frame/LocalDOMWindow.h"
9 #include "core/frame/LocalFrame.h" 9 #include "core/frame/LocalFrame.h"
10 #include "core/html/HTMLFrameOwnerElement.h" 10 #include "core/html/HTMLFrameOwnerElement.h"
(...skipping 217 matching lines...) Expand 10 before | Expand all | Expand 10 after
228 } 228 }
229 229
230 DEFINE_TRACE(EventHandlerRegistry) 230 DEFINE_TRACE(EventHandlerRegistry)
231 { 231 {
232 visitor->trace(m_frameHost); 232 visitor->trace(m_frameHost);
233 visitor->template registerWeakMembers<EventHandlerRegistry, &EventHandlerReg istry::clearWeakMembers>(this); 233 visitor->template registerWeakMembers<EventHandlerRegistry, &EventHandlerReg istry::clearWeakMembers>(this);
234 } 234 }
235 235
236 void EventHandlerRegistry::clearWeakMembers(Visitor* visitor) 236 void EventHandlerRegistry::clearWeakMembers(Visitor* visitor)
237 { 237 {
238 Vector<EventTarget*> deadTargets; 238 Vector<RawPtrWillBeUntracedMember<EventTarget>> deadTargets;
239 for (size_t i = 0; i < EventHandlerClassCount; ++i) { 239 for (size_t i = 0; i < EventHandlerClassCount; ++i) {
240 EventHandlerClass handlerClass = static_cast<EventHandlerClass>(i); 240 EventHandlerClass handlerClass = static_cast<EventHandlerClass>(i);
241 const EventTargetSet* targets = &m_targets[handlerClass]; 241 const EventTargetSet* targets = &m_targets[handlerClass];
242 for (const auto& eventTarget : *targets) { 242 for (const auto& eventTarget : *targets) {
243 Node* node = eventTarget.key->toNode(); 243 Node* node = eventTarget.key->toNode();
244 LocalDOMWindow* window = eventTarget.key->toDOMWindow(); 244 LocalDOMWindow* window = eventTarget.key->toDOMWindow();
245 if (node && !Heap::isHeapObjectAlive(node)) { 245 if (node && !Heap::isHeapObjectAlive(node)) {
246 deadTargets.append(node); 246 deadTargets.append(node);
247 } else if (window && !Heap::isHeapObjectAlive(window)) { 247 } else if (window && !Heap::isHeapObjectAlive(window)) {
248 deadTargets.append(window); 248 deadTargets.append(window);
249 } 249 }
250 } 250 }
251 } 251 }
252 for (size_t i = 0; i < deadTargets.size(); ++i) 252 for (size_t i = 0; i < deadTargets.size(); ++i)
253 didRemoveAllEventHandlers(*deadTargets[i]); 253 didRemoveAllEventHandlers(*deadTargets[i]);
254 } 254 }
255 255
256 void EventHandlerRegistry::documentDetached(Document& document) 256 void EventHandlerRegistry::documentDetached(Document& document)
257 { 257 {
258 // Remove all event targets under the detached document. 258 // Remove all event targets under the detached document.
259 for (size_t handlerClassIndex = 0; handlerClassIndex < EventHandlerClassCoun t; ++handlerClassIndex) { 259 for (size_t handlerClassIndex = 0; handlerClassIndex < EventHandlerClassCoun t; ++handlerClassIndex) {
260 EventHandlerClass handlerClass = static_cast<EventHandlerClass>(handlerC lassIndex); 260 EventHandlerClass handlerClass = static_cast<EventHandlerClass>(handlerC lassIndex);
261 Vector<EventTarget*> targetsToRemove; 261 Vector<RawPtrWillBeUntracedMember<EventTarget>> targetsToRemove;
262 const EventTargetSet* targets = &m_targets[handlerClass]; 262 const EventTargetSet* targets = &m_targets[handlerClass];
263 for (const auto& eventTarget : *targets) { 263 for (const auto& eventTarget : *targets) {
264 if (Node* node = eventTarget.key->toNode()) { 264 if (Node* node = eventTarget.key->toNode()) {
265 for (Document* doc = &node->document(); doc; doc = doc->ownerEle ment() ? &doc->ownerElement()->document() : 0) { 265 for (Document* doc = &node->document(); doc; doc = doc->ownerEle ment() ? &doc->ownerElement()->document() : 0) {
266 if (doc == &document) { 266 if (doc == &document) {
267 targetsToRemove.append(eventTarget.key); 267 targetsToRemove.append(eventTarget.key);
268 break; 268 break;
269 } 269 }
270 } 270 }
271 } else if (eventTarget.key->toDOMWindow()) { 271 } else if (eventTarget.key->toDOMWindow()) {
(...skipping 25 matching lines...) Expand all
297 ASSERT(window->frame()); 297 ASSERT(window->frame());
298 ASSERT(window->frame()->host()); 298 ASSERT(window->frame()->host());
299 ASSERT(window->frame()->host() == m_frameHost); 299 ASSERT(window->frame()->host() == m_frameHost);
300 } 300 }
301 } 301 }
302 } 302 }
303 #endif // ENABLE(ASSERT) 303 #endif // ENABLE(ASSERT)
304 } 304 }
305 305
306 } // namespace blink 306 } // namespace blink
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/core/frame/EventHandlerRegistry.h ('k') | third_party/WebKit/Source/core/frame/LocalFrame.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698