blob: c3489194a1daa809b7c6f6742998ea2b9422c9dd [file] [log] [blame]
/*
* Copyright (C) 2011 Andreas Kling (kling@webkit.org)
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
*/
#include "core/css/CSSValue.h"
#include "core/css/CSSBasicShapeValues.h"
#include "core/css/CSSBorderImageSliceValue.h"
#include "core/css/CSSColorValue.h"
#include "core/css/CSSContentDistributionValue.h"
#include "core/css/CSSCounterValue.h"
#include "core/css/CSSCrossfadeValue.h"
#include "core/css/CSSCursorImageValue.h"
#include "core/css/CSSCustomIdentValue.h"
#include "core/css/CSSCustomPropertyDeclaration.h"
#include "core/css/CSSFontFaceSrcValue.h"
#include "core/css/CSSFontFamilyValue.h"
#include "core/css/CSSFontFeatureValue.h"
#include "core/css/CSSFontStyleRangeValue.h"
#include "core/css/CSSFontVariationValue.h"
#include "core/css/CSSFunctionValue.h"
#include "core/css/CSSGradientValue.h"
#include "core/css/CSSGridAutoRepeatValue.h"
#include "core/css/CSSGridLineNamesValue.h"
#include "core/css/CSSGridTemplateAreasValue.h"
#include "core/css/CSSIdentifierValue.h"
#include "core/css/CSSImageSetValue.h"
#include "core/css/CSSImageValue.h"
#include "core/css/CSSInheritedValue.h"
#include "core/css/CSSInitialValue.h"
#include "core/css/CSSPaintValue.h"
#include "core/css/CSSPathValue.h"
#include "core/css/CSSPendingSubstitutionValue.h"
#include "core/css/CSSPrimitiveValue.h"
#include "core/css/CSSQuadValue.h"
#include "core/css/CSSRayValue.h"
#include "core/css/CSSReflectValue.h"
#include "core/css/CSSShadowValue.h"
#include "core/css/CSSStringValue.h"
#include "core/css/CSSTimingFunctionValue.h"
#include "core/css/CSSURIValue.h"
#include "core/css/CSSUnicodeRangeValue.h"
#include "core/css/CSSUnsetValue.h"
#include "core/css/CSSValueList.h"
#include "core/css/CSSValuePair.h"
#include "core/css/CSSVariableReferenceValue.h"
#include "platform/Length.h"
#include "platform/wtf/SizeAssertions.h"
namespace blink {
using namespace cssvalue;
struct SameSizeAsCSSValue
: public GarbageCollectedFinalized<SameSizeAsCSSValue> {
uint32_t bitfields;
};
ASSERT_SIZE(CSSValue, SameSizeAsCSSValue);
CSSValue* CSSValue::Create(const Length& value, float zoom) {
switch (value.GetType()) {
case kAuto:
case kMinContent:
case kMaxContent:
case kFillAvailable:
case kFitContent:
case kExtendToZoom:
return CSSIdentifierValue::Create(value);
case kPercent:
case kFixed:
case kCalculated:
return CSSPrimitiveValue::Create(value, zoom);
case kDeviceWidth:
case kDeviceHeight:
case kMaxSizeNone:
NOTREACHED();
break;
}
return nullptr;
}
bool CSSValue::HasFailedOrCanceledSubresources() const {
if (IsValueList())
return ToCSSValueList(this)->HasFailedOrCanceledSubresources();
if (GetClassType() == kFontFaceSrcClass)
return ToCSSFontFaceSrcValue(this)->HasFailedOrCanceledSubresources();
if (GetClassType() == kImageClass)
return ToCSSImageValue(this)->HasFailedOrCanceledSubresources();
if (GetClassType() == kCrossfadeClass)
return ToCSSCrossfadeValue(this)->HasFailedOrCanceledSubresources();
if (GetClassType() == kImageSetClass)
return ToCSSImageSetValue(this)->HasFailedOrCanceledSubresources();
return false;
}
bool CSSValue::MayContainUrl() const {
if (IsValueList())
return ToCSSValueList(*this).MayContainUrl();
return IsImageValue() || IsURIValue();
}
void CSSValue::ReResolveUrl(const Document& document) const {
// TODO(fs): Should handle all values that can contain URLs.
if (IsImageValue()) {
ToCSSImageValue(*this).ReResolveURL(document);
return;
}
if (IsURIValue()) {
ToCSSURIValue(*this).ReResolveUrl(document);
return;
}
if (IsValueList()) {
ToCSSValueList(*this).ReResolveUrl(document);
return;
}
}
template <class ChildClassType>
inline static bool CompareCSSValues(const CSSValue& first,
const CSSValue& second) {
return static_cast<const ChildClassType&>(first).Equals(
static_cast<const ChildClassType&>(second));
}
bool CSSValue::operator==(const CSSValue& other) const {
if (class_type_ == other.class_type_) {
switch (GetClassType()) {
case kBasicShapeCircleClass:
return CompareCSSValues<CSSBasicShapeCircleValue>(*this, other);
case kBasicShapeEllipseClass:
return CompareCSSValues<CSSBasicShapeEllipseValue>(*this, other);
case kBasicShapePolygonClass:
return CompareCSSValues<CSSBasicShapePolygonValue>(*this, other);
case kBasicShapeInsetClass:
return CompareCSSValues<CSSBasicShapeInsetValue>(*this, other);
case kBorderImageSliceClass:
return CompareCSSValues<CSSBorderImageSliceValue>(*this, other);
case kColorClass:
return CompareCSSValues<CSSColorValue>(*this, other);
case kCounterClass:
return CompareCSSValues<CSSCounterValue>(*this, other);
case kCursorImageClass:
return CompareCSSValues<CSSCursorImageValue>(*this, other);
case kFontFaceSrcClass:
return CompareCSSValues<CSSFontFaceSrcValue>(*this, other);
case kFontFamilyClass:
return CompareCSSValues<CSSFontFamilyValue>(*this, other);
case kFontFeatureClass:
return CompareCSSValues<cssvalue::CSSFontFeatureValue>(*this, other);
case kFontStyleRangeClass:
return CompareCSSValues<CSSFontStyleRangeValue>(*this, other);
case kFontVariationClass:
return CompareCSSValues<CSSFontVariationValue>(*this, other);
case kFunctionClass:
return CompareCSSValues<CSSFunctionValue>(*this, other);
case kLinearGradientClass:
return CompareCSSValues<CSSLinearGradientValue>(*this, other);
case kRadialGradientClass:
return CompareCSSValues<CSSRadialGradientValue>(*this, other);
case kConicGradientClass:
return CompareCSSValues<CSSConicGradientValue>(*this, other);
case kCrossfadeClass:
return CompareCSSValues<CSSCrossfadeValue>(*this, other);
case kPaintClass:
return CompareCSSValues<CSSPaintValue>(*this, other);
case kCustomIdentClass:
return CompareCSSValues<CSSCustomIdentValue>(*this, other);
case kImageClass:
return CompareCSSValues<CSSImageValue>(*this, other);
case kInheritedClass:
return CompareCSSValues<CSSInheritedValue>(*this, other);
case kInitialClass:
return CompareCSSValues<CSSInitialValue>(*this, other);
case kUnsetClass:
return CompareCSSValues<CSSUnsetValue>(*this, other);
case kGridAutoRepeatClass:
return CompareCSSValues<CSSGridAutoRepeatValue>(*this, other);
case kGridLineNamesClass:
return CompareCSSValues<CSSGridLineNamesValue>(*this, other);
case kGridTemplateAreasClass:
return CompareCSSValues<CSSGridTemplateAreasValue>(*this, other);
case kPathClass:
return CompareCSSValues<CSSPathValue>(*this, other);
case kPrimitiveClass:
return CompareCSSValues<CSSPrimitiveValue>(*this, other);
case kRayClass:
return CompareCSSValues<CSSRayValue>(*this, other);
case kIdentifierClass:
return CompareCSSValues<CSSIdentifierValue>(*this, other);
case kQuadClass:
return CompareCSSValues<CSSQuadValue>(*this, other);
case kReflectClass:
return CompareCSSValues<CSSReflectValue>(*this, other);
case kShadowClass:
return CompareCSSValues<CSSShadowValue>(*this, other);
case kStringClass:
return CompareCSSValues<CSSStringValue>(*this, other);
case kCubicBezierTimingFunctionClass:
return CompareCSSValues<CSSCubicBezierTimingFunctionValue>(*this,
other);
case kStepsTimingFunctionClass:
return CompareCSSValues<CSSStepsTimingFunctionValue>(*this, other);
case kFramesTimingFunctionClass:
return CompareCSSValues<CSSFramesTimingFunctionValue>(*this, other);
case kUnicodeRangeClass:
return CompareCSSValues<CSSUnicodeRangeValue>(*this, other);
case kURIClass:
return CompareCSSValues<CSSURIValue>(*this, other);
case kValueListClass:
return CompareCSSValues<CSSValueList>(*this, other);
case kValuePairClass:
return CompareCSSValues<CSSValuePair>(*this, other);
case kImageSetClass:
return CompareCSSValues<CSSImageSetValue>(*this, other);
case kCSSContentDistributionClass:
return CompareCSSValues<CSSContentDistributionValue>(*this, other);
case kCustomPropertyDeclarationClass:
return CompareCSSValues<CSSCustomPropertyDeclaration>(*this, other);
case kVariableReferenceClass:
return CompareCSSValues<CSSVariableReferenceValue>(*this, other);
case kPendingSubstitutionValueClass:
return CompareCSSValues<CSSPendingSubstitutionValue>(*this, other);
}
NOTREACHED();
return false;
}
return false;
}
String CSSValue::CssText() const {
switch (GetClassType()) {
case kBasicShapeCircleClass:
return ToCSSBasicShapeCircleValue(this)->CustomCSSText();
case kBasicShapeEllipseClass:
return ToCSSBasicShapeEllipseValue(this)->CustomCSSText();
case kBasicShapePolygonClass:
return ToCSSBasicShapePolygonValue(this)->CustomCSSText();
case kBasicShapeInsetClass:
return ToCSSBasicShapeInsetValue(this)->CustomCSSText();
case kBorderImageSliceClass:
return ToCSSBorderImageSliceValue(this)->CustomCSSText();
case kColorClass:
return ToCSSColorValue(this)->CustomCSSText();
case kCounterClass:
return ToCSSCounterValue(this)->CustomCSSText();
case kCursorImageClass:
return ToCSSCursorImageValue(this)->CustomCSSText();
case kFontFaceSrcClass:
return ToCSSFontFaceSrcValue(this)->CustomCSSText();
case kFontFamilyClass:
return ToCSSFontFamilyValue(this)->CustomCSSText();
case kFontFeatureClass:
return ToCSSFontFeatureValue(this)->CustomCSSText();
case kFontStyleRangeClass:
return ToCSSFontStyleRangeValue(this)->CustomCSSText();
case kFontVariationClass:
return ToCSSFontVariationValue(this)->CustomCSSText();
case kFunctionClass:
return ToCSSFunctionValue(this)->CustomCSSText();
case kLinearGradientClass:
return ToCSSLinearGradientValue(this)->CustomCSSText();
case kRadialGradientClass:
return ToCSSRadialGradientValue(this)->CustomCSSText();
case kConicGradientClass:
return ToCSSConicGradientValue(this)->CustomCSSText();
case kCrossfadeClass:
return ToCSSCrossfadeValue(this)->CustomCSSText();
case kPaintClass:
return ToCSSPaintValue(this)->CustomCSSText();
case kCustomIdentClass:
return ToCSSCustomIdentValue(this)->CustomCSSText();
case kImageClass:
return ToCSSImageValue(this)->CustomCSSText();
case kInheritedClass:
return ToCSSInheritedValue(this)->CustomCSSText();
case kUnsetClass:
return ToCSSUnsetValue(this)->CustomCSSText();
case kInitialClass:
return ToCSSInitialValue(this)->CustomCSSText();
case kGridAutoRepeatClass:
return ToCSSGridAutoRepeatValue(this)->CustomCSSText();
case kGridLineNamesClass:
return ToCSSGridLineNamesValue(this)->CustomCSSText();
case kGridTemplateAreasClass:
return ToCSSGridTemplateAreasValue(this)->CustomCSSText();
case kPathClass:
return ToCSSPathValue(this)->CustomCSSText();
case kPrimitiveClass:
return ToCSSPrimitiveValue(this)->CustomCSSText();
case kRayClass:
return ToCSSRayValue(this)->CustomCSSText();
case kIdentifierClass:
return ToCSSIdentifierValue(this)->CustomCSSText();
case kQuadClass:
return ToCSSQuadValue(this)->CustomCSSText();
case kReflectClass:
return ToCSSReflectValue(this)->CustomCSSText();
case kShadowClass:
return ToCSSShadowValue(this)->CustomCSSText();
case kStringClass:
return ToCSSStringValue(this)->CustomCSSText();
case kCubicBezierTimingFunctionClass:
return ToCSSCubicBezierTimingFunctionValue(this)->CustomCSSText();
case kStepsTimingFunctionClass:
return ToCSSStepsTimingFunctionValue(this)->CustomCSSText();
case kFramesTimingFunctionClass:
return ToCSSFramesTimingFunctionValue(this)->CustomCSSText();
case kUnicodeRangeClass:
return ToCSSUnicodeRangeValue(this)->CustomCSSText();
case kURIClass:
return ToCSSURIValue(this)->CustomCSSText();
case kValuePairClass:
return ToCSSValuePair(this)->CustomCSSText();
case kValueListClass:
return ToCSSValueList(this)->CustomCSSText();
case kImageSetClass:
return ToCSSImageSetValue(this)->CustomCSSText();
case kCSSContentDistributionClass:
return ToCSSContentDistributionValue(this)->CustomCSSText();
case kVariableReferenceClass:
return ToCSSVariableReferenceValue(this)->CustomCSSText();
case kCustomPropertyDeclarationClass:
return ToCSSCustomPropertyDeclaration(this)->CustomCSSText();
case kPendingSubstitutionValueClass:
return ToCSSPendingSubstitutionValue(this)->CustomCSSText();
}
NOTREACHED();
return String();
}
void CSSValue::FinalizeGarbageCollectedObject() {
switch (GetClassType()) {
case kBasicShapeCircleClass:
ToCSSBasicShapeCircleValue(this)->~CSSBasicShapeCircleValue();
return;
case kBasicShapeEllipseClass:
ToCSSBasicShapeEllipseValue(this)->~CSSBasicShapeEllipseValue();
return;
case kBasicShapePolygonClass:
ToCSSBasicShapePolygonValue(this)->~CSSBasicShapePolygonValue();
return;
case kBasicShapeInsetClass:
ToCSSBasicShapeInsetValue(this)->~CSSBasicShapeInsetValue();
return;
case kBorderImageSliceClass:
ToCSSBorderImageSliceValue(this)->~CSSBorderImageSliceValue();
return;
case kColorClass:
ToCSSColorValue(this)->~CSSColorValue();
return;
case kCounterClass:
ToCSSCounterValue(this)->~CSSCounterValue();
return;
case kCursorImageClass:
ToCSSCursorImageValue(this)->~CSSCursorImageValue();
return;
case kFontFaceSrcClass:
ToCSSFontFaceSrcValue(this)->~CSSFontFaceSrcValue();
return;
case kFontFamilyClass:
ToCSSFontFamilyValue(this)->~CSSFontFamilyValue();
return;
case kFontFeatureClass:
ToCSSFontFeatureValue(this)->~CSSFontFeatureValue();
return;
case kFontStyleRangeClass:
ToCSSFontStyleRangeValue(this)->~CSSFontStyleRangeValue();
return;
case kFontVariationClass:
ToCSSFontVariationValue(this)->~CSSFontVariationValue();
return;
case kFunctionClass:
ToCSSFunctionValue(this)->~CSSFunctionValue();
return;
case kLinearGradientClass:
ToCSSLinearGradientValue(this)->~CSSLinearGradientValue();
return;
case kRadialGradientClass:
ToCSSRadialGradientValue(this)->~CSSRadialGradientValue();
return;
case kConicGradientClass:
ToCSSConicGradientValue(this)->~CSSConicGradientValue();
return;
case kCrossfadeClass:
ToCSSCrossfadeValue(this)->~CSSCrossfadeValue();
return;
case kPaintClass:
ToCSSPaintValue(this)->~CSSPaintValue();
return;
case kCustomIdentClass:
ToCSSCustomIdentValue(this)->~CSSCustomIdentValue();
return;
case kImageClass:
ToCSSImageValue(this)->~CSSImageValue();
return;
case kInheritedClass:
ToCSSInheritedValue(this)->~CSSInheritedValue();
return;
case kInitialClass:
ToCSSInitialValue(this)->~CSSInitialValue();
return;
case kUnsetClass:
ToCSSUnsetValue(this)->~CSSUnsetValue();
return;
case kGridAutoRepeatClass:
ToCSSGridAutoRepeatValue(this)->~CSSGridAutoRepeatValue();
return;
case kGridLineNamesClass:
ToCSSGridLineNamesValue(this)->~CSSGridLineNamesValue();
return;
case kGridTemplateAreasClass:
ToCSSGridTemplateAreasValue(this)->~CSSGridTemplateAreasValue();
return;
case kPathClass:
ToCSSPathValue(this)->~CSSPathValue();
return;
case kPrimitiveClass:
ToCSSPrimitiveValue(this)->~CSSPrimitiveValue();
return;
case kRayClass:
ToCSSRayValue(this)->~CSSRayValue();
return;
case kIdentifierClass:
ToCSSIdentifierValue(this)->~CSSIdentifierValue();
return;
case kQuadClass:
ToCSSQuadValue(this)->~CSSQuadValue();
return;
case kReflectClass:
ToCSSReflectValue(this)->~CSSReflectValue();
return;
case kShadowClass:
ToCSSShadowValue(this)->~CSSShadowValue();
return;
case kStringClass:
ToCSSStringValue(this)->~CSSStringValue();
return;
case kCubicBezierTimingFunctionClass:
ToCSSCubicBezierTimingFunctionValue(this)
->~CSSCubicBezierTimingFunctionValue();
return;
case kStepsTimingFunctionClass:
ToCSSStepsTimingFunctionValue(this)->~CSSStepsTimingFunctionValue();
return;
case kFramesTimingFunctionClass:
ToCSSFramesTimingFunctionValue(this)->~CSSFramesTimingFunctionValue();
return;
case kUnicodeRangeClass:
ToCSSUnicodeRangeValue(this)->~CSSUnicodeRangeValue();
return;
case kURIClass:
ToCSSURIValue(this)->~CSSURIValue();
return;
case kValueListClass:
ToCSSValueList(this)->~CSSValueList();
return;
case kValuePairClass:
ToCSSValuePair(this)->~CSSValuePair();
return;
case kImageSetClass:
ToCSSImageSetValue(this)->~CSSImageSetValue();
return;
case kCSSContentDistributionClass:
ToCSSContentDistributionValue(this)->~CSSContentDistributionValue();
return;
case kVariableReferenceClass:
ToCSSVariableReferenceValue(this)->~CSSVariableReferenceValue();
return;
case kCustomPropertyDeclarationClass:
ToCSSCustomPropertyDeclaration(this)->~CSSCustomPropertyDeclaration();
return;
case kPendingSubstitutionValueClass:
ToCSSPendingSubstitutionValue(this)->~CSSPendingSubstitutionValue();
return;
}
NOTREACHED();
}
void CSSValue::Trace(blink::Visitor* visitor) {
switch (GetClassType()) {
case kBasicShapeCircleClass:
ToCSSBasicShapeCircleValue(this)->TraceAfterDispatch(visitor);
return;
case kBasicShapeEllipseClass:
ToCSSBasicShapeEllipseValue(this)->TraceAfterDispatch(visitor);
return;
case kBasicShapePolygonClass:
ToCSSBasicShapePolygonValue(this)->TraceAfterDispatch(visitor);
return;
case kBasicShapeInsetClass:
ToCSSBasicShapeInsetValue(this)->TraceAfterDispatch(visitor);
return;
case kBorderImageSliceClass:
ToCSSBorderImageSliceValue(this)->TraceAfterDispatch(visitor);
return;
case kColorClass:
ToCSSColorValue(this)->TraceAfterDispatch(visitor);
return;
case kCounterClass:
ToCSSCounterValue(this)->TraceAfterDispatch(visitor);
return;
case kCursorImageClass:
ToCSSCursorImageValue(this)->TraceAfterDispatch(visitor);
return;
case kFontFaceSrcClass:
ToCSSFontFaceSrcValue(this)->TraceAfterDispatch(visitor);
return;
case kFontFamilyClass:
ToCSSFontFamilyValue(this)->TraceAfterDispatch(visitor);
return;
case kFontFeatureClass:
ToCSSFontFeatureValue(this)->TraceAfterDispatch(visitor);
return;
case kFontStyleRangeClass:
ToCSSFontStyleRangeValue(this)->TraceAfterDispatch(visitor);
return;
case kFontVariationClass:
ToCSSFontVariationValue(this)->TraceAfterDispatch(visitor);
return;
case kFunctionClass:
ToCSSFunctionValue(this)->TraceAfterDispatch(visitor);
return;
case kLinearGradientClass:
ToCSSLinearGradientValue(this)->TraceAfterDispatch(visitor);
return;
case kRadialGradientClass:
ToCSSRadialGradientValue(this)->TraceAfterDispatch(visitor);
return;
case kConicGradientClass:
ToCSSConicGradientValue(this)->TraceAfterDispatch(visitor);
return;
case kCrossfadeClass:
ToCSSCrossfadeValue(this)->TraceAfterDispatch(visitor);
return;
case kPaintClass:
ToCSSPaintValue(this)->TraceAfterDispatch(visitor);
return;
case kCustomIdentClass:
ToCSSCustomIdentValue(this)->TraceAfterDispatch(visitor);
return;
case kImageClass:
ToCSSImageValue(this)->TraceAfterDispatch(visitor);
return;
case kInheritedClass:
ToCSSInheritedValue(this)->TraceAfterDispatch(visitor);
return;
case kInitialClass:
ToCSSInitialValue(this)->TraceAfterDispatch(visitor);
return;
case kUnsetClass:
ToCSSUnsetValue(this)->TraceAfterDispatch(visitor);
return;
case kGridAutoRepeatClass:
ToCSSGridAutoRepeatValue(this)->TraceAfterDispatch(visitor);
return;
case kGridLineNamesClass:
ToCSSGridLineNamesValue(this)->TraceAfterDispatch(visitor);
return;
case kGridTemplateAreasClass:
ToCSSGridTemplateAreasValue(this)->TraceAfterDispatch(visitor);
return;
case kPathClass:
ToCSSPathValue(this)->TraceAfterDispatch(visitor);
return;
case kPrimitiveClass:
ToCSSPrimitiveValue(this)->TraceAfterDispatch(visitor);
return;
case kRayClass:
ToCSSRayValue(this)->TraceAfterDispatch(visitor);
return;
case kIdentifierClass:
ToCSSIdentifierValue(this)->TraceAfterDispatch(visitor);
return;
case kQuadClass:
ToCSSQuadValue(this)->TraceAfterDispatch(visitor);
return;
case kReflectClass:
ToCSSReflectValue(this)->TraceAfterDispatch(visitor);
return;
case kShadowClass:
ToCSSShadowValue(this)->TraceAfterDispatch(visitor);
return;
case kStringClass:
ToCSSStringValue(this)->TraceAfterDispatch(visitor);
return;
case kCubicBezierTimingFunctionClass:
ToCSSCubicBezierTimingFunctionValue(this)->TraceAfterDispatch(visitor);
return;
case kStepsTimingFunctionClass:
ToCSSStepsTimingFunctionValue(this)->TraceAfterDispatch(visitor);
return;
case kFramesTimingFunctionClass:
ToCSSFramesTimingFunctionValue(this)->TraceAfterDispatch(visitor);
return;
case kUnicodeRangeClass:
ToCSSUnicodeRangeValue(this)->TraceAfterDispatch(visitor);
return;
case kURIClass:
ToCSSURIValue(this)->TraceAfterDispatch(visitor);
return;
case kValueListClass:
ToCSSValueList(this)->TraceAfterDispatch(visitor);
return;
case kValuePairClass:
ToCSSValuePair(this)->TraceAfterDispatch(visitor);
return;
case kImageSetClass:
ToCSSImageSetValue(this)->TraceAfterDispatch(visitor);
return;
case kCSSContentDistributionClass:
ToCSSContentDistributionValue(this)->TraceAfterDispatch(visitor);
return;
case kVariableReferenceClass:
ToCSSVariableReferenceValue(this)->TraceAfterDispatch(visitor);
return;
case kCustomPropertyDeclarationClass:
ToCSSCustomPropertyDeclaration(this)->TraceAfterDispatch(visitor);
return;
case kPendingSubstitutionValueClass:
ToCSSPendingSubstitutionValue(this)->TraceAfterDispatch(visitor);
return;
}
NOTREACHED();
}
} // namespace blink