PassRefPtrWillBeRawPtr<CSSStyleSheet> StyleEngine::createSheet(Element* e, const String& text, TextPosition startPosition, bool createdByParser) { RefPtrWillBeRawPtr<CSSStyleSheet> styleSheet = nullptr; e->document().styleEngine()->addPendingSheet(); if (!e->document().inQuirksMode()) { AtomicString textContent(text); WillBeHeapHashMap<AtomicString, RawPtrWillBeMember<StyleSheetContents> >::AddResult result = m_textToSheetCache.add(textContent, nullptr); if (result.isNewEntry || !result.storedValue->value) { styleSheet = StyleEngine::parseSheet(e, text, startPosition, createdByParser); if (result.isNewEntry && isCacheableForStyleElement(*styleSheet->contents())) { result.storedValue->value = styleSheet->contents(); m_sheetToTextCache.add(styleSheet->contents(), textContent); } } else { StyleSheetContents* contents = result.storedValue->value; ASSERT(contents); ASSERT(isCacheableForStyleElement(*contents)); ASSERT(contents->singleOwnerDocument() == e->document()); styleSheet = CSSStyleSheet::createInline(contents, e, startPosition); } } else { // FIXME: currently we don't cache StyleSheetContents inQuirksMode. styleSheet = StyleEngine::parseSheet(e, text, startPosition, createdByParser); } ASSERT(styleSheet); styleSheet->setTitle(e->title()); return styleSheet; }
PassRefPtr<CSSStyleSheet> StyleEngine::createSheet(Element* e, const String& text, TextPosition startPosition, bool createdByParser) { RefPtr<CSSStyleSheet> styleSheet = nullptr; AtomicString textContent(text); HashMap<AtomicString, RawPtr<StyleSheetContents> >::AddResult result = m_textToSheetCache.add(textContent, nullptr); if (result.isNewEntry || !result.storedValue->value) { styleSheet = StyleEngine::parseSheet(e, text, startPosition, createdByParser); if (result.isNewEntry && isCacheableForStyleElement(*styleSheet->contents())) { result.storedValue->value = styleSheet->contents(); m_sheetToTextCache.add(styleSheet->contents(), textContent); } } else { StyleSheetContents* contents = result.storedValue->value; ASSERT(contents); ASSERT(isCacheableForStyleElement(*contents)); ASSERT(contents->singleOwnerDocument() == e->document()); styleSheet = CSSStyleSheet::createInline(contents, e, startPosition); } ASSERT(styleSheet); return styleSheet; }