| 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 27 matching lines...) Expand all Loading... |
| 38 #include "core/dom/Element.h" | 38 #include "core/dom/Element.h" |
| 39 #include "core/dom/ProcessingInstruction.h" | 39 #include "core/dom/ProcessingInstruction.h" |
| 40 #include "core/dom/ShadowTreeStyleSheetCollection.h" | 40 #include "core/dom/ShadowTreeStyleSheetCollection.h" |
| 41 #include "core/dom/shadow/ShadowRoot.h" | 41 #include "core/dom/shadow/ShadowRoot.h" |
| 42 #include "core/html/HTMLIFrameElement.h" | 42 #include "core/html/HTMLIFrameElement.h" |
| 43 #include "core/html/HTMLLinkElement.h" | 43 #include "core/html/HTMLLinkElement.h" |
| 44 #include "core/html/HTMLStyleElement.h" | 44 #include "core/html/HTMLStyleElement.h" |
| 45 #include "core/page/Page.h" | 45 #include "core/page/Page.h" |
| 46 #include "core/page/PageGroup.h" | 46 #include "core/page/PageGroup.h" |
| 47 #include "core/page/Settings.h" | 47 #include "core/page/Settings.h" |
| 48 #include "core/page/UserContentURLPattern.h" | |
| 49 #include "core/svg/SVGStyleElement.h" | 48 #include "core/svg/SVGStyleElement.h" |
| 49 #include "platform/URLPatternMatcher.h" |
| 50 | 50 |
| 51 namespace WebCore { | 51 namespace WebCore { |
| 52 | 52 |
| 53 using namespace HTMLNames; | 53 using namespace HTMLNames; |
| 54 | 54 |
| 55 StyleEngine::StyleEngine(Document& document) | 55 StyleEngine::StyleEngine(Document& document) |
| 56 : m_document(document) | 56 : m_document(document) |
| 57 , m_pendingStylesheets(0) | 57 , m_pendingStylesheets(0) |
| 58 , m_injectedStyleSheetCacheValid(false) | 58 , m_injectedStyleSheetCacheValid(false) |
| 59 , m_needsUpdateActiveStylesheetsOnStyleRecalc(false) | 59 , m_needsUpdateActiveStylesheetsOnStyleRecalc(false) |
| 60 , m_usesSiblingRules(false) | 60 , m_usesSiblingRules(false) |
| 61 , m_usesSiblingRulesOverride(false) | 61 , m_usesSiblingRulesOverride(false) |
| 62 , m_usesFirstLineRules(false) | 62 , m_usesFirstLineRules(false) |
| 63 , m_usesFirstLetterRules(false) | 63 , m_usesFirstLetterRules(false) |
| 64 , m_usesRemUnits(false) | 64 , m_usesRemUnits(false) |
| 65 , m_documentStyleSheetCollection(document) | 65 , m_documentStyleSheetCollection(document) |
| 66 , m_needsDocumentStyleSheetsUpdate(true) | 66 , m_needsDocumentStyleSheetsUpdate(true) |
| 67 { | 67 { |
| 68 } | 68 } |
| 69 | 69 |
| 70 StyleEngine::~StyleEngine() | 70 StyleEngine::~StyleEngine() |
| 71 { | 71 { |
| 72 if (m_pageUserSheet) | 72 if (m_pageUserSheet) |
| 73 m_pageUserSheet->clearOwnerNode(); | 73 m_pageUserSheet->clearOwnerNode(); |
| 74 for (unsigned i = 0; i < m_injectedUserStyleSheets.size(); ++i) | |
| 75 m_injectedUserStyleSheets[i]->clearOwnerNode(); | |
| 76 for (unsigned i = 0; i < m_injectedAuthorStyleSheets.size(); ++i) | 74 for (unsigned i = 0; i < m_injectedAuthorStyleSheets.size(); ++i) |
| 77 m_injectedAuthorStyleSheets[i]->clearOwnerNode(); | 75 m_injectedAuthorStyleSheets[i]->clearOwnerNode(); |
| 78 for (unsigned i = 0; i < m_userStyleSheets.size(); ++i) | 76 for (unsigned i = 0; i < m_userStyleSheets.size(); ++i) |
| 79 m_userStyleSheets[i]->clearOwnerNode(); | 77 m_userStyleSheets[i]->clearOwnerNode(); |
| 80 for (unsigned i = 0; i < m_authorStyleSheets.size(); ++i) | 78 for (unsigned i = 0; i < m_authorStyleSheets.size(); ++i) |
| 81 m_authorStyleSheets[i]->clearOwnerNode(); | 79 m_authorStyleSheets[i]->clearOwnerNode(); |
| 82 } | 80 } |
| 83 | 81 |
| 84 void StyleEngine::insertTreeScopeInDocumentOrder(TreeScopeSet& treeScopes, TreeS
cope* treeScope) | 82 void StyleEngine::insertTreeScopeInDocumentOrder(TreeScopeSet& treeScopes, TreeS
cope* treeScope) |
| 85 { | 83 { |
| (...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 199 } | 197 } |
| 200 | 198 |
| 201 void StyleEngine::updatePageUserSheet() | 199 void StyleEngine::updatePageUserSheet() |
| 202 { | 200 { |
| 203 clearPageUserSheet(); | 201 clearPageUserSheet(); |
| 204 // FIXME: Why is this immediately and not defer? | 202 // FIXME: Why is this immediately and not defer? |
| 205 if (StyleSheet* addedSheet = pageUserSheet()) | 203 if (StyleSheet* addedSheet = pageUserSheet()) |
| 206 m_document.addedStyleSheet(addedSheet, RecalcStyleImmediately); | 204 m_document.addedStyleSheet(addedSheet, RecalcStyleImmediately); |
| 207 } | 205 } |
| 208 | 206 |
| 209 const Vector<RefPtr<CSSStyleSheet> >& StyleEngine::injectedUserStyleSheets() con
st | |
| 210 { | |
| 211 updateInjectedStyleSheetCache(); | |
| 212 return m_injectedUserStyleSheets; | |
| 213 } | |
| 214 | |
| 215 const Vector<RefPtr<CSSStyleSheet> >& StyleEngine::injectedAuthorStyleSheets() c
onst | 207 const Vector<RefPtr<CSSStyleSheet> >& StyleEngine::injectedAuthorStyleSheets() c
onst |
| 216 { | 208 { |
| 217 updateInjectedStyleSheetCache(); | 209 updateInjectedStyleSheetCache(); |
| 218 return m_injectedAuthorStyleSheets; | 210 return m_injectedAuthorStyleSheets; |
| 219 } | 211 } |
| 220 | 212 |
| 221 void StyleEngine::updateInjectedStyleSheetCache() const | 213 void StyleEngine::updateInjectedStyleSheetCache() const |
| 222 { | 214 { |
| 223 if (m_injectedStyleSheetCacheValid) | 215 if (m_injectedStyleSheetCacheValid) |
| 224 return; | 216 return; |
| 225 m_injectedStyleSheetCacheValid = true; | 217 m_injectedStyleSheetCacheValid = true; |
| 226 m_injectedUserStyleSheets.clear(); | |
| 227 m_injectedAuthorStyleSheets.clear(); | 218 m_injectedAuthorStyleSheets.clear(); |
| 228 | 219 |
| 229 Page* owningPage = m_document.page(); | 220 Page* owningPage = m_document.page(); |
| 230 if (!owningPage) | 221 if (!owningPage) |
| 231 return; | 222 return; |
| 232 | 223 |
| 233 const PageGroup& pageGroup = owningPage->group(); | 224 const PageGroup& pageGroup = owningPage->group(); |
| 234 const UserStyleSheetVector& sheets = pageGroup.userStyleSheets(); | 225 const InjectedStyleSheetVector& sheets = pageGroup.injectedStyleSheets(); |
| 235 for (unsigned i = 0; i < sheets.size(); ++i) { | 226 for (unsigned i = 0; i < sheets.size(); ++i) { |
| 236 const UserStyleSheet* sheet = sheets[i].get(); | 227 const InjectedStyleSheet* sheet = sheets[i].get(); |
| 237 if (sheet->injectedFrames() == InjectInTopFrameOnly && m_document.ownerE
lement()) | 228 if (sheet->injectedFrames() == InjectStyleInTopFrameOnly && m_document.o
wnerElement()) |
| 238 continue; | 229 continue; |
| 239 if (!UserContentURLPattern::matchesPatterns(m_document.url(), sheet->whi
telist(), sheet->blacklist())) | 230 if (!URLPatternMatcher::matchesPatterns(m_document.url(), sheet->whiteli
st())) |
| 240 continue; | 231 continue; |
| 241 RefPtr<CSSStyleSheet> groupSheet = CSSStyleSheet::createInline(const_cas
t<Document*>(&m_document), sheet->url()); | 232 RefPtr<CSSStyleSheet> groupSheet = CSSStyleSheet::createInline(const_cas
t<Document*>(&m_document), KURL()); |
| 242 bool isUserStyleSheet = sheet->level() == UserStyleUserLevel; | 233 m_injectedAuthorStyleSheets.append(groupSheet); |
| 243 if (isUserStyleSheet) | 234 groupSheet->contents()->setIsUserStyleSheet(false); |
| 244 m_injectedUserStyleSheets.append(groupSheet); | |
| 245 else | |
| 246 m_injectedAuthorStyleSheets.append(groupSheet); | |
| 247 groupSheet->contents()->setIsUserStyleSheet(isUserStyleSheet); | |
| 248 groupSheet->contents()->parseString(sheet->source()); | 235 groupSheet->contents()->parseString(sheet->source()); |
| 249 } | 236 } |
| 250 } | 237 } |
| 251 | 238 |
| 252 void StyleEngine::invalidateInjectedStyleSheetCache() | 239 void StyleEngine::invalidateInjectedStyleSheetCache() |
| 253 { | 240 { |
| 254 m_injectedStyleSheetCacheValid = false; | 241 m_injectedStyleSheetCacheValid = false; |
| 255 m_needsDocumentStyleSheetsUpdate = true; | 242 m_needsDocumentStyleSheetsUpdate = true; |
| 256 // FIXME: updateInjectedStyleSheetCache is called inside StyleSheetCollectio
n::updateActiveStyleSheets | 243 // FIXME: updateInjectedStyleSheetCache is called inside StyleSheetCollectio
n::updateActiveStyleSheets |
| 257 // and batch updates lots of sheets so we can't call addedStyleSheet() or re
movedStyleSheet(). | 244 // and batch updates lots of sheets so we can't call addedStyleSheet() or re
movedStyleSheet(). |
| (...skipping 194 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 452 if (StyleSheetCollection* collection = m_styleSheetCollectionMap.get(*it
)) { | 439 if (StyleSheetCollection* collection = m_styleSheetCollectionMap.get(*it
)) { |
| 453 styleResolver->setBuildScopedStyleTreeInDocumentOrder(!collection->s
copingNodesForStyleScoped()); | 440 styleResolver->setBuildScopedStyleTreeInDocumentOrder(!collection->s
copingNodesForStyleScoped()); |
| 454 styleResolver->appendAuthorStyleSheets(0, collection->activeAuthorSt
yleSheets()); | 441 styleResolver->appendAuthorStyleSheets(0, collection->activeAuthorSt
yleSheets()); |
| 455 } | 442 } |
| 456 } | 443 } |
| 457 styleResolver->finishAppendAuthorStyleSheets(); | 444 styleResolver->finishAppendAuthorStyleSheets(); |
| 458 styleResolver->setBuildScopedStyleTreeInDocumentOrder(false); | 445 styleResolver->setBuildScopedStyleTreeInDocumentOrder(false); |
| 459 } | 446 } |
| 460 | 447 |
| 461 } | 448 } |
| OLD | NEW |