summaryrefslogtreecommitdiff
path: root/Source/WebCore/css/StyleResolver.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/WebCore/css/StyleResolver.cpp')
-rw-r--r--Source/WebCore/css/StyleResolver.cpp59
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