Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 /* | 1 /* |
| 2 * (C) 1999-2003 Lars Knoll (knoll@kde.org) | 2 * (C) 1999-2003 Lars Knoll (knoll@kde.org) |
| 3 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2012 Apple Inc. All rights reserv ed. | 3 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2012 Apple Inc. All rights reserv ed. |
| 4 * | 4 * |
| 5 * This library is free software; you can redistribute it and/or | 5 * This library is free software; you can redistribute it and/or |
| 6 * modify it under the terms of the GNU Library General Public | 6 * modify it under the terms of the GNU Library General Public |
| 7 * License as published by the Free Software Foundation; either | 7 * License as published by the Free Software Foundation; either |
| 8 * version 2 of the License, or (at your option) any later version. | 8 * version 2 of the License, or (at your option) any later version. |
| 9 * | 9 * |
| 10 * This library is distributed in the hope that it will be useful, | 10 * This library is distributed in the hope that it will be useful, |
| 11 * but WITHOUT ANY WARRANTY; without even the implied warranty of | 11 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
| 13 * Library General Public License for more details. | 13 * Library General Public License for more details. |
| 14 * | 14 * |
| 15 * You should have received a copy of the GNU Library General Public License | 15 * You should have received a copy of the GNU Library General Public License |
| 16 * along with this library; see the file COPYING.LIB. If not, write to | 16 * along with this library; see the file COPYING.LIB. If not, write to |
| 17 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, | 17 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, |
| 18 * Boston, MA 02110-1301, USA. | 18 * Boston, MA 02110-1301, USA. |
| 19 */ | 19 */ |
| 20 | 20 |
| 21 #include "config.h" | 21 #include "config.h" |
| 22 #include "core/css/CSSPrimitiveValue.h" | 22 #include "core/css/CSSPrimitiveValue.h" |
| 23 | 23 |
| 24 #include "core/css/CSSBasicShapes.h" | 24 #include "core/css/CSSBasicShapes.h" |
| 25 #include "core/css/CSSCalculationValue.h" | 25 #include "core/css/CSSCalculationValue.h" |
| 26 #include "core/css/CSSHelper.h" | 26 #include "core/css/CSSHelper.h" |
| 27 #include "core/css/CSSMarkup.h" | 27 #include "core/css/CSSMarkup.h" |
| 28 #include "core/css/CSSToLengthConversionData.h" | 28 #include "core/css/CSSToLengthConversionData.h" |
| 29 #include "core/css/CSSVariableData.h" | |
| 29 #include "core/css/Counter.h" | 30 #include "core/css/Counter.h" |
| 30 #include "core/css/Pair.h" | 31 #include "core/css/Pair.h" |
| 31 #include "core/css/Rect.h" | 32 #include "core/css/Rect.h" |
| 32 #include "core/css/StyleSheetContents.h" | 33 #include "core/css/StyleSheetContents.h" |
| 33 #include "core/dom/Node.h" | 34 #include "core/dom/Node.h" |
| 34 #include "core/style/ComputedStyle.h" | 35 #include "core/style/ComputedStyle.h" |
| 35 #include "platform/LayoutUnit.h" | 36 #include "platform/LayoutUnit.h" |
| 36 #include "platform/fonts/FontMetrics.h" | 37 #include "platform/fonts/FontMetrics.h" |
| 37 #include "wtf/StdLibExtras.h" | 38 #include "wtf/StdLibExtras.h" |
| 38 #include "wtf/ThreadSpecific.h" | 39 #include "wtf/ThreadSpecific.h" |
| (...skipping 202 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 241 | 242 |
| 242 CSSPrimitiveValue::CSSPrimitiveValue(const String& str, UnitType type) | 243 CSSPrimitiveValue::CSSPrimitiveValue(const String& str, UnitType type) |
| 243 : CSSValue(PrimitiveClass) | 244 : CSSValue(PrimitiveClass) |
| 244 { | 245 { |
| 245 m_primitiveUnitType = type; | 246 m_primitiveUnitType = type; |
| 246 m_value.string = str.impl(); | 247 m_value.string = str.impl(); |
| 247 if (m_value.string) | 248 if (m_value.string) |
| 248 m_value.string->ref(); | 249 m_value.string->ref(); |
| 249 } | 250 } |
| 250 | 251 |
| 252 CSSPrimitiveValue::CSSPrimitiveValue(CSSVariableData* variableData) | |
| 253 : CSSValue(PrimitiveClass) | |
| 254 { | |
| 255 m_primitiveUnitType = CSSPrimitiveValue::CSS_VARIABLE_REFERENCE; | |
| 256 m_value.variableData = variableData; | |
| 257 if (m_value.variableData) | |
|
Timothy Loh
2015/07/23 08:11:46
Is this ever null (here and in cleanup())?
| |
| 258 m_value.variableData->ref(); | |
| 259 } | |
| 260 | |
| 251 CSSPrimitiveValue::CSSPrimitiveValue(const LengthSize& lengthSize, const Compute dStyle& style) | 261 CSSPrimitiveValue::CSSPrimitiveValue(const LengthSize& lengthSize, const Compute dStyle& style) |
| 252 : CSSValue(PrimitiveClass) | 262 : CSSValue(PrimitiveClass) |
| 253 { | 263 { |
| 254 init(lengthSize, style); | 264 init(lengthSize, style); |
| 255 } | 265 } |
| 256 | 266 |
| 257 CSSPrimitiveValue::CSSPrimitiveValue(RGBA32 color) | 267 CSSPrimitiveValue::CSSPrimitiveValue(RGBA32 color) |
| 258 : CSSValue(PrimitiveClass) | 268 : CSSValue(PrimitiveClass) |
| 259 { | 269 { |
| 260 m_primitiveUnitType = CSS_RGBCOLOR; | 270 m_primitiveUnitType = CSS_RGBCOLOR; |
| (...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 390 void CSSPrimitiveValue::cleanup() | 400 void CSSPrimitiveValue::cleanup() |
| 391 { | 401 { |
| 392 switch (static_cast<UnitType>(m_primitiveUnitType)) { | 402 switch (static_cast<UnitType>(m_primitiveUnitType)) { |
| 393 case CSS_CUSTOM_IDENT: | 403 case CSS_CUSTOM_IDENT: |
| 394 case CSS_STRING: | 404 case CSS_STRING: |
| 395 case CSS_URI: | 405 case CSS_URI: |
| 396 case CSS_ATTR: | 406 case CSS_ATTR: |
| 397 if (m_value.string) | 407 if (m_value.string) |
| 398 m_value.string->deref(); | 408 m_value.string->deref(); |
| 399 break; | 409 break; |
| 410 case CSS_VARIABLE_REFERENCE: | |
| 411 if (m_value.variableData) | |
| 412 m_value.variableData->deref(); | |
| 413 break; | |
| 400 case CSS_COUNTER: | 414 case CSS_COUNTER: |
| 401 // We must not call deref() when oilpan is enabled because m_value.count er is traced. | 415 // We must not call deref() when oilpan is enabled because m_value.count er is traced. |
| 402 #if !ENABLE(OILPAN) | 416 #if !ENABLE(OILPAN) |
| 403 m_value.counter->deref(); | 417 m_value.counter->deref(); |
| 404 #endif | 418 #endif |
| 405 break; | 419 break; |
| 406 case CSS_RECT: | 420 case CSS_RECT: |
| 407 // We must not call deref() when oilpan is enabled because m_value.rect is traced. | 421 // We must not call deref() when oilpan is enabled because m_value.rect is traced. |
| 408 #if !ENABLE(OILPAN) | 422 #if !ENABLE(OILPAN) |
| 409 m_value.rect->deref(); | 423 m_value.rect->deref(); |
| (...skipping 403 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 813 switch (m_primitiveUnitType) { | 827 switch (m_primitiveUnitType) { |
| 814 case CSS_CUSTOM_IDENT: | 828 case CSS_CUSTOM_IDENT: |
| 815 case CSS_STRING: | 829 case CSS_STRING: |
| 816 case CSS_ATTR: | 830 case CSS_ATTR: |
| 817 case CSS_URI: | 831 case CSS_URI: |
| 818 return m_value.string; | 832 return m_value.string; |
| 819 case CSS_VALUE_ID: | 833 case CSS_VALUE_ID: |
| 820 return valueName(m_value.valueID); | 834 return valueName(m_value.valueID); |
| 821 case CSS_PROPERTY_ID: | 835 case CSS_PROPERTY_ID: |
| 822 return propertyName(m_value.propertyID); | 836 return propertyName(m_value.propertyID); |
| 837 case CSS_VARIABLE_REFERENCE: | |
| 838 return m_value.variableData->string(); | |
| 823 default: | 839 default: |
| 824 break; | 840 break; |
| 825 } | 841 } |
| 826 | 842 |
| 827 return String(); | 843 return String(); |
| 828 } | 844 } |
| 829 | 845 |
| 830 static String formatNumber(double number, const char* suffix, unsigned suffixLen gth) | 846 static String formatNumber(double number, const char* suffix, unsigned suffixLen gth) |
| 831 { | 847 { |
| 832 #if OS(WIN) && _MSC_VER < 1900 | 848 #if OS(WIN) && _MSC_VER < 1900 |
| (...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 922 case CSS_RECT: | 938 case CSS_RECT: |
| 923 case CSS_QUAD: | 939 case CSS_QUAD: |
| 924 case CSS_RGBCOLOR: | 940 case CSS_RGBCOLOR: |
| 925 case CSS_PAIR: | 941 case CSS_PAIR: |
| 926 case CSS_CALC: | 942 case CSS_CALC: |
| 927 case CSS_SHAPE: | 943 case CSS_SHAPE: |
| 928 case CSS_IDENT: | 944 case CSS_IDENT: |
| 929 case CSS_CALC_PERCENTAGE_WITH_NUMBER: | 945 case CSS_CALC_PERCENTAGE_WITH_NUMBER: |
| 930 case CSS_CALC_PERCENTAGE_WITH_LENGTH: | 946 case CSS_CALC_PERCENTAGE_WITH_LENGTH: |
| 931 case CSS_QEM: | 947 case CSS_QEM: |
| 948 case CSS_VARIABLE_REFERENCE: | |
| 932 break; | 949 break; |
| 933 }; | 950 }; |
| 934 ASSERT_NOT_REACHED(); | 951 ASSERT_NOT_REACHED(); |
| 935 return ""; | 952 return ""; |
| 936 } | 953 } |
| 937 | 954 |
| 938 String CSSPrimitiveValue::customCSSText() const | 955 String CSSPrimitiveValue::customCSSText() const |
| 939 { | 956 { |
| 940 if (m_hasCachedCSSText) { | 957 if (m_hasCachedCSSText) { |
| 941 ASSERT(cssTextCache().contains(this)); | 958 ASSERT(cssTextCache().contains(this)); |
| (...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1042 } | 1059 } |
| 1043 case CSS_PAIR: | 1060 case CSS_PAIR: |
| 1044 text = getPairValue()->cssText(); | 1061 text = getPairValue()->cssText(); |
| 1045 break; | 1062 break; |
| 1046 case CSS_CALC: | 1063 case CSS_CALC: |
| 1047 text = m_value.calc->cssText(); | 1064 text = m_value.calc->cssText(); |
| 1048 break; | 1065 break; |
| 1049 case CSS_SHAPE: | 1066 case CSS_SHAPE: |
| 1050 text = m_value.shape->cssText(); | 1067 text = m_value.shape->cssText(); |
| 1051 break; | 1068 break; |
| 1069 case CSS_VARIABLE_REFERENCE: | |
| 1070 text = "var(" + String(m_value.string) + ")"; | |
|
Timothy Loh
2015/07/23 08:11:46
Looks wrong, we only have m_value.variableData, ri
| |
| 1071 break; | |
| 1052 } | 1072 } |
| 1053 | 1073 |
| 1054 ASSERT(!cssTextCache().contains(this)); | 1074 ASSERT(!cssTextCache().contains(this)); |
| 1055 cssTextCache().set(this, text); | 1075 cssTextCache().set(this, text); |
| 1056 m_hasCachedCSSText = true; | 1076 m_hasCachedCSSText = true; |
| 1057 return text; | 1077 return text; |
| 1058 } | 1078 } |
| 1059 | 1079 |
| 1060 bool CSSPrimitiveValue::equals(const CSSPrimitiveValue& other) const | 1080 bool CSSPrimitiveValue::equals(const CSSPrimitiveValue& other) const |
| 1061 { | 1081 { |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1094 case CSS_FR: | 1114 case CSS_FR: |
| 1095 return m_value.num == other.m_value.num; | 1115 return m_value.num == other.m_value.num; |
| 1096 case CSS_PROPERTY_ID: | 1116 case CSS_PROPERTY_ID: |
| 1097 return m_value.propertyID == other.m_value.propertyID; | 1117 return m_value.propertyID == other.m_value.propertyID; |
| 1098 case CSS_VALUE_ID: | 1118 case CSS_VALUE_ID: |
| 1099 return m_value.valueID == other.m_value.valueID; | 1119 return m_value.valueID == other.m_value.valueID; |
| 1100 case CSS_CUSTOM_IDENT: | 1120 case CSS_CUSTOM_IDENT: |
| 1101 case CSS_STRING: | 1121 case CSS_STRING: |
| 1102 case CSS_URI: | 1122 case CSS_URI: |
| 1103 case CSS_ATTR: | 1123 case CSS_ATTR: |
| 1124 case CSS_VARIABLE_REFERENCE: | |
| 1104 return equal(m_value.string, other.m_value.string); | 1125 return equal(m_value.string, other.m_value.string); |
|
Timothy Loh
2015/07/23 08:11:46
Like above, isn't m_value.string invalid for CSS_V
| |
| 1105 case CSS_COUNTER: | 1126 case CSS_COUNTER: |
| 1106 return m_value.counter && other.m_value.counter && m_value.counter->equa ls(*other.m_value.counter); | 1127 return m_value.counter && other.m_value.counter && m_value.counter->equa ls(*other.m_value.counter); |
| 1107 case CSS_RECT: | 1128 case CSS_RECT: |
| 1108 return m_value.rect && other.m_value.rect && m_value.rect->equals(*other .m_value.rect); | 1129 return m_value.rect && other.m_value.rect && m_value.rect->equals(*other .m_value.rect); |
| 1109 case CSS_QUAD: | 1130 case CSS_QUAD: |
| 1110 return m_value.quad && other.m_value.quad && m_value.quad->equals(*other .m_value.quad); | 1131 return m_value.quad && other.m_value.quad && m_value.quad->equals(*other .m_value.quad); |
| 1111 case CSS_RGBCOLOR: | 1132 case CSS_RGBCOLOR: |
| 1112 return m_value.rgbcolor == other.m_value.rgbcolor; | 1133 return m_value.rgbcolor == other.m_value.rgbcolor; |
| 1113 case CSS_PAIR: | 1134 case CSS_PAIR: |
| 1114 return m_value.pair && other.m_value.pair && m_value.pair->equals(*other .m_value.pair); | 1135 return m_value.pair && other.m_value.pair && m_value.pair->equals(*other .m_value.pair); |
| (...skipping 28 matching lines...) Expand all Loading... | |
| 1143 visitor->trace(m_value.shape); | 1164 visitor->trace(m_value.shape); |
| 1144 break; | 1165 break; |
| 1145 default: | 1166 default: |
| 1146 break; | 1167 break; |
| 1147 } | 1168 } |
| 1148 #endif | 1169 #endif |
| 1149 CSSValue::traceAfterDispatch(visitor); | 1170 CSSValue::traceAfterDispatch(visitor); |
| 1150 } | 1171 } |
| 1151 | 1172 |
| 1152 } // namespace blink | 1173 } // namespace blink |
| OLD | NEW |