Changeset 115860 in webkit


Ignore:
Timestamp:
May 2, 2012 12:05:31 PM (12 years ago)
Author:
Antti Koivisto
Message:

Move title and media queries from StyleSheetInternal to CSSStyleSheet
https://bugs.webkit.org/show_bug.cgi?id=85387

Reviewed by Anders Carlsson.

Stylesheet title and media queries are determined by the owner, not by the stylesheet itself.
The fields belong to CSSStyleSheet.

This will make it easier to share StyleSheetInternal instances between documents.

  • css/CSSStyleSheet.cpp:

(WebCore::StyleSheetInternal::StyleSheetInternal):
(WebCore::StyleSheetInternal::isCacheable):
(WebCore):
(WebCore::CSSStyleSheet::setDisabled):

Invalidate the document style directly instead of ping-ponging through StyleSheetInternal.

(WebCore::CSSStyleSheet::setMediaQueries):
(WebCore::CSSStyleSheet::media):

  • css/CSSStyleSheet.h:

(StyleSheetInternal):
(WebCore::StyleSheetInternal::originalURL):
(WebCore::StyleSheetInternal::hasCharsetRule):
(WebCore::CSSStyleSheet::mediaQueries):
(CSSStyleSheet):
(WebCore::CSSStyleSheet::setTitle):

  • css/StyleResolver.cpp:

(WebCore::StyleResolver::appendAuthorStylesheets):
(WebCore::StyleResolver::collectMatchingRulesForList):

  • dom/DOMImplementation.cpp:

(WebCore::DOMImplementation::createCSSStyleSheet):

  • dom/ProcessingInstruction.cpp:

(WebCore::ProcessingInstruction::setCSSStyleSheet):

  • dom/StyleElement.cpp:

(WebCore::StyleElement::createSheet):

  • html/HTMLLinkElement.cpp:

(WebCore::HTMLLinkElement::parseAttribute):
(WebCore::HTMLLinkElement::setCSSStyleSheet):

  • html/HTMLStyleElement.cpp:

(WebCore::HTMLStyleElement::parseAttribute):

  • svg/SVGStyleElement.cpp:

(WebCore::SVGStyleElement::parseAttribute):

Location:
trunk/Source/WebCore
Files:
10 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r115857 r115860  
     12012-05-02  Antti Koivisto  <antti@apple.com>
     2
     3        Move title and media queries from StyleSheetInternal to CSSStyleSheet
     4        https://bugs.webkit.org/show_bug.cgi?id=85387
     5
     6        Reviewed by Anders Carlsson.
     7
     8        Stylesheet title and media queries are determined by the owner, not by the stylesheet itself.
     9        The fields belong to CSSStyleSheet.
     10       
     11        This will make it easier to share StyleSheetInternal instances between documents.
     12
     13        * css/CSSStyleSheet.cpp:
     14        (WebCore::StyleSheetInternal::StyleSheetInternal):
     15        (WebCore::StyleSheetInternal::isCacheable):
     16        (WebCore):
     17        (WebCore::CSSStyleSheet::setDisabled):
     18       
     19            Invalidate the document style directly instead of ping-ponging through StyleSheetInternal.
     20
     21        (WebCore::CSSStyleSheet::setMediaQueries):
     22        (WebCore::CSSStyleSheet::media):
     23        * css/CSSStyleSheet.h:
     24        (StyleSheetInternal):
     25        (WebCore::StyleSheetInternal::originalURL):
     26        (WebCore::StyleSheetInternal::hasCharsetRule):
     27        (WebCore::CSSStyleSheet::mediaQueries):
     28        (CSSStyleSheet):
     29        (WebCore::CSSStyleSheet::setTitle):
     30        * css/StyleResolver.cpp:
     31        (WebCore::StyleResolver::appendAuthorStylesheets):
     32        (WebCore::StyleResolver::collectMatchingRulesForList):
     33        * dom/DOMImplementation.cpp:
     34        (WebCore::DOMImplementation::createCSSStyleSheet):
     35        * dom/ProcessingInstruction.cpp:
     36        (WebCore::ProcessingInstruction::setCSSStyleSheet):
     37        * dom/StyleElement.cpp:
     38        (WebCore::StyleElement::createSheet):
     39        * html/HTMLLinkElement.cpp:
     40        (WebCore::HTMLLinkElement::parseAttribute):
     41        (WebCore::HTMLLinkElement::setCSSStyleSheet):
     42        * html/HTMLStyleElement.cpp:
     43        (WebCore::HTMLStyleElement::parseAttribute):
     44        * svg/SVGStyleElement.cpp:
     45        (WebCore::SVGStyleElement::parseAttribute):
     46
    1472012-05-02  Alexis Menard  <alexis.menard@openbossa.org>
    248
  • trunk/Source/WebCore/css/CSSStyleSheet.cpp

    r115805 r115860  
    110110    , m_originalURL(o.m_originalURL)
    111111    , m_finalURL(o.m_finalURL)
    112     , m_title(o.m_title)
    113112    , m_encodingFromCharsetRule(o.m_encodingFromCharsetRule)
    114113    , m_importRules(o.m_importRules.size())
    115114    , m_childRules(o.m_childRules.size())
    116115    , m_namespaces(o.m_namespaces)
    117     , m_mediaQueries(o.m_mediaQueries ? o.m_mediaQueries->copy() : 0)
    118116    , m_loadCompleted(true)
    119117    , m_isUserStyleSheet(o.m_isUserStyleSheet)
     
    416414    Node* ownerNode = singleOwnerNode();
    417415    return ownerNode ? ownerNode->document() : 0;
    418 }
    419 
    420 void StyleSheetInternal::setMediaQueries(PassRefPtr<MediaQuerySet> mediaQueries)
    421 {
    422     m_mediaQueries = mediaQueries;
    423416}
    424417
     
    526519    if (disabled == m_isDisabled)
    527520        return;
    528     m_isDisabled = disabled;
    529     m_internal->styleSheetChanged();
     521    m_isDisabled = disabled;
     522    Document* owner = ownerDocument();
     523    if (owner)
     524        owner->styleResolverChanged(DeferRecalcStyle);
     525}
     526
     527void CSSStyleSheet::setMediaQueries(PassRefPtr<MediaQuerySet> mediaQueries)
     528{
     529    m_mediaQueries = mediaQueries;
    530530}
    531531
     
    640640MediaList* CSSStyleSheet::media() const
    641641{
    642     if (!m_internal->mediaQueries())
    643         return 0;
     642    if (!m_mediaQueries)
     643        return 0;
     644
    644645    if (!m_mediaCSSOMWrapper)
    645         m_mediaCSSOMWrapper = MediaList::create(m_internal->mediaQueries(), const_cast<CSSStyleSheet*>(this));
     646        m_mediaCSSOMWrapper = MediaList::create(m_mediaQueries.get(), const_cast<CSSStyleSheet*>(this));
    646647    return m_mediaCSSOMWrapper.get();
    647648}
  • trunk/Source/WebCore/css/CSSStyleSheet.h

    r115805 r115860  
    106106    const Vector<RefPtr<StyleRuleImport> >& importRules() const { return m_importRules; }
    107107
    108     MediaQuerySet* mediaQueries() const { return m_mediaQueries.get(); }
    109     void setMediaQueries(PassRefPtr<MediaQuerySet>);
    110 
    111108    void notifyLoadedSheet(const CachedCSSStyleSheet*);
    112109   
     
    119116    // the JavaScript binding (which needs to use this value for security).
    120117    String originalURL() const { return m_originalURL; }
    121     String title() const { return m_title; }
    122     void setTitle(const String& title) { m_title = title; }
    123118   
    124119    const KURL& finalURL() const { return m_finalURL; }
     
    147142    void clearCharsetRule();
    148143    bool hasCharsetRule() const { return !m_encodingFromCharsetRule.isNull(); }
    149    
    150     void updateBaseURL();
    151144
    152145    StyleRuleImport* m_ownerRule;
     
    154147    String m_originalURL;
    155148    KURL m_finalURL;
    156     String m_title;
    157149
    158150    String m_encodingFromCharsetRule;
     
    161153    typedef HashMap<AtomicString, AtomicString> PrefixNamespaceURIMap;
    162154    PrefixNamespaceURIMap m_namespaces;
    163     RefPtr<MediaQuerySet> m_mediaQueries;
    164155
    165156    bool m_loadCompleted : 1;
     
    193184    virtual MediaList* media() const OVERRIDE;
    194185    virtual String href() const OVERRIDE { return m_internal->originalURL(); } 
    195     virtual String title() const OVERRIDE { return m_internal->title(); }
     186    virtual String title() const OVERRIDE { return m_title; }
    196187    virtual bool disabled() const OVERRIDE { return m_isDisabled; }
    197188    virtual void setDisabled(bool) OVERRIDE;
     
    219210    void styleSheetChanged() { m_internal->styleSheetChanged(); }
    220211    Document* ownerDocument() const;
     212    MediaQuerySet* mediaQueries() const { return m_mediaQueries.get(); }
     213    void setMediaQueries(PassRefPtr<MediaQuerySet>);
     214    void setTitle(const String& title) { m_title = title; }
    221215   
    222216    void clearChildRuleCSSOMWrappers();
     
    233227    RefPtr<StyleSheetInternal> m_internal;
    234228    bool m_isDisabled;
     229    String m_title;
     230    RefPtr<MediaQuerySet> m_mediaQueries;
    235231
    236232    Node* m_ownerNode;
  • trunk/Source/WebCore/css/StyleResolver.cpp

    r115544 r115860  
    505505    unsigned size = stylesheets.size();
    506506    for (unsigned i = firstNew; i < size; ++i) {
    507         if (!stylesheets[i]->isCSSStyleSheet() || stylesheets[i]->disabled())
     507        if (!stylesheets[i]->isCSSStyleSheet())
    508508            continue;
    509509        CSSStyleSheet* cssSheet = static_cast<CSSStyleSheet*>(stylesheets[i].get());
     510        if (cssSheet->disabled())
     511            continue;
     512        if (cssSheet->mediaQueries() && !m_medium->eval(cssSheet->mediaQueries(), this))
     513            continue;
    510514        StyleSheetInternal* sheet = cssSheet->internal();
    511515#if ENABLE(STYLE_SCOPED)
     
    24792483{
    24802484    ASSERT(sheet);
    2481 
    2482     // No media implies "all", but if a media list exists it must
    2483     // contain our current medium
    2484     if (sheet->mediaQueries() && !medium.eval(sheet->mediaQueries(), styleSelector))
    2485         return; // the style sheet doesn't apply
    24862485   
    24872486    const Vector<RefPtr<StyleRuleImport> >& importRules = sheet->importRules();
  • trunk/Source/WebCore/dom/DOMImplementation.cpp

    r113922 r115860  
    308308    // FIXME: Title should be set.
    309309    // FIXME: Media could have wrong syntax, in which case we should generate an exception.
    310     RefPtr<StyleSheetInternal> sheet = StyleSheetInternal::create();
     310    RefPtr<CSSStyleSheet> sheet = CSSStyleSheet::create(StyleSheetInternal::create());
    311311    sheet->setMediaQueries(MediaQuerySet::createAllowingDescriptionSyntax(media));
    312     return CSSStyleSheet::create(sheet);
     312    return sheet;
    313313}
    314314
  • trunk/Source/WebCore/dom/ProcessingInstruction.cpp

    r115250 r115860  
    213213    ASSERT(m_isCSS);
    214214    CSSParserContext parserContext(document(), baseURL, charset);
     215
    215216    RefPtr<StyleSheetInternal> newSheet = StyleSheetInternal::create(href, baseURL, parserContext);
    216     m_sheet = CSSStyleSheet::create(newSheet, this);
     217
     218    RefPtr<CSSStyleSheet> cssSheet = CSSStyleSheet::create(newSheet, this);
     219    cssSheet->setDisabled(m_alternate);
     220    cssSheet->setTitle(m_title);
     221    cssSheet->setMediaQueries(MediaQuerySet::create(m_media));
     222
     223    m_sheet = cssSheet.release();
     224
    217225    // We don't need the cross-origin security check here because we are
    218226    // getting the sheet text in "strict" mode. This enforces a valid CSS MIME
    219227    // type.
    220     newSheet->setTitle(m_title);
    221     newSheet->setMediaQueries(MediaQuerySet::create(m_media));
    222     m_sheet->setDisabled(m_alternate);
    223 
    224228    parseStyleSheet(sheet->sheetText(true));
    225229}
     
    262266    ASSERT(!m_loading);
    263267    m_sheet = sheet;
    264     sheet->internal()->setTitle(m_title);
     268    sheet->setTitle(m_title);
    265269    sheet->setDisabled(m_alternate);
    266270}
  • trunk/Source/WebCore/dom/StyleElement.cpp

    r115250 r115860  
    171171
    172172            m_sheet = CSSStyleSheet::createInline(e, KURL(), document->inputEncoding());
    173             RefPtr<StyleSheetInternal> styleSheet = m_sheet->internal();
    174 
    175             styleSheet->parseStringAtLine(text, startLineNumber);
    176             styleSheet->setMediaQueries(mediaQueries.release());
    177             styleSheet->setTitle(e->title());
     173            m_sheet->setMediaQueries(mediaQueries.release());
     174            m_sheet->setTitle(e->title());
     175   
     176            m_sheet->internal()->parseStringAtLine(text, startLineNumber);
     177
    178178            m_loading = false;
    179179        }
  • trunk/Source/WebCore/html/HTMLLinkElement.cpp

    r115805 r115860  
    156156    else {
    157157        if (attr->name() == titleAttr && m_sheet)
    158             m_sheet->internal()->setTitle(attr->value());
     158            m_sheet->setTitle(attr->value());
    159159        HTMLElement::parseAttribute(attr);
    160160    }
     
    303303        ASSERT(!restoredSheet->isLoading());
    304304
    305         // restoreParsedStyleSheet() currently returns a copy so it is ok to mutate the queries and the title like this.
    306         RefPtr<MediaQuerySet> media = MediaQuerySet::createAllowingDescriptionSyntax(m_media);
    307         restoredSheet->setMediaQueries(media.release());
    308         restoredSheet->setTitle(title());
    309 
    310305        m_sheet = CSSStyleSheet::create(restoredSheet, this);
     306        m_sheet->setMediaQueries(MediaQuerySet::createAllowingDescriptionSyntax(m_media));
     307        m_sheet->setTitle(title());
     308
    311309        m_loading = false;
    312310        sheetLoaded();
     
    316314
    317315    RefPtr<StyleSheetInternal> styleSheet = StyleSheetInternal::create(href, baseURL, parserContext);
     316
    318317    m_sheet = CSSStyleSheet::create(styleSheet, this);
     318    m_sheet->setMediaQueries(MediaQuerySet::createAllowingDescriptionSyntax(m_media));
     319    m_sheet->setTitle(title());
    319320
    320321    styleSheet->parseAuthorStyleSheet(cachedStyleSheet, document()->securityOrigin());
    321 
    322     RefPtr<MediaQuerySet> media = MediaQuerySet::createAllowingDescriptionSyntax(m_media);
    323     styleSheet->setMediaQueries(media.release());
    324     styleSheet->setTitle(title());
    325322
    326323    m_loading = false;
  • trunk/Source/WebCore/html/HTMLStyleElement.cpp

    r115136 r115860  
    7474{
    7575    if (attr->name() == titleAttr && m_sheet)
    76         m_sheet->internal()->setTitle(attr->value());
     76        m_sheet->setTitle(attr->value());
    7777    else if (attr->name() == onloadAttr)
    7878        setAttributeEventListener(eventNames().loadEvent, createAttributeEventListener(this, attr));
     
    8585        else if (attr->isNull() && m_isRegisteredWithScopingNode)
    8686            unregisterWithScopingNode();
    87 
    8887    }
    8988#endif
  • trunk/Source/WebCore/svg/SVGStyleElement.cpp

    r114351 r115860  
    119119    if (attr->name() == SVGNames::titleAttr) {
    120120        if (m_sheet)
    121             m_sheet->internal()->setTitle(attr->value());
     121            m_sheet->setTitle(attr->value());
    122122        return;
    123123    }
Note: See TracChangeset for help on using the changeset viewer.