Changeset 115860 in webkit
- Timestamp:
- May 2, 2012 12:05:31 PM (12 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 10 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r115857 r115860 1 2012-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 1 47 2012-05-02 Alexis Menard <alexis.menard@openbossa.org> 2 48 -
trunk/Source/WebCore/css/CSSStyleSheet.cpp
r115805 r115860 110 110 , m_originalURL(o.m_originalURL) 111 111 , m_finalURL(o.m_finalURL) 112 , m_title(o.m_title)113 112 , m_encodingFromCharsetRule(o.m_encodingFromCharsetRule) 114 113 , m_importRules(o.m_importRules.size()) 115 114 , m_childRules(o.m_childRules.size()) 116 115 , m_namespaces(o.m_namespaces) 117 , m_mediaQueries(o.m_mediaQueries ? o.m_mediaQueries->copy() : 0)118 116 , m_loadCompleted(true) 119 117 , m_isUserStyleSheet(o.m_isUserStyleSheet) … … 416 414 Node* ownerNode = singleOwnerNode(); 417 415 return ownerNode ? ownerNode->document() : 0; 418 }419 420 void StyleSheetInternal::setMediaQueries(PassRefPtr<MediaQuerySet> mediaQueries)421 {422 m_mediaQueries = mediaQueries;423 416 } 424 417 … … 526 519 if (disabled == m_isDisabled) 527 520 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 527 void CSSStyleSheet::setMediaQueries(PassRefPtr<MediaQuerySet> mediaQueries) 528 { 529 m_mediaQueries = mediaQueries; 530 530 } 531 531 … … 640 640 MediaList* CSSStyleSheet::media() const 641 641 { 642 if (!m_internal->mediaQueries()) 643 return 0; 642 if (!m_mediaQueries) 643 return 0; 644 644 645 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)); 646 647 return m_mediaCSSOMWrapper.get(); 647 648 } -
trunk/Source/WebCore/css/CSSStyleSheet.h
r115805 r115860 106 106 const Vector<RefPtr<StyleRuleImport> >& importRules() const { return m_importRules; } 107 107 108 MediaQuerySet* mediaQueries() const { return m_mediaQueries.get(); }109 void setMediaQueries(PassRefPtr<MediaQuerySet>);110 111 108 void notifyLoadedSheet(const CachedCSSStyleSheet*); 112 109 … … 119 116 // the JavaScript binding (which needs to use this value for security). 120 117 String originalURL() const { return m_originalURL; } 121 String title() const { return m_title; }122 void setTitle(const String& title) { m_title = title; }123 118 124 119 const KURL& finalURL() const { return m_finalURL; } … … 147 142 void clearCharsetRule(); 148 143 bool hasCharsetRule() const { return !m_encodingFromCharsetRule.isNull(); } 149 150 void updateBaseURL();151 144 152 145 StyleRuleImport* m_ownerRule; … … 154 147 String m_originalURL; 155 148 KURL m_finalURL; 156 String m_title;157 149 158 150 String m_encodingFromCharsetRule; … … 161 153 typedef HashMap<AtomicString, AtomicString> PrefixNamespaceURIMap; 162 154 PrefixNamespaceURIMap m_namespaces; 163 RefPtr<MediaQuerySet> m_mediaQueries;164 155 165 156 bool m_loadCompleted : 1; … … 193 184 virtual MediaList* media() const OVERRIDE; 194 185 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; } 196 187 virtual bool disabled() const OVERRIDE { return m_isDisabled; } 197 188 virtual void setDisabled(bool) OVERRIDE; … … 219 210 void styleSheetChanged() { m_internal->styleSheetChanged(); } 220 211 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; } 221 215 222 216 void clearChildRuleCSSOMWrappers(); … … 233 227 RefPtr<StyleSheetInternal> m_internal; 234 228 bool m_isDisabled; 229 String m_title; 230 RefPtr<MediaQuerySet> m_mediaQueries; 235 231 236 232 Node* m_ownerNode; -
trunk/Source/WebCore/css/StyleResolver.cpp
r115544 r115860 505 505 unsigned size = stylesheets.size(); 506 506 for (unsigned i = firstNew; i < size; ++i) { 507 if (!stylesheets[i]->isCSSStyleSheet() || stylesheets[i]->disabled())507 if (!stylesheets[i]->isCSSStyleSheet()) 508 508 continue; 509 509 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; 510 514 StyleSheetInternal* sheet = cssSheet->internal(); 511 515 #if ENABLE(STYLE_SCOPED) … … 2479 2483 { 2480 2484 ASSERT(sheet); 2481 2482 // No media implies "all", but if a media list exists it must2483 // contain our current medium2484 if (sheet->mediaQueries() && !medium.eval(sheet->mediaQueries(), styleSelector))2485 return; // the style sheet doesn't apply2486 2485 2487 2486 const Vector<RefPtr<StyleRuleImport> >& importRules = sheet->importRules(); -
trunk/Source/WebCore/dom/DOMImplementation.cpp
r113922 r115860 308 308 // FIXME: Title should be set. 309 309 // 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()); 311 311 sheet->setMediaQueries(MediaQuerySet::createAllowingDescriptionSyntax(media)); 312 return CSSStyleSheet::create(sheet);312 return sheet; 313 313 } 314 314 -
trunk/Source/WebCore/dom/ProcessingInstruction.cpp
r115250 r115860 213 213 ASSERT(m_isCSS); 214 214 CSSParserContext parserContext(document(), baseURL, charset); 215 215 216 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 217 225 // We don't need the cross-origin security check here because we are 218 226 // getting the sheet text in "strict" mode. This enforces a valid CSS MIME 219 227 // type. 220 newSheet->setTitle(m_title);221 newSheet->setMediaQueries(MediaQuerySet::create(m_media));222 m_sheet->setDisabled(m_alternate);223 224 228 parseStyleSheet(sheet->sheetText(true)); 225 229 } … … 262 266 ASSERT(!m_loading); 263 267 m_sheet = sheet; 264 sheet-> internal()->setTitle(m_title);268 sheet->setTitle(m_title); 265 269 sheet->setDisabled(m_alternate); 266 270 } -
trunk/Source/WebCore/dom/StyleElement.cpp
r115250 r115860 171 171 172 172 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 178 178 m_loading = false; 179 179 } -
trunk/Source/WebCore/html/HTMLLinkElement.cpp
r115805 r115860 156 156 else { 157 157 if (attr->name() == titleAttr && m_sheet) 158 m_sheet-> internal()->setTitle(attr->value());158 m_sheet->setTitle(attr->value()); 159 159 HTMLElement::parseAttribute(attr); 160 160 } … … 303 303 ASSERT(!restoredSheet->isLoading()); 304 304 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 310 305 m_sheet = CSSStyleSheet::create(restoredSheet, this); 306 m_sheet->setMediaQueries(MediaQuerySet::createAllowingDescriptionSyntax(m_media)); 307 m_sheet->setTitle(title()); 308 311 309 m_loading = false; 312 310 sheetLoaded(); … … 316 314 317 315 RefPtr<StyleSheetInternal> styleSheet = StyleSheetInternal::create(href, baseURL, parserContext); 316 318 317 m_sheet = CSSStyleSheet::create(styleSheet, this); 318 m_sheet->setMediaQueries(MediaQuerySet::createAllowingDescriptionSyntax(m_media)); 319 m_sheet->setTitle(title()); 319 320 320 321 styleSheet->parseAuthorStyleSheet(cachedStyleSheet, document()->securityOrigin()); 321 322 RefPtr<MediaQuerySet> media = MediaQuerySet::createAllowingDescriptionSyntax(m_media);323 styleSheet->setMediaQueries(media.release());324 styleSheet->setTitle(title());325 322 326 323 m_loading = false; -
trunk/Source/WebCore/html/HTMLStyleElement.cpp
r115136 r115860 74 74 { 75 75 if (attr->name() == titleAttr && m_sheet) 76 m_sheet-> internal()->setTitle(attr->value());76 m_sheet->setTitle(attr->value()); 77 77 else if (attr->name() == onloadAttr) 78 78 setAttributeEventListener(eventNames().loadEvent, createAttributeEventListener(this, attr)); … … 85 85 else if (attr->isNull() && m_isRegisteredWithScopingNode) 86 86 unregisterWithScopingNode(); 87 88 87 } 89 88 #endif -
trunk/Source/WebCore/svg/SVGStyleElement.cpp
r114351 r115860 119 119 if (attr->name() == SVGNames::titleAttr) { 120 120 if (m_sheet) 121 m_sheet-> internal()->setTitle(attr->value());121 m_sheet->setTitle(attr->value()); 122 122 return; 123 123 }
Note: See TracChangeset
for help on using the changeset viewer.