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

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

Issue 132923003: Make sure the rootNode of a LiveNodeListBase is always a ContainerNode (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Rebase Created 6 years, 11 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
« no previous file with comments | « Source/core/dom/Node.h ('k') | Source/core/dom/NodeList.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 16 matching lines...) Expand all
27 27
28 #include "HTMLNames.h" 28 #include "HTMLNames.h"
29 #include "XMLNames.h" 29 #include "XMLNames.h"
30 #include "bindings/v8/ExceptionState.h" 30 #include "bindings/v8/ExceptionState.h"
31 #include "bindings/v8/ScriptCallStackFactory.h" 31 #include "bindings/v8/ScriptCallStackFactory.h"
32 #include "core/accessibility/AXObjectCache.h" 32 #include "core/accessibility/AXObjectCache.h"
33 #include "core/dom/Attr.h" 33 #include "core/dom/Attr.h"
34 #include "core/dom/Attribute.h" 34 #include "core/dom/Attribute.h"
35 #include "core/dom/ChildListMutationScope.h" 35 #include "core/dom/ChildListMutationScope.h"
36 #include "core/dom/ChildNodeList.h" 36 #include "core/dom/ChildNodeList.h"
37 #include "core/dom/ClassNodeList.h"
38 #include "core/dom/DOMImplementation.h" 37 #include "core/dom/DOMImplementation.h"
39 #include "core/dom/Document.h" 38 #include "core/dom/Document.h"
40 #include "core/dom/DocumentFragment.h" 39 #include "core/dom/DocumentFragment.h"
41 #include "core/dom/DocumentMarkerController.h" 40 #include "core/dom/DocumentMarkerController.h"
42 #include "core/dom/DocumentType.h" 41 #include "core/dom/DocumentType.h"
43 #include "core/dom/Element.h" 42 #include "core/dom/Element.h"
44 #include "core/dom/ElementRareData.h" 43 #include "core/dom/ElementRareData.h"
45 #include "core/dom/ExceptionCode.h" 44 #include "core/dom/ExceptionCode.h"
46 #include "core/dom/LiveNodeList.h" 45 #include "core/dom/LiveNodeList.h"
47 #include "core/dom/NameNodeList.h"
48 #include "core/dom/NodeRareData.h" 46 #include "core/dom/NodeRareData.h"
49 #include "core/dom/NodeTraversal.h" 47 #include "core/dom/NodeTraversal.h"
50 #include "core/dom/ProcessingInstruction.h" 48 #include "core/dom/ProcessingInstruction.h"
51 #include "core/dom/Range.h" 49 #include "core/dom/Range.h"
52 #include "core/dom/SelectorQuery.h" 50 #include "core/dom/SelectorQuery.h"
53 #include "core/dom/StaticNodeList.h" 51 #include "core/dom/StaticNodeList.h"
54 #include "core/dom/TagNodeList.h" 52 #include "core/dom/TagNodeList.h"
55 #include "core/dom/TemplateContentDocumentFragment.h" 53 #include "core/dom/TemplateContentDocumentFragment.h"
56 #include "core/dom/Text.h" 54 #include "core/dom/Text.h"
57 #include "core/dom/TreeScopeAdopter.h" 55 #include "core/dom/TreeScopeAdopter.h"
(...skipping 14 matching lines...) Expand all
72 #include "core/events/MutationEvent.h" 70 #include "core/events/MutationEvent.h"
73 #include "core/events/TextEvent.h" 71 #include "core/events/TextEvent.h"
74 #include "core/events/ThreadLocalEventNames.h" 72 #include "core/events/ThreadLocalEventNames.h"
75 #include "core/events/TouchEvent.h" 73 #include "core/events/TouchEvent.h"
76 #include "core/events/UIEvent.h" 74 #include "core/events/UIEvent.h"
77 #include "core/events/WheelEvent.h" 75 #include "core/events/WheelEvent.h"
78 #include "core/html/HTMLAnchorElement.h" 76 #include "core/html/HTMLAnchorElement.h"
79 #include "core/html/HTMLDialogElement.h" 77 #include "core/html/HTMLDialogElement.h"
80 #include "core/html/HTMLFrameOwnerElement.h" 78 #include "core/html/HTMLFrameOwnerElement.h"
81 #include "core/html/HTMLStyleElement.h" 79 #include "core/html/HTMLStyleElement.h"
82 #include "core/html/RadioNodeList.h"
83 #include "core/page/ContextMenuController.h" 80 #include "core/page/ContextMenuController.h"
84 #include "core/page/EventHandler.h" 81 #include "core/page/EventHandler.h"
85 #include "core/frame/Frame.h" 82 #include "core/frame/Frame.h"
86 #include "core/page/Page.h" 83 #include "core/page/Page.h"
87 #include "core/frame/Settings.h" 84 #include "core/frame/Settings.h"
88 #include "core/rendering/FlowThreadController.h" 85 #include "core/rendering/FlowThreadController.h"
89 #include "core/rendering/RenderBox.h" 86 #include "core/rendering/RenderBox.h"
90 #include "core/svg/graphics/SVGImage.h" 87 #include "core/svg/graphics/SVGImage.h"
91 #include "platform/Partitions.h" 88 #include "platform/Partitions.h"
92 #include "wtf/HashSet.h" 89 #include "wtf/HashSet.h"
(...skipping 260 matching lines...) Expand 10 before | Expand all | Expand 10 after
353 return String(); 350 return String();
354 } 351 }
355 352
356 void Node::setNodeValue(const String&) 353 void Node::setNodeValue(const String&)
357 { 354 {
358 // By default, setting nodeValue has no effect. 355 // By default, setting nodeValue has no effect.
359 } 356 }
360 357
361 PassRefPtr<NodeList> Node::childNodes() 358 PassRefPtr<NodeList> Node::childNodes()
362 { 359 {
363 return ensureRareData().ensureNodeLists().ensureChildNodeList(this); 360 if (isContainerNode())
361 return ensureRareData().ensureNodeLists().ensureChildNodeList(toContaine rNode(this));
362 return ensureRareData().ensureNodeLists().ensureEmptyChildNodeList(this);
364 } 363 }
365 364
366 Node& Node::lastDescendant() const 365 Node& Node::lastDescendant() const
367 { 366 {
368 Node* n = const_cast<Node*>(this); 367 Node* n = const_cast<Node*>(this);
369 while (n && n->lastChild()) 368 while (n && n->lastChild())
370 n = n->lastChild(); 369 n = n->lastChild();
371 ASSERT(n); 370 ASSERT(n);
372 return *n; 371 return *n;
373 } 372 }
(...skipping 877 matching lines...) Expand 10 before | Expand all | Expand 10 after
1251 return result; 1250 return result;
1252 } 1251 }
1253 1252
1254 bool Node::inSameContainingBlockFlowElement(Node *n) 1253 bool Node::inSameContainingBlockFlowElement(Node *n)
1255 { 1254 {
1256 return n ? enclosingBlockFlowElement() == n->enclosingBlockFlowElement() : f alse; 1255 return n ? enclosingBlockFlowElement() == n->enclosingBlockFlowElement() : f alse;
1257 } 1256 }
1258 1257
1259 // FIXME: End of obviously misplaced HTML editing functions. Try to move these out of Node. 1258 // FIXME: End of obviously misplaced HTML editing functions. Try to move these out of Node.
1260 1259
1261 PassRefPtr<NodeList> Node::getElementsByTagName(const AtomicString& localName)
1262 {
1263 if (localName.isNull())
1264 return 0;
1265
1266 if (document().isHTMLDocument())
1267 return ensureRareData().ensureNodeLists().addCacheWithAtomicName<HTMLTag NodeList>(this, HTMLTagNodeListType, localName);
1268 return ensureRareData().ensureNodeLists().addCacheWithAtomicName<TagNodeList >(this, TagNodeListType, localName);
1269 }
1270
1271 PassRefPtr<NodeList> Node::getElementsByTagNameNS(const AtomicString& namespaceU RI, const AtomicString& localName)
1272 {
1273 if (localName.isNull())
1274 return 0;
1275
1276 if (namespaceURI == starAtom)
1277 return getElementsByTagName(localName);
1278
1279 return ensureRareData().ensureNodeLists().addCacheWithQualifiedName(this, na mespaceURI.isEmpty() ? nullAtom : namespaceURI, localName);
1280 }
1281
1282 // Takes an AtomicString in argument because it is common for elements to share the same name attribute.
1283 // Therefore, the NameNodeList factory function expects an AtomicString type.
1284 PassRefPtr<NodeList> Node::getElementsByName(const AtomicString& elementName)
1285 {
1286 return ensureRareData().ensureNodeLists().addCacheWithAtomicName<NameNodeLis t>(this, NameNodeListType, elementName);
1287 }
1288
1289 // Takes an AtomicString in argument because it is common for elements to share the same set of class names.
1290 // Therefore, the ClassNodeList factory function expects an AtomicString type.
1291 PassRefPtr<NodeList> Node::getElementsByClassName(const AtomicString& classNames )
1292 {
1293 return ensureRareData().ensureNodeLists().addCacheWithAtomicName<ClassNodeLi st>(this, ClassNodeListType, classNames);
1294 }
1295
1296 PassRefPtr<RadioNodeList> Node::radioNodeList(const AtomicString& name, bool onl yMatchImgElements)
1297 {
1298 ASSERT(hasTagName(formTag) || hasTagName(fieldsetTag));
1299 CollectionType type = onlyMatchImgElements ? RadioImgNodeListType : RadioNod eListType;
1300 return ensureRareData().ensureNodeLists().addCacheWithAtomicName<RadioNodeLi st>(this, type, name);
1301 }
1302
1303 PassRefPtr<Element> Node::querySelector(const AtomicString& selectors, Exception State& exceptionState) 1260 PassRefPtr<Element> Node::querySelector(const AtomicString& selectors, Exception State& exceptionState)
1304 { 1261 {
1305 if (selectors.isEmpty()) { 1262 if (selectors.isEmpty()) {
1306 exceptionState.throwDOMException(SyntaxError, "The provided selector is empty."); 1263 exceptionState.throwDOMException(SyntaxError, "The provided selector is empty.");
1307 return 0; 1264 return 0;
1308 } 1265 }
1309 1266
1310 SelectorQuery* selectorQuery = document().selectorQueryCache().add(selectors , document(), exceptionState); 1267 SelectorQuery* selectorQuery = document().selectorQueryCache().add(selectors , document(), exceptionState);
1311 if (!selectorQuery) 1268 if (!selectorQuery)
1312 return 0; 1269 return 0;
(...skipping 1318 matching lines...) Expand 10 before | Expand all | Expand 10 after
2631 node->showTreeForThis(); 2588 node->showTreeForThis();
2632 } 2589 }
2633 2590
2634 void showNodePath(const WebCore::Node* node) 2591 void showNodePath(const WebCore::Node* node)
2635 { 2592 {
2636 if (node) 2593 if (node)
2637 node->showNodePathForThis(); 2594 node->showNodePathForThis();
2638 } 2595 }
2639 2596
2640 #endif 2597 #endif
OLDNEW
« no previous file with comments | « Source/core/dom/Node.h ('k') | Source/core/dom/NodeList.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698