Title: [193502] branches/safari-601-branch/Source/WebCore

Diff

Modified: branches/safari-601-branch/Source/WebCore/ChangeLog (193501 => 193502)


--- branches/safari-601-branch/Source/WebCore/ChangeLog	2015-12-05 01:47:12 UTC (rev 193501)
+++ branches/safari-601-branch/Source/WebCore/ChangeLog	2015-12-05 01:47:19 UTC (rev 193502)
@@ -1,5 +1,86 @@
 2015-12-04  Matthew Hanson  <matthew_han...@apple.com>
 
+        Merge r190231. rdar://problem/23732363
+
+    2015-09-24  David Hyatt  <hy...@apple.com>
+
+            Keep the already-parsed list of terms in custom property values so that we don't have to re-parse them
+            later when doing variable resolution.
+            https://bugs.webkit.org/show_bug.cgi?id=149544
+
+            Reviewed by Dean Jackson.
+
+            * css/CSSComputedStyleDeclaration.cpp:
+            (WebCore::ComputedStyleExtractor::customPropertyValue):
+            (WebCore::ComputedStyleExtractor::customPropertyText):
+            Add a helper for getting the raw text. More closely parallels how non-custom properties work with the
+            extractor.
+
+            (WebCore::ComputedStyleExtractor::propertyValue):
+            Change propertyValue to use customPropertyText.
+
+            (WebCore::ComputedStyleExtractor::copyPropertiesInSet):
+            Don't copy CSS custom properties into the style declaration. This is just used for things like editing, so
+            we didn't need to be putting the custom properties into this set.
+
+            (WebCore::CSSComputedStyleDeclaration::getPropertyValue):
+            Patched to go straight to the serialized string value.
+
+            (WebCore::ComputedStyleExtractor::customPropertyValue): Deleted.
+            Replaced by customPropertyText.
+
+            * css/CSSComputedStyleDeclaration.h:
+            Rename customPropertyValue to customPropertyText and make it just return a String.
+
+            * css/CSSCustomPropertyValue.h:
+            (WebCore::CSSCustomPropertyValue::create):
+            (WebCore::CSSCustomPropertyValue::customCSSText):
+            (WebCore::CSSCustomPropertyValue::name):
+            (WebCore::CSSCustomPropertyValue::equals):
+            (WebCore::CSSCustomPropertyValue::CSSCustomPropertyValue):
+            (WebCore::CSSCustomPropertyValue::value): Deleted.
+            Changed to hold both a CSSParserValueList, which it adopts from the CSSParser, and a string value that
+            is constructed lazily only if the value is serialized. Now the problematic serialization code will only
+            run if someone uses the CSS OM to trigger a serialization (this should be a rare occurrence, so perf
+            improves with this change).
+
+            * css/CSSGrammar.y.in:
+            Change parsing of custom properties to be identical to regular properties. This refactoring allows
+            us to simply invoke the parser from style declarations as well and makes everything behave more
+            similarly to normal property parsing.
+
+            * css/CSSParser.cpp:
+            (WebCore::CSSParser::parseValue):
+            (WebCore::CSSParser::parseCustomPropertyValue):
+            (WebCore::CSSParser::parseCustomPropertyDeclaration):
+            (WebCore::CSSParser::addCustomPropertyDeclaration): Deleted.
+            * css/CSSParser.h:
+            (WebCore::CSSParser::setCustomPropertyName):
+            We now have a method for parsing custom properties that can be invoked from style declarations. The
+            parser list is now adopted by the CSSCustomPropertyValue.
+
+            * css/CSSParserValues.cpp:
+            (WebCore::CSSParserValueList::toString):
+            Build the string serialization code right into CSSParserValueList.
+
+            * css/CSSParserValues.h:
+            Add a toString() method for serialization.
+
+            * css/StyleProperties.cpp:
+            (WebCore::MutableStyleProperties::setProperty):
+            (WebCore::MutableStyleProperties::setCustomProperty):
+            Changed to use the new CSSParser functions. This makes the code behave almost identically to regular
+            property parsing.
+
+            * css/StyleResolver.cpp:
+            (WebCore::StyleResolver::applyProperty):
+            * rendering/style/RenderStyle.h:
+            * rendering/style/StyleCustomPropertyData.h:
+            Change the mapping on RenderStyle to store the custom CSS values. This way we can get to the original
+            parser lists for each variable when it comes time to do variable resolution.
+
+2015-12-04  Matthew Hanson  <matthew_han...@apple.com>
+
         Merge r190209. rdar://problem/23732363
 
     2015-09-24  David Hyatt  <hy...@apple.com>

Modified: branches/safari-601-branch/Source/WebCore/css/CSSComputedStyleDeclaration.cpp (193501 => 193502)


--- branches/safari-601-branch/Source/WebCore/css/CSSComputedStyleDeclaration.cpp	2015-12-05 01:47:12 UTC (rev 193501)
+++ branches/safari-601-branch/Source/WebCore/css/CSSComputedStyleDeclaration.cpp	2015-12-05 01:47:19 UTC (rev 193502)
@@ -1893,10 +1893,15 @@
     if (!style || !style->hasCustomProperty(propertyName))
         return nullptr;
 
-    String result = style->getCustomPropertyValue(propertyName);
-    return CSSCustomPropertyValue::create(propertyName, result);
+    return style->getCustomPropertyValue(propertyName);
 }
 
+String ComputedStyleExtractor::customPropertyText(const String& propertyName) const
+{
+    RefPtr<CSSValue> propertyValue = this->customPropertyValue(propertyName);
+    return propertyValue ? propertyValue->cssText() : emptyString();
+}
+
 PassRefPtr<CSSValue> ComputedStyleExtractor::propertyValue(CSSPropertyID propertyID, EUpdateLayout updateLayout) const
 {
     Node* styledNode = this->styledNode();
@@ -3386,7 +3391,7 @@
     if (!style)
         return 0;
 
-    const HashMap<AtomicString, String>* customProperties = style->customProperties();
+    const HashMap<AtomicString, RefPtr<CSSValue>>* customProperties = style->customProperties();
     return numComputedProperties + (customProperties ? customProperties->size() : 0);
 }
 
@@ -3495,22 +3500,6 @@
         if (value)
             list.append(CSSProperty(set[i], value.release(), false));
     }
-    
-    auto* styledNode = this->styledNode();
-    if (styledNode) {
-        RefPtr<RenderStyle> style = computeRenderStyleForProperty(styledNode, m_pseudoElementSpecifier, CSSPropertyCustom);
-        if (style) {
-            const auto* customProperties = style->customProperties();
-            if (customProperties) {
-                HashMap<AtomicString, String>::const_iterator end = customProperties->end();
-                for (HashMap<AtomicString, String>::const_iterator it = customProperties->begin(); it != end; ++it) {
-                    RefPtr<CSSCustomPropertyValue> value = CSSCustomPropertyValue::create(it->key, it->value);
-                    list.append(CSSProperty(CSSPropertyCustom, value.release(), false));
-                }
-            }
-        }
-    }
-    
     return MutableStyleProperties::create(list.data(), list.size());
 }
 
@@ -3521,10 +3510,8 @@
 
 PassRefPtr<CSSValue> CSSComputedStyleDeclaration::getPropertyCSSValue(const String& propertyName)
 {
-    if (isCustomPropertyName(propertyName)) {
-        RefPtr<CSSValue> value = ComputedStyleExtractor(m_node, m_allowVisitedStyle, m_pseudoElementSpecifier).customPropertyValue(propertyName);
-        return value ? value->cloneForCSSOM() : nullptr;
-    }
+    if (isCustomPropertyName(propertyName))
+        return ComputedStyleExtractor(m_node, m_allowVisitedStyle, m_pseudoElementSpecifier).customPropertyValue(propertyName);
 
     CSSPropertyID propertyID = cssPropertyID(propertyName);
     if (!propertyID)
@@ -3535,12 +3522,8 @@
 
 String CSSComputedStyleDeclaration::getPropertyValue(const String &propertyName)
 {
-    if (isCustomPropertyName(propertyName)) {
-        RefPtr<CSSValue> value = ComputedStyleExtractor(m_node, m_allowVisitedStyle, m_pseudoElementSpecifier).customPropertyValue(propertyName);
-        if (!value)
-            return String();
-        return value->cssText();
-    }
+    if (isCustomPropertyName(propertyName))
+        return ComputedStyleExtractor(m_node, m_allowVisitedStyle, m_pseudoElementSpecifier).customPropertyText(propertyName);
 
     CSSPropertyID propertyID = cssPropertyID(propertyName);
     if (!propertyID)

Modified: branches/safari-601-branch/Source/WebCore/css/CSSComputedStyleDeclaration.h (193501 => 193502)


--- branches/safari-601-branch/Source/WebCore/css/CSSComputedStyleDeclaration.h	2015-12-05 01:47:12 UTC (rev 193501)
+++ branches/safari-601-branch/Source/WebCore/css/CSSComputedStyleDeclaration.h	2015-12-05 01:47:19 UTC (rev 193502)
@@ -50,6 +50,7 @@
     ComputedStyleExtractor(PassRefPtr<Node>, bool allowVisitedStyle = false, PseudoId = NOPSEUDO);
 
     PassRefPtr<CSSValue> propertyValue(CSSPropertyID, EUpdateLayout = UpdateLayout) const;
+    String customPropertyText(const String& propertyName) const;
     RefPtr<CSSValue> customPropertyValue(const String& propertyName) const;
 
     // Helper methods for HTML editing.

Modified: branches/safari-601-branch/Source/WebCore/css/CSSCustomPropertyValue.h (193501 => 193502)


--- branches/safari-601-branch/Source/WebCore/css/CSSCustomPropertyValue.h	2015-12-05 01:47:12 UTC (rev 193501)
+++ branches/safari-601-branch/Source/WebCore/css/CSSCustomPropertyValue.h	2015-12-05 01:47:19 UTC (rev 193502)
@@ -26,34 +26,47 @@
 #ifndef CSSCustomPropertyValue_h
 #define CSSCustomPropertyValue_h
 
+#include "CSSParserValues.h"
 #include "CSSValue.h"
+#include <wtf/text/WTFString.h>
 
 namespace WebCore {
 
 class CSSCustomPropertyValue : public CSSValue {
 public:
-    static Ref<CSSCustomPropertyValue> create(const AtomicString& name, const String& value)
+    static Ref<CSSCustomPropertyValue> create(const AtomicString& name, std::unique_ptr<CSSParserValueList>& valueList)
     {
-        return adoptRef(*new CSSCustomPropertyValue(name, value));
+        return adoptRef(*new CSSCustomPropertyValue(name, valueList));
     }
     
-    bool equals(const CSSCustomPropertyValue& other) const { return m_name == other.m_name && m_value == other.m_value; }
+    String customCSSText() const
+    {
+        if (!m_serialized) {
+            m_serialized = true;
+            m_stringValue = m_parserValue ? m_parserValue->toString() : "";
+        }
+        return m_stringValue;
+    }
 
-    String customCSSText() const { return value(); }
-
     const AtomicString& name() const { return m_name; }
-    const String& value() const { return m_value; }
     
+    // FIXME: Should arguably implement equals on all of the CSSParserValues, but CSSValue equivalence
+    // is rarely used, so serialization to compare is probably fine.
+    bool equals(const CSSCustomPropertyValue& other) const { return m_name == other.m_name && customCSSText() == other.customCSSText(); }
+
 private:
-    CSSCustomPropertyValue(const AtomicString& name, const String& value)
+    CSSCustomPropertyValue(const AtomicString& name, std::unique_ptr<CSSParserValueList>& valueList)
         : CSSValue(CustomPropertyClass)
         , m_name(name)
-        , m_value(value)
+        , m_parserValue(WTF::move(valueList))
+        , m_serialized(false)
     {
     }
 
     const AtomicString m_name;
-    const String m_value;
+    std::unique_ptr<CSSParserValueList> m_parserValue;
+    mutable String m_stringValue;
+    mutable bool m_serialized;
 };
 
 } // namespace WebCore

Modified: branches/safari-601-branch/Source/WebCore/css/CSSGrammar.y.in (193501 => 193502)


--- branches/safari-601-branch/Source/WebCore/css/CSSGrammar.y.in	2015-12-05 01:47:12 UTC (rev 193501)
+++ branches/safari-601-branch/Source/WebCore/css/CSSGrammar.y.in	2015-12-05 01:47:19 UTC (rev 193502)
@@ -1539,10 +1539,21 @@
 
 declaration:
     CUSTOM_PROPERTY maybe_space ':' maybe_space expr priority {
+        $$ = false;
+        bool isPropertyParsed = false;
         std::unique_ptr<CSSParserValueList> propertyValue($5);
-        parser->addCustomPropertyDeclaration($1, propertyValue.get(), $6);
-        $$ = true;
-        parser->markPropertyEnd($6, true);
+        if (propertyValue) {
+            parser->m_valueList = WTF::move(propertyValue);
+            int oldParsedProperties = parser->m_parsedProperties.size();
+            parser->setCustomPropertyName($1);
+            $$ = parser->parseValue(CSSPropertyCustom, $6);
+            if (!$$)
+                parser->rollbackLastProperties(parser->m_parsedProperties.size() - oldParsedProperties);
+            else
+                isPropertyParsed = true;
+            parser->m_valueList = nullptr;
+        }
+        parser->markPropertyEnd($6, isPropertyParsed);
     }
     | property ':' maybe_space expr priority {
         $$ = false;

Modified: branches/safari-601-branch/Source/WebCore/css/CSSParser.cpp (193501 => 193502)


--- branches/safari-601-branch/Source/WebCore/css/CSSParser.cpp	2015-12-05 01:47:12 UTC (rev 193501)
+++ branches/safari-601-branch/Source/WebCore/css/CSSParser.cpp	2015-12-05 01:47:19 UTC (rev 193502)
@@ -1347,6 +1347,19 @@
     return parser.parseValue(declaration, propertyID, string, important, contextStyleSheet);
 }
 
+CSSParser::ParseResult CSSParser::parseCustomPropertyValue(MutableStyleProperties* declaration, const AtomicString& propertyName, const String& string, bool important, CSSParserMode cssParserMode, StyleSheetContents* contextStyleSheet)
+{
+    CSSParserContext context(cssParserMode);
+    if (contextStyleSheet) {
+        context = contextStyleSheet->parserContext();
+        context.mode = cssParserMode;
+    }
+
+    CSSParser parser(context);
+    parser.setCustomPropertyName(propertyName);
+    return parser.parseValue(declaration, CSSPropertyCustom, string, important, contextStyleSheet);
+}
+
 CSSParser::ParseResult CSSParser::parseValue(MutableStyleProperties* declaration, CSSPropertyID propertyID, const String& string, bool important, StyleSheetContents* contextStyleSheet)
 {
     setStyleSheet(contextStyleSheet);
@@ -1888,6 +1901,12 @@
 {
     if (!m_valueList || !m_valueList->current())
         return false;
+    
+    if (propId == CSSPropertyCustom) {
+        // FIXME: For now put this ahead of inherit/initial processing.
+        // Eventually we want to support initial and inherit.
+        return parseCustomPropertyDeclaration(important);
+    }
 
     ValueWithCalculation valueWithCalculation(*m_valueList->current());
     CSSValueID id = valueWithCalculation.value().id;
@@ -4109,26 +4128,12 @@
     return false;
 }
 
-void CSSParser::addCustomPropertyDeclaration(const CSSParserString& name, CSSParserValueList* value, bool important)
+bool CSSParser::parseCustomPropertyDeclaration(bool important)
 {
-    if (!value)
-        return;
-
-    // The custom property comes in as a parsed set of CSSParserValues collected into a list.
-    // For CSS variables, we just want to treat the entire set of values as a string, so what we do
-    // is build up a set of CSSValues and serialize them using cssText, separating multiple values
-    // with spaces.
-    AtomicString propertyName = name;
-    StringBuilder builder;
-    for (unsigned i = 0; i < value->size(); i++) {
-        if (i)
-            builder.append(' ');
-        RefPtr<CSSValue> cssValue = value->valueAt(i)->createCSSValue();
-        if (!cssValue)
-            return;
-        builder.append(cssValue->cssText());
-    }
-    addProperty(CSSPropertyCustom, CSSCustomPropertyValue::create(propertyName, builder.toString().lower()), important, false);
+    if (m_customPropertyName.isEmpty() || !m_valueList)
+        return false;
+    addProperty(CSSPropertyCustom, CSSCustomPropertyValue::create(m_customPropertyName, m_valueList), important, false);
+    return true;
 }
 
 // [ <string> | <uri> | <counter> | attr(X) | open-quote | close-quote | no-open-quote | no-close-quote ]+ | inherit

Modified: branches/safari-601-branch/Source/WebCore/css/CSSParser.h (193501 => 193502)


--- branches/safari-601-branch/Source/WebCore/css/CSSParser.h	2015-12-05 01:47:12 UTC (rev 193501)
+++ branches/safari-601-branch/Source/WebCore/css/CSSParser.h	2015-12-05 01:47:19 UTC (rev 193502)
@@ -119,6 +119,7 @@
     bool parseSupportsCondition(const String&);
 
     static ParseResult parseValue(MutableStyleProperties*, CSSPropertyID, const String&, bool important, CSSParserMode, StyleSheetContents*);
+    static ParseResult parseCustomPropertyValue(MutableStyleProperties*, const AtomicString& propertyName, const String&, bool important, CSSParserMode, StyleSheetContents* contextStyleSheet);
 
     static bool parseColor(RGBA32& color, const String&, bool strict = false);
     static bool isValidSystemColorValue(CSSValueID);
@@ -143,7 +144,7 @@
     bool parseQuotes(CSSPropertyID, bool important);
     bool parseAlt(CSSPropertyID, bool important);
     
-    void addCustomPropertyDeclaration(const CSSParserString&, CSSParserValueList*, bool important);
+    bool parseCustomPropertyDeclaration(bool important);
     
     PassRefPtr<CSSValue> parseAttr(CSSParserValueList& args);
     PassRefPtr<CSSValue> parseBackgroundColor();
@@ -392,6 +393,7 @@
 
     bool m_important;
     CSSPropertyID m_id;
+    AtomicString m_customPropertyName;
     StyleSheetContents* m_styleSheet;
     RefPtr<StyleRuleBase> m_rule;
     RefPtr<StyleKeyframe> m_keyframe;
@@ -463,6 +465,8 @@
     Location currentLocation();
     static bool isCalculation(CSSParserValue&);
 
+    void setCustomPropertyName(const AtomicString& propertyName) { m_customPropertyName = propertyName; }
+
 private:
     bool is8BitSource() { return m_is8BitSource; }
 

Modified: branches/safari-601-branch/Source/WebCore/css/CSSParserValues.cpp (193501 => 193502)


--- branches/safari-601-branch/Source/WebCore/css/CSSParserValues.cpp	2015-12-05 01:47:12 UTC (rev 193501)
+++ branches/safari-601-branch/Source/WebCore/css/CSSParserValues.cpp	2015-12-05 01:47:19 UTC (rev 193502)
@@ -26,6 +26,7 @@
 #include "CSSSelector.h"
 #include "CSSSelectorList.h"
 #include "SelectorPseudoTypeMap.h"
+#include <wtf/text/StringBuilder.h>
 
 namespace WebCore {
 
@@ -66,6 +67,24 @@
         m_values.append(*(valueList.valueAt(i)));
 }
 
+String CSSParserValueList::toString()
+{
+    // Build up a set of CSSValues and serialize them using cssText, separating multiple values
+    // with spaces.
+    // FIXME: Teach CSSParserValues how to serialize so that we don't have to create CSSValues
+    // just to perform this serialization.
+    StringBuilder builder;
+    for (unsigned i = 0; i < size(); i++) {
+        if (i)
+            builder.append(' ');
+        RefPtr<CSSValue> cssValue = valueAt(i)->createCSSValue();
+        if (!cssValue)
+            return "";
+        builder.append(cssValue->cssText());
+    }
+    return builder.toString().lower();
+}
+
 PassRefPtr<CSSValue> CSSParserValue::createCSSValue()
 {
     RefPtr<CSSValue> parsedValue;

Modified: branches/safari-601-branch/Source/WebCore/css/CSSParserValues.h (193501 => 193502)


--- branches/safari-601-branch/Source/WebCore/css/CSSParserValues.h	2015-12-05 01:47:12 UTC (rev 193501)
+++ branches/safari-601-branch/Source/WebCore/css/CSSParserValues.h	2015-12-05 01:47:19 UTC (rev 193502)
@@ -165,6 +165,8 @@
     CSSParserValue* valueAt(unsigned i) { return i < m_values.size() ? &m_values[i] : 0; }
 
     void clear() { m_values.clear(); }
+    
+    String toString();
 
 private:
     unsigned m_current;

Modified: branches/safari-601-branch/Source/WebCore/css/StyleProperties.cpp (193501 => 193502)


--- branches/safari-601-branch/Source/WebCore/css/StyleProperties.cpp	2015-12-05 01:47:12 UTC (rev 193501)
+++ branches/safari-601-branch/Source/WebCore/css/StyleProperties.cpp	2015-12-05 01:47:19 UTC (rev 193502)
@@ -728,7 +728,7 @@
     return CSSParser::parseValue(this, propertyID, value, important, cssParserMode(), contextStyleSheet) == CSSParser::ParseResult::Changed;
 }
 
-bool MutableStyleProperties::setCustomProperty(const String& propertyName, const String& value, bool important, StyleSheetContents* /*contextStyleSheet*/)
+bool MutableStyleProperties::setCustomProperty(const String& propertyName, const String& value, bool important, StyleSheetContents* contextStyleSheet)
 {
     // Setting the value to an empty string just removes the property in both IE and Gecko.
     // Setting it to null seems to produce less consistent results, but we treat it just the same.
@@ -737,10 +737,7 @@
 
     // When replacing an existing property value, this moves the property to the end of the list.
     // Firefox preserves the position, and MSIE moves the property to the beginning.
-    RefPtr<CSSCustomPropertyValue> customValue = CSSCustomPropertyValue::create(propertyName, value);
-    addParsedProperty(CSSProperty(CSSPropertyCustom, customValue, important));
-    
-    return true;
+    return CSSParser::parseCustomPropertyValue(this, propertyName, value, important, cssParserMode(), contextStyleSheet) == CSSParser::ParseResult::Changed;
 }
 
 void MutableStyleProperties::setProperty(CSSPropertyID propertyID, PassRefPtr<CSSValue> prpValue, bool important)

Modified: branches/safari-601-branch/Source/WebCore/css/StyleResolver.cpp (193501 => 193502)


--- branches/safari-601-branch/Source/WebCore/css/StyleResolver.cpp	2015-12-05 01:47:12 UTC (rev 193501)
+++ branches/safari-601-branch/Source/WebCore/css/StyleResolver.cpp	2015-12-05 01:47:19 UTC (rev 193502)
@@ -1925,7 +1925,7 @@
     
     if (id == CSSPropertyCustom) {
         CSSCustomPropertyValue* customProperty = &downcast<CSSCustomPropertyValue>(*value);
-        state.style()->setCustomPropertyValue(customProperty->name(), customProperty->value());
+        state.style()->setCustomPropertyValue(customProperty->name(), value);
         return;
     }
 

Modified: branches/safari-601-branch/Source/WebCore/rendering/style/RenderStyle.h (193501 => 193502)


--- branches/safari-601-branch/Source/WebCore/rendering/style/RenderStyle.h	2015-12-05 01:47:12 UTC (rev 193501)
+++ branches/safari-601-branch/Source/WebCore/rendering/style/RenderStyle.h	2015-12-05 01:47:19 UTC (rev 193502)
@@ -513,10 +513,10 @@
 
     const PseudoStyleCache* cachedPseudoStyles() const { return m_cachedPseudoStyles.get(); }
 
-    void setCustomPropertyValue(const AtomicString& name, const String& value) { rareInheritedData.access()->m_customProperties.access()->setCustomPropertyValue(name, value); }
-    String getCustomPropertyValue(const AtomicString& name) const { return rareInheritedData->m_customProperties->getCustomPropertyValue(name); }
+    void setCustomPropertyValue(const AtomicString& name, const RefPtr<CSSValue>& value) { rareInheritedData.access()->m_customProperties.access()->setCustomPropertyValue(name, value); }
+    RefPtr<CSSValue> getCustomPropertyValue(const AtomicString& name) const { return rareInheritedData->m_customProperties->getCustomPropertyValue(name); }
     bool hasCustomProperty(const AtomicString& name) const { return rareInheritedData->m_customProperties->hasCustomProperty(name); }
-    const HashMap<AtomicString, String>* customProperties() const { return &(rareInheritedData->m_customProperties->m_values); }
+    const HashMap<AtomicString, RefPtr<CSSValue>>* customProperties() const { return &(rareInheritedData->m_customProperties->m_values); }
 
     void setHasViewportUnits(bool hasViewportUnits = true) { noninherited_flags.setHasViewportUnits(hasViewportUnits); }
     bool hasViewportUnits() const { return noninherited_flags.hasViewportUnits(); }

Modified: branches/safari-601-branch/Source/WebCore/rendering/style/StyleCustomPropertyData.h (193501 => 193502)


--- branches/safari-601-branch/Source/WebCore/rendering/style/StyleCustomPropertyData.h	2015-12-05 01:47:12 UTC (rev 193501)
+++ branches/safari-601-branch/Source/WebCore/rendering/style/StyleCustomPropertyData.h	2015-12-05 01:47:19 UTC (rev 193502)
@@ -25,10 +25,13 @@
 #include <wtf/Forward.h>
 #include <wtf/HashMap.h>
 #include <wtf/RefCounted.h>
+#include <wtf/RefPtr.h>
 #include <wtf/text/AtomicStringHash.h>
 
 namespace WebCore {
 
+class CSSValue;
+
 class StyleCustomPropertyData : public RefCounted<StyleCustomPropertyData> {
 public:
     static Ref<StyleCustomPropertyData> create() { return adoptRef(*new StyleCustomPropertyData); }
@@ -37,11 +40,11 @@
     bool operator==(const StyleCustomPropertyData& o) const { return m_values == o.m_values; }
     bool operator!=(const StyleCustomPropertyData &o) const { return !(*this == o); }
     
-    void setCustomPropertyValue(const AtomicString& name, const String& value) { m_values.set(name, value); }
-    String getCustomPropertyValue(const AtomicString& name) const { return m_values.get(name); }
+    void setCustomPropertyValue(const AtomicString& name, const RefPtr<CSSValue>& value) { m_values.set(name, value); }
+    RefPtr<CSSValue> getCustomPropertyValue(const AtomicString& name) const { return m_values.get(name); }
     bool hasCustomProperty(const AtomicString& name) const { return m_values.contains(name); }
 
-    HashMap<AtomicString, String> m_values;
+    HashMap<AtomicString, RefPtr<CSSValue>> m_values;
     
 private:
     explicit StyleCustomPropertyData()
@@ -49,7 +52,7 @@
     { }
     StyleCustomPropertyData(const StyleCustomPropertyData& other)
         : RefCounted<StyleCustomPropertyData>()
-        , m_values(HashMap<AtomicString, String>(other.m_values))
+        , m_values(HashMap<AtomicString, RefPtr<CSSValue>>(other.m_values))
     { }
 };
 
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to