void InlineStyleSheetOwner::createSheet(Element& element, const String& text) { ASSERT(element.inDocument()); Document& document = element.document(); if (m_sheet) { if (m_sheet->isLoading()) document.authorStyleSheets().removePendingSheet(); clearSheet(); } if (!isValidCSSContentType(element, m_contentType)) return; ASSERT(document.contentSecurityPolicy()); const ContentSecurityPolicy& contentSecurityPolicy = *document.contentSecurityPolicy(); bool hasKnownNonce = contentSecurityPolicy.allowStyleWithNonce(element.fastGetAttribute(HTMLNames::nonceAttr), element.isInUserAgentShadowTree()); if (!contentSecurityPolicy.allowInlineStyle(document.url(), m_startTextPosition.m_line, text, hasKnownNonce)) return; RefPtr<MediaQuerySet> mediaQueries; if (element.isHTMLElement()) mediaQueries = MediaQuerySet::createAllowingDescriptionSyntax(m_media); else mediaQueries = MediaQuerySet::create(m_media); MediaQueryEvaluator screenEval(ASCIILiteral("screen"), true); MediaQueryEvaluator printEval(ASCIILiteral("print"), true); if (!screenEval.evaluate(*mediaQueries) && !printEval.evaluate(*mediaQueries)) return; authorStyleSheetsForElement(element).addPendingSheet(); m_loading = true; m_sheet = CSSStyleSheet::createInline(element, URL(), m_startTextPosition, document.encoding()); m_sheet->setMediaQueries(mediaQueries.releaseNonNull()); m_sheet->setTitle(element.title()); m_sheet->contents().parseStringAtPosition(text, m_startTextPosition, m_isParsingChildren); m_loading = false; if (m_sheet) m_sheet->contents().checkLoaded(); }
void InlineStyleSheetOwner::createSheet(Element* element, const String& text) { ASSERT(element); ASSERT(element->inDocument()); Document& document = element->document(); if (m_sheet) { if (m_sheet->isLoading()) document.styleSheetCollection()->removePendingSheet(); clearSheet(); } if (!isValidCSSContentType(element, m_contentType)) return; if (!document.contentSecurityPolicy()->allowInlineStyle(document.url(), m_startLineNumber)) return; RefPtr<MediaQuerySet> mediaQueries; if (element->isHTMLElement()) mediaQueries = MediaQuerySet::createAllowingDescriptionSyntax(m_media); else mediaQueries = MediaQuerySet::create(m_media); MediaQueryEvaluator screenEval(ASCIILiteral("screen"), true); MediaQueryEvaluator printEval(ASCIILiteral("print"), true); if (!screenEval.eval(mediaQueries.get()) && !printEval.eval(mediaQueries.get())) return; document.styleSheetCollection()->addPendingSheet(); m_loading = true; m_sheet = CSSStyleSheet::createInline(element, KURL(), document.inputEncoding()); m_sheet->setMediaQueries(mediaQueries.release()); m_sheet->setTitle(element->title()); m_sheet->contents()->parseStringAtLine(text, m_startLineNumber.zeroBasedInt(), m_isParsingChildren); m_loading = false; if (m_sheet) m_sheet->contents()->checkLoaded(); }