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

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

Issue 2366313006: CSS Properties and Values API: Support non-inherited custom properties (Closed)
Patch Set: use de morgan's law 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
OLDNEW
1 /* 1 /*
2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org)
3 * (C) 2004-2005 Allan Sandfeld Jensen (kde@carewolf.com) 3 * (C) 2004-2005 Allan Sandfeld Jensen (kde@carewolf.com)
4 * Copyright (C) 2006, 2007 Nicholas Shanks (webkit@nickshanks.com) 4 * Copyright (C) 2006, 2007 Nicholas Shanks (webkit@nickshanks.com)
5 * Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013 Apple Inc. All rights reserved. 5 * Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013 Apple Inc. All rights reserved.
6 * Copyright (C) 2007 Alexey Proskuryakov <ap@webkit.org> 6 * Copyright (C) 2007 Alexey Proskuryakov <ap@webkit.org>
7 * Copyright (C) 2007, 2008 Eric Seidel <eric@webkit.org> 7 * Copyright (C) 2007, 2008 Eric Seidel <eric@webkit.org>
8 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. (http://www.t orchmobile.com/) 8 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. (http://www.t orchmobile.com/)
9 * Copyright (c) 2011, Code Aurora Forum. All rights reserved. 9 * Copyright (c) 2011, Code Aurora Forum. All rights reserved.
10 * Copyright (C) Research In Motion Limited 2011. All rights reserved. 10 * Copyright (C) Research In Motion Limited 2011. All rights reserved.
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
79 #include "core/dom/shadow/ShadowRoot.h" 79 #include "core/dom/shadow/ShadowRoot.h"
80 #include "core/frame/FrameView.h" 80 #include "core/frame/FrameView.h"
81 #include "core/frame/LocalFrame.h" 81 #include "core/frame/LocalFrame.h"
82 #include "core/frame/Settings.h" 82 #include "core/frame/Settings.h"
83 #include "core/frame/UseCounter.h" 83 #include "core/frame/UseCounter.h"
84 #include "core/html/HTMLIFrameElement.h" 84 #include "core/html/HTMLIFrameElement.h"
85 #include "core/html/HTMLSlotElement.h" 85 #include "core/html/HTMLSlotElement.h"
86 #include "core/inspector/InspectorInstrumentation.h" 86 #include "core/inspector/InspectorInstrumentation.h"
87 #include "core/layout/GeneratedChildren.h" 87 #include "core/layout/GeneratedChildren.h"
88 #include "core/layout/api/LayoutViewItem.h" 88 #include "core/layout/api/LayoutViewItem.h"
89 #include "core/style/StyleVariableData.h" 89 #include "core/style/StyleInheritedVariables.h"
90 #include "core/svg/SVGDocumentExtensions.h" 90 #include "core/svg/SVGDocumentExtensions.h"
91 #include "core/svg/SVGElement.h" 91 #include "core/svg/SVGElement.h"
92 #include "platform/RuntimeEnabledFeatures.h" 92 #include "platform/RuntimeEnabledFeatures.h"
93 #include "wtf/StdLibExtras.h" 93 #include "wtf/StdLibExtras.h"
94 94
95 namespace { 95 namespace {
96 96
97 using namespace blink; 97 using namespace blink;
98 98
99 void setAnimationUpdateIfNeeded(StyleResolverState& state, Element& element) 99 void setAnimationUpdateIfNeeded(StyleResolverState& state, Element& element)
100 { 100 {
101 // If any changes to CSS Animations were detected, stash the update away for application after the 101 // If any changes to CSS Animations were detected, stash the update away for application after the
102 // layout object is updated if we're in the appropriate scope. 102 // layout object is updated if we're in the appropriate scope.
103 if (!state.animationUpdate().isEmpty()) 103 if (!state.animationUpdate().isEmpty())
104 element.ensureElementAnimations().cssAnimations().setPendingUpdate(state .animationUpdate()); 104 element.ensureElementAnimations().cssAnimations().setPendingUpdate(state .animationUpdate());
105 } 105 }
106 106
107 // Returns whether any @apply rule sets a custom property 107 // Returns whether any @apply rule sets a custom property
108 bool cacheCustomPropertiesForApplyAtRules(StyleResolverState& state, const Match edPropertiesRange& range) 108 bool cacheCustomPropertiesForApplyAtRules(StyleResolverState& state, const Match edPropertiesRange& range)
109 { 109 {
110 bool ruleSetsCustomProperty = false; 110 bool ruleSetsCustomProperty = false;
111 if (!state.style()->variables()) 111 // TODO(timloh): @apply should also work with properties registered as non-i nherited.
112 if (!state.style()->inheritedVariables())
112 return false; 113 return false;
113 for (const auto& matchedProperties : range) { 114 for (const auto& matchedProperties : range) {
114 const StylePropertySet& properties = *matchedProperties.properties; 115 const StylePropertySet& properties = *matchedProperties.properties;
115 unsigned propertyCount = properties.propertyCount(); 116 unsigned propertyCount = properties.propertyCount();
116 for (unsigned i = 0; i < propertyCount; ++i) { 117 for (unsigned i = 0; i < propertyCount; ++i) {
117 StylePropertySet::PropertyReference current = properties.propertyAt( i); 118 StylePropertySet::PropertyReference current = properties.propertyAt( i);
118 if (current.id() != CSSPropertyApplyAtRule) 119 if (current.id() != CSSPropertyApplyAtRule)
119 continue; 120 continue;
120 AtomicString name(toCSSCustomIdentValue(current.value()).value()); 121 AtomicString name(toCSSCustomIdentValue(current.value()).value());
121 CSSVariableData* variableData = state.style()->variables()->getVaria ble(name); 122 CSSVariableData* variableData = state.style()->inheritedVariables()- >getVariable(name);
122 if (!variableData) 123 if (!variableData)
123 continue; 124 continue;
124 StylePropertySet* customPropertySet = variableData->propertySet(); 125 StylePropertySet* customPropertySet = variableData->propertySet();
125 if (!customPropertySet) 126 if (!customPropertySet)
126 continue; 127 continue;
127 if (customPropertySet->findPropertyIndex(CSSPropertyVariable) != -1) 128 if (customPropertySet->findPropertyIndex(CSSPropertyVariable) != -1)
128 ruleSetsCustomProperty = true; 129 ruleSetsCustomProperty = true;
129 state.setCustomPropertySetForApplyAtRule(name, customPropertySet); 130 state.setCustomPropertySetForApplyAtRule(name, customPropertySet);
130 } 131 }
131 } 132 }
(...skipping 1295 matching lines...) Expand 10 before | Expand all | Expand 10 after
1427 continue; 1428 continue;
1428 1429
1429 StyleBuilder::applyProperty(propertyId, state, allValue); 1430 StyleBuilder::applyProperty(propertyId, state, allValue);
1430 } 1431 }
1431 } 1432 }
1432 1433
1433 template <CSSPropertyPriority priority> 1434 template <CSSPropertyPriority priority>
1434 void StyleResolver::applyPropertiesForApplyAtRule(StyleResolverState& state, con st CSSValue& value, bool isImportant, PropertyWhitelistType propertyWhitelistTyp e) 1435 void StyleResolver::applyPropertiesForApplyAtRule(StyleResolverState& state, con st CSSValue& value, bool isImportant, PropertyWhitelistType propertyWhitelistTyp e)
1435 { 1436 {
1436 state.style()->setHasVariableReferenceFromNonInheritedProperty(); 1437 state.style()->setHasVariableReferenceFromNonInheritedProperty();
1437 if (!state.style()->variables()) 1438 if (!state.style()->inheritedVariables())
1438 return; 1439 return;
1439 const String& name = toCSSCustomIdentValue(value).value(); 1440 const String& name = toCSSCustomIdentValue(value).value();
1440 const StylePropertySet* propertySet = state.customPropertySetForApplyAtRule( name); 1441 const StylePropertySet* propertySet = state.customPropertySetForApplyAtRule( name);
1441 bool inheritedOnly = false; 1442 bool inheritedOnly = false;
1442 if (propertySet) 1443 if (propertySet)
1443 applyProperties<priority>(state, propertySet, isImportant, inheritedOnly , propertyWhitelistType); 1444 applyProperties<priority>(state, propertySet, isImportant, inheritedOnly , propertyWhitelistType);
1444 } 1445 }
1445 1446
1446 template <CSSPropertyPriority priority> 1447 template <CSSPropertyPriority priority>
1447 void StyleResolver::applyProperties(StyleResolverState& state, const StyleProper tySet* properties, bool isImportant, bool inheritedOnly, PropertyWhitelistType p ropertyWhitelistType) 1448 void StyleResolver::applyProperties(StyleResolverState& state, const StyleProper tySet* properties, bool isImportant, bool inheritedOnly, PropertyWhitelistType p ropertyWhitelistType)
(...skipping 296 matching lines...) Expand 10 before | Expand all | Expand 10 after
1744 visitor->trace(m_siblingRuleSet); 1745 visitor->trace(m_siblingRuleSet);
1745 visitor->trace(m_uncommonAttributeRuleSet); 1746 visitor->trace(m_uncommonAttributeRuleSet);
1746 visitor->trace(m_watchedSelectorsRules); 1747 visitor->trace(m_watchedSelectorsRules);
1747 visitor->trace(m_treeBoundaryCrossingScopes); 1748 visitor->trace(m_treeBoundaryCrossingScopes);
1748 visitor->trace(m_styleSharingLists); 1749 visitor->trace(m_styleSharingLists);
1749 visitor->trace(m_pendingStyleSheets); 1750 visitor->trace(m_pendingStyleSheets);
1750 visitor->trace(m_document); 1751 visitor->trace(m_document);
1751 } 1752 }
1752 1753
1753 } // namespace blink 1754 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698