OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) | 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) |
3 * (C) 1999 Antti Koivisto (koivisto@kde.org) | 3 * (C) 1999 Antti Koivisto (koivisto@kde.org) |
4 * (C) 2001 Dirk Mueller (mueller@kde.org) | 4 * (C) 2001 Dirk Mueller (mueller@kde.org) |
5 * (C) 2006 Alexey Proskuryakov (ap@webkit.org) | 5 * (C) 2006 Alexey Proskuryakov (ap@webkit.org) |
6 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2011, 2012 Apple Inc. All r
ights reserved. | 6 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2011, 2012 Apple Inc. All r
ights reserved. |
7 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. (http://www.t
orchmobile.com/) | 7 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. (http://www.t
orchmobile.com/) |
8 * Copyright (C) 2008, 2009, 2011, 2012 Google Inc. All rights reserved. | 8 * Copyright (C) 2008, 2009, 2011, 2012 Google Inc. All rights reserved. |
9 * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies) | 9 * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies) |
10 * Copyright (C) Research In Motion Limited 2010-2011. All rights reserved. | 10 * Copyright (C) Research In Motion Limited 2010-2011. All rights reserved. |
(...skipping 493 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
504 } | 504 } |
505 | 505 |
506 CSSStyleSheet* StyleEngine::createSheet(Element* e, const String& text, TextPosi
tion startPosition, StyleEngineContext &context) | 506 CSSStyleSheet* StyleEngine::createSheet(Element* e, const String& text, TextPosi
tion startPosition, StyleEngineContext &context) |
507 { | 507 { |
508 CSSStyleSheet* styleSheet = nullptr; | 508 CSSStyleSheet* styleSheet = nullptr; |
509 | 509 |
510 e->document().styleEngine().addPendingSheet(context); | 510 e->document().styleEngine().addPendingSheet(context); |
511 | 511 |
512 AtomicString textContent(text); | 512 AtomicString textContent(text); |
513 | 513 |
514 HeapHashMap<AtomicString, Member<StyleSheetContents>>::AddResult result = m_
textToSheetCache.add(textContent, nullptr); | 514 auto result = m_textToSheetCache.add(textContent, nullptr); |
515 if (result.isNewEntry || !result.storedValue->value) { | 515 StyleSheetContents* contents = result.storedValue->value; |
| 516 if (result.isNewEntry || !contents || !contents->isCacheableForStyleElement(
)) { |
| 517 result.storedValue->value = nullptr; |
516 styleSheet = StyleEngine::parseSheet(e, text, startPosition); | 518 styleSheet = StyleEngine::parseSheet(e, text, startPosition); |
517 if (result.isNewEntry && styleSheet->contents()->isCacheableForStyleElem
ent()) { | 519 if (styleSheet->contents()->isCacheableForStyleElement()) { |
518 result.storedValue->value = styleSheet->contents(); | 520 result.storedValue->value = styleSheet->contents(); |
519 m_sheetToTextCache.add(styleSheet->contents(), textContent); | 521 m_sheetToTextCache.add(styleSheet->contents(), textContent); |
520 } | 522 } |
521 } else { | 523 } else { |
522 StyleSheetContents* contents = result.storedValue->value; | |
523 DCHECK(contents); | 524 DCHECK(contents); |
524 DCHECK(contents->isCacheableForStyleElement()); | 525 DCHECK(contents->isCacheableForStyleElement()); |
525 DCHECK_EQ(contents->singleOwnerDocument(), e->document()); | 526 DCHECK(contents->hasSingleOwnerDocument()); |
| 527 contents->setIsUsedFromTextCache(); |
526 styleSheet = CSSStyleSheet::createInline(contents, e, startPosition); | 528 styleSheet = CSSStyleSheet::createInline(contents, e, startPosition); |
527 } | 529 } |
528 | 530 |
529 DCHECK(styleSheet); | 531 DCHECK(styleSheet); |
530 styleSheet->setTitle(e->title()); | 532 styleSheet->setTitle(e->title()); |
531 if (!e->isInShadowTree()) | 533 if (!e->isInShadowTree()) |
532 setPreferredStylesheetSetNameIfNotSet(e->title()); | 534 setPreferredStylesheetSetNameIfNotSet(e->title()); |
533 return styleSheet; | 535 return styleSheet; |
534 } | 536 } |
535 | 537 |
536 CSSStyleSheet* StyleEngine::parseSheet(Element* e, const String& text, TextPosit
ion startPosition) | 538 CSSStyleSheet* StyleEngine::parseSheet(Element* e, const String& text, TextPosit
ion startPosition) |
537 { | 539 { |
538 CSSStyleSheet* styleSheet = nullptr; | 540 CSSStyleSheet* styleSheet = nullptr; |
539 styleSheet = CSSStyleSheet::createInline(e, KURL(), startPosition, e->docume
nt().characterSet()); | 541 styleSheet = CSSStyleSheet::createInline(e, KURL(), startPosition, e->docume
nt().characterSet()); |
540 styleSheet->contents()->parseStringAtPosition(text, startPosition); | 542 styleSheet->contents()->parseStringAtPosition(text, startPosition); |
541 return styleSheet; | 543 return styleSheet; |
542 } | 544 } |
543 | 545 |
544 void StyleEngine::removeSheet(StyleSheetContents* contents) | |
545 { | |
546 HeapHashMap<Member<StyleSheetContents>, AtomicString>::iterator it = m_sheet
ToTextCache.find(contents); | |
547 if (it == m_sheetToTextCache.end()) | |
548 return; | |
549 | |
550 m_textToSheetCache.remove(it->value); | |
551 m_sheetToTextCache.remove(contents); | |
552 } | |
553 | |
554 void StyleEngine::collectScopedStyleFeaturesTo(RuleFeatureSet& features) const | 546 void StyleEngine::collectScopedStyleFeaturesTo(RuleFeatureSet& features) const |
555 { | 547 { |
556 HeapHashSet<Member<const StyleSheetContents>> visitedSharedStyleSheetContent
s; | 548 HeapHashSet<Member<const StyleSheetContents>> visitedSharedStyleSheetContent
s; |
557 if (document().scopedStyleResolver()) | 549 if (document().scopedStyleResolver()) |
558 document().scopedStyleResolver()->collectFeaturesTo(features, visitedSha
redStyleSheetContents); | 550 document().scopedStyleResolver()->collectFeaturesTo(features, visitedSha
redStyleSheetContents); |
559 for (TreeScope* treeScope : m_activeTreeScopes) { | 551 for (TreeScope* treeScope : m_activeTreeScopes) { |
560 // When creating StyleResolver, dirty treescopes might not be processed. | 552 // When creating StyleResolver, dirty treescopes might not be processed. |
561 // So some active treescopes might not have a scoped style resolver. | 553 // So some active treescopes might not have a scoped style resolver. |
562 // In this case, we should skip collectFeatures for the treescopes witho
ut | 554 // In this case, we should skip collectFeatures for the treescopes witho
ut |
563 // scoped style resolvers. When invoking updateActiveStyleSheets, | 555 // scoped style resolvers. When invoking updateActiveStyleSheets, |
(...skipping 265 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
829 | 821 |
830 DEFINE_TRACE_WRAPPERS(StyleEngine) | 822 DEFINE_TRACE_WRAPPERS(StyleEngine) |
831 { | 823 { |
832 for (auto sheet : m_injectedAuthorStyleSheets) { | 824 for (auto sheet : m_injectedAuthorStyleSheets) { |
833 visitor->traceWrappers(sheet); | 825 visitor->traceWrappers(sheet); |
834 } | 826 } |
835 visitor->traceWrappers(m_documentStyleSheetCollection); | 827 visitor->traceWrappers(m_documentStyleSheetCollection); |
836 } | 828 } |
837 | 829 |
838 } // namespace blink | 830 } // namespace blink |
OLD | NEW |