summaryrefslogtreecommitdiff
path: root/Source/WebCore/dom/StyleElement.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/WebCore/dom/StyleElement.cpp')
-rw-r--r--Source/WebCore/dom/StyleElement.cpp38
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