Changeset 125805 in webkit


Ignore:
Timestamp:
Aug 16, 2012 1:30:13 PM (12 years ago)
Author:
Antti Koivisto
Message:

Remove StyleSheetContents::m_finalURL
https://bugs.webkit.org/show_bug.cgi?id=94140

Reviewed by Andreas Kling.

It is equal (or empty in case of inline stylesheets) to the baseURL passed in CSSParserContext.
Removing it simplifies the constructors and the related code.

  • css/CSSStyleSheet.cpp:

(WebCore::CSSStyleSheet::createInline):
(WebCore::CSSStyleSheet::canAccessRules):
(WebCore::CSSStyleSheet::rules):
(WebCore::CSSStyleSheet::cssRules):

  • factor access check to a function
  • allow document always access rules of its inline stylesheets
  • css/StyleRuleImport.cpp:

(WebCore::StyleRuleImport::setCSSStyleSheet):
(WebCore::StyleRuleImport::requestStyleSheet):

  • css/StyleSheetContents.cpp:

(WebCore::StyleSheetContents::StyleSheetContents):
(WebCore::StyleSheetContents::parseAuthorStyleSheet):

  • css/StyleSheetContents.h:

(WebCore::StyleSheetContents::create):
(WebCore::StyleSheetContents::originalURL):
(StyleSheetContents):

  • dom/ProcessingInstruction.cpp:

(WebCore::ProcessingInstruction::setCSSStyleSheet):

  • html/HTMLLinkElement.cpp:

(WebCore::HTMLLinkElement::setCSSStyleSheet):

  • inspector/InspectorStyleSheet.cpp:

(WebCore::fillMediaListChain):
(WebCore::InspectorStyleSheet::styleSheetURL):

  • xml/XSLImportRule.cpp:

(WebCore::XSLImportRule::loadSheet):

Location:
trunk/Source/WebCore
Files:
10 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r125804 r125805  
     12012-08-15  Antti Koivisto  <antti@apple.com>
     2
     3        Remove StyleSheetContents::m_finalURL
     4        https://bugs.webkit.org/show_bug.cgi?id=94140
     5
     6        Reviewed by Andreas Kling.
     7
     8        It is equal (or empty in case of inline stylesheets) to the baseURL passed in CSSParserContext.
     9        Removing it simplifies the constructors and the related code.
     10
     11        * css/CSSStyleSheet.cpp:
     12        (WebCore::CSSStyleSheet::createInline):
     13        (WebCore::CSSStyleSheet::canAccessRules):
     14        (WebCore::CSSStyleSheet::rules):
     15        (WebCore::CSSStyleSheet::cssRules):
     16
     17            - factor access check to a function
     18            - allow document always access rules of its inline stylesheets
     19
     20        * css/StyleRuleImport.cpp:
     21        (WebCore::StyleRuleImport::setCSSStyleSheet):
     22        (WebCore::StyleRuleImport::requestStyleSheet):
     23        * css/StyleSheetContents.cpp:
     24        (WebCore::StyleSheetContents::StyleSheetContents):
     25        (WebCore::StyleSheetContents::parseAuthorStyleSheet):
     26        * css/StyleSheetContents.h:
     27        (WebCore::StyleSheetContents::create):
     28        (WebCore::StyleSheetContents::originalURL):
     29        (StyleSheetContents):
     30        * dom/ProcessingInstruction.cpp:
     31        (WebCore::ProcessingInstruction::setCSSStyleSheet):
     32        * html/HTMLLinkElement.cpp:
     33        (WebCore::HTMLLinkElement::setCSSStyleSheet):
     34        * inspector/InspectorStyleSheet.cpp:
     35        (WebCore::fillMediaListChain):
     36        (WebCore::InspectorStyleSheet::styleSheetURL):
     37        * xml/XSLImportRule.cpp:
     38        (WebCore::XSLImportRule::loadSheet):
     39
    1402012-08-16  Justin Novosad  <junov@chromium.org>
    241
  • trunk/Source/WebCore/css/CSSStyleSheet.cpp

    r124884 r125805  
    8686PassRefPtr<CSSStyleSheet> CSSStyleSheet::create(PassRefPtr<StyleSheetContents> sheet, Node* ownerNode)
    8787{
    88     return adoptRef(new CSSStyleSheet(sheet, ownerNode));
     88    return adoptRef(new CSSStyleSheet(sheet, ownerNode, false));
    8989}
    9090
     
    9292{
    9393    CSSParserContext parserContext(ownerNode->document(), baseURL, encoding);
    94     RefPtr<StyleSheetContents> sheet = StyleSheetContents::create(baseURL.string(), baseURL, parserContext);
    95     return adoptRef(new CSSStyleSheet(sheet.release(), ownerNode));
     94    RefPtr<StyleSheetContents> sheet = StyleSheetContents::create(baseURL.string(), parserContext);
     95    return adoptRef(new CSSStyleSheet(sheet.release(), ownerNode, true));
    9696}
    9797
    9898CSSStyleSheet::CSSStyleSheet(PassRefPtr<StyleSheetContents> contents, CSSImportRule* ownerRule)
    9999    : m_contents(contents)
     100    , m_isInlineStylesheet(false)
    100101    , m_isDisabled(false)
    101102    , m_ownerNode(0)
     
    105106}
    106107
    107 CSSStyleSheet::CSSStyleSheet(PassRefPtr<StyleSheetContents> contents, Node* ownerNode)
     108CSSStyleSheet::CSSStyleSheet(PassRefPtr<StyleSheetContents> contents, Node* ownerNode, bool isInlineStylesheet)
    108109    : m_contents(contents)
     110    , m_isInlineStylesheet(isInlineStylesheet)
    109111    , m_isDisabled(false)
    110112    , m_ownerNode(ownerNode)
     
    228230}
    229231
     232bool CSSStyleSheet::canAccessRules() const
     233{
     234    if (m_isInlineStylesheet)
     235        return true;
     236    KURL baseURL = m_contents->baseURL();
     237    if (baseURL.isEmpty())
     238        return true;
     239    Document* document = ownerDocument();
     240    if (!document)
     241        return true;
     242    if (document->securityOrigin()->canRequest(baseURL))
     243        return true;
     244    return false;
     245}
     246
    230247PassRefPtr<CSSRuleList> CSSStyleSheet::rules()
    231248{
    232     KURL url = m_contents->finalURL();
    233     Document* document = ownerDocument();
    234     if (!url.isEmpty() && document && !document->securityOrigin()->canRequest(url))
     249    if (!canAccessRules())
    235250        return 0;
    236251    // IE behavior.
     
    311326PassRefPtr<CSSRuleList> CSSStyleSheet::cssRules()
    312327{
    313     KURL url = m_contents->finalURL();
    314     Document* document = ownerDocument();
    315     if (!url.isEmpty() && document && !document->securityOrigin()->canRequest(url))
     328    if (!canAccessRules())
    316329        return 0;
    317330    if (!m_ruleListCSSOMWrapper)
  • trunk/Source/WebCore/css/CSSStyleSheet.h

    r124330 r125805  
    111111private:
    112112    CSSStyleSheet(PassRefPtr<StyleSheetContents>, CSSImportRule* ownerRule);
    113     CSSStyleSheet(PassRefPtr<StyleSheetContents>, Node* ownerNode);
     113    CSSStyleSheet(PassRefPtr<StyleSheetContents>, Node* ownerNode, bool isInlineStylesheet);
    114114
    115115    virtual bool isCSSStyleSheet() const { return true; }
    116116    virtual String type() const { return "text/css"; }
     117
     118    bool canAccessRules() const;
    117119   
    118120    RefPtr<StyleSheetContents> m_contents;
     121    bool m_isInlineStylesheet;
    119122    bool m_isDisabled;
    120123    String m_title;
  • trunk/Source/WebCore/css/StyleRuleImport.cpp

    r124884 r125805  
    6969        context.baseURL = baseURL;
    7070
    71     m_styleSheet = StyleSheetContents::create(this, href, baseURL, context);
     71    m_styleSheet = StyleSheetContents::create(this, href, context);
    7272
    7373    Document* document = m_parentStyleSheet ? m_parentStyleSheet->singleOwnerDocument() : 0;
     
    100100
    101101    String absHref = m_strHref;
    102     if (!m_parentStyleSheet->finalURL().isNull())
     102    if (!m_parentStyleSheet->baseURL().isNull())
    103103        // use parent styleheet's URL as the base URL
    104         absHref = KURL(m_parentStyleSheet->finalURL(), m_strHref).string();
     104        absHref = KURL(m_parentStyleSheet->baseURL(), m_strHref).string();
    105105
    106106    // Check for a cycle in our import chain.  If we encounter a stylesheet
     
    108108    StyleSheetContents* rootSheet = m_parentStyleSheet;
    109109    for (StyleSheetContents* sheet = m_parentStyleSheet; sheet; sheet = sheet->parentStyleSheet()) {
    110         if (absHref == sheet->finalURL().string() || absHref == sheet->originalURL())
     110        if (absHref == sheet->baseURL().string() || absHref == sheet->originalURL())
    111111            return;
    112112        rootSheet = sheet;
  • trunk/Source/WebCore/css/StyleSheetContents.cpp

    r125371 r125805  
    5555}
    5656
    57 StyleSheetContents::StyleSheetContents(StyleRuleImport* ownerRule, const String& originalURL, const KURL& finalURL, const CSSParserContext& context)
     57StyleSheetContents::StyleSheetContents(StyleRuleImport* ownerRule, const String& originalURL, const CSSParserContext& context)
    5858    : m_ownerRule(ownerRule)
    5959    , m_originalURL(originalURL)
    60     , m_finalURL(finalURL)
    6160    , m_loadCompleted(false)
    6261    , m_isUserStyleSheet(ownerRule && ownerRule->parentStyleSheet() && ownerRule->parentStyleSheet()->isUserStyleSheet())
     
    7473    , m_ownerRule(0)
    7574    , m_originalURL(o.m_originalURL)
    76     , m_finalURL(o.m_finalURL)
    7775    , m_encodingFromCharsetRule(o.m_encodingFromCharsetRule)
    7876    , m_importRules(o.m_importRules.size())
     
    284282    // This prevents an attacker playing games by injecting CSS strings into HTML, XML, JSON, etc. etc.
    285283    if (!hasValidMIMEType && !hasSyntacticallyValidCSSHeader()) {
    286         bool isCrossOriginCSS = !securityOrigin || !securityOrigin->canRequest(finalURL());
     284        bool isCrossOriginCSS = !securityOrigin || !securityOrigin->canRequest(baseURL());
    287285        if (isCrossOriginCSS) {
    288286            clearRules();
     
    296294        // There are two variants of KHTMLFixes.css. One is equal to mediaWikiKHTMLFixesStyleSheet,
    297295        // while the other lacks the second trailing newline.
    298         if (finalURL().string().endsWith(slashKHTMLFixesDotCss) && !sheetText.isNull() && mediaWikiKHTMLFixesStyleSheet.startsWith(sheetText)
     296        if (baseURL().string().endsWith(slashKHTMLFixesDotCss) && !sheetText.isNull() && mediaWikiKHTMLFixesStyleSheet.startsWith(sheetText)
    299297            && sheetText.length() >= mediaWikiKHTMLFixesStyleSheet.length() - 1)
    300298            clearRules();
     
    490488    MemoryClassInfo info(memoryObjectInfo, this, MemoryInstrumentation::CSS);
    491489    info.addMember(m_originalURL);
    492     info.addMember(m_finalURL);
    493490    info.addMember(m_encodingFromCharsetRule);
    494491    info.addVector(m_importRules);
  • trunk/Source/WebCore/css/StyleSheetContents.h

    r124720 r125805  
    4545    static PassRefPtr<StyleSheetContents> create(const CSSParserContext& context = CSSParserContext(CSSStrictMode))
    4646    {
    47         return adoptRef(new StyleSheetContents(0, String(), KURL(), context));
     47        return adoptRef(new StyleSheetContents(0, String(), context));
    4848    }
    49     static PassRefPtr<StyleSheetContents> create(const String& originalURL, const KURL& finalURL, const CSSParserContext& context)
     49    static PassRefPtr<StyleSheetContents> create(const String& originalURL, const CSSParserContext& context)
    5050    {
    51         return adoptRef(new StyleSheetContents(0, originalURL, finalURL, context));
     51        return adoptRef(new StyleSheetContents(0, originalURL, context));
    5252    }
    53     static PassRefPtr<StyleSheetContents> create(StyleRuleImport* ownerRule, const String& originalURL, const KURL& finalURL, const CSSParserContext& context)
     53    static PassRefPtr<StyleSheetContents> create(StyleRuleImport* ownerRule, const String& originalURL, const CSSParserContext& context)
    5454    {
    55         return adoptRef(new StyleSheetContents(ownerRule, originalURL, finalURL, context));
     55        return adoptRef(new StyleSheetContents(ownerRule, originalURL, context));
    5656    }
    5757
     
    113113    // the JavaScript binding (which needs to use this value for security).
    114114    String originalURL() const { return m_originalURL; }
    115    
    116     const KURL& finalURL() const { return m_finalURL; }
    117115    const KURL& baseURL() const { return m_parserContext.baseURL; }
    118116
     
    143141
    144142private:
    145     StyleSheetContents(StyleRuleImport* ownerRule, const String& originalURL, const KURL& baseURL, const CSSParserContext&);
     143    StyleSheetContents(StyleRuleImport* ownerRule, const String& originalURL, const CSSParserContext&);
    146144    StyleSheetContents(const StyleSheetContents&);
    147145
     
    151149
    152150    String m_originalURL;
    153     KURL m_finalURL;
    154151
    155152    String m_encodingFromCharsetRule;
  • trunk/Source/WebCore/dom/ProcessingInstruction.cpp

    r123128 r125805  
    215215    CSSParserContext parserContext(document(), baseURL, charset);
    216216
    217     RefPtr<StyleSheetContents> newSheet = StyleSheetContents::create(href, baseURL, parserContext);
     217    RefPtr<StyleSheetContents> newSheet = StyleSheetContents::create(href, parserContext);
    218218
    219219    RefPtr<CSSStyleSheet> cssSheet = CSSStyleSheet::create(newSheet, this);
  • trunk/Source/WebCore/html/HTMLLinkElement.cpp

    r122806 r125805  
    318318#endif
    319319
    320     RefPtr<StyleSheetContents> styleSheet = StyleSheetContents::create(href, baseURL, parserContext);
     320    RefPtr<StyleSheetContents> styleSheet = StyleSheetContents::create(href, parserContext);
    321321
    322322    m_sheet = CSSStyleSheet::create(styleSheet, this);
  • trunk/Source/WebCore/inspector/InspectorStyleSheet.cpp

    r123612 r125805  
    232232
    233233        if (parentStyleSheet) {
    234             sourceURL = parentStyleSheet->contents()->finalURL();
     234            sourceURL = parentStyleSheet->contents()->baseURL();
    235235            if (sourceURL.isEmpty())
    236236                sourceURL = InspectorDOMAgent::documentURLString(parentStyleSheet->ownerDocument());
     
    251251                    if (doc)
    252252                        sourceURL = doc->url();
    253                     else if (!styleSheet->contents()->finalURL().isEmpty())
    254                         sourceURL = styleSheet->contents()->finalURL();
     253                    else if (!styleSheet->contents()->baseURL().isEmpty())
     254                        sourceURL = styleSheet->contents()->baseURL();
    255255                    else
    256256                        sourceURL = "";
     
    708708String InspectorStyleSheet::styleSheetURL(CSSStyleSheet* pageStyleSheet)
    709709{
    710     if (pageStyleSheet && !pageStyleSheet->contents()->finalURL().isEmpty())
    711         return pageStyleSheet->contents()->finalURL().string();
     710    if (pageStyleSheet && !pageStyleSheet->contents()->baseURL().isEmpty())
     711        return pageStyleSheet->contents()->baseURL().string();
    712712    return emptyString();
    713713}
  • trunk/Source/WebCore/xml/XSLImportRule.cpp

    r98933 r125805  
    8888    String absHref = m_strHref;
    8989    XSLStyleSheet* parentSheet = parentStyleSheet();
    90     if (!parentSheet->finalURL().isNull())
     90    if (!parentSheet->baseURL().isNull())
    9191        // use parent styleheet's URL as the base URL
    92         absHref = KURL(parentSheet->finalURL(), m_strHref).string();
     92        absHref = KURL(parentSheet->baseURL(), m_strHref).string();
    9393   
    9494    // Check for a cycle in our import chain.  If we encounter a stylesheet
    9595    // in our parent chain with the same URL, then just bail.
    9696    for (XSLStyleSheet* parentSheet = parentStyleSheet(); parentSheet; parentSheet = parentSheet->parentStyleSheet()) {
    97         if (absHref == parentSheet->finalURL().string())
     97        if (absHref == parentSheet->baseURL().string())
    9898            return;
    9999    }
Note: See TracChangeset for help on using the changeset viewer.