Chromium Code Reviews| 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, 2013 Apple Inc. All rights reserved. | 5 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2013 Apple Inc. All rights reserved. |
| 6 * | 6 * |
| 7 * This library is free software; you can redistribute it and/or | 7 * This library is free software; you can redistribute it and/or |
| 8 * modify it under the terms of the GNU Library General Public | 8 * modify it under the terms of the GNU Library General Public |
| 9 * License as published by the Free Software Foundation; either | 9 * License as published by the Free Software Foundation; either |
| 10 * version 2 of the License, or (at your option) any later version. | 10 * version 2 of the License, or (at your option) any later version. |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 44 namespace blink { | 44 namespace blink { |
| 45 | 45 |
| 46 #if ENABLE(ASSERT) | 46 #if ENABLE(ASSERT) |
| 47 unsigned EventDispatchForbiddenScope::s_count = 0; | 47 unsigned EventDispatchForbiddenScope::s_count = 0; |
| 48 #endif | 48 #endif |
| 49 | 49 |
| 50 static void collectChildrenAndRemoveFromOldParent(Node& node, NodeVector& nodes, ExceptionState& exceptionState) | 50 static void collectChildrenAndRemoveFromOldParent(Node& node, NodeVector& nodes, ExceptionState& exceptionState) |
| 51 { | 51 { |
| 52 if (node.isDocumentFragment()) { | 52 if (node.isDocumentFragment()) { |
| 53 DocumentFragment& fragment = toDocumentFragment(node); | 53 DocumentFragment& fragment = toDocumentFragment(node); |
| 54 getChildNodes(fragment, nodes); | 54 appendChildNodes(fragment, nodes); |
| 55 fragment.removeChildren(); | 55 fragment.removeChildren(); |
| 56 return; | 56 return; |
| 57 } | 57 } |
| 58 nodes.append(&node); | 58 nodes.append(&node); |
| 59 if (ContainerNode* oldParent = node.parentNode()) | 59 if (ContainerNode* oldParent = node.parentNode()) |
| 60 oldParent->removeChild(&node, exceptionState); | 60 oldParent->removeChild(&node, exceptionState); |
| 61 } | 61 } |
| 62 | 62 |
| 63 void ContainerNode::removeDetachedChildren() | 63 void ContainerNode::removeDetachedChildren() |
| 64 { | 64 { |
| (...skipping 253 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 318 { | 318 { |
| 319 ASSERT(child.parentNode() == this); | 319 ASSERT(child.parentNode() == this); |
| 320 ChildListMutationScope(*this).willRemoveChild(child); | 320 ChildListMutationScope(*this).willRemoveChild(child); |
| 321 child.notifyMutationObserversNodeWillDetach(); | 321 child.notifyMutationObserversNodeWillDetach(); |
| 322 document().nodeWillBeRemoved(child); // e.g. mutation event listener can cre ate a new range. | 322 document().nodeWillBeRemoved(child); // e.g. mutation event listener can cre ate a new range. |
| 323 } | 323 } |
| 324 | 324 |
| 325 void ContainerNode::willRemoveChildren() | 325 void ContainerNode::willRemoveChildren() |
| 326 { | 326 { |
| 327 NodeVector children; | 327 NodeVector children; |
| 328 getChildNodes(*this, children); | 328 appendChildNodes(*this, children); |
| 329 | 329 |
| 330 ChildListMutationScope mutation(*this); | 330 ChildListMutationScope mutation(*this); |
| 331 for (NodeVector::const_iterator it = children.begin(); it != children.end(); ++it) { | 331 for (NodeVector::const_iterator it = children.begin(); it != children.end(); ++it) { |
| 332 ASSERT(*it); | 332 ASSERT(*it); |
| 333 Node& child = **it; | 333 Node& child = **it; |
| 334 mutation.willRemoveChild(child); | 334 mutation.willRemoveChild(child); |
| 335 child.notifyMutationObserversNodeWillDetach(); | 335 child.notifyMutationObserversNodeWillDetach(); |
| 336 } | 336 } |
| 337 } | 337 } |
| 338 | 338 |
| (...skipping 523 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 862 setNeedsStyleRecalc(LocalStyleChange); | 862 setNeedsStyleRecalc(LocalStyleChange); |
| 863 return; | 863 return; |
| 864 } | 864 } |
| 865 | 865 |
| 866 if (styleChangeType() < SubtreeStyleChange) { | 866 if (styleChangeType() < SubtreeStyleChange) { |
| 867 if (renderStyle()->affectedByHover()) | 867 if (renderStyle()->affectedByHover()) |
| 868 setNeedsStyleRecalc(LocalStyleChange); | 868 setNeedsStyleRecalc(LocalStyleChange); |
| 869 } | 869 } |
| 870 } | 870 } |
| 871 | 871 |
| 872 Element* ContainerNode::firstElementChild() const | |
| 873 { | |
| 874 return ElementTraversal::firstChild(*this); | |
| 875 } | |
| 876 | |
| 877 Element* ContainerNode::lastElementChild() const | |
| 878 { | |
| 879 return ElementTraversal::lastChild(*this); | |
| 880 } | |
| 881 | |
| 882 Vector<RefPtr<Node>> ContainerNode::getChildNodes() const | |
| 883 { | |
| 884 Vector<RefPtr<Node>> result; | |
| 885 for (Node* node = firstChild(); node; node = node->nextSibling()) | |
| 886 result.append(node); | |
| 887 return result; | |
|
eseidel
2015/02/14 00:12:23
This copies the vector unless c++ is smarter now..
| |
| 888 } | |
| 889 | |
| 890 Vector<RefPtr<Element>> ContainerNode::getChildElements() const | |
| 891 { | |
| 892 Vector<RefPtr<Element>> result; | |
| 893 for (Element* element = ElementTraversal::firstWithin(*this); element; eleme nt = ElementTraversal::next(*element, this)) | |
| 894 result.append(element); | |
| 895 return result; | |
| 896 } | |
| 897 | |
| 898 void ContainerNode::append(Vector<RefPtr<Node>>& nodes, ExceptionState& es) | |
| 899 { | |
| 900 RefPtr<ContainerNode> protect(this); | |
| 901 for (auto& node : nodes) { | |
| 902 appendChild(node.release(), es); | |
| 903 if (es.had_exception()) | |
| 904 return; | |
| 905 } | |
| 906 } | |
| 907 | |
| 908 void ContainerNode::prepend(Vector<RefPtr<Node>>& nodes, ExceptionState& es) | |
| 909 { | |
| 910 RefPtr<ContainerNode> protect(this); | |
| 911 RefPtr<Node> refChild = m_firstChild; | |
| 912 for (auto& node : nodes) { | |
| 913 insertBefore(node.release(), refChild.get(), es); | |
| 914 if (es.had_exception()) | |
| 915 return; | |
| 916 } | |
| 917 } | |
| 918 | |
| 919 PassRefPtr<Node> ContainerNode::prependChild(PassRefPtr<Node> node, ExceptionSta te& es) | |
| 920 { | |
| 921 return insertBefore(node, m_firstChild, es); | |
| 922 } | |
| 923 | |
| 924 PassRefPtr<Node> ContainerNode::setChild(PassRefPtr<Node> node, ExceptionState& es) | |
| 925 { | |
| 926 RefPtr<ContainerNode> protect(this); | |
| 927 removeChildren(); | |
| 928 return appendChild(node, es); | |
| 929 } | |
| 930 | |
| 931 void ContainerNode::setChildren(Vector<RefPtr<Node>>& nodes, ExceptionState& es) | |
| 932 { | |
| 933 RefPtr<ContainerNode> protect(this); | |
| 934 removeChildren(); | |
| 935 append(nodes, es); | |
| 936 } | |
| 937 | |
| 872 unsigned ContainerNode::countChildren() const | 938 unsigned ContainerNode::countChildren() const |
| 873 { | 939 { |
| 874 unsigned count = 0; | 940 unsigned count = 0; |
| 875 Node *n; | 941 Node *n; |
| 876 for (n = firstChild(); n; n = n->nextSibling()) | 942 for (n = firstChild(); n; n = n->nextSibling()) |
| 877 count++; | 943 count++; |
| 878 return count; | 944 return count; |
| 879 } | 945 } |
| 880 | 946 |
| 881 PassRefPtr<Element> ContainerNode::querySelector(const AtomicString& selectors, ExceptionState& exceptionState) | 947 PassRefPtr<Element> ContainerNode::querySelector(const AtomicString& selectors, ExceptionState& exceptionState) |
| (...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 945 return true; | 1011 return true; |
| 946 | 1012 |
| 947 if (node->isElementNode() && toElement(node)->shadow()) | 1013 if (node->isElementNode() && toElement(node)->shadow()) |
| 948 return true; | 1014 return true; |
| 949 | 1015 |
| 950 return false; | 1016 return false; |
| 951 } | 1017 } |
| 952 #endif | 1018 #endif |
| 953 | 1019 |
| 954 } // namespace blink | 1020 } // namespace blink |
| OLD | NEW |