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

Side by Side Diff: third_party/WebKit/Source/core/html/HTMLCollection.cpp

Issue 2868823002: getElementsByTagName() should take a qualifiedName in parameter (Closed)
Patch Set: Added new file AllDescendantsCollection.h Created 3 years, 7 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
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 * Copyright (C) 2003-2008, 2011, 2012, 2014 Apple Inc. All rights reserved. 4 * Copyright (C) 2003-2008, 2011, 2012, 2014 Apple Inc. All rights reserved.
5 * Copyright (C) 2014 Samsung Electronics. All rights reserved. 5 * Copyright (C) 2014 Samsung Electronics. 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.
11 * 11 *
12 * This library is distributed in the hope that it will be useful, 12 * This library is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * Library General Public License for more details. 15 * Library General Public License for more details.
16 * 16 *
17 * You should have received a copy of the GNU Library General Public License 17 * You should have received a copy of the GNU Library General Public License
18 * along with this library; see the file COPYING.LIB. If not, write to 18 * along with this library; see the file COPYING.LIB. If not, write to
19 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 19 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
20 * Boston, MA 02110-1301, USA. 20 * Boston, MA 02110-1301, USA.
21 * 21 *
22 */ 22 */
23 23
24 #include "core/html/HTMLCollection.h" 24 #include "core/html/HTMLCollection.h"
25 25
26 #include "core/HTMLNames.h" 26 #include "core/HTMLNames.h"
27 #include "core/dom/AllDescendantsCollection.h"
27 #include "core/dom/ClassCollection.h" 28 #include "core/dom/ClassCollection.h"
28 #include "core/dom/ElementTraversal.h" 29 #include "core/dom/ElementTraversal.h"
29 #include "core/dom/NodeRareData.h" 30 #include "core/dom/NodeRareData.h"
30 #include "core/html/DocumentNameCollection.h" 31 #include "core/html/DocumentNameCollection.h"
31 #include "core/html/HTMLDataListOptionsCollection.h" 32 #include "core/html/HTMLDataListOptionsCollection.h"
32 #include "core/html/HTMLElement.h" 33 #include "core/html/HTMLElement.h"
33 #include "core/html/HTMLFormControlElement.h" 34 #include "core/html/HTMLFormControlElement.h"
34 #include "core/html/HTMLObjectElement.h" 35 #include "core/html/HTMLObjectElement.h"
35 #include "core/html/HTMLOptionElement.h" 36 #include "core/html/HTMLOptionElement.h"
36 #include "core/html/HTMLOptionsCollection.h" 37 #include "core/html/HTMLOptionsCollection.h"
37 #include "core/html/HTMLTagCollection.h" 38 #include "core/html/HTMLTagCollection.h"
38 #include "core/html/WindowNameCollection.h" 39 #include "core/html/WindowNameCollection.h"
39 #include "platform/wtf/HashSet.h" 40 #include "platform/wtf/HashSet.h"
40 41
41 namespace blink { 42 namespace blink {
42 43
43 using namespace HTMLNames; 44 using namespace HTMLNames;
44 45
45 static bool ShouldTypeOnlyIncludeDirectChildren(CollectionType type) { 46 static bool ShouldTypeOnlyIncludeDirectChildren(CollectionType type) {
46 switch (type) { 47 switch (type) {
47 case kClassCollectionType: 48 case kClassCollectionType:
48 case kTagCollectionType: 49 case kTagCollectionType:
50 case kTagCollectionNSType:
49 case kHTMLTagCollectionType: 51 case kHTMLTagCollectionType:
52 case kAllDescendantsCollectionType:
50 case kDocAll: 53 case kDocAll:
51 case kDocAnchors: 54 case kDocAnchors:
52 case kDocApplets: 55 case kDocApplets:
53 case kDocEmbeds: 56 case kDocEmbeds:
54 case kDocForms: 57 case kDocForms:
55 case kDocImages: 58 case kDocImages:
56 case kDocLinks: 59 case kDocLinks:
57 case kDocScripts: 60 case kDocScripts:
58 case kDocumentNamedItems: 61 case kDocumentNamedItems:
59 case kMapAreas: 62 case kMapAreas:
(...skipping 28 matching lines...) Expand all
88 case kDocForms: 91 case kDocForms:
89 case kDocLinks: 92 case kDocLinks:
90 case kDocAnchors: 93 case kDocAnchors:
91 case kDocScripts: 94 case kDocScripts:
92 case kDocAll: 95 case kDocAll:
93 case kWindowNamedItems: 96 case kWindowNamedItems:
94 case kDocumentNamedItems: 97 case kDocumentNamedItems:
95 return NodeListRootType::kTreeScope; 98 return NodeListRootType::kTreeScope;
96 case kClassCollectionType: 99 case kClassCollectionType:
97 case kTagCollectionType: 100 case kTagCollectionType:
101 case kTagCollectionNSType:
98 case kHTMLTagCollectionType: 102 case kHTMLTagCollectionType:
103 case kAllDescendantsCollectionType:
99 case kNodeChildren: 104 case kNodeChildren:
100 case kTableTBodies: 105 case kTableTBodies:
101 case kTSectionRows: 106 case kTSectionRows:
102 case kTableRows: 107 case kTableRows:
103 case kTRCells: 108 case kTRCells:
104 case kSelectOptions: 109 case kSelectOptions:
105 case kSelectedOptions: 110 case kSelectedOptions:
106 case kDataListOptions: 111 case kDataListOptions:
107 case kMapAreas: 112 case kMapAreas:
108 return NodeListRootType::kNode; 113 return NodeListRootType::kNode;
109 case kFormControls: 114 case kFormControls:
110 if (isHTMLFieldSetElement(owner)) 115 if (isHTMLFieldSetElement(owner))
111 return NodeListRootType::kNode; 116 return NodeListRootType::kNode;
112 DCHECK(isHTMLFormElement(owner)); 117 DCHECK(isHTMLFormElement(owner));
113 return NodeListRootType::kTreeScope; 118 return NodeListRootType::kTreeScope;
114 case kNameNodeListType: 119 case kNameNodeListType:
115 case kRadioNodeListType: 120 case kRadioNodeListType:
116 case kRadioImgNodeListType: 121 case kRadioImgNodeListType:
117 case kLabelsNodeListType: 122 case kLabelsNodeListType:
118 break; 123 break;
119 } 124 }
120 NOTREACHED(); 125 NOTREACHED();
121 return NodeListRootType::kNode; 126 return NodeListRootType::kNode;
122 } 127 }
123 128
124 static NodeListInvalidationType InvalidationTypeExcludingIdAndNameAttributes( 129 static NodeListInvalidationType InvalidationTypeExcludingIdAndNameAttributes(
125 CollectionType type) { 130 CollectionType type) {
126 switch (type) { 131 switch (type) {
127 case kTagCollectionType: 132 case kTagCollectionType:
133 case kTagCollectionNSType:
128 case kHTMLTagCollectionType: 134 case kHTMLTagCollectionType:
135 case kAllDescendantsCollectionType:
129 case kDocImages: 136 case kDocImages:
130 case kDocEmbeds: 137 case kDocEmbeds:
131 case kDocForms: 138 case kDocForms:
132 case kDocScripts: 139 case kDocScripts:
133 case kDocAll: 140 case kDocAll:
134 case kNodeChildren: 141 case kNodeChildren:
135 case kTableTBodies: 142 case kTableTBodies:
136 case kTSectionRows: 143 case kTSectionRows:
137 case kTableRows: 144 case kTableRows:
138 case kTRCells: 145 case kTRCells:
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after
237 case kDocLinks: 244 case kDocLinks:
238 return (element.HasTagName(aTag) || element.HasTagName(areaTag)) && 245 return (element.HasTagName(aTag) || element.HasTagName(areaTag)) &&
239 element.FastHasAttribute(hrefAttr); 246 element.FastHasAttribute(hrefAttr);
240 case kDocAnchors: 247 case kDocAnchors:
241 return element.HasTagName(aTag) && element.FastHasAttribute(nameAttr); 248 return element.HasTagName(aTag) && element.FastHasAttribute(nameAttr);
242 case kFormControls: 249 case kFormControls:
243 DCHECK(isHTMLFieldSetElement(html_collection.ownerNode())); 250 DCHECK(isHTMLFieldSetElement(html_collection.ownerNode()));
244 return isHTMLObjectElement(element) || IsHTMLFormControlElement(element); 251 return isHTMLObjectElement(element) || IsHTMLFormControlElement(element);
245 case kClassCollectionType: 252 case kClassCollectionType:
246 case kTagCollectionType: 253 case kTagCollectionType:
254 case kTagCollectionNSType:
247 case kHTMLTagCollectionType: 255 case kHTMLTagCollectionType:
256 case kAllDescendantsCollectionType:
248 case kDocAll: 257 case kDocAll:
249 case kNodeChildren: 258 case kNodeChildren:
250 case kTableRows: 259 case kTableRows:
251 case kWindowNamedItems: 260 case kWindowNamedItems:
252 case kNameNodeListType: 261 case kNameNodeListType:
253 case kRadioNodeListType: 262 case kRadioNodeListType:
254 case kRadioImgNodeListType: 263 case kRadioImgNodeListType:
255 case kLabelsNodeListType: 264 case kLabelsNodeListType:
256 NOTREACHED(); 265 NOTREACHED();
257 } 266 }
258 return false; 267 return false;
259 } 268 }
260 269
261 inline bool HTMLCollection::ElementMatches(const Element& element) const { 270 inline bool HTMLCollection::ElementMatches(const Element& element) const {
262 // These collections apply to any kind of Elements, not just HTMLElements. 271 // These collections apply to any kind of Elements, not just HTMLElements.
263 switch (GetType()) { 272 switch (GetType()) {
264 case kDocAll: 273 case kDocAll:
265 case kNodeChildren: 274 case kNodeChildren:
266 return true; 275 return true;
267 case kClassCollectionType: 276 case kClassCollectionType:
268 return ToClassCollection(*this).ElementMatches(element); 277 return ToClassCollection(*this).ElementMatches(element);
269 case kTagCollectionType: 278 case kTagCollectionType:
270 return ToTagCollection(*this).ElementMatches(element); 279 return ToTagCollection(*this).ElementMatches(element);
271 case kHTMLTagCollectionType: 280 case kHTMLTagCollectionType:
272 return ToHTMLTagCollection(*this).ElementMatches(element); 281 return ToHTMLTagCollection(*this).ElementMatches(element);
282 case kTagCollectionNSType:
283 return ToTagCollectionNS(*this).ElementMatches(element);
284 case kAllDescendantsCollectionType:
285 return ToAllDescendantsCollection(*this).ElementMatches(element);
273 case kWindowNamedItems: 286 case kWindowNamedItems:
274 return ToWindowNameCollection(*this).ElementMatches(element); 287 return ToWindowNameCollection(*this).ElementMatches(element);
275 default: 288 default:
276 break; 289 break;
277 } 290 }
278 291
279 // The following only applies to HTMLElements. 292 // The following only applies to HTMLElements.
280 return element.IsHTMLElement() && 293 return element.IsHTMLElement() &&
281 IsMatchingHTMLElement(*this, ToHTMLElement(element)); 294 IsMatchingHTMLElement(*this, ToHTMLElement(element));
282 } 295 }
(...skipping 236 matching lines...) Expand 10 before | Expand all | Expand 10 after
519 532
520 HTMLCollection::NamedItemCache::NamedItemCache() {} 533 HTMLCollection::NamedItemCache::NamedItemCache() {}
521 534
522 DEFINE_TRACE(HTMLCollection) { 535 DEFINE_TRACE(HTMLCollection) {
523 visitor->Trace(named_item_cache_); 536 visitor->Trace(named_item_cache_);
524 visitor->Trace(collection_items_cache_); 537 visitor->Trace(collection_items_cache_);
525 LiveNodeListBase::Trace(visitor); 538 LiveNodeListBase::Trace(visitor);
526 } 539 }
527 540
528 } // namespace blink 541 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698