Exemplo n.º 1
0
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();
}
Exemplo n.º 2
0
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();
}