static bool isCacheableForStyleElement(const StyleSheetContents& contents) { // FIXME: Support copying import rules. if (!contents.importRules().isEmpty()) return false; // Until import rules are supported in cached sheets it's not possible for loading to fail. ASSERT(!contents.didLoadErrorOccur()); // It is not the original sheet anymore. if (contents.isMutable()) return false; if (!contents.hasSyntacticallyValidCSSHeader()) return false; return true; }
void RuleSet::addRulesFromSheet(StyleSheetContents& sheet, const MediaQueryEvaluator& medium, StyleResolver* resolver) { for (auto& rule : sheet.importRules()) { if (rule->styleSheet() && (!rule->mediaQueries() || medium.eval(rule->mediaQueries(), resolver))) addRulesFromSheet(*rule->styleSheet(), medium, resolver); } bool hasDocumentSecurityOrigin = resolver && resolver->document().securityOrigin()->canRequest(sheet.baseURL()); AddRuleFlags addRuleFlags = static_cast<AddRuleFlags>((hasDocumentSecurityOrigin ? RuleHasDocumentSecurityOrigin : 0)); // FIXME: Skip Content Security Policy check when stylesheet is in a user agent shadow tree. // See <https://bugs.webkit.org/show_bug.cgi?id=146663>. bool isInitiatingElementInUserAgentShadowTree = false; addChildRules(sheet.childRules(), medium, resolver, hasDocumentSecurityOrigin, isInitiatingElementInUserAgentShadowTree, addRuleFlags); if (m_autoShrinkToFitEnabled) shrinkToFit(); }