diff options
Diffstat (limited to 'Source/WebCore/css/CSSValue.h')
| -rw-r--r-- | Source/WebCore/css/CSSValue.h | 118 |
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 |
