diff options
Diffstat (limited to 'Source/WebCore/css/StyleResolver.cpp')
-rw-r--r-- | Source/WebCore/css/StyleResolver.cpp | 59 |
1 files changed, 42 insertions, 17 deletions
diff --git a/Source/WebCore/css/StyleResolver.cpp b/Source/WebCore/css/StyleResolver.cpp index 834d1d603..517bdb6b2 100644 --- a/Source/WebCore/css/StyleResolver.cpp +++ b/Source/WebCore/css/StyleResolver.cpp @@ -147,6 +147,7 @@ #endif #if ENABLE(CSS_SHADERS) +#include "CustomFilterArrayParameter.h" #include "CustomFilterNumberParameter.h" #include "CustomFilterOperation.h" #include "CustomFilterParameter.h" @@ -2585,7 +2586,7 @@ void RuleSet::reportMemoryUsage(MemoryObjectInfo* memoryObjectInfo) const void RuleSet::RuleSetSelectorPair::reportMemoryUsage(MemoryObjectInfo* memoryObjectInfo) const { MemoryClassInfo info(memoryObjectInfo, this, WebCoreMemoryTypes::CSS); - info.addInstrumentedMember(ruleSet); + info.addMember(ruleSet); } static inline void collectFeaturesFromSelector(StyleResolver::Features& features, const CSSSelector* selector) @@ -3438,11 +3439,11 @@ void StyleResolver::applyProperty(CSSPropertyID id, CSSValue* value) const PropertyHandler& handler = m_styleBuilder.propertyHandler(id); if (handler.isValid()) { if (isInherit) - handler.applyInheritValue(this); + handler.applyInheritValue(id, this); else if (isInitial) - handler.applyInitialValue(this); + handler.applyInitialValue(id, this); else - handler.applyValue(this, value); + handler.applyValue(id, this, value); return; } @@ -5252,6 +5253,21 @@ static bool sortParametersByNameComparator(const RefPtr<CustomFilterParameter>& return codePointCompareLessThan(a->name(), b->name()); } +PassRefPtr<CustomFilterParameter> StyleResolver::parseCustomFilterArrayParameter(const String& name, CSSValueList* values) +{ + RefPtr<CustomFilterArrayParameter> arrayParameter = CustomFilterArrayParameter::create(name); + for (unsigned i = 0, length = values->length(); i < length; ++i) { + CSSValue* value = values->itemWithoutBoundsCheck(i); + if (!value->isPrimitiveValue()) + return 0; + CSSPrimitiveValue* primitiveValue = static_cast<CSSPrimitiveValue*>(value); + if (primitiveValue->primitiveType() != CSSPrimitiveValue::CSS_NUMBER) + return 0; + arrayParameter->addValue(primitiveValue->getDoubleValue()); + } + return arrayParameter.release(); +} + PassRefPtr<CustomFilterParameter> StyleResolver::parseCustomFilterNumberParameter(const String& name, CSSValueList* values) { RefPtr<CustomFilterNumberParameter> numberParameter = CustomFilterNumberParameter::create(name); @@ -5282,6 +5298,8 @@ PassRefPtr<CustomFilterParameter> StyleResolver::parseCustomFilterParameter(cons // booleans: https://bugs.webkit.org/show_bug.cgi?id=76438 // textures: https://bugs.webkit.org/show_bug.cgi?id=71442 // mat2, mat3, mat4: https://bugs.webkit.org/show_bug.cgi?id=71444 + // Number parameters are wrapped inside a CSSValueList and all + // the other functions values inherit from CSSValueList. if (!parameterValue->isValueList()) return 0; @@ -5289,9 +5307,16 @@ PassRefPtr<CustomFilterParameter> StyleResolver::parseCustomFilterParameter(cons if (!values->length()) return 0; + if (parameterValue->isWebKitCSSArrayFunctionValue()) + return parseCustomFilterArrayParameter(name, values); + + // If the first value of the list is a transform function, + // then we could safely assume that all the remaining items + // are transforms. parseCustomFilterTransformParameter will + // return 0 if that assumption is incorrect. if (values->itemWithoutBoundsCheck(0)->isWebKitCSSTransformValue()) return parseCustomFilterTransformParameter(name, values); - + // We can have only arrays of booleans or numbers, so use the first value to choose between those two. // We need up to 4 values (all booleans or all numbers). if (!values->itemWithoutBoundsCheck(0)->isPrimitiveValue() || values->length() > 4) @@ -5734,7 +5759,7 @@ void StyleResolver::loadPendingResources() void StyleResolver::MatchedProperties::reportMemoryUsage(MemoryObjectInfo* memoryObjectInfo) const { MemoryClassInfo info(memoryObjectInfo, this, WebCoreMemoryTypes::CSS); - info.addInstrumentedMember(properties); + info.addMember(properties); } void StyleResolver::MatchedPropertiesCacheItem::reportMemoryUsage(MemoryObjectInfo* memoryObjectInfo) const @@ -5746,26 +5771,26 @@ void StyleResolver::MatchedPropertiesCacheItem::reportMemoryUsage(MemoryObjectIn void MediaQueryResult::reportMemoryUsage(MemoryObjectInfo* memoryObjectInfo) const { MemoryClassInfo info(memoryObjectInfo, this, WebCoreMemoryTypes::CSS); - info.addInstrumentedMember(m_expression); + info.addMember(m_expression); } void StyleResolver::reportMemoryUsage(MemoryObjectInfo* memoryObjectInfo) const { MemoryClassInfo info(memoryObjectInfo, this, WebCoreMemoryTypes::CSS); info.addMember(m_style); - info.addInstrumentedMember(m_authorStyle); - info.addInstrumentedMember(m_userStyle); - info.addInstrumentedMember(m_siblingRuleSet); - info.addInstrumentedMember(m_uncommonAttributeRuleSet); + info.addMember(m_authorStyle); + info.addMember(m_userStyle); + info.addMember(m_siblingRuleSet); + info.addMember(m_uncommonAttributeRuleSet); info.addHashMap(m_keyframesRuleMap); info.addHashMap(m_matchedPropertiesCache); info.addInstrumentedMapValues(m_matchedPropertiesCache); info.addVector(m_matchedRules); - info.addInstrumentedMember(m_ruleList); + info.addMember(m_ruleList); info.addHashMap(m_pendingImageProperties); info.addInstrumentedMapValues(m_pendingImageProperties); - info.addInstrumentedMember(m_lineHeightValue); + info.addMember(m_lineHeightValue); info.addInstrumentedVector(m_viewportDependentMediaQueryResults); info.addHashMap(m_styleRuleToCSSOMWrapperMap); info.addInstrumentedMapEntries(m_styleRuleToCSSOMWrapperMap); @@ -5780,10 +5805,10 @@ void StyleResolver::reportMemoryUsage(MemoryObjectInfo* memoryObjectInfo) const #endif // FIXME: move this to a place where it would be called only once? - info.addInstrumentedMember(defaultStyle); - info.addInstrumentedMember(defaultQuirksStyle); - info.addInstrumentedMember(defaultPrintStyle); - info.addInstrumentedMember(defaultViewSourceStyle); + info.addMember(defaultStyle); + info.addMember(defaultQuirksStyle); + info.addMember(defaultPrintStyle); + info.addMember(defaultViewSourceStyle); } } // namespace WebCore |