Changeset 62195 in webkit
- Timestamp:
- Jun 30, 2010 12:50:36 PM (14 years ago)
- Location:
- trunk/WebCore
- Files:
-
- 2 added
- 9 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/WebCore/Android.mk
r62092 r62195 265 265 html/HTMLDocument.cpp \ 266 266 html/HTMLElementsAllInOne.cpp \ 267 html/HTMLElementStack.cpp \ 267 268 html/HTMLFormCollection.cpp \ 268 269 html/HTMLImageLoader.cpp \ -
trunk/WebCore/CMakeLists.txt
r62092 r62195 942 942 html/HTMLDocument.cpp 943 943 html/HTMLElement.cpp 944 html/HTMLElementStack.cpp 944 945 html/HTMLEmbedElement.cpp 945 946 html/HTMLFieldSetElement.cpp -
trunk/WebCore/ChangeLog
r62194 r62195 1 2010-06-30 Eric Seidel <eric@webkit.org> 2 3 Reviewed by Adam Barth. 4 5 Split HTMLElementStack out into its own file 6 https://bugs.webkit.org/show_bug.cgi?id=41399 7 8 No functional change, thus no tests. 9 10 * Android.mk: 11 * CMakeLists.txt: 12 * GNUmakefile.am: 13 * WebCore.gypi: 14 * WebCore.pro: 15 * WebCore.vcproj/WebCore.vcproj: 16 * WebCore.xcodeproj/project.pbxproj: 17 * html/HTMLElementStack.cpp: Added. 18 (WebCore::HTMLElementStack::ElementRecord::ElementRecord): 19 (WebCore::HTMLElementStack::ElementRecord::element): 20 (WebCore::HTMLElementStack::ElementRecord::next): 21 (WebCore::HTMLElementStack::ElementRecord::releaseNext): 22 (WebCore::HTMLElementStack::ElementRecord::setNext): 23 (WebCore::HTMLElementStack::HTMLElementStack): 24 (WebCore::HTMLElementStack::~HTMLElementStack): 25 (WebCore::HTMLElementStack::popHTMLHeadElement): 26 (WebCore::HTMLElementStack::pop): 27 (WebCore::HTMLElementStack::pushHTMLHtmlElement): 28 (WebCore::HTMLElementStack::pushHTMLHeadElement): 29 (WebCore::HTMLElementStack::pushHTMLBodyElement): 30 (WebCore::HTMLElementStack::push): 31 (WebCore::HTMLElementStack::top): 32 (WebCore::HTMLElementStack::removeHTMLHeadElement): 33 (WebCore::HTMLElementStack::remove): 34 (WebCore::HTMLElementStack::contains): 35 (WebCore::HTMLElementStack::inScope): 36 (WebCore::HTMLElementStack::htmlElement): 37 (WebCore::HTMLElementStack::headElement): 38 (WebCore::HTMLElementStack::bodyElement): 39 (WebCore::HTMLElementStack::pushCommon): 40 (WebCore::HTMLElementStack::popCommon): 41 (WebCore::HTMLElementStack::removeNonFirstCommon): 42 * html/HTMLElementStack.h: Added. 43 * html/HTMLTreeBuilder.h: 44 1 45 2010-06-30 Kenneth Russell <kbr@google.com> 2 46 -
trunk/WebCore/GNUmakefile.am
r62125 r62195 1158 1158 WebCore/html/HTMLElement.cpp \ 1159 1159 WebCore/html/HTMLElement.h \ 1160 WebCore/html/HTMLElementStack.cpp \ 1161 WebCore/html/HTMLElementStack.h \ 1160 1162 WebCore/html/HTMLEmbedElement.cpp \ 1161 1163 WebCore/html/HTMLEmbedElement.h \ -
trunk/WebCore/WebCore.gypi
r62187 r62195 1543 1543 'html/HTMLElement.cpp', 1544 1544 'html/HTMLElement.h', 1545 'html/HTMLElementStack.cpp', 1546 'html/HTMLElementStack.h', 1545 1547 'html/HTMLEmbedElement.cpp', 1546 1548 'html/HTMLEmbedElement.h', -
trunk/WebCore/WebCore.pro
r62120 r62195 655 655 html/HTMLDocument.cpp \ 656 656 html/HTMLElement.cpp \ 657 html/HTMLElementStack.cpp \ 657 658 html/HTMLEmbedElement.cpp \ 658 659 html/HTMLFieldSetElement.cpp \ -
trunk/WebCore/WebCore.vcproj/WebCore.vcproj
r62104 r62195 37026 37026 </File> 37027 37027 <File 37028 RelativePath="..\html\HTMLElementStack.cpp" 37029 > 37030 </File> 37031 <File 37032 RelativePath="..\html\HTMLElementStack.h" 37033 > 37034 </File> 37035 <File 37028 37036 RelativePath="..\html\HTMLElementsAllInOne.cpp" 37029 37037 > -
trunk/WebCore/WebCore.xcodeproj/project.pbxproj
r62104 r62195 3072 3072 A89CCC520F44E98100B5DA10 /* ReplaceNodeWithSpanCommand.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A89CCC500F44E98100B5DA10 /* ReplaceNodeWithSpanCommand.cpp */; }; 3073 3073 A89CCC530F44E98100B5DA10 /* ReplaceNodeWithSpanCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = A89CCC510F44E98100B5DA10 /* ReplaceNodeWithSpanCommand.h */; }; 3074 A8A563B411DB3D10003AC2F0 /* HTMLElementStack.h in Headers */ = {isa = PBXBuildFile; fileRef = A8A563B211DB3D10003AC2F0 /* HTMLElementStack.h */; }; 3075 A8A563B511DB3D10003AC2F0 /* HTMLElementStack.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A8A563B311DB3D10003AC2F0 /* HTMLElementStack.cpp */; }; 3074 3076 A8A909AC0CBCD6B50029B807 /* RenderSVGTransformableContainer.h in Headers */ = {isa = PBXBuildFile; fileRef = A8A909AA0CBCD6B50029B807 /* RenderSVGTransformableContainer.h */; }; 3075 3077 A8A909AD0CBCD6B50029B807 /* RenderSVGTransformableContainer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A8A909AB0CBCD6B50029B807 /* RenderSVGTransformableContainer.cpp */; }; … … 8582 8584 A89CCC500F44E98100B5DA10 /* ReplaceNodeWithSpanCommand.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ReplaceNodeWithSpanCommand.cpp; sourceTree = "<group>"; }; 8583 8585 A89CCC510F44E98100B5DA10 /* ReplaceNodeWithSpanCommand.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ReplaceNodeWithSpanCommand.h; sourceTree = "<group>"; }; 8586 A8A563B211DB3D10003AC2F0 /* HTMLElementStack.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HTMLElementStack.h; sourceTree = "<group>"; }; 8587 A8A563B311DB3D10003AC2F0 /* HTMLElementStack.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = HTMLElementStack.cpp; sourceTree = "<group>"; }; 8584 8588 A8A909AA0CBCD6B50029B807 /* RenderSVGTransformableContainer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RenderSVGTransformableContainer.h; sourceTree = "<group>"; }; 8585 8589 A8A909AB0CBCD6B50029B807 /* RenderSVGTransformableContainer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RenderSVGTransformableContainer.cpp; sourceTree = "<group>"; }; … … 13843 13847 E44613B40CD6344E00FADA75 /* VoidCallback.h */, 13844 13848 E44613A00CD6331000FADA75 /* VoidCallback.idl */, 13849 A8A563B211DB3D10003AC2F0 /* HTMLElementStack.h */, 13850 A8A563B311DB3D10003AC2F0 /* HTMLElementStack.cpp */, 13845 13851 ); 13846 13852 path = html; … … 19629 19635 97DD4D870FDF4D6E00ECF9A4 /* XSSAuditor.h in Headers */, 19630 19636 CE172E011136E8CE0062A533 /* ZoomMode.h in Headers */, 19637 A8A563B411DB3D10003AC2F0 /* HTMLElementStack.h in Headers */, 19631 19638 ); 19632 19639 runOnlyForDeploymentPostprocessing = 0; … … 21959 21966 E1BE512D0CF6C512002EA959 /* XSLTUnicodeSort.cpp in Sources */, 21960 21967 97DD4D860FDF4D6E00ECF9A4 /* XSSAuditor.cpp in Sources */, 21968 A8A563B511DB3D10003AC2F0 /* HTMLElementStack.cpp in Sources */, 21961 21969 ); 21962 21970 runOnlyForDeploymentPostprocessing = 0; -
trunk/WebCore/html/HTMLTreeBuilder.h
r62166 r62195 29 29 #include "Element.h" 30 30 #include "FragmentScriptingPermission.h" 31 #include "HTML Names.h"31 #include "HTMLElementStack.h" 32 32 #include "HTMLTokenizer.h" 33 33 #include <wtf/Noncopyable.h> … … 102 102 }; 103 103 104 class ElementRecord : public Noncopyable {105 public:106 ElementRecord(PassRefPtr<Element> element, PassOwnPtr<ElementRecord> next)107 : m_element(element)108 , m_next(next)109 {110 }111 112 Element* element() const { return m_element.get(); }113 ElementRecord* next() const { return m_next.get(); }114 PassOwnPtr<ElementRecord> releaseNext() { return m_next.release(); }115 void setNext(PassOwnPtr<ElementRecord> next) { m_next = next; }116 117 private:118 RefPtr<Element> m_element;119 OwnPtr<ElementRecord> m_next;120 };121 122 class ElementStack : public Noncopyable {123 public:124 ElementStack()125 : m_htmlElement(0)126 , m_headElement(0)127 , m_bodyElement(0)128 {129 }130 131 void popHTMLHeadElement()132 {133 ASSERT(top() == m_headElement);134 m_headElement = 0;135 popCommon();136 }137 138 void pop()139 {140 ASSERT(!top()->hasTagName(HTMLNames::headTag));141 popCommon();142 }143 144 void pushHTMLHtmlElement(PassRefPtr<Element> element)145 {146 ASSERT(element->hasTagName(HTMLNames::htmlTag));147 ASSERT(!m_htmlElement);148 m_htmlElement = element.get();149 pushCommon(element);150 }151 152 void pushHTMLHeadElement(PassRefPtr<Element> element)153 {154 ASSERT(element->hasTagName(HTMLNames::headTag));155 ASSERT(!m_headElement);156 m_headElement = element.get();157 pushCommon(element);158 }159 160 void pushHTMLBodyElement(PassRefPtr<Element> element)161 {162 ASSERT(element->hasTagName(HTMLNames::bodyTag));163 ASSERT(!m_bodyElement);164 m_bodyElement = element.get();165 pushCommon(element);166 }167 168 void push(PassRefPtr<Element> element)169 {170 ASSERT(!element->hasTagName(HTMLNames::htmlTag));171 ASSERT(!element->hasTagName(HTMLNames::headTag));172 ASSERT(!element->hasTagName(HTMLNames::bodyTag));173 ASSERT(m_htmlElement);174 pushCommon(element);175 }176 177 Element* top() const178 {179 return m_top->element();180 }181 182 void removeHTMLHeadElement(Element* element)183 {184 ASSERT(m_headElement == element);185 if (m_top->element() == element) {186 popHTMLHeadElement();187 return;188 }189 m_headElement = 0;190 removeNonFirstCommon(element);191 }192 193 void remove(Element* element)194 {195 ASSERT(!element->hasTagName(HTMLNames::headTag));196 if (m_top->element() == element) {197 pop();198 return;199 }200 removeNonFirstCommon(element);201 }202 203 bool contains(Element* element) const204 {205 for (ElementRecord* pos = m_top.get(); pos; pos = pos->next()) {206 if (pos->element() == element)207 return true;208 }209 return false;210 }211 212 bool inScope(const AtomicString& name) const213 {214 // FIXME: This algorithm is wrong.215 for (ElementRecord* pos = m_top.get(); pos; pos = pos->next()) {216 if (pos->element()->tagQName() == name)217 return true;218 }219 return false;220 }221 222 bool inScope(Element* element) const223 {224 // FIXME: This algorithm is wrong.225 return contains(element);226 }227 228 Element* htmlElement()229 {230 ASSERT(m_htmlElement);231 return m_htmlElement;232 }233 234 Element* headElement()235 {236 ASSERT(m_headElement);237 return m_headElement;238 }239 240 Element* bodyElement()241 {242 ASSERT(m_bodyElement);243 return m_bodyElement;244 }245 246 private:247 void pushCommon(PassRefPtr<Element> element)248 {249 m_top.set(new ElementRecord(element, m_top.release()));250 top()->beginParsingChildren();251 }252 253 void popCommon()254 {255 ASSERT(!top()->hasTagName(HTMLNames::htmlTag));256 ASSERT(!top()->hasTagName(HTMLNames::bodyTag));257 top()->finishParsingChildren();258 m_top = m_top->releaseNext();259 }260 261 void removeNonFirstCommon(Element* element)262 {263 ASSERT(!element->hasTagName(HTMLNames::htmlTag));264 ASSERT(!element->hasTagName(HTMLNames::bodyTag));265 ElementRecord* pos = m_top.get();266 ASSERT(pos->element() != element);267 while (pos->next()) {268 if (pos->next()->element() == element) {269 // FIXME: Is it OK to call finishParsingChildren()270 // when the children aren't actually finished?271 element->finishParsingChildren();272 pos->setNext(pos->next()->releaseNext());273 return;274 }275 }276 ASSERT_NOT_REACHED();277 }278 279 OwnPtr<ElementRecord> m_top;280 281 // We remember <html>, <head> and <body> as they are pushed. Their282 // ElementRecords keep them alive. <html> and <body> are never popped.283 // FIXME: We don't currently require type-specific information about284 // these elements so we haven't yet bothered to plumb the types all the285 // way down through createElement, etc.286 Element* m_htmlElement;287 Element* m_headElement;288 Element* m_bodyElement;289 };290 291 104 void passTokenToLegacyParser(HTMLToken&); 292 105 … … 356 169 RefPtr<Element> m_headElement; 357 170 RefPtr<Element> m_formElement; 358 ElementStack m_openElements;171 HTMLElementStack m_openElements; 359 172 360 173 class FormattingElementEntry {
Note: See TracChangeset
for help on using the changeset viewer.