Changeset 61925 in webkit


Ignore:
Timestamp:
Jun 25, 2010 5:47:59 PM (14 years ago)
Author:
abarth@webkit.org
Message:

2010-06-25 Adam Barth <abarth@webkit.org>

Reviewed by Eric Seidel.

We should parse <html>
https://bugs.webkit.org/show_bug.cgi?id=41239

This patch is hard to test, but I think this patch lets us parse a
document consisting of only an <html> start tag.

  • html/HTMLTreeBuilder.cpp: (WebCore::HTMLTreeBuilder::constructTreeFromToken): (WebCore::HTMLTreeBuilder::insertHTMLStartTagBeforeHTML): (WebCore::HTMLTreeBuilder::insertHTMLStartTagInBody): (WebCore::HTMLTreeBuilder::processStartTag): (WebCore::HTMLTreeBuilder::processDefaultForBeforeHTMLMode):
  • html/HTMLTreeBuilder.h: (WebCore::HTMLTreeBuilder::ElementStack::push):
Location:
trunk/WebCore
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/WebCore/ChangeLog

    r61921 r61925  
     12010-06-25  Adam Barth  <abarth@webkit.org>
     2
     3        Reviewed by Eric Seidel.
     4
     5        We should parse <html>
     6        https://bugs.webkit.org/show_bug.cgi?id=41239
     7
     8        This patch is hard to test, but I think this patch lets us parse a
     9        document consisting of only an <html> start tag.
     10
     11        * html/HTMLTreeBuilder.cpp:
     12        (WebCore::HTMLTreeBuilder::constructTreeFromToken):
     13        (WebCore::HTMLTreeBuilder::insertHTMLStartTagBeforeHTML):
     14        (WebCore::HTMLTreeBuilder::insertHTMLStartTagInBody):
     15        (WebCore::HTMLTreeBuilder::processStartTag):
     16        (WebCore::HTMLTreeBuilder::processDefaultForBeforeHTMLMode):
     17        * html/HTMLTreeBuilder.h:
     18        (WebCore::HTMLTreeBuilder::ElementStack::push):
     19
    1202010-06-25  Dan Bernstein  <mitz@apple.com>
    221
  • trunk/WebCore/html/HTMLTreeBuilder.cpp

    r61915 r61925  
    3333#include "HTMLToken.h"
    3434#include "HTMLDocument.h"
     35#include "HTMLHtmlElement.h"
    3536#include "LegacyHTMLDocumentParser.h"
    3637#include "HTMLNames.h"
     
    226227
    227228    AtomicHTMLToken token(rawToken);
    228     return processToken(token);
     229    processToken(token);
    229230}
    230231
     
    265266}
    266267
     268void HTMLTreeBuilder::insertHTMLStartTagBeforeHTML(AtomicHTMLToken&)
     269{
     270    RefPtr<Element> element = HTMLHtmlElement::create(m_document);
     271    // FIXME: Add attributes to |element|.
     272    m_document->addChild(element);
     273    m_openElements.push(element.release());
     274}
     275
     276void HTMLTreeBuilder::insertHTMLStartTagInBody(AtomicHTMLToken&)
     277{
     278    notImplemented();
     279}
     280
    267281void HTMLTreeBuilder::processStartTag(AtomicHTMLToken& token)
    268282{
     
    275289        ASSERT(insertionMode() == BeforeHTMLMode);
    276290        if (token.name() == htmlTag) {
    277             notImplemented();
     291            insertHTMLStartTagBeforeHTML(token);
    278292            setInsertionMode(BeforeHeadMode);
    279293            return;
     
    284298        ASSERT(insertionMode() == BeforeHeadMode);
    285299        if (token.name() == htmlTag) {
    286             notImplemented();
     300            insertHTMLStartTagInBody(token);
    287301            return;
    288302        }
     
    297311        ASSERT(insertionMode() == InHeadMode);
    298312        if (token.name() == htmlTag) {
    299             notImplemented();
     313            insertHTMLStartTagInBody(token);
    300314            return;
    301315        }
     
    343357        ASSERT(insertionMode() == AfterHeadMode);
    344358        if (token.name() == htmlTag) {
    345             notImplemented();
     359            insertHTMLStartTagInBody(token);
    346360            return;
    347361        }
     
    359373            parseError(token);
    360374            ASSERT(m_headElement);
    361             m_openElements.push(m_headElement.get());
     375            m_openElements.push(m_headElement);
    362376            notImplemented();
    363377            m_openElements.remove(m_headElement.get());
     
    377391        ASSERT(insertionMode() == InHeadNoscriptMode);
    378392        if (token.name() == htmlTag) {
    379             notImplemented();
     393            insertHTMLStartTagInBody(token);
    380394            return;
    381395        }
     
    524538void HTMLTreeBuilder::processDefaultForBeforeHTMLMode(AtomicHTMLToken&)
    525539{
    526     notImplemented();
     540    AtomicHTMLToken startHTML(HTMLToken::StartTag, htmlTag.localName());
     541    insertHTMLStartTagBeforeHTML(startHTML);
    527542    setInsertionMode(BeforeHeadMode);
    528543}
  • trunk/WebCore/html/HTMLTreeBuilder.h

    r61915 r61925  
    103103    public:
    104104        void pop() { }
    105         void push(Element*) { }
     105        void push(PassRefPtr<Element>) { }
    106106        void remove(Element*) { }
    107107        Element* top() const { return 0; }
     
    134134    void insertGenericRawTextElement(AtomicHTMLToken&);
    135135    void insertScriptElement(AtomicHTMLToken&);
     136
     137    void insertHTMLStartTagBeforeHTML(AtomicHTMLToken&);
     138    void insertHTMLStartTagInBody(AtomicHTMLToken&);
    136139
    137140    RefPtr<Element> m_headElement;
Note: See TracChangeset for help on using the changeset viewer.