Changeset 60826 in webkit


Ignore:
Timestamp:
Jun 8, 2010 12:15:52 AM (14 years ago)
Author:
abarth@webkit.org
Message:

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

Reviewed by Eric Seidel.

Implement HTML5's forceQuirks flag
https://bugs.webkit.org/show_bug.cgi?id=40284

I didn't implement this before because I didn't know how to test it,
but now I do.


Tests:

  • fast/doctypes/doctype-parsing.html.

When we actually implement the quirks mode handling in the tree
builder, we'll probably want to add to this test.

  • html/HTML5Lexer.cpp: (WebCore::HTML5Lexer::nextToken):
  • html/HTML5Token.h: (WebCore::HTML5Token::forceQuirks): (WebCore::HTML5Token::setForceQuirks):
  • html/HTML5TreeBuilder.cpp: (WebCore::HTML5TreeBuilder::passTokenToLegacyParser):
  • html/HTMLParser.cpp: (WebCore::HTMLParser::parseDoctypeToken):
  • html/HTMLTokenizer.h: (WebCore::DoctypeToken::reset):
Location:
trunk/WebCore
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/WebCore/ChangeLog

    r60825 r60826  
     12010-06-08  Adam Barth  <abarth@webkit.org>
     2
     3        Reviewed by Eric Seidel.
     4
     5        Implement HTML5's forceQuirks flag
     6        https://bugs.webkit.org/show_bug.cgi?id=40284
     7
     8        I didn't implement this before because I didn't know how to test it,
     9        but now I do.
     10       
     11        Tests:
     12          * fast/doctypes/doctype-parsing.html.
     13
     14        When we actually implement the quirks mode handling in the tree
     15        builder, we'll probably want to add to this test.
     16
     17        * html/HTML5Lexer.cpp:
     18        (WebCore::HTML5Lexer::nextToken):
     19        * html/HTML5Token.h:
     20        (WebCore::HTML5Token::forceQuirks):
     21        (WebCore::HTML5Token::setForceQuirks):
     22        * html/HTML5TreeBuilder.cpp:
     23        (WebCore::HTML5TreeBuilder::passTokenToLegacyParser):
     24        * html/HTMLParser.cpp:
     25        (WebCore::HTMLParser::parseDoctypeToken):
     26        * html/HTMLTokenizer.h:
     27        (WebCore::DoctypeToken::reset):
     28
    1292010-06-08  Adam Barth  <abarth@webkit.org>
    230
  • trunk/WebCore/html/HTML5Lexer.cpp

    r60790 r60826  
    13521352            emitParseError();
    13531353            m_token->beginDOCTYPE();
    1354             notImplemented();
     1354            m_token->setForceQuirks();
    13551355            EMIT_AND_RESUME_IN(DataState);
    13561356        } else {
     
    14021402            }
    14031403            emitParseError();
    1404             notImplemented();
     1404            m_token->setForceQuirks();
    14051405            ADVANCE_TO(BogusDOCTYPEState);
    14061406        }
     
    14221422        } else if (cc == '>') {
    14231423            emitParseError();
    1424             notImplemented();
    1425             EMIT_AND_RESUME_IN(DataState);
    1426         } else {
    1427             emitParseError();
    1428             notImplemented();
     1424            m_token->setForceQuirks();
     1425            EMIT_AND_RESUME_IN(DataState);
     1426        } else {
     1427            emitParseError();
     1428            m_token->setForceQuirks();
    14291429            ADVANCE_TO(BogusDOCTYPEState);
    14301430        }
     
    14441444        } else if (cc == '>') {
    14451445            emitParseError();
    1446             notImplemented();
    1447             EMIT_AND_RESUME_IN(DataState);
    1448         } else {
    1449             emitParseError();
    1450             notImplemented();
     1446            m_token->setForceQuirks();
     1447            EMIT_AND_RESUME_IN(DataState);
     1448        } else {
     1449            emitParseError();
     1450            m_token->setForceQuirks();
    14511451            ADVANCE_TO(BogusDOCTYPEState);
    14521452        }
     
    14601460        else if (cc == '>') {
    14611461            emitParseError();
    1462             notImplemented();
     1462            m_token->setForceQuirks();
    14631463            EMIT_AND_RESUME_IN(DataState);
    14641464        } else {
     
    14751475        else if (cc == '>') {
    14761476            emitParseError();
    1477             notImplemented();
     1477            m_token->setForceQuirks();
    14781478            EMIT_AND_RESUME_IN(DataState);
    14791479        } else {
     
    15001500        } else {
    15011501            emitParseError();
    1502             notImplemented();
     1502            m_token->setForceQuirks();
    15031503            ADVANCE_TO(BogusDOCTYPEState);
    15041504        }
     
    15201520        } else {
    15211521            emitParseError();
    1522             notImplemented();
     1522            m_token->setForceQuirks();
    15231523            ADVANCE_TO(BogusDOCTYPEState);
    15241524        }
     
    15401540        } else if (cc == '>') {
    15411541            emitParseError();
    1542             notImplemented();
    1543             EMIT_AND_RESUME_IN(DataState);
    1544         } else {
    1545             emitParseError();
    1546             notImplemented();
     1542            m_token->setForceQuirks();
     1543            EMIT_AND_RESUME_IN(DataState);
     1544        } else {
     1545            emitParseError();
     1546            m_token->setForceQuirks();
    15471547            ADVANCE_TO(BogusDOCTYPEState);
    15481548        }
     
    15621562        } else if (cc == '>') {
    15631563            emitParseError();
    1564             notImplemented();
    1565             EMIT_AND_RESUME_IN(DataState);
    1566         } else {
    1567             emitParseError();
    1568             notImplemented();
     1564            m_token->setForceQuirks();
     1565            EMIT_AND_RESUME_IN(DataState);
     1566        } else {
     1567            emitParseError();
     1568            m_token->setForceQuirks();
    15691569            ADVANCE_TO(BogusDOCTYPEState);
    15701570        }
     
    15781578        else if (cc == '>') {
    15791579            emitParseError();
    1580             notImplemented();
     1580            m_token->setForceQuirks();
    15811581            EMIT_AND_RESUME_IN(DataState);
    15821582        } else {
     
    15931593        else if (cc == '>') {
    15941594            emitParseError();
    1595             notImplemented();
     1595            m_token->setForceQuirks();
    15961596            EMIT_AND_RESUME_IN(DataState);
    15971597        } else {
  • trunk/WebCore/html/HTML5Token.h

    r60738 r60826  
    213213    }
    214214
     215    bool forceQuirks()
     216    {
     217        ASSERT(m_type == DOCTYPE);
     218        return m_doctypeData->m_forceQuirks;
     219    }
     220
     221    void setForceQuirks()
     222    {
     223        ASSERT(m_type == DOCTYPE);
     224        m_doctypeData->m_forceQuirks = true;
     225    }
     226
    215227    void appendToPublicIdentifier(UChar character)
    216228    {
  • trunk/WebCore/html/HTML5TreeBuilder.cpp

    r60738 r60826  
    139139        doctypeToken.m_publicID = token.publicIdentifier();
    140140        doctypeToken.m_systemID = token.systemIdentifier();
     141        doctypeToken.m_forceQuirks = token.forceQuirks();
    141142
    142143        m_legacyHTMLParser->parseDoctypeToken(&doctypeToken);
  • trunk/WebCore/html/HTMLParser.cpp

    r60418 r60826  
    344344    if (m_document->doctype() || m_isParsingFragment || m_current != m_document)
    345345        return;
    346        
     346
    347347    // Make a new doctype node and set it as our doctype.
    348348    m_document->addChild(DocumentType::create(m_document, String::adopt(t->m_name), String::adopt(t->m_publicID), String::adopt(t->m_systemID)));
     349    if (t->m_forceQuirks)
     350        m_document->setParseMode(Document::Compat);
    349351}
    350352
  • trunk/WebCore/html/HTMLTokenizer.h

    r60786 r60826  
    118118        m_state = DoctypeBegin;
    119119        m_source.clear();
     120        m_forceQuirks = false;
    120121    }
    121122
     
    127128    Vector<UChar> m_systemID;
    128129    DoctypeState m_state;
    129    
     130
    130131    Vector<UChar> m_source;
     132
     133    bool m_forceQuirks; // Used by the HTML5 parser.
    131134};
    132135
Note: See TracChangeset for help on using the changeset viewer.