15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/* 25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2010 Google, Inc. All Rights Reserved. 35c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2011 Apple Inc. All rights reserved. 45c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Redistribution and use in source and binary forms, with or without 65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * modification, are permitted provided that the following conditions 75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * are met: 85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 1. Redistributions of source code must retain the above copyright 95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * notice, this list of conditions and the following disclaimer. 105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 2. Redistributions in binary form must reproduce the above copyright 115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * notice, this list of conditions and the following disclaimer in the 125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * documentation and/or other materials provided with the distribution. 135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THIS SOFTWARE IS PROVIDED BY GOOGLE INC. ``AS IS'' AND ANY 155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GOOGLE INC. OR 185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 2402772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#ifndef HTMLElementStack_h 285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#define HTMLElementStack_h 295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/html/parser/HTMLStackItem.h" 31591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch#include "wtf/Forward.h" 32591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch#include "wtf/Noncopyable.h" 33591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch#include "wtf/OwnPtr.h" 34591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch#include "wtf/PassOwnPtr.h" 35591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch#include "wtf/RefPtr.h" 365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 37c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)namespace blink { 385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class ContainerNode; 405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class DocumentFragment; 415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class Element; 425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class QualifiedName; 435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// NOTE: The HTML5 spec uses a backwards (grows downward) stack. We're using 455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// more standard (grows upwards) stack terminology here. 465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class HTMLElementStack { 47d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) WTF_MAKE_NONCOPYABLE(HTMLElementStack); 48d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) DISALLOW_ALLOCATION(); 495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)public: 505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) HTMLElementStack(); 515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ~HTMLElementStack(); 525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 53d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) class ElementRecord FINAL : public NoBaseWillBeGarbageCollected<ElementRecord> { 54d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) WTF_MAKE_NONCOPYABLE(ElementRecord); WTF_MAKE_FAST_ALLOCATED_WILL_BE_REMOVED; 555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) public: 56d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)#if !ENABLE(OILPAN) 575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ~ElementRecord(); // Public for ~PassOwnPtr() 58d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)#endif 5902772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch 605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) Element* element() const { return m_item->element(); } 615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ContainerNode* node() const { return m_item->node(); } 62926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) const AtomicString& namespaceURI() const { return m_item->namespaceURI(); } 63d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) PassRefPtrWillBeRawPtr<HTMLStackItem> stackItem() const { return m_item; } 64d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) void replaceElement(PassRefPtrWillBeRawPtr<HTMLStackItem>); 655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool isAbove(ElementRecord*) const; 675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ElementRecord* next() const { return m_next.get(); } 69d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) 70d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) void trace(Visitor*); 715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) private: 725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) friend class HTMLElementStack; 735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 74d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) ElementRecord(PassRefPtrWillBeRawPtr<HTMLStackItem>, PassOwnPtrWillBeRawPtr<ElementRecord>); 755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 76d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) PassOwnPtrWillBeRawPtr<ElementRecord> releaseNext() { return m_next.release(); } 77d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) void setNext(PassOwnPtrWillBeRawPtr<ElementRecord> next) { m_next = next; } 785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 79d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) RefPtrWillBeMember<HTMLStackItem> m_item; 80d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) OwnPtrWillBeMember<ElementRecord> m_next; 815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }; 825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) unsigned stackDepth() const { return m_stackDepth; } 845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Inlining this function is a (small) performance win on the parsing 865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // benchmark. 875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) Element* top() const 885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT(m_top->element()); 905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_top->element(); 915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ContainerNode* topNode() const 945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT(m_top->node()); 965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_top->node(); 975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) HTMLStackItem* topStackItem() const 1005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 1015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT(m_top->stackItem()); 1025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_top->stackItem().get(); 1035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 1045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) HTMLStackItem* oneBelowTop() const; 1065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ElementRecord* topRecord() const; 1075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ElementRecord* find(Element*) const; 1085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ElementRecord* furthestBlockForFormattingElement(Element*) const; 1095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ElementRecord* topmost(const AtomicString& tagName) const; 1105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 111d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) void insertAbove(PassRefPtrWillBeRawPtr<HTMLStackItem>, ElementRecord*); 1125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 113d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) void push(PassRefPtrWillBeRawPtr<HTMLStackItem>); 114d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) void pushRootNode(PassRefPtrWillBeRawPtr<HTMLStackItem>); 115d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) void pushHTMLHtmlElement(PassRefPtrWillBeRawPtr<HTMLStackItem>); 116d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) void pushHTMLHeadElement(PassRefPtrWillBeRawPtr<HTMLStackItem>); 117d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) void pushHTMLBodyElement(PassRefPtrWillBeRawPtr<HTMLStackItem>); 1185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void pop(); 1205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void popUntil(const AtomicString& tagName); 1215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void popUntil(Element*); 1225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void popUntilPopped(const AtomicString& tagName); 12353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) void popUntilPopped(const QualifiedName& tagName) { popUntilPopped(tagName.localName()); } 124926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 1255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void popUntilPopped(Element*); 1265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void popUntilNumberedHeaderElementPopped(); 1275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void popUntilTableScopeMarker(); // "clear the stack back to a table context" in the spec. 1285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void popUntilTableBodyScopeMarker(); // "clear the stack back to a table body context" in the spec. 1295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void popUntilTableRowScopeMarker(); // "clear the stack back to a table row context" in the spec. 1305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void popUntilForeignContentScopeMarker(); 1315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void popHTMLHeadElement(); 1325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void popHTMLBodyElement(); 1335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void popAll(); 1345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) static bool isMathMLTextIntegrationPoint(HTMLStackItem*); 1365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) static bool isHTMLIntegrationPoint(HTMLStackItem*); 1375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void remove(Element*); 1395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void removeHTMLHeadElement(Element*); 1405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool contains(Element*) const; 1425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool contains(const AtomicString& tagName) const; 1435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool inScope(Element*) const; 1455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool inScope(const AtomicString& tagName) const; 1465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool inScope(const QualifiedName&) const; 1475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool inListItemScope(const AtomicString& tagName) const; 1485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool inListItemScope(const QualifiedName&) const; 1495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool inTableScope(const AtomicString& tagName) const; 1505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool inTableScope(const QualifiedName&) const; 1515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool inButtonScope(const AtomicString& tagName) const; 1525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool inButtonScope(const QualifiedName&) const; 1535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool inSelectScope(const AtomicString& tagName) const; 1545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool inSelectScope(const QualifiedName&) const; 1555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool hasNumberedHeaderElementInScope() const; 1575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool hasOnlyOneElement() const; 1595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool secondElementIsHTMLBodyElement() const; 160926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) bool hasTemplateInHTMLScope() const; 1615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) Element* htmlElement() const; 1625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) Element* headElement() const; 1635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) Element* bodyElement() const; 16402772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch 1655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ContainerNode* rootNode() const; 1665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 167d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) void trace(Visitor*); 168d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) 1695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#ifndef NDEBUG 1705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void show(); 1715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#endif 1725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)private: 174d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) void pushCommon(PassRefPtrWillBeRawPtr<HTMLStackItem>); 175d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) void pushRootNodeCommon(PassRefPtrWillBeRawPtr<HTMLStackItem>); 1765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void popCommon(); 1775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void removeNonTopCommon(Element*); 1785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 179d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) OwnPtrWillBeMember<ElementRecord> m_top; 1805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // We remember the root node, <head> and <body> as they are pushed. Their 1825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // ElementRecords keep them alive. The root node is never popped. 1835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // FIXME: We don't currently require type-specific information about 1845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // these elements so we haven't yet bothered to plumb the types all the 1855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // way down through createElement, etc. 186d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) RawPtrWillBeMember<ContainerNode> m_rootNode; 187d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) RawPtrWillBeMember<Element> m_headElement; 188d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) RawPtrWillBeMember<Element> m_bodyElement; 1895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) unsigned m_stackDepth; 1905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}; 19102772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch 192c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)} // namespace blink 1935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#endif // HTMLElementStack_h 195