summaryrefslogtreecommitdiff
path: root/Source/WebCore/css/CSSValue.h
diff options
context:
space:
mode:
authorLorry Tar Creator <lorry-tar-importer@lorry>2017-06-27 06:07:23 +0000
committerLorry Tar Creator <lorry-tar-importer@lorry>2017-06-27 06:07:23 +0000
commit1bf1084f2b10c3b47fd1a588d85d21ed0eb41d0c (patch)
tree46dcd36c86e7fbc6e5df36deb463b33e9967a6f7 /Source/WebCore/css/CSSValue.h
parent32761a6cee1d0dee366b885b7b9c777e67885688 (diff)
downloadWebKitGtk-tarball-master.tar.gz
Diffstat (limited to 'Source/WebCore/css/CSSValue.h')
-rw-r--r--Source/WebCore/css/CSSValue.h142
1 files changed, 78 insertions, 64 deletions
diff --git a/Source/WebCore/css/CSSValue.h b/Source/WebCore/css/CSSValue.h
index 942b793df..47c62087e 100644
--- a/Source/WebCore/css/CSSValue.h
+++ b/Source/WebCore/css/CSSValue.h
@@ -18,24 +18,25 @@
* Boston, MA 02110-1301, USA.
*/
-#ifndef CSSValue_h
-#define CSSValue_h
+#pragma once
-#include "ExceptionCode.h"
+#include "ExceptionOr.h"
#include "URLHash.h"
+#include <wtf/HashMap.h>
#include <wtf/ListHashSet.h>
#include <wtf/RefCounted.h>
#include <wtf/RefPtr.h>
+#include <wtf/TypeCasts.h>
namespace WebCore {
+class CSSCustomPropertyValue;
+class CachedResource;
+class DeprecatedCSSOMValue;
class StyleSheetContents;
-
-// 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.
-// Please don't expose more CSSValue types to the web.
+enum CSSPropertyID : uint16_t;
+
class CSSValue : public RefCounted<CSSValue> {
public:
enum Type {
@@ -43,8 +44,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
@@ -56,9 +58,7 @@ public:
}
Type cssValueType() const;
-
String cssText() const;
- void setCssText(const String&, ExceptionCode&) { } // FIXME: Not implemented.
bool isPrimitiveValue() const { return m_classType == PrimitiveClass; }
bool isValueList() const { return m_classType >= ValueListClass; }
@@ -71,56 +71,58 @@ public:
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 isFunctionValue() const { return m_classType == FunctionClass; }
bool isFontFeatureValue() const { return m_classType == FontFeatureClass; }
+#if ENABLE(VARIATION_FONTS)
+ bool isFontVariationValue() const { return m_classType == FontVariationClass; }
+#endif
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; }
-#if ENABLE(CSS_IMAGE_SET)
+ bool isNamedImageValue() const { return m_classType == NamedImageClass; }
bool isImageSetValue() const { return m_classType == ImageSetClass; }
-#endif
bool isImageValue() const { return m_classType == ImageClass; }
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 isStepsTimingFunctionValue() const { return m_classType == StepsTimingFunctionClass; }
- bool isWebKitCSSTransformValue() const { return m_classType == WebKitCSSTransformClass; }
+ bool isSpringTimingFunctionValue() const { return m_classType == SpringTimingFunctionClass; }
bool isLineBoxContainValue() const { return m_classType == LineBoxContainClass; }
bool isCalcValue() const {return m_classType == CalculationClass; }
-#if ENABLE(CSS_FILTERS)
bool isFilterImageValue() const { return m_classType == FilterImageClass; }
- bool isWebKitCSSFilterValue() const { return m_classType == WebKitCSSFilterClass; }
-#endif // ENABLE(CSS_FILTERS)
- bool isGridTemplateValue() const { return m_classType == GridTemplateClass; }
-#if ENABLE(SVG)
- bool isSVGColor() const { return m_classType == SVGColorClass || m_classType == SVGPaintClass; }
- bool isSVGPaint() const { return m_classType == SVGPaintClass; }
-#endif
+ bool isContentDistributionValue() const { return m_classType == CSSContentDistributionClass; }
+ bool isGridAutoRepeatValue() const { return m_classType == GridAutoRepeatClass; }
+ bool isGridTemplateAreasValue() const { return m_classType == GridTemplateAreasClass; }
+ bool isGridLineNamesValue() const { return m_classType == GridLineNamesClass; }
bool isUnicodeRangeValue() const { return m_classType == UnicodeRangeClass; }
- bool isCSSOMSafe() const { return m_isCSSOMSafe; }
- bool isSubtypeExposedToCSSOM() const
- {
- return isPrimitiveValue()
-#if ENABLE(SVG)
- || isSVGColor()
+#if ENABLE(CSS_ANIMATIONS_LEVEL_2)
+ bool isAnimationTriggerScrollValue() const { return m_classType == AnimationTriggerScrollClass; }
#endif
- || isValueList();
- }
- PassRefPtr<CSSValue> cloneForCSSOM() const;
+ bool isCustomIdentValue() const { return m_classType == CustomIdentClass; }
+ bool isVariableReferenceValue() const { return m_classType == VariableReferenceClass; }
+ bool isPendingSubstitutionValue() const { return m_classType == PendingSubstitutionValueClass; }
+
+ bool hasVariableReferences() const { return isVariableReferenceValue() || isPendingSubstitutionValue(); }
- void addSubresourceStyleURLs(ListHashSet<URL>&, const StyleSheetContents*) const;
+ Ref<DeprecatedCSSOMValue> createDeprecatedCSSOMWrapper() const;
- bool hasFailedOrCanceledSubresources() const;
+ bool traverseSubresources(const std::function<bool (const CachedResource&)>& handler) const;
bool equals(const CSSValue&) const;
+ bool operator==(const CSSValue& other) const { return equals(other); }
protected:
@@ -134,51 +136,62 @@ protected:
// Image generator classes.
CanvasClass,
+ NamedImageClass,
CrossfadeClass,
-#if ENABLE(CSS_FILTERS)
FilterImageClass,
-#endif
LinearGradientClass,
RadialGradientClass,
// Timing function classes.
CubicBezierTimingFunctionClass,
StepsTimingFunctionClass,
+ SpringTimingFunctionClass,
// Other class types.
AspectRatioClass,
BorderImageSliceClass,
FontFeatureClass,
+#if ENABLE(VARIATION_FONTS)
+ FontVariationClass,
+#endif
FontClass,
FontFaceSrcClass,
FunctionClass,
InheritedClass,
InitialClass,
+ UnsetClass,
+ RevertClass,
ReflectClass,
ShadowClass,
UnicodeRangeClass,
LineBoxContainClass,
CalculationClass,
- GridTemplateClass,
-#if ENABLE(SVG)
- SVGColorClass,
- SVGPaintClass,
+ GridTemplateAreasClass,
+#if ENABLE(CSS_ANIMATIONS_LEVEL_2)
+ AnimationTriggerScrollClass,
#endif
- // List class types must appear after ValueListClass.
+ CSSContentDistributionClass,
+
+ CustomIdentClass,
+
+ CustomPropertyClass,
+ VariableReferenceClass,
+ PendingSubstitutionValueClass,
+
+ // List class types must appear after ValueListClass. Note CSSFunctionValue
+ // is deliberately excluded, since we don't want it exposed to the CSS OM
+ // as a list.
ValueListClass,
-#if ENABLE(CSS_IMAGE_SET)
ImageSetClass,
-#endif
-#if ENABLE(CSS_FILTERS)
- WebKitCSSFilterClass,
-#endif
- WebKitCSSTransformClass,
+ GridLineNamesClass,
+ GridAutoRepeatClass,
// Do not append non-list class types here.
};
+public:
static const size_t ValueListSeparatorBits = 2;
enum ValueListSeparator {
SpaceSeparator,
@@ -186,12 +199,11 @@ protected:
SlashSeparator
};
+protected:
ClassType classType() const { return static_cast<ClassType>(m_classType); }
- explicit CSSValue(ClassType classType, bool isCSSOMSafe = false)
- : m_isCSSOMSafe(isCSSOMSafe)
- , m_isTextClone(false)
- , m_primitiveUnitType(0)
+ explicit CSSValue(ClassType classType)
+ : m_primitiveUnitType(0)
, m_hasCachedCSSText(false)
, m_isQuirkValue(false)
, m_valueListSeparator(SpaceSeparator)
@@ -205,16 +217,14 @@ protected:
~CSSValue() { }
private:
- void destroy();
+ WEBCORE_EXPORT void destroy();
protected:
- unsigned m_isCSSOMSafe : 1;
- unsigned m_isTextClone : 1;
// The bits in this section are only used by specific subclasses but kept here
// to maximize struct packing.
// CSSPrimitiveValue bits:
- unsigned m_primitiveUnitType : 7; // CSSPrimitiveValue::UnitTypes
+ unsigned m_primitiveUnitType : 7; // CSSPrimitiveValue::UnitType
mutable unsigned m_hasCachedCSSText : 1;
unsigned m_isQuirkValue : 1;
@@ -222,19 +232,21 @@ 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<Ref<CSSValueType>>& firstVector, const Vector<Ref<CSSValueType>>& secondVector)
{
size_t size = firstVector.size();
if (size != secondVector.size())
return false;
- for (size_t i = 0; i < size; i++) {
- const RefPtr<CSSValueType>& firstPtr = firstVector[i];
- const RefPtr<CSSValueType>& secondPtr = secondVector[i];
- if (firstPtr == secondPtr || (firstPtr && secondPtr && firstPtr->equals(*secondPtr)))
+ for (size_t i = 0; i < size; ++i) {
+ auto& firstPtr = firstVector[i];
+ auto& secondPtr = secondVector[i];
+ if (firstPtr.ptr() == secondPtr.ptr() || firstPtr->equals(secondPtr))
continue;
return false;
}
@@ -250,12 +262,14 @@ inline bool compareCSSValuePtr(const RefPtr<CSSValueType>& first, const RefPtr<C
template<typename CSSValueType>
inline bool compareCSSValue(const Ref<CSSValueType>& first, const Ref<CSSValueType>& second)
{
- return first.get().equals(second.get());
+ return first.get().equals(second);
}
-#define CSS_VALUE_TYPE_CASTS(ToValueTypeName, predicate) \
- TYPE_CASTS_BASE(ToValueTypeName, CSSValue, value, value->predicate, value.predicate)
+typedef HashMap<AtomicString, RefPtr<CSSCustomPropertyValue>> CustomPropertyValueMap;
} // namespace WebCore
-#endif // CSSValue_h
+#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()