From 6882a04fb36642862b11efe514251d32070c3d65 Mon Sep 17 00:00:00 2001 From: Konstantin Tokarev Date: Thu, 25 Aug 2016 19:20:41 +0300 Subject: Imported QtWebKit TP3 (git b57bc6801f1876c3220d5a4bfea33d620d477443) Change-Id: I3b1d8a2808782c9f34d50240000e20cb38d3680f Reviewed-by: Konstantin Tokarev --- Source/WebCore/css/CSSValue.cpp | 422 +++++++++++++++++++++------------------- 1 file changed, 218 insertions(+), 204 deletions(-) (limited to 'Source/WebCore/css/CSSValue.cpp') diff --git a/Source/WebCore/css/CSSValue.cpp b/Source/WebCore/css/CSSValue.cpp index 74fa4fc6a..229820551 100644 --- a/Source/WebCore/css/CSSValue.cpp +++ b/Source/WebCore/css/CSSValue.cpp @@ -1,5 +1,6 @@ /* * Copyright (C) 2011 Andreas Kling (kling@webkit.org) + * Copyright (C) 2013 Adobe Systems Incorporated. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -10,10 +11,10 @@ * 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 + * THIS SOFTWARE IS PROVIDED BY APPLE 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 + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE 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 @@ -27,43 +28,45 @@ #include "config.h" #include "CSSValue.h" +#include "CSSAnimationTriggerScrollValue.h" #include "CSSAspectRatioValue.h" #include "CSSBorderImageSliceValue.h" #include "CSSCalculationValue.h" #include "CSSCanvasValue.h" +#include "CSSContentDistributionValue.h" #include "CSSCrossfadeValue.h" #include "CSSCursorImageValue.h" +#include "CSSCustomPropertyValue.h" +#include "CSSFilterImageValue.h" #include "CSSFontFaceSrcValue.h" +#include "CSSFontFeatureValue.h" +#include "CSSFontValue.h" #include "CSSFunctionValue.h" #include "CSSGradientValue.h" -#include "CSSImageGeneratorValue.h" #include "CSSImageSetValue.h" #include "CSSImageValue.h" #include "CSSInheritedValue.h" #include "CSSInitialValue.h" #include "CSSLineBoxContainValue.h" +#include "CSSNamedImageValue.h" #include "CSSPrimitiveValue.h" +#include "CSSProperty.h" #include "CSSReflectValue.h" +#include "CSSShadowValue.h" #include "CSSTimingFunctionValue.h" #include "CSSUnicodeRangeValue.h" +#include "CSSUnsetValue.h" #include "CSSValueList.h" -#if ENABLE(CSS_VARIABLES) +#include "CSSVariableDependentValue.h" #include "CSSVariableValue.h" -#endif -#include "FontValue.h" -#include "FontFeatureValue.h" -#include "ShadowValue.h" #include "SVGColor.h" #include "SVGPaint.h" -#include "WebKitCSSArrayFunctionValue.h" #include "WebKitCSSFilterValue.h" -#include "WebKitCSSMatFunctionValue.h" -#include "WebKitCSSMixFunctionValue.h" -#include "WebKitCSSShaderValue.h" #include "WebKitCSSTransformValue.h" -#if ENABLE(SVG) -#include "WebKitCSSSVGDocumentValue.h" +#if ENABLE(CSS_GRID_LAYOUT) +#include "CSSGridLineNamesValue.h" +#include "CSSGridTemplateAreasValue.h" #endif namespace WebCore { @@ -76,7 +79,10 @@ COMPILE_ASSERT(sizeof(CSSValue) == sizeof(SameSizeAsCSSValue), CSS_value_should_ class TextCloneCSSValue : public CSSValue { public: - static PassRefPtr create(ClassType classType, const String& text) { return adoptRef(new TextCloneCSSValue(classType, text)); } + static Ref create(ClassType classType, const String& text) + { + return adoptRef(*new TextCloneCSSValue(classType, text)); + } String cssText() const { return m_cssText; } @@ -93,7 +99,7 @@ private: bool CSSValue::isImplicitInitialValue() const { - return m_classType == InitialClass && static_cast(this)->isImplicit(); + return m_classType == InitialClass && downcast(*this).isImplicit(); } CSSValue::Type CSSValue::cssValueType() const @@ -106,40 +112,46 @@ CSSValue::Type CSSValue::cssValueType() const return CSS_VALUE_LIST; if (isInitialValue()) return CSS_INITIAL; + if (isUnsetValue()) + return CSS_UNSET; + if (isRevertValue()) + return CSS_REVERT; return CSS_CUSTOM; } -void CSSValue::addSubresourceStyleURLs(ListHashSet& urls, const StyleSheetContents* styleSheet) const +void CSSValue::addSubresourceStyleURLs(ListHashSet& urls, const StyleSheetContents* styleSheet) const { // This should get called for internal instances only. ASSERT(!isCSSOMSafe()); - if (isPrimitiveValue()) - static_cast(this)->addSubresourceStyleURLs(urls, styleSheet); - else if (isValueList()) - static_cast(this)->addSubresourceStyleURLs(urls, styleSheet); - else if (classType() == FontFaceSrcClass) - static_cast(this)->addSubresourceStyleURLs(urls, styleSheet); - else if (classType() == ReflectClass) - static_cast(this)->addSubresourceStyleURLs(urls, styleSheet); + if (is(*this)) + downcast(*this).addSubresourceStyleURLs(urls, styleSheet); + else if (is(*this)) + downcast(*this).addSubresourceStyleURLs(urls, styleSheet); + else if (is(*this)) + downcast(*this).addSubresourceStyleURLs(urls, styleSheet); + else if (is(*this)) + downcast(*this).addSubresourceStyleURLs(urls, styleSheet); } -bool CSSValue::hasFailedOrCanceledSubresources() const +bool CSSValue::traverseSubresources(const std::function& handler) const { // This should get called for internal instances only. ASSERT(!isCSSOMSafe()); - if (isValueList()) - return static_cast(this)->hasFailedOrCanceledSubresources(); - if (classType() == FontFaceSrcClass) - return static_cast(this)->hasFailedOrCanceledSubresources(); - if (classType() == ImageClass) - return static_cast(this)->hasFailedOrCanceledSubresources(); - if (classType() == CrossfadeClass) - return static_cast(this)->hasFailedOrCanceledSubresources(); + if (is(*this)) + return downcast(*this).traverseSubresources(handler); + if (is(*this)) + return downcast(*this).traverseSubresources(handler); + if (is(*this)) + return downcast(*this).traverseSubresources(handler); + if (is(*this)) + return downcast(*this).traverseSubresources(handler); + if (is(*this)) + return downcast(*this).traverseSubresources(handler); #if ENABLE(CSS_IMAGE_SET) - if (classType() == ImageSetClass) - return static_cast(this)->hasFailedOrCanceledSubresources(); + if (is(*this)) + return downcast(*this).traverseSubresources(handler); #endif return false; } @@ -165,14 +177,18 @@ bool CSSValue::equals(const CSSValue& other) const return compareCSSValues(*this, other); case CanvasClass: return compareCSSValues(*this, other); + case NamedImageClass: + return compareCSSValues(*this, other); case CursorImageClass: return compareCSSValues(*this, other); + case FilterImageClass: + return compareCSSValues(*this, other); case FontClass: - return compareCSSValues(*this, other); + return compareCSSValues(*this, other); case FontFaceSrcClass: return compareCSSValues(*this, other); case FontFeatureClass: - return compareCSSValues(*this, other); + return compareCSSValues(*this, other); case FunctionClass: return compareCSSValues(*this, other); case LinearGradientClass: @@ -187,14 +203,22 @@ bool CSSValue::equals(const CSSValue& other) const return compareCSSValues(*this, other); case InitialClass: return compareCSSValues(*this, other); + case UnsetClass: + return compareCSSValues(*this, other); + case RevertClass: + return compareCSSValues(*this, other); +#if ENABLE(CSS_GRID_LAYOUT) + case GridLineNamesClass: + return compareCSSValues(*this, other); + case GridTemplateAreasClass: + return compareCSSValues(*this, other); +#endif case PrimitiveClass: return compareCSSValues(*this, other); case ReflectClass: return compareCSSValues(*this, other); case ShadowClass: - return compareCSSValues(*this, other); - case LinearTimingFunctionClass: - return compareCSSValues(*this, other); + return compareCSSValues(*this, other); case CubicBezierTimingFunctionClass: return compareCSSValues(*this, other); case StepsTimingFunctionClass: @@ -213,39 +237,31 @@ bool CSSValue::equals(const CSSValue& other) const case ImageSetClass: return compareCSSValues(*this, other); #endif -#if ENABLE(CSS_FILTERS) case WebKitCSSFilterClass: return compareCSSValues(*this, other); -#if ENABLE(CSS_SHADERS) - case WebKitCSSArrayFunctionValueClass: - return compareCSSValues(*this, other); - case WebKitCSSMatFunctionValueClass: - return compareCSSValues(*this, other); - case WebKitCSSMixFunctionValueClass: - return compareCSSValues(*this, other); - case WebKitCSSShaderClass: - return compareCSSValues(*this, other); -#endif -#endif -#if ENABLE(CSS_VARIABLES) - case VariableClass: - return compareCSSValues(*this, other); -#endif -#if ENABLE(SVG) case SVGColorClass: return compareCSSValues(*this, other); case SVGPaintClass: return compareCSSValues(*this, other); - case WebKitCSSSVGDocumentClass: - return compareCSSValues(*this, other); +#if ENABLE(CSS_ANIMATIONS_LEVEL_2) + case AnimationTriggerScrollClass: + return compareCSSValues(*this, other); #endif + case CSSContentDistributionClass: + return compareCSSValues(*this, other); + case CustomPropertyClass: + return compareCSSValues(*this, other); + case VariableDependentClass: + return compareCSSValues(*this, other); + case VariableClass: + return compareCSSValues(*this, other); default: ASSERT_NOT_REACHED(); return false; } - } else if (m_classType == ValueListClass && other.m_classType != ValueListClass) - return static_cast(this)->equals(other); - else if (m_classType != ValueListClass && other.m_classType == ValueListClass) + } else if (is(*this) && !is(other)) + return downcast(*this).equals(other); + else if (!is(*this) && is(other)) return static_cast(other).equals(*this); return false; } @@ -260,108 +276,95 @@ String CSSValue::cssText() const switch (classType()) { case AspectRatioClass: - return static_cast(this)->customCssText(); + return downcast(*this).customCSSText(); case BorderImageSliceClass: - return static_cast(this)->customCssText(); + return downcast(*this).customCSSText(); case CanvasClass: - return static_cast(this)->customCssText(); + return downcast(*this).customCSSText(); + case NamedImageClass: + return downcast(*this).customCSSText(); case CursorImageClass: - return static_cast(this)->customCssText(); + return downcast(*this).customCSSText(); + case FilterImageClass: + return downcast(*this).customCSSText(); case FontClass: - return static_cast(this)->customCssText(); + return downcast(*this).customCSSText(); case FontFaceSrcClass: - return static_cast(this)->customCssText(); + return downcast(*this).customCSSText(); case FontFeatureClass: - return static_cast(this)->customCssText(); + return downcast(*this).customCSSText(); case FunctionClass: - return static_cast(this)->customCssText(); + return downcast(*this).customCSSText(); case LinearGradientClass: - return static_cast(this)->customCssText(); + return downcast(*this).customCSSText(); case RadialGradientClass: - return static_cast(this)->customCssText(); + return downcast(*this).customCSSText(); case CrossfadeClass: - return static_cast(this)->customCssText(); + return downcast(*this).customCSSText(); case ImageClass: - return static_cast(this)->customCssText(); + return downcast(*this).customCSSText(); case InheritedClass: - return static_cast(this)->customCssText(); + return downcast(*this).customCSSText(); case InitialClass: - return static_cast(this)->customCssText(); + return downcast(*this).customCSSText(); + case UnsetClass: + return downcast(*this).customCSSText(); + case RevertClass: + return downcast(*this).customCSSText(); +#if ENABLE(CSS_GRID_LAYOUT) + case GridLineNamesClass: + return downcast(*this).customCSSText(); + case GridTemplateAreasClass: + return downcast(*this).customCSSText(); +#endif case PrimitiveClass: - return static_cast(this)->customCssText(); + return downcast(*this).customCSSText(); case ReflectClass: - return static_cast(this)->customCssText(); + return downcast(*this).customCSSText(); case ShadowClass: - return static_cast(this)->customCssText(); - case LinearTimingFunctionClass: - return static_cast(this)->customCssText(); + return downcast(*this).customCSSText(); case CubicBezierTimingFunctionClass: - return static_cast(this)->customCssText(); + return downcast(*this).customCSSText(); case StepsTimingFunctionClass: - return static_cast(this)->customCssText(); + return downcast(*this).customCSSText(); case UnicodeRangeClass: - return static_cast(this)->customCssText(); + return downcast(*this).customCSSText(); case ValueListClass: - return static_cast(this)->customCssText(); + return downcast(*this).customCSSText(); case WebKitCSSTransformClass: - return static_cast(this)->customCssText(); + return downcast(*this).customCSSText(); case LineBoxContainClass: - return static_cast(this)->customCssText(); + return downcast(*this).customCSSText(); case CalculationClass: - return static_cast(this)->customCssText(); + return downcast(*this).customCSSText(); #if ENABLE(CSS_IMAGE_SET) case ImageSetClass: - return static_cast(this)->customCssText(); + return downcast(*this).customCSSText(); #endif -#if ENABLE(CSS_FILTERS) case WebKitCSSFilterClass: - return static_cast(this)->customCssText(); -#if ENABLE(CSS_SHADERS) - case WebKitCSSArrayFunctionValueClass: - return static_cast(this)->customCssText(); - case WebKitCSSMatFunctionValueClass: - return static_cast(this)->customCssText(); - case WebKitCSSMixFunctionValueClass: - return static_cast(this)->customCssText(); - case WebKitCSSShaderClass: - return static_cast(this)->customCssText(); -#endif -#endif -#if ENABLE(CSS_VARIABLES) - case VariableClass: - return static_cast(this)->value(); -#endif -#if ENABLE(SVG) + return downcast(*this).customCSSText(); case SVGColorClass: - return static_cast(this)->customCssText(); + return downcast(*this).customCSSText(); case SVGPaintClass: - return static_cast(this)->customCssText(); - case WebKitCSSSVGDocumentClass: - return static_cast(this)->customCssText(); + return downcast(*this).customCSSText(); +#if ENABLE(CSS_ANIMATIONS_LEVEL_2) + case AnimationTriggerScrollClass: + return downcast(*this).customCSSText(); #endif + case CSSContentDistributionClass: + return downcast(*this).customCSSText(); + case CustomPropertyClass: + return downcast(*this).customCSSText(); + case VariableDependentClass: + return downcast(*this).customCSSText(); + case VariableClass: + return downcast(*this).customCSSText(); } + ASSERT_NOT_REACHED(); return String(); } -#if ENABLE(CSS_VARIABLES) -String CSSValue::serializeResolvingVariables(const HashMap& variables) const -{ - switch (classType()) { - case PrimitiveClass: - return static_cast(this)->customSerializeResolvingVariables(variables); - case ReflectClass: - return static_cast(this)->customSerializeResolvingVariables(variables); - case ValueListClass: - return static_cast(this)->customSerializeResolvingVariables(variables); - case WebKitCSSTransformClass: - return static_cast(this)->customSerializeResolvingVariables(variables); - default: - return cssText(); - } -} -#endif - void CSSValue::destroy() { if (m_isTextClone) { @@ -373,162 +376,173 @@ void CSSValue::destroy() switch (classType()) { case AspectRatioClass: - delete static_cast(this); + delete downcast(this); return; case BorderImageSliceClass: - delete static_cast(this); + delete downcast(this); return; case CanvasClass: - delete static_cast(this); + delete downcast(this); + return; + case NamedImageClass: + delete downcast(this); return; case CursorImageClass: - delete static_cast(this); + delete downcast(this); return; case FontClass: - delete static_cast(this); + delete downcast(this); return; case FontFaceSrcClass: - delete static_cast(this); + delete downcast(this); return; case FontFeatureClass: - delete static_cast(this); + delete downcast(this); return; case FunctionClass: - delete static_cast(this); + delete downcast(this); return; case LinearGradientClass: - delete static_cast(this); + delete downcast(this); return; case RadialGradientClass: - delete static_cast(this); + delete downcast(this); return; case CrossfadeClass: - delete static_cast(this); + delete downcast(this); return; case ImageClass: - delete static_cast(this); + delete downcast(this); return; case InheritedClass: - delete static_cast(this); + delete downcast(this); return; case InitialClass: - delete static_cast(this); + delete downcast(this); + return; + case UnsetClass: + delete downcast(this); + return; + case RevertClass: + delete downcast(this); + return; +#if ENABLE(CSS_GRID_LAYOUT) + case GridLineNamesClass: + delete downcast(this); return; + case GridTemplateAreasClass: + delete downcast(this); + return; +#endif case PrimitiveClass: - delete static_cast(this); + delete downcast(this); return; case ReflectClass: - delete static_cast(this); + delete downcast(this); return; case ShadowClass: - delete static_cast(this); - return; - case LinearTimingFunctionClass: - delete static_cast(this); + delete downcast(this); return; case CubicBezierTimingFunctionClass: - delete static_cast(this); + delete downcast(this); return; case StepsTimingFunctionClass: - delete static_cast(this); + delete downcast(this); return; case UnicodeRangeClass: - delete static_cast(this); + delete downcast(this); return; case ValueListClass: - delete static_cast(this); + delete downcast(this); return; case WebKitCSSTransformClass: - delete static_cast(this); + delete downcast(this); return; case LineBoxContainClass: - delete static_cast(this); + delete downcast(this); return; case CalculationClass: - delete static_cast(this); + delete downcast(this); return; #if ENABLE(CSS_IMAGE_SET) case ImageSetClass: - delete static_cast(this); + delete downcast(this); return; #endif -#if ENABLE(CSS_FILTERS) - case WebKitCSSFilterClass: - delete static_cast(this); + case FilterImageClass: + delete downcast(this); return; -#if ENABLE(CSS_SHADERS) - case WebKitCSSArrayFunctionValueClass: - delete static_cast(this); + case WebKitCSSFilterClass: + delete downcast(this); return; - case WebKitCSSMatFunctionValueClass: - delete static_cast(this); + case SVGColorClass: + delete downcast(this); return; - case WebKitCSSMixFunctionValueClass: - delete static_cast(this); + case SVGPaintClass: + delete downcast(this); return; - case WebKitCSSShaderClass: - delete static_cast(this); +#if ENABLE(CSS_ANIMATIONS_LEVEL_2) + case AnimationTriggerScrollClass: + delete downcast(this); return; #endif -#endif -#if ENABLE(CSS_VARIABLES) - case VariableClass: - delete static_cast(this); + case CSSContentDistributionClass: + delete downcast(this); return; -#endif -#if ENABLE(SVG) - case SVGColorClass: - delete static_cast(this); + case CustomPropertyClass: + delete downcast(this); return; - case SVGPaintClass: - delete static_cast(this); + case VariableDependentClass: + delete downcast(this); return; - case WebKitCSSSVGDocumentClass: - delete static_cast(this); + case VariableClass: + delete downcast(this); return; -#endif } ASSERT_NOT_REACHED(); } -PassRefPtr CSSValue::cloneForCSSOM() const +RefPtr CSSValue::cloneForCSSOM() const { switch (classType()) { case PrimitiveClass: - return static_cast(this)->cloneForCSSOM(); + return downcast(*this).cloneForCSSOM(); case ValueListClass: - return static_cast(this)->cloneForCSSOM(); + return downcast(*this).cloneForCSSOM(); case ImageClass: case CursorImageClass: - return static_cast(this)->cloneForCSSOM(); -#if ENABLE(CSS_FILTERS) + return downcast(*this).cloneForCSSOM(); case WebKitCSSFilterClass: - return static_cast(this)->cloneForCSSOM(); -#if ENABLE(CSS_SHADERS) - case WebKitCSSArrayFunctionValueClass: - return static_cast(this)->cloneForCSSOM(); - case WebKitCSSMatFunctionValueClass: - return static_cast(this)->cloneForCSSOM(); - case WebKitCSSMixFunctionValueClass: - return static_cast(this)->cloneForCSSOM(); -#endif -#endif + return downcast(*this).cloneForCSSOM(); case WebKitCSSTransformClass: - return static_cast(this)->cloneForCSSOM(); + return downcast(*this).cloneForCSSOM(); #if ENABLE(CSS_IMAGE_SET) case ImageSetClass: - return static_cast(this)->cloneForCSSOM(); + return downcast(*this).cloneForCSSOM(); #endif -#if ENABLE(SVG) case SVGColorClass: - return static_cast(this)->cloneForCSSOM(); + return downcast(*this).cloneForCSSOM(); case SVGPaintClass: - return static_cast(this)->cloneForCSSOM(); -#endif + return downcast(*this).cloneForCSSOM(); default: ASSERT(!isSubtypeExposedToCSSOM()); return TextCloneCSSValue::create(classType(), cssText()); } } +bool CSSValue::isInvalidCustomPropertyValue() const +{ + return isCustomPropertyValue() && downcast(*this).isInvalid(); +} + +bool CSSValue::treatAsInheritedValue(CSSPropertyID propertyID) const +{ + return classType() == InheritedClass || (classType() == UnsetClass && CSSProperty::isInheritedProperty(propertyID)); +} + +bool CSSValue::treatAsInitialValue(CSSPropertyID propertyID) const +{ + return classType() == InitialClass || (classType() == UnsetClass && !CSSProperty::isInheritedProperty(propertyID)); +} + } -- cgit v1.2.1