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

Side by Side Diff: Source/WebCore/dom/Node.cpp

Issue 12518022: Merge 143840 (Closed) Base URL: http://svn.webkit.org/repository/webkit/branches/chromium/1410/
Patch Set: Created 7 years, 9 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 | « Source/WebCore/dom/Node.h ('k') | Source/WebCore/dom/ShadowRoot.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 419 matching lines...) Expand 10 before | Expand all | Expand 10 after
430 detach(); 430 detach();
431 431
432 if (AXObjectCache::accessibilityEnabled() && doc && doc->axObjectCacheExists () && !isContainerNode()) 432 if (AXObjectCache::accessibilityEnabled() && doc && doc->axObjectCacheExists () && !isContainerNode())
433 doc->axObjectCache()->remove(this); 433 doc->axObjectCache()->remove(this);
434 434
435 if (m_previous) 435 if (m_previous)
436 m_previous->setNextSibling(0); 436 m_previous->setNextSibling(0);
437 if (m_next) 437 if (m_next)
438 m_next->setPreviousSibling(0); 438 m_next->setPreviousSibling(0);
439 439
440 if (doc) 440 m_treeScope->guardDeref();
441 doc->guardDeref();
442 441
443 InspectorCounters::decrementCounter(InspectorCounters::NodeCounter); 442 InspectorCounters::decrementCounter(InspectorCounters::NodeCounter);
444 } 443 }
445 444
446 NodeRareData* Node::rareData() const 445 NodeRareData* Node::rareData() const
447 { 446 {
448 ASSERT(hasRareData()); 447 ASSERT(hasRareData());
449 return static_cast<NodeRareData*>(m_data.m_rareData); 448 return static_cast<NodeRareData*>(m_data.m_rareData);
450 } 449 }
451 450
(...skipping 428 matching lines...) Expand 10 before | Expand all | Expand 10 after
880 ASSERT(!document()->childNeedsStyleRecalc()); 879 ASSERT(!document()->childNeedsStyleRecalc());
881 880
882 // FIXME: Even if we are not visible, we might have a child that is visible. 881 // FIXME: Even if we are not visible, we might have a child that is visible.
883 // Hyatt wants to fix that some day with a "has visible content" flag or the like. 882 // Hyatt wants to fix that some day with a "has visible content" flag or the like.
884 if (!renderer() || renderer()->style()->visibility() != VISIBLE) 883 if (!renderer() || renderer()->style()->visibility() != VISIBLE)
885 return false; 884 return false;
886 885
887 return true; 886 return true;
888 } 887 }
889 888
890 bool Node::isTreeScope() const
891 {
892 return treeScope()->rootNode() == this;
893 }
894
895 bool Node::isKeyboardFocusable(KeyboardEvent*) const 889 bool Node::isKeyboardFocusable(KeyboardEvent*) const
896 { 890 {
897 return isFocusable() && tabIndex() >= 0; 891 return isFocusable() && tabIndex() >= 0;
898 } 892 }
899 893
900 bool Node::isMouseFocusable() const 894 bool Node::isMouseFocusable() const
901 { 895 {
902 return isFocusable(); 896 return isFocusable();
903 } 897 }
904 898
(...skipping 1649 matching lines...) Expand 10 before | Expand all | Expand 10 after
2554 { 2548 {
2555 ensureRareData()->ensureMicroDataTokenLists()->itemType(this)->setValueInter nal(value); 2549 ensureRareData()->ensureMicroDataTokenLists()->itemType(this)->setValueInter nal(value);
2556 } 2550 }
2557 2551
2558 PassRefPtr<PropertyNodeList> Node::propertyNodeList(const String& name) 2552 PassRefPtr<PropertyNodeList> Node::propertyNodeList(const String& name)
2559 { 2553 {
2560 return ensureRareData()->ensureNodeLists()->addCacheWithName<PropertyNodeLis t>(this, PropertyNodeListType, name); 2554 return ensureRareData()->ensureNodeLists()->addCacheWithName<PropertyNodeLis t>(this, PropertyNodeListType, name);
2561 } 2555 }
2562 #endif 2556 #endif
2563 2557
2558 // This is here for inlining
2559 inline void TreeScope::removedLastRefToScope()
2560 {
2561 ASSERT(!deletionHasBegun());
2562 if (m_guardRefCount) {
2563 // If removing a child removes the last self-only ref, we don't
2564 // want the scope to be destructed until after
2565 // removeDetachedChildren returns, so we guard ourselves with an
2566 // extra self-only ref.
2567 guardRef();
2568 dispose();
2569 #ifndef NDEBUG
2570 // We need to do this right now since guardDeref() can delete this.
2571 rootNode()->m_inRemovedLastRefFunction = false;
2572 #endif
2573 guardDeref();
2574 } else {
2575 #ifndef NDEBUG
2576 rootNode()->m_inRemovedLastRefFunction = false;
2577 beginDeletion();
2578 #endif
2579 delete this;
2580 }
2581 }
2582
2564 // It's important not to inline removedLastRef, because we don't want to inline the code to 2583 // It's important not to inline removedLastRef, because we don't want to inline the code to
2565 // delete a Node at each deref call site. 2584 // delete a Node at each deref call site.
2566 void Node::removedLastRef() 2585 void Node::removedLastRef()
2567 { 2586 {
2568 // An explicit check for Document here is better than a virtual function sin ce it is 2587 // An explicit check for Document here is better than a virtual function sin ce it is
2569 // faster for non-Document nodes, and because the call to removedLastRef tha t is inlined 2588 // faster for non-Document nodes, and because the call to removedLastRef tha t is inlined
2570 // at all deref call sites is smaller if it's a non-virtual function. 2589 // at all deref call sites is smaller if it's a non-virtual function.
2571 if (isDocumentNode()) { 2590 if (isTreeScope()) {
2572 static_cast<Document*>(this)->removedLastRef(); 2591 treeScope()->removedLastRefToScope();
2573 return; 2592 return;
2574 } 2593 }
2594
2575 #ifndef NDEBUG 2595 #ifndef NDEBUG
2576 m_deletionHasBegun = true; 2596 m_deletionHasBegun = true;
2577 #endif 2597 #endif
2578 delete this; 2598 delete this;
2579 } 2599 }
2580 2600
2581 void Node::reportMemoryUsage(MemoryObjectInfo* memoryObjectInfo) const 2601 void Node::reportMemoryUsage(MemoryObjectInfo* memoryObjectInfo) const
2582 { 2602 {
2583 MemoryClassInfo info(memoryObjectInfo, this, WebCoreMemoryTypes::DOM); 2603 MemoryClassInfo info(memoryObjectInfo, this, WebCoreMemoryTypes::DOM);
2584 ScriptWrappable::reportMemoryUsage(memoryObjectInfo); 2604 ScriptWrappable::reportMemoryUsage(memoryObjectInfo);
(...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after
2714 node->showTreeForThis(); 2734 node->showTreeForThis();
2715 } 2735 }
2716 2736
2717 void showNodePath(const WebCore::Node* node) 2737 void showNodePath(const WebCore::Node* node)
2718 { 2738 {
2719 if (node) 2739 if (node)
2720 node->showNodePathForThis(); 2740 node->showNodePathForThis();
2721 } 2741 }
2722 2742
2723 #endif 2743 #endif
OLDNEW
« no previous file with comments | « Source/WebCore/dom/Node.h ('k') | Source/WebCore/dom/ShadowRoot.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698