Changeset 139141 in webkit


Ignore:
Timestamp:
Jan 8, 2013 5:43:54 PM (11 years ago)
Author:
tonyg@chromium.org
Message:

Remove dependency on Document from HTMLConstructionSite::inQuirksMode()
https://bugs.webkit.org/show_bug.cgi?id=106375

Reviewed by Adam Barth.

This is another step towards removing main thread object dependencies
from the parser.

No new tests because no new functionality.

  • dom/Document.h:
  • html/HTMLDocument.cpp:
  • html/HTMLDocument.h:

(HTMLDocument):

  • html/parser/HTMLConstructionSite.cpp:

(WebCore::HTMLConstructionSite::HTMLConstructionSite):
(WebCore::HTMLConstructionSite::setDefaultCompatibilityMode):
(WebCore):
(WebCore::HTMLConstructionSite::setCompatibilityMode):
(WebCore::HTMLConstructionSite::setCompatibilityModeFromDoctype):
(WebCore::HTMLConstructionSite::insertDoctype):
(WebCore::HTMLConstructionSite::inQuirksMode):

  • html/parser/HTMLConstructionSite.h:

(HTMLConstructionSite):

Location:
trunk/Source/WebCore
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r139138 r139141  
     12013-01-08  Tony Gentilcore  <tonyg@chromium.org>
     2
     3        Remove dependency on Document from HTMLConstructionSite::inQuirksMode()
     4        https://bugs.webkit.org/show_bug.cgi?id=106375
     5
     6        Reviewed by Adam Barth.
     7
     8        This is another step towards removing main thread object dependencies
     9        from the parser.
     10
     11        No new tests because no new functionality.
     12
     13        * dom/Document.h:
     14        * html/HTMLDocument.cpp:
     15        * html/HTMLDocument.h:
     16        (HTMLDocument):
     17        * html/parser/HTMLConstructionSite.cpp:
     18        (WebCore::HTMLConstructionSite::HTMLConstructionSite):
     19        (WebCore::HTMLConstructionSite::setDefaultCompatibilityMode):
     20        (WebCore):
     21        (WebCore::HTMLConstructionSite::setCompatibilityMode):
     22        (WebCore::HTMLConstructionSite::setCompatibilityModeFromDoctype):
     23        (WebCore::HTMLConstructionSite::insertDoctype):
     24        (WebCore::HTMLConstructionSite::inQuirksMode):
     25        * html/parser/HTMLConstructionSite.h:
     26        (HTMLConstructionSite):
     27
    1282013-01-08  Florin Malita  <fmalita@chromium.org>
    229
  • trunk/Source/WebCore/dom/Document.h

    r139132 r139141  
    637637    enum CompatibilityMode { QuirksMode, LimitedQuirksMode, NoQuirksMode };
    638638
    639     virtual void setCompatibilityModeFromDoctype() { }
    640639    void setCompatibilityMode(CompatibilityMode m);
    641640    void lockCompatibilityMode() { m_compatibilityModeLocked = true; }
  • trunk/Source/WebCore/html/HTMLDocument.cpp

    r115215 r139141  
    333333}
    334334
    335 void HTMLDocument::setCompatibilityModeFromDoctype()
    336 {
    337     // There are three possible compatibility modes:
    338     // Quirks - quirks mode emulates WinIE and NS4.  CSS parsing is also relaxed in this mode, e.g., unit types can
    339     // be omitted from numbers.
    340     // Limited Quirks - This mode is identical to no-quirks mode except for its treatment of line-height in the inline box model. 
    341     // No Quirks - no quirks apply.  Web pages will obey the specifications to the letter.
    342     DocumentType* docType = doctype();
    343     if (!docType)
    344         return;
    345 
    346     // Check for Quirks Mode.
    347     const String& publicId = docType->publicId();
    348     if (docType->name() != "html"
    349         || publicId.startsWith("+//Silmaril//dtd html Pro v0r11 19970101//", false)
    350         || publicId.startsWith("-//AdvaSoft Ltd//DTD HTML 3.0 asWedit + extensions//", false)
    351         || publicId.startsWith("-//AS//DTD HTML 3.0 asWedit + extensions//", false)
    352         || publicId.startsWith("-//IETF//DTD HTML 2.0 Level 1//", false)
    353         || publicId.startsWith("-//IETF//DTD HTML 2.0 Level 2//", false)
    354         || publicId.startsWith("-//IETF//DTD HTML 2.0 Strict Level 1//", false)
    355         || publicId.startsWith("-//IETF//DTD HTML 2.0 Strict Level 2//", false)
    356         || publicId.startsWith("-//IETF//DTD HTML 2.0 Strict//", false)
    357         || publicId.startsWith("-//IETF//DTD HTML 2.0//", false)
    358         || publicId.startsWith("-//IETF//DTD HTML 2.1E//", false)
    359         || publicId.startsWith("-//IETF//DTD HTML 3.0//", false)
    360         || publicId.startsWith("-//IETF//DTD HTML 3.2 Final//", false)
    361         || publicId.startsWith("-//IETF//DTD HTML 3.2//", false)
    362         || publicId.startsWith("-//IETF//DTD HTML 3//", false)
    363         || publicId.startsWith("-//IETF//DTD HTML Level 0//", false)
    364         || publicId.startsWith("-//IETF//DTD HTML Level 1//", false)
    365         || publicId.startsWith("-//IETF//DTD HTML Level 2//", false)
    366         || publicId.startsWith("-//IETF//DTD HTML Level 3//", false)
    367         || publicId.startsWith("-//IETF//DTD HTML Strict Level 0//", false)
    368         || publicId.startsWith("-//IETF//DTD HTML Strict Level 1//", false)
    369         || publicId.startsWith("-//IETF//DTD HTML Strict Level 2//", false)
    370         || publicId.startsWith("-//IETF//DTD HTML Strict Level 3//", false)
    371         || publicId.startsWith("-//IETF//DTD HTML Strict//", false)
    372         || publicId.startsWith("-//IETF//DTD HTML//", false)
    373         || publicId.startsWith("-//Metrius//DTD Metrius Presentational//", false)
    374         || publicId.startsWith("-//Microsoft//DTD Internet Explorer 2.0 HTML Strict//", false)
    375         || publicId.startsWith("-//Microsoft//DTD Internet Explorer 2.0 HTML//", false)
    376         || publicId.startsWith("-//Microsoft//DTD Internet Explorer 2.0 Tables//", false)
    377         || publicId.startsWith("-//Microsoft//DTD Internet Explorer 3.0 HTML Strict//", false)
    378         || publicId.startsWith("-//Microsoft//DTD Internet Explorer 3.0 HTML//", false)
    379         || publicId.startsWith("-//Microsoft//DTD Internet Explorer 3.0 Tables//", false)
    380         || publicId.startsWith("-//Netscape Comm. Corp.//DTD HTML//", false)
    381         || publicId.startsWith("-//Netscape Comm. Corp.//DTD Strict HTML//", false)
    382         || publicId.startsWith("-//O'Reilly and Associates//DTD HTML 2.0//", false)
    383         || publicId.startsWith("-//O'Reilly and Associates//DTD HTML Extended 1.0//", false)
    384         || publicId.startsWith("-//O'Reilly and Associates//DTD HTML Extended Relaxed 1.0//", false)
    385         || publicId.startsWith("-//SoftQuad Software//DTD HoTMetaL PRO 6.0::19990601::extensions to HTML 4.0//", false)
    386         || publicId.startsWith("-//SoftQuad//DTD HoTMetaL PRO 4.0::19971010::extensions to HTML 4.0//", false)
    387         || publicId.startsWith("-//Spyglass//DTD HTML 2.0 Extended//", false)
    388         || publicId.startsWith("-//SQ//DTD HTML 2.0 HoTMetaL + extensions//", false)
    389         || publicId.startsWith("-//Sun Microsystems Corp.//DTD HotJava HTML//", false)
    390         || publicId.startsWith("-//Sun Microsystems Corp.//DTD HotJava Strict HTML//", false)
    391         || publicId.startsWith("-//W3C//DTD HTML 3 1995-03-24//", false)
    392         || publicId.startsWith("-//W3C//DTD HTML 3.2 Draft//", false)
    393         || publicId.startsWith("-//W3C//DTD HTML 3.2 Final//", false)
    394         || publicId.startsWith("-//W3C//DTD HTML 3.2//", false)
    395         || publicId.startsWith("-//W3C//DTD HTML 3.2S Draft//", false)
    396         || publicId.startsWith("-//W3C//DTD HTML 4.0 Frameset//", false)
    397         || publicId.startsWith("-//W3C//DTD HTML 4.0 Transitional//", false)
    398         || publicId.startsWith("-//W3C//DTD HTML Experimental 19960712//", false)
    399         || publicId.startsWith("-//W3C//DTD HTML Experimental 970421//", false)
    400         || publicId.startsWith("-//W3C//DTD W3 HTML//", false)
    401         || publicId.startsWith("-//W3O//DTD W3 HTML 3.0//", false)
    402         || equalIgnoringCase(publicId, "-//W3O//DTD W3 HTML Strict 3.0//EN//")
    403         || publicId.startsWith("-//WebTechs//DTD Mozilla HTML 2.0//", false)
    404         || publicId.startsWith("-//WebTechs//DTD Mozilla HTML//", false)
    405         || equalIgnoringCase(publicId, "-/W3C/DTD HTML 4.0 Transitional/EN")
    406         || equalIgnoringCase(publicId, "HTML")
    407         || equalIgnoringCase(docType->systemId(), "http://www.ibm.com/data/dtd/v11/ibmxhtml1-transitional.dtd")
    408         || (docType->systemId().isEmpty() && publicId.startsWith("-//W3C//DTD HTML 4.01 Frameset//", false))
    409         || (docType->systemId().isEmpty() && publicId.startsWith("-//W3C//DTD HTML 4.01 Transitional//", false))) {
    410         setCompatibilityMode(QuirksMode);
    411         return;
    412     }
    413 
    414     // Check for Limited Quirks Mode.
    415     if (publicId.startsWith("-//W3C//DTD XHTML 1.0 Frameset//", false)
    416         || publicId.startsWith("-//W3C//DTD XHTML 1.0 Transitional//", false)
    417         || (!docType->systemId().isEmpty() && publicId.startsWith("-//W3C//DTD HTML 4.01 Frameset//", false))
    418         || (!docType->systemId().isEmpty() && publicId.startsWith("-//W3C//DTD HTML 4.01 Transitional//", false))) {
    419         setCompatibilityMode(LimitedQuirksMode);
    420         return;
    421     }
    422 
    423     // Otherwise we are No Quirks Mode.
    424     setCompatibilityMode(NoQuirksMode);
    425     return;
    426 }
    427 
    428335void HTMLDocument::clear()
    429336{
  • trunk/Source/WebCore/html/HTMLDocument.h

    r78314 r139141  
    5050    String designMode() const;
    5151    void setDesignMode(const String&);
    52 
    53     virtual void setCompatibilityModeFromDoctype();
    5452
    5553    Element* activeElement();
  • trunk/Source/WebCore/html/parser/HTMLConstructionSite.cpp

    r139111 r139141  
    145145    , m_redirectAttachToFosterParent(false)
    146146    , m_maximumDOMTreeDepth(maximumDOMTreeDepth)
    147 {
     147    , m_inQuirksMode(document->inQuirksMode())
     148{
     149    ASSERT(m_document->isHTMLDocument());
    148150}
    149151
     
    155157    , m_redirectAttachToFosterParent(false)
    156158    , m_maximumDOMTreeDepth(maximumDOMTreeDepth)
    157 {
     159    , m_inQuirksMode(fragment->document()->inQuirksMode())
     160{
     161    ASSERT(m_document->isHTMLDocument());
    158162}
    159163
     
    232236    if (m_document->isSrcdocDocument())
    233237        return;
    234     m_document->setCompatibilityMode(Document::QuirksMode);
     238    setCompatibilityMode(Document::QuirksMode);
     239}
     240
     241void HTMLConstructionSite::setCompatibilityMode(Document::CompatibilityMode mode)
     242{
     243    m_inQuirksMode = (mode == Document::QuirksMode);
     244    m_document->setCompatibilityMode(mode);
     245}
     246
     247void HTMLConstructionSite::setCompatibilityModeFromDoctype(const String& name, const String& publicId, const String& systemId)
     248{
     249    // There are three possible compatibility modes:
     250    // Quirks - quirks mode emulates WinIE and NS4. CSS parsing is also relaxed in this mode, e.g., unit types can
     251    // be omitted from numbers.
     252    // Limited Quirks - This mode is identical to no-quirks mode except for its treatment of line-height in the inline box model. 
     253    // No Quirks - no quirks apply. Web pages will obey the specifications to the letter.
     254
     255    // Check for Quirks Mode.
     256    if (name != "html"
     257        || publicId.startsWith("+//Silmaril//dtd html Pro v0r11 19970101//", false)
     258        || publicId.startsWith("-//AdvaSoft Ltd//DTD HTML 3.0 asWedit + extensions//", false)
     259        || publicId.startsWith("-//AS//DTD HTML 3.0 asWedit + extensions//", false)
     260        || publicId.startsWith("-//IETF//DTD HTML 2.0 Level 1//", false)
     261        || publicId.startsWith("-//IETF//DTD HTML 2.0 Level 2//", false)
     262        || publicId.startsWith("-//IETF//DTD HTML 2.0 Strict Level 1//", false)
     263        || publicId.startsWith("-//IETF//DTD HTML 2.0 Strict Level 2//", false)
     264        || publicId.startsWith("-//IETF//DTD HTML 2.0 Strict//", false)
     265        || publicId.startsWith("-//IETF//DTD HTML 2.0//", false)
     266        || publicId.startsWith("-//IETF//DTD HTML 2.1E//", false)
     267        || publicId.startsWith("-//IETF//DTD HTML 3.0//", false)
     268        || publicId.startsWith("-//IETF//DTD HTML 3.2 Final//", false)
     269        || publicId.startsWith("-//IETF//DTD HTML 3.2//", false)
     270        || publicId.startsWith("-//IETF//DTD HTML 3//", false)
     271        || publicId.startsWith("-//IETF//DTD HTML Level 0//", false)
     272        || publicId.startsWith("-//IETF//DTD HTML Level 1//", false)
     273        || publicId.startsWith("-//IETF//DTD HTML Level 2//", false)
     274        || publicId.startsWith("-//IETF//DTD HTML Level 3//", false)
     275        || publicId.startsWith("-//IETF//DTD HTML Strict Level 0//", false)
     276        || publicId.startsWith("-//IETF//DTD HTML Strict Level 1//", false)
     277        || publicId.startsWith("-//IETF//DTD HTML Strict Level 2//", false)
     278        || publicId.startsWith("-//IETF//DTD HTML Strict Level 3//", false)
     279        || publicId.startsWith("-//IETF//DTD HTML Strict//", false)
     280        || publicId.startsWith("-//IETF//DTD HTML//", false)
     281        || publicId.startsWith("-//Metrius//DTD Metrius Presentational//", false)
     282        || publicId.startsWith("-//Microsoft//DTD Internet Explorer 2.0 HTML Strict//", false)
     283        || publicId.startsWith("-//Microsoft//DTD Internet Explorer 2.0 HTML//", false)
     284        || publicId.startsWith("-//Microsoft//DTD Internet Explorer 2.0 Tables//", false)
     285        || publicId.startsWith("-//Microsoft//DTD Internet Explorer 3.0 HTML Strict//", false)
     286        || publicId.startsWith("-//Microsoft//DTD Internet Explorer 3.0 HTML//", false)
     287        || publicId.startsWith("-//Microsoft//DTD Internet Explorer 3.0 Tables//", false)
     288        || publicId.startsWith("-//Netscape Comm. Corp.//DTD HTML//", false)
     289        || publicId.startsWith("-//Netscape Comm. Corp.//DTD Strict HTML//", false)
     290        || publicId.startsWith("-//O'Reilly and Associates//DTD HTML 2.0//", false)
     291        || publicId.startsWith("-//O'Reilly and Associates//DTD HTML Extended 1.0//", false)
     292        || publicId.startsWith("-//O'Reilly and Associates//DTD HTML Extended Relaxed 1.0//", false)
     293        || publicId.startsWith("-//SoftQuad Software//DTD HoTMetaL PRO 6.0::19990601::extensions to HTML 4.0//", false)
     294        || publicId.startsWith("-//SoftQuad//DTD HoTMetaL PRO 4.0::19971010::extensions to HTML 4.0//", false)
     295        || publicId.startsWith("-//Spyglass//DTD HTML 2.0 Extended//", false)
     296        || publicId.startsWith("-//SQ//DTD HTML 2.0 HoTMetaL + extensions//", false)
     297        || publicId.startsWith("-//Sun Microsystems Corp.//DTD HotJava HTML//", false)
     298        || publicId.startsWith("-//Sun Microsystems Corp.//DTD HotJava Strict HTML//", false)
     299        || publicId.startsWith("-//W3C//DTD HTML 3 1995-03-24//", false)
     300        || publicId.startsWith("-//W3C//DTD HTML 3.2 Draft//", false)
     301        || publicId.startsWith("-//W3C//DTD HTML 3.2 Final//", false)
     302        || publicId.startsWith("-//W3C//DTD HTML 3.2//", false)
     303        || publicId.startsWith("-//W3C//DTD HTML 3.2S Draft//", false)
     304        || publicId.startsWith("-//W3C//DTD HTML 4.0 Frameset//", false)
     305        || publicId.startsWith("-//W3C//DTD HTML 4.0 Transitional//", false)
     306        || publicId.startsWith("-//W3C//DTD HTML Experimental 19960712//", false)
     307        || publicId.startsWith("-//W3C//DTD HTML Experimental 970421//", false)
     308        || publicId.startsWith("-//W3C//DTD W3 HTML//", false)
     309        || publicId.startsWith("-//W3O//DTD W3 HTML 3.0//", false)
     310        || equalIgnoringCase(publicId, "-//W3O//DTD W3 HTML Strict 3.0//EN//")
     311        || publicId.startsWith("-//WebTechs//DTD Mozilla HTML 2.0//", false)
     312        || publicId.startsWith("-//WebTechs//DTD Mozilla HTML//", false)
     313        || equalIgnoringCase(publicId, "-/W3C/DTD HTML 4.0 Transitional/EN")
     314        || equalIgnoringCase(publicId, "HTML")
     315        || equalIgnoringCase(systemId, "http://www.ibm.com/data/dtd/v11/ibmxhtml1-transitional.dtd")
     316        || (systemId.isEmpty() && publicId.startsWith("-//W3C//DTD HTML 4.01 Frameset//", false))
     317        || (systemId.isEmpty() && publicId.startsWith("-//W3C//DTD HTML 4.01 Transitional//", false))) {
     318        setCompatibilityMode(Document::QuirksMode);
     319        return;
     320    }
     321
     322    // Check for Limited Quirks Mode.
     323    if (publicId.startsWith("-//W3C//DTD XHTML 1.0 Frameset//", false)
     324        || publicId.startsWith("-//W3C//DTD XHTML 1.0 Transitional//", false)
     325        || (!systemId.isEmpty() && publicId.startsWith("-//W3C//DTD HTML 4.01 Frameset//", false))
     326        || (!systemId.isEmpty() && publicId.startsWith("-//W3C//DTD HTML 4.01 Transitional//", false))) {
     327        setCompatibilityMode(Document::LimitedQuirksMode);
     328        return;
     329    }
     330
     331    // Otherwise we are No Quirks Mode.
     332    setCompatibilityMode(Document::NoQuirksMode);
    235333}
    236334
     
    244342    ASSERT(token->type() == HTMLTokenTypes::DOCTYPE);
    245343
    246     RefPtr<DocumentType> doctype = DocumentType::create(m_document, token->name(), String::adopt(token->publicIdentifier()), String::adopt(token->systemIdentifier()));
     344    const String& publicId = String::adopt(token->publicIdentifier());
     345    const String& systemId = String::adopt(token->systemIdentifier());
     346    RefPtr<DocumentType> doctype = DocumentType::create(m_document, token->name(), publicId, systemId);
    247347    attachLater(m_attachmentRoot, doctype.release());
    248348
     
    257357
    258358    if (token->forceQuirks())
    259         m_document->setCompatibilityMode(Document::QuirksMode);
     359        setCompatibilityMode(Document::QuirksMode);
    260360    else {
    261         // We need to actually add the Doctype node to the DOM.
    262         executeQueuedTasks();
    263         m_document->setCompatibilityModeFromDoctype();
     361        setCompatibilityModeFromDoctype(token->name(), publicId, systemId);
    264362    }
    265363}
     
    497595bool HTMLConstructionSite::inQuirksMode()
    498596{
    499     // When we move the parser onto a background thread, we'll need to keep track of this bit on the parser thread.
    500     return m_document->inQuirksMode();
     597    return m_inQuirksMode;
    501598}
    502599
  • trunk/Source/WebCore/html/parser/HTMLConstructionSite.h

    r139042 r139141  
    157157    typedef Vector<HTMLConstructionSiteTask, 1> AttachmentQueue;
    158158
     159    void setCompatibilityMode(Document::CompatibilityMode);
     160    void setCompatibilityModeFromDoctype(const String& name, const String& publicId, const String& systemId);
     161
    159162    void attachLater(ContainerNode* parent, PassRefPtr<Node> child, bool selfClosing = false);
    160163
     
    191194
    192195    unsigned m_maximumDOMTreeDepth;
     196
     197    bool m_inQuirksMode;
    193198};
    194199
Note: See TracChangeset for help on using the changeset viewer.