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

Side by Side Diff: Source/core/html/HTMLNameCollection.cpp

Issue 315473002: Stop having HTMLNameCollection override HTMLCollection::virtualItemAfter() (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Rebase Created 6 years, 6 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 * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2011, 2012 Apple Inc. All rights reserved. 4 * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2011, 2012 Apple Inc. All rights reserved.
5 * 5 *
6 * This library is free software; you can redistribute it and/or 6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Library General Public 7 * modify it under the terms of the GNU Library General Public
8 * License as published by the Free Software Foundation; either 8 * License as published by the Free Software Foundation; either
9 * version 2 of the License, or (at your option) any later version. 9 * version 2 of the License, or (at your option) any later version.
10 * 10 *
11 * This library is distributed in the hope that it will be useful, 11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Library General Public License for more details. 14 * Library General Public License for more details.
15 * 15 *
16 * You should have received a copy of the GNU Library General Public License 16 * You should have received a copy of the GNU Library General Public License
17 * along with this library; see the file COPYING.LIB. If not, write to 17 * along with this library; see the file COPYING.LIB. If not, write to
18 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 18 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
19 * Boston, MA 02110-1301, USA. 19 * Boston, MA 02110-1301, USA.
20 * 20 *
21 */ 21 */
22 22
23 #include "config.h" 23 #include "config.h"
24 #include "core/html/HTMLNameCollection.h" 24 #include "core/html/HTMLNameCollection.h"
25 25
26 #include "HTMLNames.h"
27 #include "core/dom/Element.h"
28 #include "core/dom/ElementTraversal.h"
29 #include "core/dom/NodeRareData.h" 26 #include "core/dom/NodeRareData.h"
30 #include "core/html/HTMLEmbedElement.h"
31 #include "core/html/HTMLObjectElement.h"
32 27
33 namespace WebCore { 28 namespace WebCore {
34 29
35 using namespace HTMLNames;
36
37 HTMLNameCollection::HTMLNameCollection(ContainerNode& document, CollectionType t ype, const AtomicString& name) 30 HTMLNameCollection::HTMLNameCollection(ContainerNode& document, CollectionType t ype, const AtomicString& name)
38 : HTMLCollection(document, type, OverridesItemAfter) 31 : HTMLCollection(document, type, DoesNotOverrideItemAfter)
39 , m_name(name) 32 , m_name(name)
40 { 33 {
41 } 34 }
42 35
43 HTMLNameCollection::~HTMLNameCollection() 36 HTMLNameCollection::~HTMLNameCollection()
44 { 37 {
45 ASSERT(type() == WindowNamedItems || type() == DocumentNamedItems); 38 ASSERT(type() == WindowNamedItems || type() == DocumentNamedItems);
46 #if !ENABLE(OILPAN) 39 #if !ENABLE(OILPAN)
47 ASSERT(ownerNode().isDocumentNode()); 40 ASSERT(ownerNode().isDocumentNode());
48 ownerNode().nodeLists()->removeCache(this, type(), m_name); 41 ownerNode().nodeLists()->removeCache(this, type(), m_name);
49 #endif 42 #endif
50 } 43 }
51 44
52 Element* HTMLNameCollection::virtualItemAfter(Element* previous) const 45 } // namespace WebCore
53 {
54 ASSERT(previous != ownerNode());
55
56 Element* current;
57 if (!previous)
58 current = ElementTraversal::firstWithin(ownerNode());
59 else
60 current = ElementTraversal::next(*previous, &ownerNode());
61
62 for (; current; current = ElementTraversal::next(*current, &ownerNode())) {
63 switch (type()) {
64 case WindowNamedItems:
65 // find only images, forms, applets, embeds and objects by name,
66 // but anything by id
67 if (isHTMLImageElement(*current)
68 || isHTMLFormElement(*current)
69 || isHTMLAppletElement(*current)
70 || isHTMLEmbedElement(*current)
71 || isHTMLObjectElement(*current)) {
72 if (current->getNameAttribute() == m_name)
73 return current;
74 }
75 if (current->getIdAttribute() == m_name)
76 return current;
77 break;
78 case DocumentNamedItems:
79 // find images, forms, applets, embeds, objects and iframes by name,
80 // applets and object by id, and images by id but only if they have
81 // a name attribute (this very strange rule matches IE)
82 if (isHTMLFormElement(*current)
83 || isHTMLIFrameElement(*current)
84 || (isHTMLEmbedElement(*current) && toHTMLEmbedElement(*current) .isExposed())) {
85 if (current->getNameAttribute() == m_name)
86 return current;
87 } else if (isHTMLAppletElement(*current)
88 || (isHTMLObjectElement(*current) && toHTMLObjectElement(*curren t).isExposed())) {
89 if (current->getNameAttribute() == m_name || current->getIdAttri bute() == m_name)
90 return current;
91 } else if (isHTMLImageElement(*current)) {
92 if (current->getNameAttribute() == m_name || (current->getIdAttr ibute() == m_name && current->hasName()))
93 return current;
94 }
95 break;
96 default:
97 ASSERT_NOT_REACHED();
98 }
99 }
100
101 return 0;
102 }
103
104 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698