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 515 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
526 DCHECK(contents); | 526 DCHECK(contents); |
527 DCHECK(contents->isCacheableForStyleElement()); | 527 DCHECK(contents->isCacheableForStyleElement()); |
528 DCHECK(contents->hasSingleOwnerDocument()); | 528 DCHECK(contents->hasSingleOwnerDocument()); |
529 contents->setIsUsedFromTextCache(); | 529 contents->setIsUsedFromTextCache(); |
530 styleSheet = CSSStyleSheet::createInline(contents, e, startPosition); | 530 styleSheet = CSSStyleSheet::createInline(contents, e, startPosition); |
531 } | 531 } |
532 | 532 |
533 DCHECK(styleSheet); | 533 DCHECK(styleSheet); |
534 if (!e->isInShadowTree()) { | 534 if (!e->isInShadowTree()) { |
535 styleSheet->setTitle(e->title()); | 535 styleSheet->setTitle(e->title()); |
536 setPreferredStylesheetSetNameIfNotSet(e->title()); | 536 setPreferredStylesheetSetNameIfNotSet(e->title(), DontUpdateActiveSheets
); |
537 } | 537 } |
538 return styleSheet; | 538 return styleSheet; |
539 } | 539 } |
540 | 540 |
541 CSSStyleSheet* StyleEngine::parseSheet(Element* e, const String& text, TextPosit
ion startPosition) | 541 CSSStyleSheet* StyleEngine::parseSheet(Element* e, const String& text, TextPosit
ion startPosition) |
542 { | 542 { |
543 CSSStyleSheet* styleSheet = nullptr; | 543 CSSStyleSheet* styleSheet = nullptr; |
544 styleSheet = CSSStyleSheet::createInline(e, KURL(), startPosition, e->docume
nt().characterSet()); | 544 styleSheet = CSSStyleSheet::createInline(e, KURL(), startPosition, e->docume
nt().characterSet()); |
545 styleSheet->contents()->parseStringAtPosition(text, startPosition); | 545 styleSheet->contents()->parseStringAtPosition(text, startPosition); |
546 return styleSheet; | 546 return styleSheet; |
(...skipping 207 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
754 if (!enabled) { | 754 if (!enabled) { |
755 m_styleResolverStats = nullptr; | 755 m_styleResolverStats = nullptr; |
756 return; | 756 return; |
757 } | 757 } |
758 if (!m_styleResolverStats) | 758 if (!m_styleResolverStats) |
759 m_styleResolverStats = StyleResolverStats::create(); | 759 m_styleResolverStats = StyleResolverStats::create(); |
760 else | 760 else |
761 m_styleResolverStats->reset(); | 761 m_styleResolverStats->reset(); |
762 } | 762 } |
763 | 763 |
764 void StyleEngine::setPreferredStylesheetSetNameIfNotSet(const String& name) | 764 void StyleEngine::setPreferredStylesheetSetNameIfNotSet(const String& name, Acti
veSheetsUpdate activeSheetsUpdate) |
765 { | 765 { |
766 if (!m_preferredStylesheetSetName.isEmpty()) | 766 if (!m_preferredStylesheetSetName.isEmpty()) |
767 return; | 767 return; |
768 m_preferredStylesheetSetName = name; | 768 m_preferredStylesheetSetName = name; |
769 // TODO(rune@opera.com): Setting the selected set here is wrong if the set | 769 // TODO(rune@opera.com): Setting the selected set here is wrong if the set |
770 // has been previously set by through Document.selectedStylesheetSet. Our | 770 // has been previously set by through Document.selectedStylesheetSet. Our |
771 // current implementation ignores the effect of Document.selectedStylesheetS
et | 771 // current implementation ignores the effect of Document.selectedStylesheetS
et |
772 // and either only collects persistent style, or additionally preferred | 772 // and either only collects persistent style, or additionally preferred |
773 // style when present. We are currently not marking the document scope dirty | 773 // style when present. |
774 // because preferred style is updated during active stylesheet update which | |
775 // would make this method re-entrant. Will need to change for async update. | |
776 m_selectedStylesheetSetName = name; | 774 m_selectedStylesheetSetName = name; |
| 775 |
| 776 // TODO(rune@opera.com): For async stylesheet update, we should always mark |
| 777 // the TreeScope dirty here, and the synchronous active stylesheet update |
| 778 // (resolverChanged) should go away. |
| 779 if (activeSheetsUpdate == UpdateActiveSheets) { |
| 780 markDocumentDirty(); |
| 781 resolverChanged(AnalyzedStyleUpdate); |
| 782 } |
777 } | 783 } |
778 | 784 |
779 void StyleEngine::setSelectedStylesheetSetName(const String& name) | 785 void StyleEngine::setSelectedStylesheetSetName(const String& name) |
780 { | 786 { |
781 m_selectedStylesheetSetName = name; | 787 m_selectedStylesheetSetName = name; |
782 // TODO(rune@opera.com): Setting Document.selectedStylesheetSet currently | 788 // TODO(rune@opera.com): Setting Document.selectedStylesheetSet currently |
783 // has no other effect than the ability to read back the set value using | 789 // has no other effect than the ability to read back the set value using |
784 // the same api. If it did have an effect, we should have marked the | 790 // the same api. If it did have an effect, we should have marked the |
785 // document scope dirty and triggered an update of the active stylesheets | 791 // document scope dirty and triggered an update of the active stylesheets |
786 // from here. | 792 // from here. |
787 } | 793 } |
788 | 794 |
789 void StyleEngine::setHttpDefaultStyle(const String& content) | 795 void StyleEngine::setHttpDefaultStyle(const String& content) |
790 { | 796 { |
791 setPreferredStylesheetSetNameIfNotSet(content); | 797 setPreferredStylesheetSetNameIfNotSet(content, UpdateActiveSheets); |
792 markDocumentDirty(); | |
793 resolverChanged(FullStyleUpdate); | |
794 } | 798 } |
795 | 799 |
796 void StyleEngine::ensureFullscreenUAStyle() | 800 void StyleEngine::ensureFullscreenUAStyle() |
797 { | 801 { |
798 CSSDefaultStyleSheets::instance().ensureDefaultStyleSheetForFullscreen(); | 802 CSSDefaultStyleSheets::instance().ensureDefaultStyleSheetForFullscreen(); |
799 if (!m_resolver) | 803 if (!m_resolver) |
800 return; | 804 return; |
801 if (!m_resolver->hasFullscreenUAStyle()) | 805 if (!m_resolver->hasFullscreenUAStyle()) |
802 m_resolver->resetRuleFeatures(); | 806 m_resolver->resetRuleFeatures(); |
803 } | 807 } |
(...skipping 28 matching lines...) Expand all Loading... |
832 | 836 |
833 DEFINE_TRACE_WRAPPERS(StyleEngine) | 837 DEFINE_TRACE_WRAPPERS(StyleEngine) |
834 { | 838 { |
835 for (auto sheet : m_injectedAuthorStyleSheets) { | 839 for (auto sheet : m_injectedAuthorStyleSheets) { |
836 visitor->traceWrappers(sheet); | 840 visitor->traceWrappers(sheet); |
837 } | 841 } |
838 visitor->traceWrappers(m_documentStyleSheetCollection); | 842 visitor->traceWrappers(m_documentStyleSheetCollection); |
839 } | 843 } |
840 | 844 |
841 } // namespace blink | 845 } // namespace blink |
OLD | NEW |