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

Side by Side Diff: third_party/WebKit/Source/core/css/resolver/CSSVariableResolver.cpp

Issue 2358203003: CSS Properties and Values API: Use initial value where appropriate for var() (Closed)
Patch Set: bla Created 4 years, 2 months 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
« no previous file with comments | « third_party/WebKit/Source/core/css/PropertyRegistry.cpp ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "core/css/resolver/CSSVariableResolver.h" 5 #include "core/css/resolver/CSSVariableResolver.h"
6 6
7 #include "core/CSSPropertyNames.h" 7 #include "core/CSSPropertyNames.h"
8 #include "core/CSSValueKeywords.h" 8 #include "core/CSSValueKeywords.h"
9 #include "core/StyleBuilderFunctions.h" 9 #include "core/StyleBuilderFunctions.h"
10 #include "core/StylePropertyShorthand.h" 10 #include "core/StylePropertyShorthand.h"
(...skipping 17 matching lines...) Expand all
28 { 28 {
29 if (range.atEnd()) 29 if (range.atEnd())
30 return false; 30 return false;
31 ASSERT(range.peek().type() == CommaToken); 31 ASSERT(range.peek().type() == CommaToken);
32 range.consume(); 32 range.consume();
33 return resolveTokenRange(range, result); 33 return resolveTokenRange(range, result);
34 } 34 }
35 35
36 CSSVariableData* CSSVariableResolver::valueForCustomProperty(AtomicString name) 36 CSSVariableData* CSSVariableResolver::valueForCustomProperty(AtomicString name)
37 { 37 {
38 // TODO(timloh): Registered properties shouldn't return nullptr in failure
39 // cases (aside from cycles?), but instead return the initial/inherited valu e.
40 if (m_variablesSeen.contains(name)) { 38 if (m_variablesSeen.contains(name)) {
41 m_cycleStartPoints.add(name); 39 m_cycleStartPoints.add(name);
42 return nullptr; 40 return nullptr;
43 } 41 }
44 42
45 if (!m_styleVariableData) 43 DCHECK(m_registry || !RuntimeEnabledFeatures::cssVariables2Enabled());
46 return nullptr; 44 const PropertyRegistry::Registration* registration = m_registry ? m_registry ->registration(name) : nullptr;
47 CSSVariableData* variableData = m_styleVariableData->getVariable(name); 45
46 CSSVariableData* variableData = nullptr;
47 if (m_styleVariableData)
48 variableData = m_styleVariableData->getVariable(name);
48 if (!variableData) 49 if (!variableData)
49 return nullptr; 50 return registration ? registration->initialVariableData() : nullptr;
50 if (!variableData->needsVariableResolution()) 51 if (!variableData->needsVariableResolution())
51 return variableData; 52 return variableData;
53
52 RefPtr<CSSVariableData> newVariableData = resolveCustomProperty(name, *varia bleData); 54 RefPtr<CSSVariableData> newVariableData = resolveCustomProperty(name, *varia bleData);
53 55 if (registration) {
54 DCHECK(m_registry || !RuntimeEnabledFeatures::cssVariables2Enabled()); 56 const CSSValue* parsedValue = nullptr;
55 if (m_registry) { 57 if (newVariableData) {
56 const PropertyRegistry::Registration* registration = m_registry->registr ation(name); 58 parsedValue = newVariableData->parseForSyntax(registration->syntax() );
57 if (registration) { 59 if (parsedValue)
58 const CSSValue* parsedValue = nullptr; 60 parsedValue = &StyleBuilderConverter::convertRegisteredPropertyV alue(m_styleResolverState, *parsedValue);
59 if (newVariableData) { 61 else
60 parsedValue = newVariableData->parseForSyntax(registration->synt ax()); 62 newVariableData = nullptr;
61 if (parsedValue)
62 parsedValue = &StyleBuilderConverter::convertRegisteredPrope rtyValue(m_styleResolverState, *parsedValue);
63 else
64 newVariableData = nullptr;
65 }
66 m_styleVariableData->setVariable(name, newVariableData);
67 m_styleVariableData->setRegisteredInheritedProperty(name, parsedValu e);
68 return newVariableData.get();
69 } 63 }
64 m_styleVariableData->setVariable(name, newVariableData);
65 m_styleVariableData->setRegisteredInheritedProperty(name, parsedValue);
66 if (!newVariableData)
67 return registration->initialVariableData();
Timothy Loh 2016/09/22 10:01:25 We could alternatively set the initial values into
meade_UTC10 2016/09/23 01:16:50 seems fine as is.
68 return newVariableData.get();
70 } 69 }
71 70
72 m_styleVariableData->setVariable(name, newVariableData); 71 m_styleVariableData->setVariable(name, newVariableData);
73 return newVariableData.get(); 72 return newVariableData.get();
74 } 73 }
75 74
76 PassRefPtr<CSSVariableData> CSSVariableResolver::resolveCustomProperty(AtomicStr ing name, const CSSVariableData& variableData) 75 PassRefPtr<CSSVariableData> CSSVariableResolver::resolveCustomProperty(AtomicStr ing name, const CSSVariableData& variableData)
77 { 76 {
78 ASSERT(variableData.needsVariableResolution()); 77 ASSERT(variableData.needsVariableResolution());
79 78
(...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after
229 CSSVariableResolver::CSSVariableResolver(const StyleResolverState& state) 228 CSSVariableResolver::CSSVariableResolver(const StyleResolverState& state)
230 : m_styleResolverState(state) 229 : m_styleResolverState(state)
231 , m_styleVariableData(state.style()->variables()) 230 , m_styleVariableData(state.style()->variables())
232 , m_registry(state.document().propertyRegistry()) 231 , m_registry(state.document().propertyRegistry())
233 { 232 {
234 } 233 }
235 234
236 DEFINE_TRACE(CSSVariableResolver) { visitor->trace(m_registry); } 235 DEFINE_TRACE(CSSVariableResolver) { visitor->trace(m_registry); }
237 236
238 } // namespace blink 237 } // namespace blink
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/core/css/PropertyRegistry.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698