| 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 23 matching lines...) Expand all Loading... |
| 34 #include "sky/engine/core/css/StyleSheetContents.h" | 34 #include "sky/engine/core/css/StyleSheetContents.h" |
| 35 #include "sky/engine/core/dom/Document.h" | 35 #include "sky/engine/core/dom/Document.h" |
| 36 #include "sky/engine/core/dom/Element.h" | 36 #include "sky/engine/core/dom/Element.h" |
| 37 #include "sky/engine/core/dom/ElementTraversal.h" | 37 #include "sky/engine/core/dom/ElementTraversal.h" |
| 38 #include "sky/engine/core/dom/StyleSheetCollection.h" | 38 #include "sky/engine/core/dom/StyleSheetCollection.h" |
| 39 #include "sky/engine/core/dom/shadow/ShadowRoot.h" | 39 #include "sky/engine/core/dom/shadow/ShadowRoot.h" |
| 40 #include "sky/engine/core/frame/Settings.h" | 40 #include "sky/engine/core/frame/Settings.h" |
| 41 #include "sky/engine/core/html/HTMLStyleElement.h" | 41 #include "sky/engine/core/html/HTMLStyleElement.h" |
| 42 #include "sky/engine/core/html/imports/HTMLImportsController.h" | 42 #include "sky/engine/core/html/imports/HTMLImportsController.h" |
| 43 #include "sky/engine/core/page/Page.h" | 43 #include "sky/engine/core/page/Page.h" |
| 44 #include "sky/engine/core/rendering/RenderView.h" |
| 44 | 45 |
| 45 namespace blink { | 46 namespace blink { |
| 46 | 47 |
| 47 StyleEngine::StyleEngine(Document& document) | 48 StyleEngine::StyleEngine(Document& document) |
| 48 : m_document(&document) | 49 : m_document(&document) |
| 50 , m_resolver(adoptPtr(new StyleResolver(*m_document))) |
| 49 , m_fontSelector(CSSFontSelector::create(&document)) | 51 , m_fontSelector(CSSFontSelector::create(&document)) |
| 50 { | 52 { |
| 51 m_fontSelector->registerForInvalidationCallbacks(this); | 53 m_fontSelector->registerForInvalidationCallbacks(this); |
| 52 m_activeTreeScopes.add(&document); | 54 m_activeTreeScopes.add(&document); |
| 53 } | 55 } |
| 54 | 56 |
| 55 StyleEngine::~StyleEngine() | 57 StyleEngine::~StyleEngine() |
| 56 { | 58 { |
| 57 m_fontSelector->clearDocument(); | 59 m_fontSelector->clearDocument(); |
| 58 m_fontSelector->unregisterForInvalidationCallbacks(this); | 60 m_fontSelector->unregisterForInvalidationCallbacks(this); |
| 59 } | 61 } |
| 60 | 62 |
| 61 void StyleEngine::addTreeScope(TreeScope& scope) | 63 void StyleEngine::addTreeScope(TreeScope& scope) |
| 62 { | 64 { |
| 63 m_activeTreeScopes.add(&scope); | 65 m_activeTreeScopes.add(&scope); |
| 64 } | 66 } |
| 65 | 67 |
| 66 void StyleEngine::removeTreeScope(TreeScope& scope) | 68 void StyleEngine::removeTreeScope(TreeScope& scope) |
| 67 { | 69 { |
| 68 m_activeTreeScopes.remove(&scope); | 70 m_activeTreeScopes.remove(&scope); |
| 69 } | 71 } |
| 70 | 72 |
| 71 void StyleEngine::updateActiveStyleSheets() | 73 void StyleEngine::updateActiveStyleSheets() |
| 72 { | 74 { |
| 73 ASSERT(!m_document->inStyleRecalc()); | 75 ASSERT(!m_document->inStyleRecalc()); |
| 74 ASSERT(m_resolver); | 76 ASSERT(m_resolver); |
| 75 | 77 |
| 76 for (TreeScope* treeScope : m_activeTreeScopes) | 78 for (TreeScope* treeScope : m_activeTreeScopes) |
| 77 treeScope->styleSheets().updateActiveStyleSheets(*m_resolver); | 79 treeScope->styleSheets().updateActiveStyleSheets(*m_resolver); |
| 78 } | |
| 79 | 80 |
| 80 void StyleEngine::appendActiveAuthorStyleSheets() | 81 m_document->renderView()->style()->font().update(fontSelector()); |
| 81 { | |
| 82 for (TreeScope* treeScope : m_activeTreeScopes) | |
| 83 m_resolver->appendAuthorStyleSheets(treeScope->styleSheets().activeAutho
rStyleSheets()); | |
| 84 | |
| 85 m_resolver->finishAppendAuthorStyleSheets(); | |
| 86 } | |
| 87 | |
| 88 void StyleEngine::createResolver() | |
| 89 { | |
| 90 // It is a programming error to attempt to resolve style on a Document | |
| 91 // which is not in a frame. Code which hits this should have checked | |
| 92 // Document::isActive() before calling into code which could get here. | |
| 93 | |
| 94 ASSERT(m_document->frame()); | |
| 95 | |
| 96 m_resolver = adoptPtr(new StyleResolver(*m_document)); | |
| 97 | |
| 98 appendActiveAuthorStyleSheets(); | |
| 99 } | |
| 100 | |
| 101 void StyleEngine::clearResolver() | |
| 102 { | |
| 103 ASSERT(!m_document->inStyleRecalc()); | |
| 104 m_resolver.clear(); | |
| 105 } | 82 } |
| 106 | 83 |
| 107 unsigned StyleEngine::resolverAccessCount() const | 84 unsigned StyleEngine::resolverAccessCount() const |
| 108 { | 85 { |
| 109 return m_resolver ? m_resolver->accessCount() : 0; | 86 return m_resolver->accessCount(); |
| 110 } | 87 } |
| 111 | 88 |
| 112 void StyleEngine::resolverChanged() | 89 void StyleEngine::resolverChanged() |
| 113 { | 90 { |
| 114 if (!m_document->isActive()) | 91 if (!m_document->isActive()) |
| 115 return; | 92 return; |
| 116 if (m_resolver) | 93 updateActiveStyleSheets(); |
| 117 updateActiveStyleSheets(); | |
| 118 } | 94 } |
| 119 | 95 |
| 120 void StyleEngine::clearFontCache() | 96 void StyleEngine::clearFontCache() |
| 121 { | 97 { |
| 122 m_fontSelector->fontFaceCache()->clearCSSConnected(); | 98 m_fontSelector->fontFaceCache()->clearCSSConnected(); |
| 123 if (m_resolver) | 99 m_resolver->invalidateMatchedPropertiesCache(); |
| 124 m_resolver->invalidateMatchedPropertiesCache(); | |
| 125 } | 100 } |
| 126 | 101 |
| 127 void StyleEngine::updateGenericFontFamilySettings() | 102 void StyleEngine::updateGenericFontFamilySettings() |
| 128 { | 103 { |
| 129 // FIXME: we should not update generic font family settings when | 104 // FIXME: we should not update generic font family settings when |
| 130 // document is inactive. | 105 // document is inactive. |
| 131 ASSERT(m_document->isActive()); | 106 ASSERT(m_document->isActive()); |
| 132 | 107 |
| 133 m_fontSelector->updateGenericFontFamilySettings(*m_document); | 108 m_fontSelector->updateGenericFontFamilySettings(*m_document); |
| 134 if (m_resolver) | 109 m_resolver->invalidateMatchedPropertiesCache(); |
| 135 m_resolver->invalidateMatchedPropertiesCache(); | |
| 136 } | 110 } |
| 137 | 111 |
| 138 PassRefPtr<CSSStyleSheet> StyleEngine::createSheet(Element* e, const String& tex
t) | 112 PassRefPtr<CSSStyleSheet> StyleEngine::createSheet(Element* e, const String& tex
t) |
| 139 { | 113 { |
| 140 RefPtr<CSSStyleSheet> styleSheet; | 114 RefPtr<CSSStyleSheet> styleSheet; |
| 141 AtomicString textContent(text); | 115 AtomicString textContent(text); |
| 142 | 116 |
| 143 HashMap<AtomicString, StyleSheetContents*>::AddResult result = m_textToSheet
Cache.add(textContent, nullptr); | 117 HashMap<AtomicString, StyleSheetContents*>::AddResult result = m_textToSheet
Cache.add(textContent, nullptr); |
| 144 if (result.isNewEntry || !result.storedValue->value) { | 118 if (result.isNewEntry || !result.storedValue->value) { |
| 145 styleSheet = CSSStyleSheet::create(e, KURL()); | 119 styleSheet = CSSStyleSheet::create(e, KURL()); |
| (...skipping 17 matching lines...) Expand all Loading... |
| 163 HashMap<StyleSheetContents*, AtomicString>::iterator it = m_sheetToTextCache
.find(contents); | 137 HashMap<StyleSheetContents*, AtomicString>::iterator it = m_sheetToTextCache
.find(contents); |
| 164 if (it == m_sheetToTextCache.end()) | 138 if (it == m_sheetToTextCache.end()) |
| 165 return; | 139 return; |
| 166 | 140 |
| 167 m_textToSheetCache.remove(it->value); | 141 m_textToSheetCache.remove(it->value); |
| 168 m_sheetToTextCache.remove(contents); | 142 m_sheetToTextCache.remove(contents); |
| 169 } | 143 } |
| 170 | 144 |
| 171 void StyleEngine::fontsNeedUpdate(CSSFontSelector*) | 145 void StyleEngine::fontsNeedUpdate(CSSFontSelector*) |
| 172 { | 146 { |
| 173 if (m_resolver) | 147 m_resolver->invalidateMatchedPropertiesCache(); |
| 174 m_resolver->invalidateMatchedPropertiesCache(); | |
| 175 m_document->setNeedsStyleRecalc(SubtreeStyleChange); | 148 m_document->setNeedsStyleRecalc(SubtreeStyleChange); |
| 176 } | 149 } |
| 177 | 150 |
| 178 } | 151 } |
| OLD | NEW |