OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2004 Zack Rusin <zack@kde.org> | 2 * Copyright (C) 2004 Zack Rusin <zack@kde.org> |
3 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 Apple Inc.
All rights reserved. | 3 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 Apple Inc.
All rights reserved. |
4 * Copyright (C) 2007 Alexey Proskuryakov <ap@webkit.org> | 4 * Copyright (C) 2007 Alexey Proskuryakov <ap@webkit.org> |
5 * Copyright (C) 2007 Nicholas Shanks <webkit@nickshanks.com> | 5 * Copyright (C) 2007 Nicholas Shanks <webkit@nickshanks.com> |
6 * Copyright (C) 2011 Sencha, Inc. All rights reserved. | 6 * Copyright (C) 2011 Sencha, Inc. All rights reserved. |
7 * | 7 * |
8 * This library is free software; you can redistribute it and/or | 8 * This library is free software; you can redistribute it and/or |
9 * modify it under the terms of the GNU Lesser General Public | 9 * modify it under the terms of the GNU Lesser General Public |
10 * License as published by the Free Software Foundation; either | 10 * License as published by the Free Software Foundation; either |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
48 #include "PseudoElement.h" | 48 #include "PseudoElement.h" |
49 #include "Rect.h" | 49 #include "Rect.h" |
50 #include "ShadowValue.h" | 50 #include "ShadowValue.h" |
51 #include "StylePropertySet.h" | 51 #include "StylePropertySet.h" |
52 #include "StylePropertyShorthand.h" | 52 #include "StylePropertyShorthand.h" |
53 #include "StyleResolver.h" | 53 #include "StyleResolver.h" |
54 #include "WebCoreMemoryInstrumentation.h" | 54 #include "WebCoreMemoryInstrumentation.h" |
55 #include "WebKitCSSTransformValue.h" | 55 #include "WebKitCSSTransformValue.h" |
56 #include "WebKitFontFamilyNames.h" | 56 #include "WebKitFontFamilyNames.h" |
57 #include "core/page/animation/AnimationController.h" | 57 #include "core/page/animation/AnimationController.h" |
| 58 #include "core/page/RuntimeCSSEnabled.h" |
58 #include "core/platform/graphics/FontFeatureSettings.h" | 59 #include "core/platform/graphics/FontFeatureSettings.h" |
59 #include "core/rendering/RenderBox.h" | 60 #include "core/rendering/RenderBox.h" |
60 #include "core/rendering/RenderView.h" | 61 #include "core/rendering/RenderView.h" |
61 #include "core/rendering/style/BasicShapes.h" | 62 #include "core/rendering/style/BasicShapes.h" |
62 #include "core/rendering/style/ContentData.h" | 63 #include "core/rendering/style/ContentData.h" |
63 #include "core/rendering/style/CounterContent.h" | 64 #include "core/rendering/style/CounterContent.h" |
64 #include "core/rendering/style/CursorList.h" | 65 #include "core/rendering/style/CursorList.h" |
65 #include "core/rendering/style/RenderStyle.h" | 66 #include "core/rendering/style/RenderStyle.h" |
66 #include "core/rendering/style/StyleInheritedData.h" | 67 #include "core/rendering/style/StyleInheritedData.h" |
67 #include <wtf/text/StringBuilder.h> | 68 #include <wtf/text/StringBuilder.h> |
68 | 69 |
69 #if ENABLE(CSS_EXCLUSIONS) | 70 #if ENABLE(CSS_EXCLUSIONS) |
70 #include "core/rendering/style/ExclusionShapeValue.h" | 71 #include "core/rendering/style/ExclusionShapeValue.h" |
71 #endif | 72 #endif |
72 | 73 |
73 #include "WebKitCSSArrayFunctionValue.h" | 74 #include "WebKitCSSArrayFunctionValue.h" |
74 #include "WebKitCSSMixFunctionValue.h" | 75 #include "WebKitCSSMixFunctionValue.h" |
75 #include "core/platform/graphics/filters/custom/CustomFilterArrayParameter.h" | 76 #include "core/platform/graphics/filters/custom/CustomFilterArrayParameter.h" |
76 #include "core/platform/graphics/filters/custom/CustomFilterNumberParameter.h" | 77 #include "core/platform/graphics/filters/custom/CustomFilterNumberParameter.h" |
77 #include "core/platform/graphics/filters/custom/CustomFilterOperation.h" | 78 #include "core/platform/graphics/filters/custom/CustomFilterOperation.h" |
78 #include "core/platform/graphics/filters/custom/CustomFilterParameter.h" | 79 #include "core/platform/graphics/filters/custom/CustomFilterParameter.h" |
79 #include "core/platform/graphics/filters/custom/CustomFilterTransformParameter.h
" | 80 #include "core/platform/graphics/filters/custom/CustomFilterTransformParameter.h
" |
80 | 81 |
81 #include "WebKitCSSFilterValue.h" | 82 #include "WebKitCSSFilterValue.h" |
82 #include "core/rendering/style/StyleCustomFilterProgram.h" | 83 #include "core/rendering/style/StyleCustomFilterProgram.h" |
83 | 84 |
84 namespace WebCore { | 85 namespace WebCore { |
85 | 86 |
86 // List of all properties we know how to compute, omitting shorthands. | 87 // List of all properties we know how to compute, omitting shorthands. |
87 static const CSSPropertyID computedProperties[] = { | 88 // NOTE: Do not use this list, use computableProperties() instead |
| 89 // to respect runtime enabling of CSS properties. |
| 90 static const CSSPropertyID staticComputableProperties[] = { |
88 CSSPropertyBackgroundAttachment, | 91 CSSPropertyBackgroundAttachment, |
89 #if ENABLE(CSS_COMPOSITING) | 92 #if ENABLE(CSS_COMPOSITING) |
90 CSSPropertyBackgroundBlendMode, | 93 CSSPropertyBackgroundBlendMode, |
91 #endif | 94 #endif |
92 CSSPropertyBackgroundClip, | 95 CSSPropertyBackgroundClip, |
93 CSSPropertyBackgroundColor, | 96 CSSPropertyBackgroundColor, |
94 CSSPropertyBackgroundImage, | 97 CSSPropertyBackgroundImage, |
95 CSSPropertyBackgroundOrigin, | 98 CSSPropertyBackgroundOrigin, |
96 CSSPropertyBackgroundPosition, // more-specific background-position-x/y are
non-standard | 99 CSSPropertyBackgroundPosition, // more-specific background-position-x/y are
non-standard |
97 CSSPropertyBackgroundRepeat, | 100 CSSPropertyBackgroundRepeat, |
(...skipping 298 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
396 CSSPropertyKerning, | 399 CSSPropertyKerning, |
397 CSSPropertyTextAnchor, | 400 CSSPropertyTextAnchor, |
398 CSSPropertyWritingMode, | 401 CSSPropertyWritingMode, |
399 CSSPropertyGlyphOrientationHorizontal, | 402 CSSPropertyGlyphOrientationHorizontal, |
400 CSSPropertyGlyphOrientationVertical, | 403 CSSPropertyGlyphOrientationVertical, |
401 CSSPropertyWebkitSvgShadow, | 404 CSSPropertyWebkitSvgShadow, |
402 CSSPropertyVectorEffect | 405 CSSPropertyVectorEffect |
403 #endif | 406 #endif |
404 }; | 407 }; |
405 | 408 |
406 const unsigned numComputedProperties = WTF_ARRAY_LENGTH(computedProperties); | 409 static const Vector<CSSPropertyID>& computableProperties() |
| 410 { |
| 411 DEFINE_STATIC_LOCAL(Vector<CSSPropertyID>, properties, ()); |
| 412 if (properties.isEmpty()) |
| 413 RuntimeCSSEnabled::filterEnabledCSSPropertiesIntoVector(staticComputable
Properties, WTF_ARRAY_LENGTH(staticComputableProperties), properties); |
| 414 return properties; |
| 415 } |
407 | 416 |
408 static int valueForRepeatRule(int rule) | 417 static int valueForRepeatRule(int rule) |
409 { | 418 { |
410 switch (rule) { | 419 switch (rule) { |
411 case RepeatImageRule: | 420 case RepeatImageRule: |
412 return CSSValueRepeat; | 421 return CSSValueRepeat; |
413 case RoundImageRule: | 422 case RoundImageRule: |
414 return CSSValueRound; | 423 return CSSValueRound; |
415 case SpaceImageRule: | 424 case SpaceImageRule: |
416 return CSSValueSpace; | 425 return CSSValueSpace; |
(...skipping 758 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1175 void CSSComputedStyleDeclaration::deref() | 1184 void CSSComputedStyleDeclaration::deref() |
1176 { | 1185 { |
1177 ASSERT(m_refCount); | 1186 ASSERT(m_refCount); |
1178 if (!--m_refCount) | 1187 if (!--m_refCount) |
1179 delete this; | 1188 delete this; |
1180 } | 1189 } |
1181 | 1190 |
1182 String CSSComputedStyleDeclaration::cssText() const | 1191 String CSSComputedStyleDeclaration::cssText() const |
1183 { | 1192 { |
1184 StringBuilder result; | 1193 StringBuilder result; |
| 1194 const Vector<CSSPropertyID>& properties = computableProperties(); |
1185 | 1195 |
1186 for (unsigned i = 0; i < numComputedProperties; i++) { | 1196 for (unsigned i = 0; i < properties.size(); i++) { |
1187 if (i) | 1197 if (i) |
1188 result.append(' '); | 1198 result.append(' '); |
1189 result.append(getPropertyName(computedProperties[i])); | 1199 result.append(getPropertyName(properties[i])); |
1190 result.append(": ", 2); | 1200 result.append(": ", 2); |
1191 result.append(getPropertyValue(computedProperties[i])); | 1201 result.append(getPropertyValue(properties[i])); |
1192 result.append(';'); | 1202 result.append(';'); |
1193 } | 1203 } |
1194 | 1204 |
1195 return result.toString(); | 1205 return result.toString(); |
1196 } | 1206 } |
1197 | 1207 |
1198 void CSSComputedStyleDeclaration::setCssText(const String&, ExceptionCode& ec) | 1208 void CSSComputedStyleDeclaration::setCssText(const String&, ExceptionCode& ec) |
1199 { | 1209 { |
1200 ec = NO_MODIFICATION_ALLOWED_ERR; | 1210 ec = NO_MODIFICATION_ALLOWED_ERR; |
1201 } | 1211 } |
(...skipping 1610 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2812 unsigned CSSComputedStyleDeclaration::length() const | 2822 unsigned CSSComputedStyleDeclaration::length() const |
2813 { | 2823 { |
2814 Node* node = m_node.get(); | 2824 Node* node = m_node.get(); |
2815 if (!node) | 2825 if (!node) |
2816 return 0; | 2826 return 0; |
2817 | 2827 |
2818 RenderStyle* style = node->computedStyle(m_pseudoElementSpecifier); | 2828 RenderStyle* style = node->computedStyle(m_pseudoElementSpecifier); |
2819 if (!style) | 2829 if (!style) |
2820 return 0; | 2830 return 0; |
2821 | 2831 |
2822 return numComputedProperties; | 2832 return computableProperties().size(); |
2823 } | 2833 } |
2824 | 2834 |
2825 String CSSComputedStyleDeclaration::item(unsigned i) const | 2835 String CSSComputedStyleDeclaration::item(unsigned i) const |
2826 { | 2836 { |
2827 if (i >= length()) | 2837 if (i >= length()) |
2828 return ""; | 2838 return ""; |
2829 | 2839 |
2830 return getPropertyNameString(computedProperties[i]); | 2840 return getPropertyNameString(computableProperties()[i]); |
2831 } | 2841 } |
2832 | 2842 |
2833 bool CSSComputedStyleDeclaration::cssPropertyMatches(CSSPropertyID propertyID, c
onst CSSValue* propertyValue) const | 2843 bool CSSComputedStyleDeclaration::cssPropertyMatches(CSSPropertyID propertyID, c
onst CSSValue* propertyValue) const |
2834 { | 2844 { |
2835 if (propertyID == CSSPropertyFontSize && propertyValue->isPrimitiveValue() &
& m_node) { | 2845 if (propertyID == CSSPropertyFontSize && propertyValue->isPrimitiveValue() &
& m_node) { |
2836 m_node->document()->updateLayoutIgnorePendingStylesheets(); | 2846 m_node->document()->updateLayoutIgnorePendingStylesheets(); |
2837 RenderStyle* style = m_node->computedStyle(m_pseudoElementSpecifier); | 2847 RenderStyle* style = m_node->computedStyle(m_pseudoElementSpecifier); |
2838 if (style && style->fontDescription().keywordSize()) { | 2848 if (style && style->fontDescription().keywordSize()) { |
2839 int sizeValue = cssIdentifierForFontSizeKeyword(style->fontDescripti
on().keywordSize()); | 2849 int sizeValue = cssIdentifierForFontSizeKeyword(style->fontDescripti
on().keywordSize()); |
2840 const CSSPrimitiveValue* primitiveValue = static_cast<const CSSPrimi
tiveValue*>(propertyValue); | 2850 const CSSPrimitiveValue* primitiveValue = static_cast<const CSSPrimi
tiveValue*>(propertyValue); |
2841 if (primitiveValue->isIdent() && primitiveValue->getIdent() == sizeV
alue) | 2851 if (primitiveValue->isIdent() && primitiveValue->getIdent() == sizeV
alue) |
2842 return true; | 2852 return true; |
2843 } | 2853 } |
2844 } | 2854 } |
2845 RefPtr<CSSValue> value = getPropertyCSSValue(propertyID); | 2855 RefPtr<CSSValue> value = getPropertyCSSValue(propertyID); |
2846 return value && propertyValue && value->equals(*propertyValue); | 2856 return value && propertyValue && value->equals(*propertyValue); |
2847 } | 2857 } |
2848 | 2858 |
2849 PassRefPtr<StylePropertySet> CSSComputedStyleDeclaration::copy() const | 2859 PassRefPtr<StylePropertySet> CSSComputedStyleDeclaration::copy() const |
2850 { | 2860 { |
2851 return copyPropertiesInSet(computedProperties, numComputedProperties); | 2861 return copyPropertiesInSet(computableProperties()); |
2852 } | 2862 } |
2853 | 2863 |
2854 PassRefPtr<CSSValueList> CSSComputedStyleDeclaration::getCSSPropertyValuesForSho
rthandProperties(const StylePropertyShorthand& shorthand) const | 2864 PassRefPtr<CSSValueList> CSSComputedStyleDeclaration::getCSSPropertyValuesForSho
rthandProperties(const StylePropertyShorthand& shorthand) const |
2855 { | 2865 { |
2856 RefPtr<CSSValueList> list = CSSValueList::createSpaceSeparated(); | 2866 RefPtr<CSSValueList> list = CSSValueList::createSpaceSeparated(); |
2857 for (size_t i = 0; i < shorthand.length(); ++i) { | 2867 for (size_t i = 0; i < shorthand.length(); ++i) { |
2858 RefPtr<CSSValue> value = getPropertyCSSValue(shorthand.properties()[i],
DoNotUpdateLayout); | 2868 RefPtr<CSSValue> value = getPropertyCSSValue(shorthand.properties()[i],
DoNotUpdateLayout); |
2859 list->append(value); | 2869 list->append(value); |
2860 } | 2870 } |
2861 return list.release(); | 2871 return list.release(); |
(...skipping 30 matching lines...) Expand all Loading... |
2892 PassRefPtr<CSSValueList> CSSComputedStyleDeclaration::getCSSPropertyValuesForGri
dShorthand(const StylePropertyShorthand& shorthand) const | 2902 PassRefPtr<CSSValueList> CSSComputedStyleDeclaration::getCSSPropertyValuesForGri
dShorthand(const StylePropertyShorthand& shorthand) const |
2893 { | 2903 { |
2894 RefPtr<CSSValueList> list = CSSValueList::createSlashSeparated(); | 2904 RefPtr<CSSValueList> list = CSSValueList::createSlashSeparated(); |
2895 for (size_t i = 0; i < shorthand.length(); ++i) { | 2905 for (size_t i = 0; i < shorthand.length(); ++i) { |
2896 RefPtr<CSSValue> value = getPropertyCSSValue(shorthand.properties()[i],
DoNotUpdateLayout); | 2906 RefPtr<CSSValue> value = getPropertyCSSValue(shorthand.properties()[i],
DoNotUpdateLayout); |
2897 list->append(value); | 2907 list->append(value); |
2898 } | 2908 } |
2899 return list.release(); | 2909 return list.release(); |
2900 } | 2910 } |
2901 | 2911 |
2902 PassRefPtr<StylePropertySet> CSSComputedStyleDeclaration::copyPropertiesInSet(co
nst CSSPropertyID* set, unsigned length) const | 2912 PassRefPtr<StylePropertySet> CSSComputedStyleDeclaration::copyPropertiesInSet(co
nst Vector<CSSPropertyID>& properties) const |
2903 { | 2913 { |
2904 Vector<CSSProperty, 256> list; | 2914 Vector<CSSProperty, 256> list; |
2905 list.reserveInitialCapacity(length); | 2915 list.reserveInitialCapacity(properties.size()); |
2906 for (unsigned i = 0; i < length; ++i) { | 2916 for (unsigned i = 0; i < properties.size(); ++i) { |
2907 RefPtr<CSSValue> value = getPropertyCSSValue(set[i]); | 2917 RefPtr<CSSValue> value = getPropertyCSSValue(properties[i]); |
2908 if (value) | 2918 if (value) |
2909 list.append(CSSProperty(set[i], value.release(), false)); | 2919 list.append(CSSProperty(properties[i], value.release(), false)); |
2910 } | 2920 } |
2911 return StylePropertySet::create(list.data(), list.size()); | 2921 return StylePropertySet::create(list.data(), list.size()); |
2912 } | 2922 } |
2913 | 2923 |
2914 void CSSComputedStyleDeclaration::reportMemoryUsage(MemoryObjectInfo* memoryObje
ctInfo) const | 2924 void CSSComputedStyleDeclaration::reportMemoryUsage(MemoryObjectInfo* memoryObje
ctInfo) const |
2915 { | 2925 { |
2916 MemoryClassInfo info(memoryObjectInfo, this, WebCoreMemoryTypes::CSS); | 2926 MemoryClassInfo info(memoryObjectInfo, this, WebCoreMemoryTypes::CSS); |
2917 info.addMember(m_node, "node"); | 2927 info.addMember(m_node, "node"); |
2918 } | 2928 } |
2919 | 2929 |
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2989 static const CSSPropertyID propertiesAfterSlashSeperator[3] = { CSSPropertyB
ackgroundSize, CSSPropertyBackgroundOrigin, | 2999 static const CSSPropertyID propertiesAfterSlashSeperator[3] = { CSSPropertyB
ackgroundSize, CSSPropertyBackgroundOrigin, |
2990 CSSPropertyB
ackgroundClip }; | 3000 CSSPropertyB
ackgroundClip }; |
2991 | 3001 |
2992 RefPtr<CSSValueList> list = CSSValueList::createSlashSeparated(); | 3002 RefPtr<CSSValueList> list = CSSValueList::createSlashSeparated(); |
2993 list->append(getCSSPropertyValuesForShorthandProperties(StylePropertyShortha
nd(propertiesBeforeSlashSeperator, WTF_ARRAY_LENGTH(propertiesBeforeSlashSeperat
or)))); | 3003 list->append(getCSSPropertyValuesForShorthandProperties(StylePropertyShortha
nd(propertiesBeforeSlashSeperator, WTF_ARRAY_LENGTH(propertiesBeforeSlashSeperat
or)))); |
2994 list->append(getCSSPropertyValuesForShorthandProperties(StylePropertyShortha
nd(propertiesAfterSlashSeperator, WTF_ARRAY_LENGTH(propertiesAfterSlashSeperator
)))); | 3004 list->append(getCSSPropertyValuesForShorthandProperties(StylePropertyShortha
nd(propertiesAfterSlashSeperator, WTF_ARRAY_LENGTH(propertiesAfterSlashSeperator
)))); |
2995 return list.release(); | 3005 return list.release(); |
2996 } | 3006 } |
2997 | 3007 |
2998 } // namespace WebCore | 3008 } // namespace WebCore |
OLD | NEW |