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

Side by Side Diff: Source/core/dom/Document.cpp

Issue 642973003: Introduce typed Node/Element iterators for range-based for loops of C++11. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Rename `from` to `fromNext`. Make some parameters const references. Created 6 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 | Annotate | Revision Log
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 * (C) 2006 Alexey Proskuryakov (ap@webkit.org) 5 * (C) 2006 Alexey Proskuryakov (ap@webkit.org)
6 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2011, 2012 Apple Inc. All r ights reserved. 6 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2011, 2012 Apple Inc. All r ights reserved.
7 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. (http://www.t orchmobile.com/) 7 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. (http://www.t orchmobile.com/)
8 * Copyright (C) 2008, 2009, 2011, 2012 Google Inc. All rights reserved. 8 * Copyright (C) 2008, 2009, 2011, 2012 Google Inc. All rights reserved.
9 * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies) 9 * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies)
10 * Copyright (C) Research In Motion Limited 2010-2011. All rights reserved. 10 * Copyright (C) Research In Motion Limited 2010-2011. All rights reserved.
(...skipping 932 matching lines...) Expand 10 before | Expand all | Expand 10 after
943 return ProcessingInstruction::create(*this, target, data); 943 return ProcessingInstruction::create(*this, target, data);
944 } 944 }
945 945
946 PassRefPtrWillBeRawPtr<Text> Document::createEditingTextNode(const String& text) 946 PassRefPtrWillBeRawPtr<Text> Document::createEditingTextNode(const String& text)
947 { 947 {
948 return Text::createEditingText(*this, text); 948 return Text::createEditingText(*this, text);
949 } 949 }
950 950
951 bool Document::importContainerNodeChildren(ContainerNode* oldContainerNode, Pass RefPtrWillBeRawPtr<ContainerNode> newContainerNode, ExceptionState& exceptionSta te) 951 bool Document::importContainerNodeChildren(ContainerNode* oldContainerNode, Pass RefPtrWillBeRawPtr<ContainerNode> newContainerNode, ExceptionState& exceptionSta te)
952 { 952 {
953 for (Node* oldChild = oldContainerNode->firstChild(); oldChild; oldChild = o ldChild->nextSibling()) { 953 for (Node& oldChild : NodeTraversal::childrenOf(*oldContainerNode)) {
954 RefPtrWillBeRawPtr<Node> newChild = importNode(oldChild, true, exception State); 954 RefPtrWillBeRawPtr<Node> newChild = importNode(&oldChild, true, exceptio nState);
955 if (exceptionState.hadException()) 955 if (exceptionState.hadException())
956 return false; 956 return false;
957 newContainerNode->appendChild(newChild.release(), exceptionState); 957 newContainerNode->appendChild(newChild.release(), exceptionState);
958 if (exceptionState.hadException()) 958 if (exceptionState.hadException())
959 return false; 959 return false;
960 } 960 }
961 961
962 return true; 962 return true;
963 } 963 }
964 964
(...skipping 1851 matching lines...) Expand 10 before | Expand all | Expand 10 after
2816 ASSERT(!m_elemSheet->contents()->ruleCount()); 2816 ASSERT(!m_elemSheet->contents()->ruleCount());
2817 bool usesRemUnits = m_elemSheet->contents()->usesRemUnits(); 2817 bool usesRemUnits = m_elemSheet->contents()->usesRemUnits();
2818 m_elemSheet = CSSStyleSheet::createInline(this, m_baseURL); 2818 m_elemSheet = CSSStyleSheet::createInline(this, m_baseURL);
2819 // FIXME: So we are not really the parser. The right fix is to eliminate the element sheet completely. 2819 // FIXME: So we are not really the parser. The right fix is to eliminate the element sheet completely.
2820 m_elemSheet->contents()->parserSetUsesRemUnits(usesRemUnits); 2820 m_elemSheet->contents()->parserSetUsesRemUnits(usesRemUnits);
2821 } 2821 }
2822 2822
2823 if (!equalIgnoringFragmentIdentifier(oldBaseURL, m_baseURL)) { 2823 if (!equalIgnoringFragmentIdentifier(oldBaseURL, m_baseURL)) {
2824 // Base URL change changes any relative visited links. 2824 // Base URL change changes any relative visited links.
2825 // FIXME: There are other URLs in the tree that would need to be re-eval uated on dynamic base URL change. Style should be invalidated too. 2825 // FIXME: There are other URLs in the tree that would need to be re-eval uated on dynamic base URL change. Style should be invalidated too.
2826 for (HTMLAnchorElement* anchor = Traversal<HTMLAnchorElement>::firstWith in(*this); anchor; anchor = Traversal<HTMLAnchorElement>::next(*anchor)) 2826 for (HTMLAnchorElement& anchor : Traversal<HTMLAnchorElement>::fromNext( *this))
2827 anchor->invalidateCachedVisitedLinkHash(); 2827 anchor.invalidateCachedVisitedLinkHash();
2828 } 2828 }
2829 } 2829 }
2830 2830
2831 void Document::setBaseURLOverride(const KURL& url) 2831 void Document::setBaseURLOverride(const KURL& url)
2832 { 2832 {
2833 m_baseURLOverride = url; 2833 m_baseURLOverride = url;
2834 updateBaseURL(); 2834 updateBaseURL();
2835 } 2835 }
2836 2836
2837 void Document::processBaseElement() 2837 void Document::processBaseElement()
(...skipping 403 matching lines...) Expand 10 before | Expand all | Expand 10 after
3241 case DOCUMENT_NODE: 3241 case DOCUMENT_NODE:
3242 case TEXT_NODE: 3242 case TEXT_NODE:
3243 return false; 3243 return false;
3244 case COMMENT_NODE: 3244 case COMMENT_NODE:
3245 case PROCESSING_INSTRUCTION_NODE: 3245 case PROCESSING_INSTRUCTION_NODE:
3246 return true; 3246 return true;
3247 case DOCUMENT_TYPE_NODE: 3247 case DOCUMENT_TYPE_NODE:
3248 case ELEMENT_NODE: 3248 case ELEMENT_NODE:
3249 // Documents may contain no more than one of each of these. 3249 // Documents may contain no more than one of each of these.
3250 // (One Element and one DocumentType.) 3250 // (One Element and one DocumentType.)
3251 for (Node* c = firstChild(); c; c = c->nextSibling()) 3251 for (Node& c : NodeTraversal::childrenOf(*this))
3252 if (c->nodeType() == type) 3252 if (c.nodeType() == type)
3253 return false; 3253 return false;
3254 return true; 3254 return true;
3255 } 3255 }
3256 return false; 3256 return false;
3257 } 3257 }
3258 3258
3259 bool Document::canReplaceChild(const Node& newChild, const Node& oldChild) const 3259 bool Document::canReplaceChild(const Node& newChild, const Node& oldChild) const
3260 { 3260 {
3261 if (oldChild.nodeType() == newChild.nodeType()) 3261 if (oldChild.nodeType() == newChild.nodeType())
3262 return true; 3262 return true;
3263 3263
3264 int numDoctypes = 0; 3264 int numDoctypes = 0;
3265 int numElements = 0; 3265 int numElements = 0;
3266 3266
3267 // First, check how many doctypes and elements we have, not counting 3267 // First, check how many doctypes and elements we have, not counting
3268 // the child we're about to remove. 3268 // the child we're about to remove.
3269 for (Node* c = firstChild(); c; c = c->nextSibling()) { 3269 for (Node& c : NodeTraversal::childrenOf(*this)) {
3270 if (c == oldChild) 3270 if (c == oldChild)
3271 continue; 3271 continue;
3272 3272
3273 switch (c->nodeType()) { 3273 switch (c.nodeType()) {
3274 case DOCUMENT_TYPE_NODE: 3274 case DOCUMENT_TYPE_NODE:
3275 numDoctypes++; 3275 numDoctypes++;
3276 break; 3276 break;
3277 case ELEMENT_NODE: 3277 case ELEMENT_NODE:
3278 numElements++; 3278 numElements++;
3279 break; 3279 break;
3280 default: 3280 default:
3281 break; 3281 break;
3282 } 3282 }
3283 } 3283 }
3284 3284
3285 // Then, see how many doctypes and elements might be added by the new child. 3285 // Then, see how many doctypes and elements might be added by the new child.
3286 if (newChild.isDocumentFragment()) { 3286 if (newChild.isDocumentFragment()) {
3287 for (Node* c = toDocumentFragment(newChild).firstChild(); c; c = c->next Sibling()) { 3287 for (Node& c : NodeTraversal::childrenOf(toDocumentFragment(newChild))) {
3288 switch (c->nodeType()) { 3288 switch (c.nodeType()) {
3289 case ATTRIBUTE_NODE: 3289 case ATTRIBUTE_NODE:
3290 case CDATA_SECTION_NODE: 3290 case CDATA_SECTION_NODE:
3291 case DOCUMENT_FRAGMENT_NODE: 3291 case DOCUMENT_FRAGMENT_NODE:
3292 case DOCUMENT_NODE: 3292 case DOCUMENT_NODE:
3293 case TEXT_NODE: 3293 case TEXT_NODE:
3294 return false; 3294 return false;
3295 case COMMENT_NODE: 3295 case COMMENT_NODE:
3296 case PROCESSING_INSTRUCTION_NODE: 3296 case PROCESSING_INSTRUCTION_NODE:
3297 break; 3297 break;
3298 case DOCUMENT_TYPE_NODE: 3298 case DOCUMENT_TYPE_NODE:
(...skipping 452 matching lines...) Expand 10 before | Expand all | Expand 10 after
3751 { 3751 {
3752 EventDispatchForbiddenScope assertNoEventDispatch; 3752 EventDispatchForbiddenScope assertNoEventDispatch;
3753 if (!m_ranges.isEmpty()) { 3753 if (!m_ranges.isEmpty()) {
3754 AttachedRangeSet::const_iterator end = m_ranges.end(); 3754 AttachedRangeSet::const_iterator end = m_ranges.end();
3755 for (AttachedRangeSet::const_iterator it = m_ranges.begin(); it != end; ++it) 3755 for (AttachedRangeSet::const_iterator it = m_ranges.begin(); it != end; ++it)
3756 (*it)->nodeChildrenWillBeRemoved(container); 3756 (*it)->nodeChildrenWillBeRemoved(container);
3757 } 3757 }
3758 3758
3759 WillBeHeapHashSet<RawPtrWillBeWeakMember<NodeIterator> >::const_iterator nod eIteratorsEnd = m_nodeIterators.end(); 3759 WillBeHeapHashSet<RawPtrWillBeWeakMember<NodeIterator> >::const_iterator nod eIteratorsEnd = m_nodeIterators.end();
3760 for (WillBeHeapHashSet<RawPtrWillBeWeakMember<NodeIterator> >::const_iterato r it = m_nodeIterators.begin(); it != nodeIteratorsEnd; ++it) { 3760 for (WillBeHeapHashSet<RawPtrWillBeWeakMember<NodeIterator> >::const_iterato r it = m_nodeIterators.begin(); it != nodeIteratorsEnd; ++it) {
3761 for (Node* n = container.firstChild(); n; n = n->nextSibling()) 3761 for (Node& n : NodeTraversal::childrenOf(container))
3762 (*it)->nodeWillBeRemoved(*n); 3762 (*it)->nodeWillBeRemoved(n);
3763 } 3763 }
3764 3764
3765 if (LocalFrame* frame = this->frame()) { 3765 if (LocalFrame* frame = this->frame()) {
3766 for (Node* n = container.firstChild(); n; n = n->nextSibling()) { 3766 for (Node& n : NodeTraversal::childrenOf(container)) {
3767 frame->eventHandler().nodeWillBeRemoved(*n); 3767 frame->eventHandler().nodeWillBeRemoved(n);
3768 frame->selection().nodeWillBeRemoved(*n); 3768 frame->selection().nodeWillBeRemoved(n);
3769 frame->page()->dragCaretController().nodeWillBeRemoved(*n); 3769 frame->page()->dragCaretController().nodeWillBeRemoved(n);
3770 } 3770 }
3771 } 3771 }
3772 } 3772 }
3773 3773
3774 void Document::nodeWillBeRemoved(Node& n) 3774 void Document::nodeWillBeRemoved(Node& n)
3775 { 3775 {
3776 WillBeHeapHashSet<RawPtrWillBeWeakMember<NodeIterator> >::const_iterator nod eIteratorsEnd = m_nodeIterators.end(); 3776 WillBeHeapHashSet<RawPtrWillBeWeakMember<NodeIterator> >::const_iterator nod eIteratorsEnd = m_nodeIterators.end();
3777 for (WillBeHeapHashSet<RawPtrWillBeWeakMember<NodeIterator> >::const_iterato r it = m_nodeIterators.begin(); it != nodeIteratorsEnd; ++it) 3777 for (WillBeHeapHashSet<RawPtrWillBeWeakMember<NodeIterator> >::const_iterato r it = m_nodeIterators.begin(); it != nodeIteratorsEnd; ++it)
3778 (*it)->nodeWillBeRemoved(n); 3778 (*it)->nodeWillBeRemoved(n);
3779 3779
(...skipping 2074 matching lines...) Expand 10 before | Expand all | Expand 10 after
5854 using namespace blink; 5854 using namespace blink;
5855 void showLiveDocumentInstances() 5855 void showLiveDocumentInstances()
5856 { 5856 {
5857 WeakDocumentSet& set = liveDocumentSet(); 5857 WeakDocumentSet& set = liveDocumentSet();
5858 fprintf(stderr, "There are %u documents currently alive:\n", set.size()); 5858 fprintf(stderr, "There are %u documents currently alive:\n", set.size());
5859 for (WeakDocumentSet::const_iterator it = set.begin(); it != set.end(); ++it ) { 5859 for (WeakDocumentSet::const_iterator it = set.begin(); it != set.end(); ++it ) {
5860 fprintf(stderr, "- Document %p URL: %s\n", *it, (*it)->url().string().ut f8().data()); 5860 fprintf(stderr, "- Document %p URL: %s\n", *it, (*it)->url().string().ut f8().data());
5861 } 5861 }
5862 } 5862 }
5863 #endif 5863 #endif
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698