summaryrefslogtreecommitdiff
path: root/Source/WebCore/css/CSSValue.h
diff options
context:
space:
mode:
Diffstat (limited to 'Source/WebCore/css/CSSValue.h')
-rw-r--r--Source/WebCore/css/CSSValue.h118
1 files changed, 73 insertions, 45 deletions
diff --git a/Source/WebCore/css/CSSValue.h b/Source/WebCore/css/CSSValue.h
index 517eec7d8..59dc61744 100644
--- a/Source/WebCore/css/CSSValue.h
+++ b/Source/WebCore/css/CSSValue.h
@@ -22,15 +22,18 @@
#define CSSValue_h
#include "ExceptionCode.h"
-#include "KURLHash.h"
+#include "URLHash.h"
#include <wtf/ListHashSet.h>
#include <wtf/RefCounted.h>
#include <wtf/RefPtr.h>
+#include <wtf/TypeCasts.h>
namespace WebCore {
+class CachedResource;
class StyleSheetContents;
-
+enum CSSPropertyID : uint16_t;
+
// FIXME: The current CSSValue and subclasses should be turned into internal types (StyleValue).
// The few subtypes that are actually exposed in CSSOM can be seen in the cloneForCSSOM() function.
// They should be handled by separate wrapper classes.
@@ -43,8 +46,9 @@ public:
CSS_PRIMITIVE_VALUE = 1,
CSS_VALUE_LIST = 2,
CSS_CUSTOM = 3,
- CSS_INITIAL = 4
-
+ CSS_INITIAL = 4,
+ CSS_UNSET = 5,
+ CSS_REVERT = 6
};
// Override RefCounted's deref() to ensure operator delete is called on
@@ -58,10 +62,8 @@ public:
Type cssValueType() const;
String cssText() const;
+
void setCssText(const String&, ExceptionCode&) { } // FIXME: Not implemented.
-#if ENABLE(CSS_VARIABLES)
- String serializeResolvingVariables(const HashMap<AtomicString, String>&) const;
-#endif
bool isPrimitiveValue() const { return m_classType == PrimitiveClass; }
bool isValueList() const { return m_classType >= ValueListClass; }
@@ -71,11 +73,20 @@ public:
bool isAspectRatioValue() const { return m_classType == AspectRatioClass; }
bool isBorderImageSliceValue() const { return m_classType == BorderImageSliceClass; }
+ bool isCanvasValue() const { return m_classType == CanvasClass; }
+ bool isCrossfadeValue() const { return m_classType == CrossfadeClass; }
bool isCursorImageValue() const { return m_classType == CursorImageClass; }
+ bool isCustomPropertyValue() const { return m_classType == CustomPropertyClass; }
+ bool isInvalidCustomPropertyValue() const;
+ bool isVariableDependentValue() const { return m_classType == VariableDependentClass; }
+ bool isVariableValue() const { return m_classType == VariableClass; }
+ bool isFunctionValue() const { return m_classType == FunctionClass; }
bool isFontFeatureValue() const { return m_classType == FontFeatureClass; }
+ bool isFontFaceSrcValue() const { return m_classType == FontFaceSrcClass; }
bool isFontValue() const { return m_classType == FontClass; }
bool isImageGeneratorValue() const { return m_classType >= CanvasClass && m_classType <= RadialGradientClass; }
bool isGradientValue() const { return m_classType >= LinearGradientClass && m_classType <= RadialGradientClass; }
+ bool isNamedImageValue() const { return m_classType == NamedImageClass; }
#if ENABLE(CSS_IMAGE_SET)
bool isImageSetValue() const { return m_classType == ImageSetClass; }
#endif
@@ -83,47 +94,47 @@ public:
bool isImplicitInitialValue() const;
bool isInheritedValue() const { return m_classType == InheritedClass; }
bool isInitialValue() const { return m_classType == InitialClass; }
+ bool isUnsetValue() const { return m_classType == UnsetClass; }
+ bool isRevertValue() const { return m_classType == RevertClass; }
+ bool treatAsInitialValue(CSSPropertyID) const;
+ bool treatAsInheritedValue(CSSPropertyID) const;
+ bool isLinearGradientValue() const { return m_classType == LinearGradientClass; }
+ bool isRadialGradientValue() const { return m_classType == RadialGradientClass; }
bool isReflectValue() const { return m_classType == ReflectClass; }
bool isShadowValue() const { return m_classType == ShadowClass; }
bool isCubicBezierTimingFunctionValue() const { return m_classType == CubicBezierTimingFunctionClass; }
- bool isLinearTimingFunctionValue() const { return m_classType == LinearTimingFunctionClass; }
bool isStepsTimingFunctionValue() const { return m_classType == StepsTimingFunctionClass; }
bool isWebKitCSSTransformValue() const { return m_classType == WebKitCSSTransformClass; }
- bool isCSSLineBoxContainValue() const { return m_classType == LineBoxContainClass; }
- bool isCalculationValue() const {return m_classType == CalculationClass; }
-#if ENABLE(CSS_FILTERS)
+ bool isLineBoxContainValue() const { return m_classType == LineBoxContainClass; }
+ bool isCalcValue() const {return m_classType == CalculationClass; }
+ bool isFilterImageValue() const { return m_classType == FilterImageClass; }
bool isWebKitCSSFilterValue() const { return m_classType == WebKitCSSFilterClass; }
-#if ENABLE(CSS_SHADERS)
- bool isWebKitCSSArrayFunctionValue() const { return m_classType == WebKitCSSArrayFunctionValueClass; }
- bool isWebKitCSSMatFunctionValue() const { return m_classType == WebKitCSSMatFunctionValueClass; }
- bool isWebKitCSSMixFunctionValue() const { return m_classType == WebKitCSSMixFunctionValueClass; }
- bool isWebKitCSSShaderValue() const { return m_classType == WebKitCSSShaderClass; }
-#endif
-#endif // ENABLE(CSS_FILTERS)
-#if ENABLE(CSS_VARIABLES)
- bool isVariableValue() const { return m_classType == VariableClass; }
+ bool isContentDistributionValue() const { return m_classType == CSSContentDistributionClass; }
+#if ENABLE(CSS_GRID_LAYOUT)
+ bool isGridTemplateAreasValue() const { return m_classType == GridTemplateAreasClass; }
+ bool isGridLineNamesValue() const { return m_classType == GridLineNamesClass; }
#endif
-#if ENABLE(SVG)
bool isSVGColor() const { return m_classType == SVGColorClass || m_classType == SVGPaintClass; }
bool isSVGPaint() const { return m_classType == SVGPaintClass; }
- bool isWebKitCSSSVGDocumentValue() const { return m_classType == WebKitCSSSVGDocumentClass; }
+ bool isUnicodeRangeValue() const { return m_classType == UnicodeRangeClass; }
+
+#if ENABLE(CSS_ANIMATIONS_LEVEL_2)
+ bool isAnimationTriggerScrollValue() const { return m_classType == AnimationTriggerScrollClass; }
#endif
-
+
bool isCSSOMSafe() const { return m_isCSSOMSafe; }
bool isSubtypeExposedToCSSOM() const
{
return isPrimitiveValue()
-#if ENABLE(SVG)
|| isSVGColor()
-#endif
|| isValueList();
}
- PassRefPtr<CSSValue> cloneForCSSOM() const;
+ RefPtr<CSSValue> cloneForCSSOM() const;
- void addSubresourceStyleURLs(ListHashSet<KURL>&, const StyleSheetContents*) const;
+ void addSubresourceStyleURLs(ListHashSet<URL>&, const StyleSheetContents*) const;
- bool hasFailedOrCanceledSubresources() const;
+ bool traverseSubresources(const std::function<bool (const CachedResource&)>& handler) const;
bool equals(const CSSValue&) const;
@@ -139,13 +150,14 @@ protected:
// Image generator classes.
CanvasClass,
+ NamedImageClass,
CrossfadeClass,
+ FilterImageClass,
LinearGradientClass,
RadialGradientClass,
// Timing function classes.
CubicBezierTimingFunctionClass,
- LinearTimingFunctionClass,
StepsTimingFunctionClass,
// Other class types.
@@ -158,38 +170,39 @@ protected:
InheritedClass,
InitialClass,
+ UnsetClass,
+ RevertClass,
ReflectClass,
ShadowClass,
UnicodeRangeClass,
LineBoxContainClass,
CalculationClass,
-#if ENABLE(CSS_FILTERS) && ENABLE(CSS_SHADERS)
- WebKitCSSShaderClass,
-#endif
-#if ENABLE(CSS_VARIABLES)
- VariableClass,
+#if ENABLE(CSS_GRID_LAYOUT)
+ GridTemplateAreasClass,
#endif
-#if ENABLE(SVG)
SVGColorClass,
SVGPaintClass,
- WebKitCSSSVGDocumentClass,
+
+#if ENABLE(CSS_ANIMATIONS_LEVEL_2)
+ AnimationTriggerScrollClass,
#endif
+ CSSContentDistributionClass,
+ CustomPropertyClass,
+ VariableDependentClass,
+ VariableClass,
+
// List class types must appear after ValueListClass.
ValueListClass,
#if ENABLE(CSS_IMAGE_SET)
ImageSetClass,
#endif
-#if ENABLE(CSS_FILTERS)
WebKitCSSFilterClass,
-#if ENABLE(CSS_SHADERS)
- WebKitCSSArrayFunctionValueClass,
- WebKitCSSMatFunctionValueClass,
- WebKitCSSMixFunctionValueClass,
-#endif
-#endif
WebKitCSSTransformClass,
+#if ENABLE(CSS_GRID_LAYOUT)
+ GridLineNamesClass,
+#endif
// Do not append non-list class types here.
};
@@ -219,7 +232,7 @@ protected:
~CSSValue() { }
private:
- void destroy();
+ WEBCORE_EXPORT void destroy();
protected:
unsigned m_isCSSOMSafe : 1;
@@ -236,10 +249,12 @@ protected:
private:
unsigned m_classType : ClassTypeBits; // ClassType
+
+friend class CSSValueList;
};
template<typename CSSValueType>
-inline bool compareCSSValueVector(const Vector<RefPtr<CSSValueType> >& firstVector, const Vector<RefPtr<CSSValueType> >& secondVector)
+inline bool compareCSSValueVector(const Vector<RefPtr<CSSValueType>>& firstVector, const Vector<RefPtr<CSSValueType>>& secondVector)
{
size_t size = firstVector.size();
if (size != secondVector.size())
@@ -261,6 +276,19 @@ inline bool compareCSSValuePtr(const RefPtr<CSSValueType>& first, const RefPtr<C
return first ? second && first->equals(*second) : !second;
}
+template<typename CSSValueType>
+inline bool compareCSSValue(const Ref<CSSValueType>& first, const Ref<CSSValueType>& second)
+{
+ return first.get().equals(second);
+}
+
+typedef HashMap<AtomicString, RefPtr<CSSValue>> CustomPropertyValueMap;
+
} // namespace WebCore
+#define SPECIALIZE_TYPE_TRAITS_CSS_VALUE(ToValueTypeName, predicate) \
+SPECIALIZE_TYPE_TRAITS_BEGIN(WebCore::ToValueTypeName) \
+ static bool isType(const WebCore::CSSValue& value) { return value.predicate; } \
+SPECIALIZE_TYPE_TRAITS_END()
+
#endif // CSSValue_h