diff options
Diffstat (limited to 'Source/WebCore/dom/StyleElement.cpp')
-rw-r--r-- | Source/WebCore/dom/StyleElement.cpp | 38 |
1 files changed, 25 insertions, 13 deletions
diff --git a/Source/WebCore/dom/StyleElement.cpp b/Source/WebCore/dom/StyleElement.cpp index 7657494ab..5af9fc8e4 100644 --- a/Source/WebCore/dom/StyleElement.cpp +++ b/Source/WebCore/dom/StyleElement.cpp @@ -74,15 +74,12 @@ void StyleElement::removedFromDocument(Document* document, Element* element) ASSERT(element); document->removeStyleSheetCandidateNode(element); - if (m_sheet) { - ASSERT(m_sheet->ownerNode() == element); - m_sheet->clearOwnerNode(); - m_sheet = 0; - } + if (m_sheet) + clearSheet(); // If we're in document teardown, then we don't need to do any notification of our sheet's removal. if (document->renderer()) - document->styleSelectorChanged(DeferRecalcStyle); + document->styleResolverChanged(DeferRecalcStyle); } void StyleElement::clearDocumentData(Document* document, Element* element) @@ -139,6 +136,13 @@ void StyleElement::process(Element* e) createSheet(e, m_startLineNumber, sheetText.toString()); } +void StyleElement::clearSheet() +{ + ASSERT(m_sheet); + m_sheet->clearOwnerNode(); + m_sheet = 0; +} + void StyleElement::createSheet(Element* e, int startLineNumber, const String& text) { ASSERT(e); @@ -147,28 +151,36 @@ void StyleElement::createSheet(Element* e, int startLineNumber, const String& te if (m_sheet) { if (m_sheet->isLoading()) document->removePendingSheet(); - m_sheet = 0; + clearSheet(); } // If type is empty or CSS, this is a CSS style sheet. const AtomicString& type = this->type(); if (document->contentSecurityPolicy()->allowInlineStyle() && isCSS(e, type)) { - RefPtr<MediaList> mediaList = MediaList::create(media(), e->isHTMLElement()); + RefPtr<MediaQuerySet> mediaQueries; + if (e->isHTMLElement()) + mediaQueries = MediaQuerySet::createAllowingDescriptionSyntax(media()); + else + mediaQueries = MediaQuerySet::create(media()); + MediaQueryEvaluator screenEval("screen", true); MediaQueryEvaluator printEval("print", true); - if (screenEval.eval(mediaList.get()) || printEval.eval(mediaList.get())) { + if (screenEval.eval(mediaQueries.get()) || printEval.eval(mediaQueries.get())) { document->addPendingSheet(); m_loading = true; - m_sheet = CSSStyleSheet::create(e, String(), KURL(), document->inputEncoding()); - m_sheet->parseStringAtLine(text, !document->inQuirksMode(), startLineNumber); - m_sheet->setMedia(mediaList.get()); + + m_sheet = CSSStyleSheet::createInline(e, KURL(), document->inputEncoding()); + m_sheet->setMediaQueries(mediaQueries.release()); m_sheet->setTitle(e->title()); + + m_sheet->internal()->parseStringAtLine(text, startLineNumber); + m_loading = false; } } if (m_sheet) - m_sheet->checkLoaded(); + m_sheet->internal()->checkLoaded(); } bool StyleElement::isLoading() const |