Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(302)

Side by Side Diff: Source/core/css/resolver/ScopedStyleResolver.cpp

Issue 42543007: StyleResolver should update RuleSets lazily. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Revised Created 7 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 /* 1 /*
2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org)
3 * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All rights reserved. 3 * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All rights reserved.
4 * Copyright (C) 2012 Google Inc. All rights reserved. 4 * Copyright (C) 2012 Google Inc. All rights reserved.
5 * 5 *
6 * Redistribution and use in source and binary forms, with or without 6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions 7 * modification, are permitted provided that the following conditions
8 * are met: 8 * are met:
9 * 1. Redistributions of source code must retain the above copyright 9 * 1. Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer. 10 * notice, this list of conditions and the following disclaimer.
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
58 if (!styleElement->scoped()) 58 if (!styleElement->scoped())
59 return styleElement->isInShadowTree() ? styleElement->containingShadowRo ot() : 0; 59 return styleElement->isInShadowTree() ? styleElement->containingShadowRo ot() : 0;
60 60
61 ContainerNode* parent = styleElement->parentNode(); 61 ContainerNode* parent = styleElement->parentNode();
62 if (!parent) 62 if (!parent)
63 return 0; 63 return 0;
64 64
65 return (parent->isElementNode() || parent->isShadowRoot()) ? parent : 0; 65 return (parent->isElementNode() || parent->isShadowRoot()) ? parent : 0;
66 } 66 }
67 67
68 void ScopedStyleResolver::addRulesFromSheet(StyleSheetContents* sheet, const Med iaQueryEvaluator& medium, StyleResolver* resolver) 68 inline RuleSet* ScopedStyleResolver::ensureAuthorStyle()
69 { 69 {
70 if (!m_authorStyle) 70 if (!m_authorStyle)
71 m_authorStyle = RuleSet::create(); 71 m_authorStyle = RuleSet::create();
72 return m_authorStyle.get();
73 }
72 74
73 bool hasDocumentSecurityOrigin = resolver->document().securityOrigin()->canR equest(sheet->baseURL()); 75 void ScopedStyleResolver::addRulesFromSheet(StyleSheetContents* sheet, const Med iaQueryEvaluator& medium, StyleResolver* resolver, bool viewportRuleIsProcessed)
74 m_authorStyle->addRulesFromSheet(sheet, medium, hasDocumentSecurityOrigin); 76 {
77 AddRuleFlags addRuleFlags = resolver->document().securityOrigin()->canReques t(sheet->baseURL()) ? RuleHasDocumentSecurityOrigin : RuleHasNoSpecialState;
78
79 if (viewportRuleIsProcessed)
80 addRuleFlags = static_cast<AddRuleFlags>(addRuleFlags | ViewportRuleIsPr ocessed);
81
82 ensureAuthorStyle()->addRulesFromSheet(sheet, medium, addRuleFlags);
75 resolver->addMediaQueryResults(m_authorStyle->viewportDependentMediaQueryRes ults()); 83 resolver->addMediaQueryResults(m_authorStyle->viewportDependentMediaQueryRes ults());
76 resolver->processScopedRules(*m_authorStyle, sheet->baseURL(), &m_scopingNod e); 84 resolver->processScopedRules(*m_authorStyle, sheet->baseURL(), &m_scopingNod e);
77 } 85 }
78 86
87 void ScopedStyleResolver::addViewportRule(StyleRuleViewport* rule)
88 {
89 ensureAuthorStyle()->addViewportRule(rule);
90 }
91
79 inline RuleSet* ScopedStyleResolver::ensureAtHostRuleSetFor(const ShadowRoot* sh adowRoot) 92 inline RuleSet* ScopedStyleResolver::ensureAtHostRuleSetFor(const ShadowRoot* sh adowRoot)
80 { 93 {
81 HashMap<const ShadowRoot*, OwnPtr<RuleSet> >::AddResult addResult = m_atHost Rules.add(shadowRoot, nullptr); 94 HashMap<const ShadowRoot*, OwnPtr<RuleSet> >::AddResult addResult = m_atHost Rules.add(shadowRoot, nullptr);
82 if (addResult.isNewEntry) 95 if (addResult.isNewEntry)
83 addResult.iterator->value = RuleSet::create(); 96 addResult.iterator->value = RuleSet::create();
84 return addResult.iterator->value.get(); 97 return addResult.iterator->value.get();
85 } 98 }
86 99
87 void ScopedStyleResolver::addHostRule(StyleRuleHost* hostRule, bool hasDocumentS ecurityOrigin, const ContainerNode* scopingNode) 100 void ScopedStyleResolver::addHostRule(StyleRuleHost* hostRule, bool hasDocumentS ecurityOrigin, const ContainerNode* scopingNode)
88 { 101 {
(...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after
249 262
250 void ScopedStyleResolver::collectViewportRulesTo(StyleResolver* resolver) const 263 void ScopedStyleResolver::collectViewportRulesTo(StyleResolver* resolver) const
251 { 264 {
252 // Only consider the global author RuleSet for @viewport rules. 265 // Only consider the global author RuleSet for @viewport rules.
253 if (!m_scopingNode.isDocumentNode() || !m_authorStyle) 266 if (!m_scopingNode.isDocumentNode() || !m_authorStyle)
254 return; 267 return;
255 resolver->viewportStyleResolver()->collectViewportRules(m_authorStyle.get(), ViewportStyleResolver::AuthorOrigin); 268 resolver->viewportStyleResolver()->collectViewportRules(m_authorStyle.get(), ViewportStyleResolver::AuthorOrigin);
256 } 269 }
257 270
258 } // namespace WebCore 271 } // namespace WebCore
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698