Changeset 30147 in webkit


Ignore:
Timestamp:
Feb 11, 2008 12:17:36 PM (16 years ago)
Author:
hyatt@apple.com
Message:

Fix for bug 17298, Acid3 text should be black and not red. Make sure stylesheets with the wrong MIME type
are not accepted in strict mode.

Reviewed by darin

Added http/tests/misc/css-reject-in-strict-mode.html

  • css/CSSImportRule.cpp: (WebCore::CSSImportRule::setCSSStyleSheet):
  • css/CSSImportRule.h:
  • dom/Document.cpp: (WebCore::Document::setCSSStyleSheet):
  • dom/Document.h:
  • dom/ProcessingInstruction.cpp: (WebCore::ProcessingInstruction::setCSSStyleSheet):
  • dom/ProcessingInstruction.h:
  • html/HTMLLinkElement.cpp: (WebCore::HTMLLinkElement::setCSSStyleSheet):
  • html/HTMLLinkElement.h:
  • html/HTMLMediaElement.cpp: (WebCore::HTMLMediaElement::pickMedia):
  • loader/CachedCSSStyleSheet.cpp: (WebCore::CachedCSSStyleSheet::ref): (WebCore::CachedCSSStyleSheet::checkNotify): (WebCore::CachedCSSStyleSheet::canUseSheet):
  • loader/CachedCSSStyleSheet.h: (WebCore::CachedCSSStyleSheet::sheetText):
  • loader/CachedResourceClient.h: (WebCore::CachedResourceClient::setCSSStyleSheet):
  • loader/mac/UserStyleSheetLoader.cpp: (UserStyleSheetLoader::setCSSStyleSheet):
  • loader/mac/UserStyleSheetLoader.h:
Location:
trunk/WebCore
Files:
15 edited

Legend:

Unmodified
Added
Removed
  • trunk/WebCore/ChangeLog

    r30146 r30147  
     12008-02-11  David Hyatt  <hyatt@apple.com>
     2
     3        Fix for bug 17298, Acid3 text should be black and not red.  Make sure stylesheets with the wrong MIME type
     4        are not accepted in strict mode.
     5
     6        Reviewed by darin
     7
     8        Added http/tests/misc/css-reject-in-strict-mode.html
     9
     10        * css/CSSImportRule.cpp:
     11        (WebCore::CSSImportRule::setCSSStyleSheet):
     12        * css/CSSImportRule.h:
     13        * dom/Document.cpp:
     14        (WebCore::Document::setCSSStyleSheet):
     15        * dom/Document.h:
     16        * dom/ProcessingInstruction.cpp:
     17        (WebCore::ProcessingInstruction::setCSSStyleSheet):
     18        * dom/ProcessingInstruction.h:
     19        * html/HTMLLinkElement.cpp:
     20        (WebCore::HTMLLinkElement::setCSSStyleSheet):
     21        * html/HTMLLinkElement.h:
     22        * html/HTMLMediaElement.cpp:
     23        (WebCore::HTMLMediaElement::pickMedia):
     24        * loader/CachedCSSStyleSheet.cpp:
     25        (WebCore::CachedCSSStyleSheet::ref):
     26        (WebCore::CachedCSSStyleSheet::checkNotify):
     27        (WebCore::CachedCSSStyleSheet::canUseSheet):
     28        * loader/CachedCSSStyleSheet.h:
     29        (WebCore::CachedCSSStyleSheet::sheetText):
     30        * loader/CachedResourceClient.h:
     31        (WebCore::CachedResourceClient::setCSSStyleSheet):
     32        * loader/mac/UserStyleSheetLoader.cpp:
     33        (UserStyleSheetLoader::setCSSStyleSheet):
     34        * loader/mac/UserStyleSheetLoader.h:
     35
    1362008-02-11  Adam Roben  <aroben@apple.com>
    237
  • trunk/WebCore/css/CSSImportRule.cpp

    r28639 r30147  
    5757}
    5858
    59 void CSSImportRule::setCSSStyleSheet(const String& url, const String& charset, const String& sheet)
     59void CSSImportRule::setCSSStyleSheet(const String& url, const String& charset, const CachedCSSStyleSheet* sheet)
    6060{
    6161    if (m_styleSheet)
     
    6464
    6565    CSSStyleSheet* parent = parentStyleSheet();
    66     m_styleSheet->parseString(sheet, !parent || parent->useStrictParsing());
     66    bool strict = !parent || parent->useStrictParsing();
     67    m_styleSheet->parseString(sheet->sheetText(strict), strict);
    6768    m_loading = false;
    6869
  • trunk/WebCore/css/CSSImportRule.h

    r25754 r30147  
    5454
    5555    // from CachedResourceClient
    56     virtual void setCSSStyleSheet(const String& url, const String& charset, const String& sheet);
     56    virtual void setCSSStyleSheet(const String& url, const String& charset, const CachedCSSStyleSheet*);
    5757
    5858    virtual void insertedIntoParent();
  • trunk/WebCore/dom/Document.cpp

    r30112 r30147  
    2727#include "AXObjectCache.h"
    2828#include "CDATASection.h"
     29#include "CachedCSSStyleSheet.h"
    2930#include "CSSHelper.h"
    3031#include "CSSStyleSelector.h"
     
    16531654}
    16541655
    1655 void Document::setCSSStyleSheet(const String &url, const String& charset, const String &sheet)
     1656void Document::setCSSStyleSheet(const String &url, const String& charset, const CachedCSSStyleSheet* sheet)
    16561657{
    16571658    m_sheet = new CSSStyleSheet(this, url, charset);
    1658     m_sheet->parseString(sheet);
     1659    m_sheet->parseString(sheet->sheetText());
    16591660
    16601661    updateStyleSelector();
  • trunk/WebCore/dom/Document.h

    r30112 r30147  
    5353    class Attribute;
    5454    class CDATASection;
     55    class CachedCSSStyleSheet;
    5556    class CSSStyleDeclaration;
    5657    class CSSStyleSelector;
     
    384385
    385386    // from cachedObjectClient
    386     virtual void setCSSStyleSheet(const String& url, const String& charset, const String& sheetStr);
     387    virtual void setCSSStyleSheet(const String& url, const String& charset, const CachedCSSStyleSheet*);
    387388
    388389#if FRAME_LOADS_USER_STYLESHEET
  • trunk/WebCore/dom/ProcessingInstruction.cpp

    r27690 r30147  
    198198}
    199199
    200 void ProcessingInstruction::setCSSStyleSheet(const String& url, const String& charset, const String& sheet)
     200void ProcessingInstruction::setCSSStyleSheet(const String& url, const String& charset, const CachedCSSStyleSheet* sheet)
    201201{
    202202#if ENABLE(XSLT)
     
    204204#endif
    205205    m_sheet = new CSSStyleSheet(this, url, charset);
    206     parseStyleSheet(sheet);
     206    parseStyleSheet(sheet->sheetText());
    207207}
    208208
  • trunk/WebCore/dom/ProcessingInstruction.h

    r28639 r30147  
    5858    StyleSheet* sheet() const { return m_sheet.get(); }
    5959    bool checkStyleSheet();
    60     virtual void setCSSStyleSheet(const String& url, const String& charset, const String& sheet);
     60    virtual void setCSSStyleSheet(const String& url, const String& charset, const CachedCSSStyleSheet*);
    6161#if ENABLE(XSLT)
    6262    virtual void setXSLStyleSheet(const String& url, const String& sheet);
  • trunk/WebCore/html/HTMLLinkElement.cpp

    r25754 r30147  
    218218}
    219219
    220 void HTMLLinkElement::setCSSStyleSheet(const String& url, const String& charset, const String& sheetStr)
    221 {
     220void HTMLLinkElement::setCSSStyleSheet(const String& url, const String& charset, const CachedCSSStyleSheet* sheet)
     221{
     222    bool strict = !document()->inCompatMode();
    222223    m_sheet = new CSSStyleSheet(this, url, charset);
    223     m_sheet->parseString(sheetStr, !document()->inCompatMode());
     224    m_sheet->parseString(sheet->sheetText(strict), strict);
    224225    m_sheet->setTitle(title());
    225226
  • trunk/WebCore/html/HTMLLinkElement.h

    r25754 r30147  
    8080
    8181    // from CachedResourceClient
    82     virtual void setCSSStyleSheet(const String &url, const String& charset, const String &sheet);
     82    virtual void setCSSStyleSheet(const String &url, const String& charset, const CachedCSSStyleSheet* sheet);
    8383    bool isLoading() const;
    8484    virtual bool sheetLoaded();
  • trunk/WebCore/html/HTMLMediaElement.cpp

    r30043 r30147  
    810810                    continue;
    811811                if (source->hasAttribute(mediaAttr)) {
    812                     MediaQueryEvaluator screenEval("screen", document()->page(), renderer() ? renderer()->style() : 0);
     812                    MediaQueryEvaluator screenEval("screen", document()->frame(), renderer() ? renderer()->style() : 0);
    813813                    RefPtr<MediaList> media = new MediaList((CSSStyleSheet*)0, source->media(), true);
    814814                    if (!screenEval.eval(media.get()))
  • trunk/WebCore/loader/CachedCSSStyleSheet.cpp

    r29805 r30147  
    5757
    5858    if (!m_loading)
    59         c->setCSSStyleSheet(m_url, m_decoder->encoding().name(), errorOccurred() ? "" : m_sheet);
     59        c->setCSSStyleSheet(m_url, m_decoder->encoding().name(), this);
    6060}
    6161
     
    9292    CachedResourceClientWalker w(m_clients);
    9393    while (CachedResourceClient *c = w.next())
    94         c->setCSSStyleSheet(m_response.url().string(), m_decoder->encoding().name(), m_sheet);
     94        c->setCSSStyleSheet(m_response.url().string(), m_decoder->encoding().name(), this);
    9595
    9696#if USE(LOW_BANDWIDTH_DISPLAY)       
     
    111111}
    112112
     113bool CachedCSSStyleSheet::canUseSheet(bool strict) const
     114{
     115    if (errorOccurred())
     116        return false;
     117       
     118    if (!strict)
     119        return true;
     120
     121    // This check exactly matches Firefox.
     122    String mimeType = response().mimeType();
     123    return mimeType.isEmpty() || equalIgnoringCase(mimeType, "text/css") || equalIgnoringCase(mimeType, "application/x-unknown-content-type");
    113124}
     125 
     126}
  • trunk/WebCore/loader/CachedCSSStyleSheet.h

    r27937 r30147  
    4343        virtual ~CachedCSSStyleSheet();
    4444
    45         const String& sheet() const { return m_sheet; }
     45        const String sheetText(bool strict = true) const { return canUseSheet(strict) ? m_sheet : ""; }
    4646
    4747        virtual void ref(CachedResourceClient*);
     
    5555
    5656        void checkNotify();
     57   
     58    private:
     59        bool canUseSheet(bool strict) const;
    5760
    5861    protected:
  • trunk/WebCore/loader/CachedResourceClient.h

    r26484 r30147  
    3636namespace WebCore {
    3737
     38    class CachedCSSStyleSheet;
    3839    class CachedFont;
    3940    class CachedResource;
     
    6566        virtual bool willRenderImage(CachedImage*) { return false; }
    6667
    67         virtual void setCSSStyleSheet(const String& /*URL*/, const String& /*charset*/, const String& /*sheet*/) { }
     68        virtual void setCSSStyleSheet(const String& /*URL*/, const String& /*charset*/, const CachedCSSStyleSheet*) { }
    6869        virtual void setXSLStyleSheet(const String& /*URL*/, const String& /*sheet*/) { }
    6970
  • trunk/WebCore/loader/mac/UserStyleSheetLoader.cpp

    r30079 r30147  
    5555}
    5656
    57 void UserStyleSheetLoader::setCSSStyleSheet(const String& /*URL*/, const String& /*charset*/, const String& sheet)
     57void UserStyleSheetLoader::setCSSStyleSheet(const String& /*URL*/, const String& /*charset*/, const CachedCSSStyleSheet* sheet)
    5858{
    5959    m_document->removePendingSheet();
    6060    if (Frame* frame = m_document->frame())
    61         frame->setUserStyleSheet(sheet);
     61        frame->setUserStyleSheet(sheet->sheetText());
    6262}
  • trunk/WebCore/loader/mac/UserStyleSheetLoader.h

    r30079 r30147  
    4646
    4747    private:
    48         virtual void setCSSStyleSheet(const String& URL, const String& charset, const String& sheet);
     48        virtual void setCSSStyleSheet(const String& URL, const String& charset, const CachedCSSStyleSheet* sheet);
    4949
    5050        RefPtr<Document> m_document;
Note: See TracChangeset for help on using the changeset viewer.