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, |
(...skipping 18 matching lines...) Expand all Loading... | |
29 #include "core/css/Counter.h" | 29 #include "core/css/Counter.h" |
30 #include "core/css/Pair.h" | 30 #include "core/css/Pair.h" |
31 #include "core/css/Rect.h" | 31 #include "core/css/Rect.h" |
32 #include "core/css/StyleSheetContents.h" | 32 #include "core/css/StyleSheetContents.h" |
33 #include "core/dom/Node.h" | 33 #include "core/dom/Node.h" |
34 #include "core/rendering/style/RenderStyle.h" | 34 #include "core/rendering/style/RenderStyle.h" |
35 #include "platform/Decimal.h" | 35 #include "platform/Decimal.h" |
36 #include "platform/LayoutUnit.h" | 36 #include "platform/LayoutUnit.h" |
37 #include "platform/fonts/FontMetrics.h" | 37 #include "platform/fonts/FontMetrics.h" |
38 #include "wtf/StdLibExtras.h" | 38 #include "wtf/StdLibExtras.h" |
39 #include "wtf/ThreadSpecific.h" | |
40 #include "wtf/Threading.h" | |
39 #include "wtf/text/StringBuffer.h" | 41 #include "wtf/text/StringBuffer.h" |
40 #include "wtf/text/StringBuilder.h" | 42 #include "wtf/text/StringBuilder.h" |
41 | 43 |
42 using namespace WTF; | 44 using namespace WTF; |
43 | 45 |
44 namespace blink { | 46 namespace blink { |
45 | 47 |
48 namespace { | |
49 | |
46 // Max/min values for CSS, needs to slightly smaller/larger than the true max/mi n values to allow for rounding without overflowing. | 50 // Max/min values for CSS, needs to slightly smaller/larger than the true max/mi n values to allow for rounding without overflowing. |
47 // Subtract two (rather than one) to allow for values to be converted to float a nd back without exceeding the LayoutUnit::max. | 51 // Subtract two (rather than one) to allow for values to be converted to float a nd back without exceeding the LayoutUnit::max. |
48 const int maxValueForCssLength = INT_MAX / kFixedPointDenominator - 2; | 52 const int maxValueForCssLength = INT_MAX / kFixedPointDenominator - 2; |
49 const int minValueForCssLength = INT_MIN / kFixedPointDenominator + 2; | 53 const int minValueForCssLength = INT_MIN / kFixedPointDenominator + 2; |
50 | 54 |
51 static inline bool isValidCSSUnitTypeForDoubleConversion(CSSPrimitiveValue::Unit Type unitType) | 55 static inline bool isValidCSSUnitTypeForDoubleConversion(CSSPrimitiveValue::Unit Type unitType) |
52 { | 56 { |
53 switch (unitType) { | 57 switch (unitType) { |
54 case CSSPrimitiveValue::CSS_CALC: | 58 case CSSPrimitiveValue::CSS_CALC: |
55 case CSSPrimitiveValue::CSS_CALC_PERCENTAGE_WITH_NUMBER: | 59 case CSSPrimitiveValue::CSS_CALC_PERCENTAGE_WITH_NUMBER: |
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
132 table.set(String("vh"), CSSPrimitiveValue::CSS_VH); | 136 table.set(String("vh"), CSSPrimitiveValue::CSS_VH); |
133 table.set(String("vmin"), CSSPrimitiveValue::CSS_VMIN); | 137 table.set(String("vmin"), CSSPrimitiveValue::CSS_VMIN); |
134 table.set(String("vmax"), CSSPrimitiveValue::CSS_VMAX); | 138 table.set(String("vmax"), CSSPrimitiveValue::CSS_VMAX); |
135 table.set(String("rem"), CSSPrimitiveValue::CSS_REMS); | 139 table.set(String("rem"), CSSPrimitiveValue::CSS_REMS); |
136 table.set(String("fr"), CSSPrimitiveValue::CSS_FR); | 140 table.set(String("fr"), CSSPrimitiveValue::CSS_FR); |
137 table.set(String("turn"), CSSPrimitiveValue::CSS_TURN); | 141 table.set(String("turn"), CSSPrimitiveValue::CSS_TURN); |
138 table.set(String("ch"), CSSPrimitiveValue::CSS_CHS); | 142 table.set(String("ch"), CSSPrimitiveValue::CSS_CHS); |
139 return table; | 143 return table; |
140 } | 144 } |
141 | 145 |
146 StringToUnitTable& unitTable() | |
147 { | |
148 DEFINE_STATIC_LOCAL(StringToUnitTable, unitTable, (createStringToUnitTable() )); | |
149 return unitTable; | |
150 } | |
151 | |
152 } // namespace | |
153 | |
154 void CSSPrimitiveValue::initUnitTable() | |
155 { | |
156 // Make sure we initialize this during blink initialization | |
157 // to avoid racy static local initialization. | |
158 unitTable(); | |
159 } | |
160 | |
142 CSSPrimitiveValue::UnitType CSSPrimitiveValue::fromName(const String& unit) | 161 CSSPrimitiveValue::UnitType CSSPrimitiveValue::fromName(const String& unit) |
143 { | 162 { |
144 DEFINE_STATIC_LOCAL(StringToUnitTable, unitTable, (createStringToUnitTable() )); | 163 return unitTable().get(unit.lower()); |
145 return unitTable.get(unit.lower()); | |
146 } | 164 } |
147 | 165 |
148 CSSPrimitiveValue::UnitCategory CSSPrimitiveValue::unitCategory(UnitType type) | 166 CSSPrimitiveValue::UnitCategory CSSPrimitiveValue::unitCategory(UnitType type) |
149 { | 167 { |
150 // Here we violate the spec (http://www.w3.org/TR/DOM-Level-2-Style/css.html #CSS-CSSPrimitiveValue) and allow conversions | 168 // Here we violate the spec (http://www.w3.org/TR/DOM-Level-2-Style/css.html #CSS-CSSPrimitiveValue) and allow conversions |
151 // between CSS_PX and relative lengths (see cssPixelsPerInch comment in core /css/CSSHelper.h for the topic treatment). | 169 // between CSS_PX and relative lengths (see cssPixelsPerInch comment in core /css/CSSHelper.h for the topic treatment). |
152 switch (type) { | 170 switch (type) { |
153 case CSS_NUMBER: | 171 case CSS_NUMBER: |
154 return CSSPrimitiveValue::UNumber; | 172 return CSSPrimitiveValue::UNumber; |
155 case CSS_PERCENTAGE: | 173 case CSS_PERCENTAGE: |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
191 case CSSValueCurrentcolor: | 209 case CSSValueCurrentcolor: |
192 return true; | 210 return true; |
193 default: | 211 default: |
194 return false; | 212 return false; |
195 } | 213 } |
196 } | 214 } |
197 | 215 |
198 typedef HashMap<const CSSPrimitiveValue*, String> CSSTextCache; | 216 typedef HashMap<const CSSPrimitiveValue*, String> CSSTextCache; |
199 static CSSTextCache& cssTextCache() | 217 static CSSTextCache& cssTextCache() |
200 { | 218 { |
201 DEFINE_STATIC_LOCAL(CSSTextCache, cache, ()); | 219 AtomicallyInitializedStaticReference(ThreadSpecific<CSSTextCache>, cache, ne w ThreadSpecific<CSSTextCache>()); |
sof
2015/12/02 13:32:41
fwiw, http/tests/misc/client-hints-picture-source-
| |
202 return cache; | 220 return *cache; |
203 } | 221 } |
204 | 222 |
205 CSSPrimitiveValue::UnitType CSSPrimitiveValue::primitiveType() const | 223 CSSPrimitiveValue::UnitType CSSPrimitiveValue::primitiveType() const |
206 { | 224 { |
207 if (m_primitiveUnitType == CSS_PROPERTY_ID || m_primitiveUnitType == CSS_VAL UE_ID) | 225 if (m_primitiveUnitType == CSS_PROPERTY_ID || m_primitiveUnitType == CSS_VAL UE_ID) |
208 return CSS_IDENT; | 226 return CSS_IDENT; |
209 | 227 |
210 if (m_primitiveUnitType != CSS_CALC) | 228 if (m_primitiveUnitType != CSS_CALC) |
211 return static_cast<UnitType>(m_primitiveUnitType); | 229 return static_cast<UnitType>(m_primitiveUnitType); |
212 | 230 |
(...skipping 1007 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1220 visitor->trace(m_value.shape); | 1238 visitor->trace(m_value.shape); |
1221 break; | 1239 break; |
1222 default: | 1240 default: |
1223 break; | 1241 break; |
1224 } | 1242 } |
1225 #endif | 1243 #endif |
1226 CSSValue::traceAfterDispatch(visitor); | 1244 CSSValue::traceAfterDispatch(visitor); |
1227 } | 1245 } |
1228 | 1246 |
1229 } // namespace blink | 1247 } // namespace blink |
OLD | NEW |