OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) | 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) |
3 * (C) 1999 Antti Koivisto (koivisto@kde.org) | 3 * (C) 1999 Antti Koivisto (koivisto@kde.org) |
4 * (C) 2001 Dirk Mueller (mueller@kde.org) | 4 * (C) 2001 Dirk Mueller (mueller@kde.org) |
5 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All r
ights reserved. | 5 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All r
ights reserved. |
6 * Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies) | 6 * Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies) |
7 * Copyright (C) 2009 Torch Mobile Inc. All rights reserved. (http://www.torchmo
bile.com/) | 7 * Copyright (C) 2009 Torch Mobile Inc. All rights reserved. (http://www.torchmo
bile.com/) |
8 * | 8 * |
9 * This library is free software; you can redistribute it and/or | 9 * This library is free software; you can redistribute it and/or |
10 * modify it under the terms of the GNU Library General Public | 10 * modify it under the terms of the GNU Library General Public |
(...skipping 257 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
268 RELEASE_ASSERT(!renderer()); | 268 RELEASE_ASSERT(!renderer()); |
269 | 269 |
270 if (!isContainerNode()) | 270 if (!isContainerNode()) |
271 willBeDeletedFromDocument(); | 271 willBeDeletedFromDocument(); |
272 | 272 |
273 if (m_previous) | 273 if (m_previous) |
274 m_previous->setNextSibling(0); | 274 m_previous->setNextSibling(0); |
275 if (m_next) | 275 if (m_next) |
276 m_next->setPreviousSibling(0); | 276 m_next->setPreviousSibling(0); |
277 | 277 |
| 278 #if !ENABLE(OILPAN) |
278 if (m_treeScope) | 279 if (m_treeScope) |
279 m_treeScope->guardDeref(); | 280 m_treeScope->guardDeref(); |
| 281 #endif |
280 | 282 |
281 InspectorCounters::decrementCounter(InspectorCounters::NodeCounter); | 283 InspectorCounters::decrementCounter(InspectorCounters::NodeCounter); |
282 } | 284 } |
283 | 285 |
284 void Node::willBeDeletedFromDocument() | 286 void Node::willBeDeletedFromDocument() |
285 { | 287 { |
| 288 #if !ENABLE(OILPAN) |
286 if (!isTreeScopeInitialized()) | 289 if (!isTreeScopeInitialized()) |
287 return; | 290 return; |
288 | 291 |
289 Document& document = this->document(); | 292 Document& document = this->document(); |
290 | 293 |
291 if (hasEventTargetData()) { | 294 if (hasEventTargetData()) { |
292 clearEventTargetData(); | 295 clearEventTargetData(); |
293 document.didClearTouchEventHandlers(this); | 296 document.didClearTouchEventHandlers(this); |
294 } | 297 } |
295 | 298 |
296 if (AXObjectCache* cache = document.existingAXObjectCache()) | 299 if (AXObjectCache* cache = document.existingAXObjectCache()) |
297 cache->remove(this); | 300 cache->remove(this); |
298 | 301 |
299 document.markers().removeMarkers(this); | 302 document.markers().removeMarkers(this); |
| 303 #endif |
300 } | 304 } |
301 | 305 |
302 NodeRareData* Node::rareData() const | 306 NodeRareData* Node::rareData() const |
303 { | 307 { |
304 ASSERT_WITH_SECURITY_IMPLICATION(hasRareData()); | 308 ASSERT_WITH_SECURITY_IMPLICATION(hasRareData()); |
305 return static_cast<NodeRareData*>(m_data.m_rareData); | 309 return static_cast<NodeRareData*>(m_data.m_rareData); |
306 } | 310 } |
307 | 311 |
308 NodeRareData& Node::ensureRareData() | 312 NodeRareData& Node::ensureRareData() |
309 { | 313 { |
(...skipping 1692 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2002 | 2006 |
2003 void Node::removeAllEventListenersRecursively() | 2007 void Node::removeAllEventListenersRecursively() |
2004 { | 2008 { |
2005 for (Node* node = this; node; node = NodeTraversal::next(*node)) { | 2009 for (Node* node = this; node; node = NodeTraversal::next(*node)) { |
2006 node->removeAllEventListeners(); | 2010 node->removeAllEventListeners(); |
2007 for (ShadowRoot* root = node->youngestShadowRoot(); root; root = root->o
lderShadowRoot()) | 2011 for (ShadowRoot* root = node->youngestShadowRoot(); root; root = root->o
lderShadowRoot()) |
2008 root->removeAllEventListenersRecursively(); | 2012 root->removeAllEventListenersRecursively(); |
2009 } | 2013 } |
2010 } | 2014 } |
2011 | 2015 |
2012 typedef HashMap<Node*, OwnPtr<EventTargetData> > EventTargetDataMap; | 2016 typedef WillBeHeapHashMap<RawPtrWillBeWeakMember<Node>, OwnPtr<EventTargetData>
> EventTargetDataMap; |
2013 | 2017 |
2014 static EventTargetDataMap& eventTargetDataMap() | 2018 static EventTargetDataMap& eventTargetDataMap() |
2015 { | 2019 { |
| 2020 #if ENABLE(OILPAN) |
| 2021 DEFINE_STATIC_LOCAL(Persistent<EventTargetDataMap>, map, (new EventTargetDat
aMap())); |
| 2022 return *map; |
| 2023 #else |
2016 DEFINE_STATIC_LOCAL(EventTargetDataMap, map, ()); | 2024 DEFINE_STATIC_LOCAL(EventTargetDataMap, map, ()); |
2017 return map; | 2025 return map; |
| 2026 #endif |
2018 } | 2027 } |
2019 | 2028 |
2020 EventTargetData* Node::eventTargetData() | 2029 EventTargetData* Node::eventTargetData() |
2021 { | 2030 { |
2022 return hasEventTargetData() ? eventTargetDataMap().get(this) : 0; | 2031 return hasEventTargetData() ? eventTargetDataMap().get(this) : 0; |
2023 } | 2032 } |
2024 | 2033 |
2025 EventTargetData& Node::ensureEventTargetData() | 2034 EventTargetData& Node::ensureEventTargetData() |
2026 { | 2035 { |
2027 if (hasEventTargetData()) | 2036 if (hasEventTargetData()) |
(...skipping 299 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2327 } | 2336 } |
2328 | 2337 |
2329 bool Node::willRespondToTouchEvents() | 2338 bool Node::willRespondToTouchEvents() |
2330 { | 2339 { |
2331 if (isDisabledFormControl(this)) | 2340 if (isDisabledFormControl(this)) |
2332 return false; | 2341 return false; |
2333 return hasEventListeners(EventTypeNames::touchstart) || hasEventListeners(Ev
entTypeNames::touchmove) || hasEventListeners(EventTypeNames::touchcancel) || ha
sEventListeners(EventTypeNames::touchend); | 2342 return hasEventListeners(EventTypeNames::touchstart) || hasEventListeners(Ev
entTypeNames::touchmove) || hasEventListeners(EventTypeNames::touchcancel) || ha
sEventListeners(EventTypeNames::touchend); |
2334 } | 2343 } |
2335 | 2344 |
2336 // This is here for inlining | 2345 // This is here for inlining |
| 2346 #if ENABLE(OILPAN) |
| 2347 inline void TreeScope::removedLastRefToScope() |
| 2348 { |
| 2349 dispose(); |
| 2350 } |
| 2351 #else |
2337 inline void TreeScope::removedLastRefToScope() | 2352 inline void TreeScope::removedLastRefToScope() |
2338 { | 2353 { |
2339 ASSERT_WITH_SECURITY_IMPLICATION(!deletionHasBegun()); | 2354 ASSERT_WITH_SECURITY_IMPLICATION(!deletionHasBegun()); |
2340 if (m_guardRefCount) { | 2355 if (m_guardRefCount) { |
2341 // If removing a child removes the last self-only ref, we don't | 2356 // If removing a child removes the last self-only ref, we don't |
2342 // want the scope to be destructed until after | 2357 // want the scope to be destructed until after |
2343 // removeDetachedChildren returns, so we guard ourselves with an | 2358 // removeDetachedChildren returns, so we guard ourselves with an |
2344 // extra self-only ref. | 2359 // extra self-only ref. |
2345 guardRef(); | 2360 guardRef(); |
2346 dispose(); | 2361 dispose(); |
2347 #if !ASSERT_DISABLED | 2362 #if !ASSERT_DISABLED |
2348 // We need to do this right now since guardDeref() can delete this. | 2363 // We need to do this right now since guardDeref() can delete this. |
2349 rootNode().m_inRemovedLastRefFunction = false; | 2364 rootNode().m_inRemovedLastRefFunction = false; |
2350 #endif | 2365 #endif |
2351 guardDeref(); | 2366 guardDeref(); |
2352 } else { | 2367 } else { |
2353 #if !ASSERT_DISABLED | 2368 #if !ASSERT_DISABLED |
2354 rootNode().m_inRemovedLastRefFunction = false; | 2369 rootNode().m_inRemovedLastRefFunction = false; |
2355 #endif | 2370 #endif |
2356 #if !ENABLE(OILPAN) | |
2357 #if SECURITY_ASSERT_ENABLED | 2371 #if SECURITY_ASSERT_ENABLED |
2358 beginDeletion(); | 2372 beginDeletion(); |
2359 #endif | 2373 #endif |
2360 delete this; | 2374 delete this; |
2361 #endif | |
2362 } | 2375 } |
2363 } | 2376 } |
| 2377 #endif |
2364 | 2378 |
2365 // It's important not to inline removedLastRef, because we don't want to inline
the code to | 2379 // It's important not to inline removedLastRef, because we don't want to inline
the code to |
2366 // delete a Node at each deref call site. | 2380 // delete a Node at each deref call site. |
2367 void Node::removedLastRef() | 2381 void Node::removedLastRef() |
2368 { | 2382 { |
2369 // An explicit check for Document here is better than a virtual function sin
ce it is | 2383 // An explicit check for Document here is better than a virtual function sin
ce it is |
2370 // faster for non-Document nodes, and because the call to removedLastRef tha
t is inlined | 2384 // faster for non-Document nodes, and because the call to removedLastRef tha
t is inlined |
2371 // at all deref call sites is smaller if it's a non-virtual function. | 2385 // at all deref call sites is smaller if it's a non-virtual function. |
2372 if (isTreeScope()) { | 2386 if (isTreeScope()) { |
2373 treeScope().removedLastRefToScope(); | 2387 treeScope().removedLastRefToScope(); |
(...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2515 } | 2529 } |
2516 | 2530 |
2517 ASSERT(isHTMLElement() || isSVGElement()); | 2531 ASSERT(isHTMLElement() || isSVGElement()); |
2518 setFlag(CustomElement); | 2532 setFlag(CustomElement); |
2519 setFlag(newState == Upgraded, CustomElementUpgraded); | 2533 setFlag(newState == Upgraded, CustomElementUpgraded); |
2520 | 2534 |
2521 if (oldState == NotCustomElement || newState == Upgraded) | 2535 if (oldState == NotCustomElement || newState == Upgraded) |
2522 setNeedsStyleRecalc(SubtreeStyleChange); // :unresolved has changed | 2536 setNeedsStyleRecalc(SubtreeStyleChange); // :unresolved has changed |
2523 } | 2537 } |
2524 | 2538 |
| 2539 void Node::trace(Visitor* visitor) |
| 2540 { |
| 2541 visitor->trace(m_treeScope); |
| 2542 } |
| 2543 |
2525 } // namespace WebCore | 2544 } // namespace WebCore |
2526 | 2545 |
2527 #ifndef NDEBUG | 2546 #ifndef NDEBUG |
2528 | 2547 |
2529 void showNode(const WebCore::Node* node) | 2548 void showNode(const WebCore::Node* node) |
2530 { | 2549 { |
2531 if (node) | 2550 if (node) |
2532 node->showNode(""); | 2551 node->showNode(""); |
2533 } | 2552 } |
2534 | 2553 |
2535 void showTree(const WebCore::Node* node) | 2554 void showTree(const WebCore::Node* node) |
2536 { | 2555 { |
2537 if (node) | 2556 if (node) |
2538 node->showTreeForThis(); | 2557 node->showTreeForThis(); |
2539 } | 2558 } |
2540 | 2559 |
2541 void showNodePath(const WebCore::Node* node) | 2560 void showNodePath(const WebCore::Node* node) |
2542 { | 2561 { |
2543 if (node) | 2562 if (node) |
2544 node->showNodePathForThis(); | 2563 node->showNodePathForThis(); |
2545 } | 2564 } |
2546 | 2565 |
2547 #endif | 2566 #endif |
OLD | NEW |