Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(394)

Side by Side Diff: Source/core/css/resolver/StyleBuilderConverter.cpp

Issue 1164573002: CSSValue Immediates: Change CSSValue to an object instead of a pointer (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: (Hopefully) Builds with oilpan now Created 5 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2013 Google Inc. All rights reserved. 2 * Copyright (C) 2013 Google Inc. All rights reserved.
3 * 3 *
4 * * Redistributions of source code must retain the above copyright 4 * * Redistributions of source code must retain the above copyright
5 * notice, this list of conditions and the following disclaimer. 5 * notice, this list of conditions and the following disclaimer.
6 * * Redistributions in binary form must reproduce the above 6 * * Redistributions in binary form must reproduce the above
7 * copyright notice, this list of conditions and the following disclaimer 7 * copyright notice, this list of conditions and the following disclaimer
8 * in the documentation and/or other materials provided with the 8 * in the documentation and/or other materials provided with the
9 * distribution. 9 * distribution.
10 * * Neither the name of Google Inc. nor the names of its 10 * * Neither the name of Google Inc. nor the names of its
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
49 if (primitiveValue->getValueID() == CSSValueMinContent) 49 if (primitiveValue->getValueID() == CSSValueMinContent)
50 return Length(MinContent); 50 return Length(MinContent);
51 51
52 if (primitiveValue->getValueID() == CSSValueMaxContent) 52 if (primitiveValue->getValueID() == CSSValueMaxContent)
53 return Length(MaxContent); 53 return Length(MaxContent);
54 54
55 // Fractional unit. 55 // Fractional unit.
56 if (primitiveValue->isFlex()) 56 if (primitiveValue->isFlex())
57 return GridLength(primitiveValue->getDoubleValue()); 57 return GridLength(primitiveValue->getDoubleValue());
58 58
59 return StyleBuilderConverter::convertLengthOrAuto(state, primitiveValue); 59 return StyleBuilderConverter::convertLengthOrAuto(state, CSSValue(*primitive Value));
60 } 60 }
61 61
62 } // namespace 62 } // namespace
63 63
64 PassRefPtr<StyleReflection> StyleBuilderConverter::convertBoxReflect(StyleResolv erState& state, CSSValue* value) 64 PassRefPtr<StyleReflection> StyleBuilderConverter::convertBoxReflect(StyleResolv erState& state, CSSValue value)
65 { 65 {
66 if (value->isPrimitiveValue()) { 66 if (value.isPrimitiveValue()) {
67 ASSERT(toCSSPrimitiveValue(value)->getValueID() == CSSValueNone); 67 ASSERT(toCSSPrimitiveValue(value).getValueID() == CSSValueNone);
68 return ComputedStyle::initialBoxReflect(); 68 return ComputedStyle::initialBoxReflect();
69 } 69 }
70 70
71 CSSReflectValue* reflectValue = toCSSReflectValue(value); 71 CSSReflectValue& reflectValue = toCSSReflectValue(value);
72 RefPtr<StyleReflection> reflection = StyleReflection::create(); 72 RefPtr<StyleReflection> reflection = StyleReflection::create();
73 reflection->setDirection(*reflectValue->direction()); 73 reflection->setDirection(*reflectValue.direction());
74 if (reflectValue->offset()) 74 if (reflectValue.offset())
75 reflection->setOffset(reflectValue->offset()->convertToLength(state.cssT oLengthConversionData())); 75 reflection->setOffset(reflectValue.offset()->convertToLength(state.cssTo LengthConversionData()));
76 NinePieceImage mask; 76 NinePieceImage mask;
77 mask.setMaskDefaults(); 77 mask.setMaskDefaults();
78 CSSToStyleMap::mapNinePieceImage(state, CSSPropertyWebkitBoxReflect, reflect Value->mask(), mask); 78 CSSToStyleMap::mapNinePieceImage(state, CSSPropertyWebkitBoxReflect, reflect Value.mask(), mask);
79 reflection->setMask(mask); 79 reflection->setMask(mask);
80 80
81 return reflection.release(); 81 return reflection.release();
82 } 82 }
83 83
84 Color StyleBuilderConverter::convertColor(StyleResolverState& state, CSSValue* v alue, bool forVisitedLink) 84 Color StyleBuilderConverter::convertColor(StyleResolverState& state, CSSValue va lue, bool forVisitedLink)
85 { 85 {
86 CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value); 86 CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value);
87 return state.document().textLinkColors().colorFromPrimitiveValue(primitiveVa lue, state.style()->color(), forVisitedLink); 87 return state.document().textLinkColors().colorFromPrimitiveValue(primitiveVa lue, state.style()->color(), forVisitedLink);
88 } 88 }
89 89
90 AtomicString StyleBuilderConverter::convertFragmentIdentifier(StyleResolverState & state, CSSValue* value) 90 AtomicString StyleBuilderConverter::convertFragmentIdentifier(StyleResolverState & state, CSSValue value)
91 { 91 {
92 CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value); 92 CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value);
93 if (primitiveValue->isURI()) 93 if (primitiveValue.isURI())
94 return SVGURIReference::fragmentIdentifierFromIRIString(primitiveValue-> getStringValue(), state.element()->treeScope()); 94 return SVGURIReference::fragmentIdentifierFromIRIString(primitiveValue.g etStringValue(), state.element()->treeScope());
95 return nullAtom; 95 return nullAtom;
96 } 96 }
97 97
98 LengthBox StyleBuilderConverter::convertClip(StyleResolverState& state, CSSValue * value) 98 LengthBox StyleBuilderConverter::convertClip(StyleResolverState& state, CSSValue value)
99 { 99 {
100 Rect* rect = toCSSPrimitiveValue(value)->getRectValue(); 100 Rect* rect = toCSSPrimitiveValue(value).getRectValue();
101 101
102 return LengthBox(convertLengthOrAuto(state, rect->top()), 102 return LengthBox(convertLengthOrAuto(state, CSSValue(*rect->top())),
103 convertLengthOrAuto(state, rect->right()), 103 convertLengthOrAuto(state, CSSValue(*rect->right())),
104 convertLengthOrAuto(state, rect->bottom()), 104 convertLengthOrAuto(state, CSSValue(*rect->bottom())),
105 convertLengthOrAuto(state, rect->left())); 105 convertLengthOrAuto(state, CSSValue(*rect->left())));
106 } 106 }
107 107
108 static FontDescription::GenericFamilyType convertGenericFamily(CSSValueID valueI D) 108 static FontDescription::GenericFamilyType convertGenericFamily(CSSValueID valueI D)
109 { 109 {
110 switch (valueID) { 110 switch (valueID) {
111 case CSSValueWebkitBody: 111 case CSSValueWebkitBody:
112 return FontDescription::StandardFamily; 112 return FontDescription::StandardFamily;
113 case CSSValueSerif: 113 case CSSValueSerif:
114 return FontDescription::SerifFamily; 114 return FontDescription::SerifFamily;
115 case CSSValueSansSerif: 115 case CSSValueSansSerif:
116 return FontDescription::SansSerifFamily; 116 return FontDescription::SansSerifFamily;
117 case CSSValueCursive: 117 case CSSValueCursive:
118 return FontDescription::CursiveFamily; 118 return FontDescription::CursiveFamily;
119 case CSSValueFantasy: 119 case CSSValueFantasy:
120 return FontDescription::FantasyFamily; 120 return FontDescription::FantasyFamily;
121 case CSSValueMonospace: 121 case CSSValueMonospace:
122 return FontDescription::MonospaceFamily; 122 return FontDescription::MonospaceFamily;
123 case CSSValueWebkitPictograph: 123 case CSSValueWebkitPictograph:
124 return FontDescription::PictographFamily; 124 return FontDescription::PictographFamily;
125 default: 125 default:
126 return FontDescription::NoFamily; 126 return FontDescription::NoFamily;
127 } 127 }
128 } 128 }
129 129
130 static bool convertFontFamilyName(StyleResolverState& state, CSSPrimitiveValue* primitiveValue, 130 static bool convertFontFamilyName(StyleResolverState& state, CSSPrimitiveValue& primitiveValue,
131 FontDescription::GenericFamilyType& genericFamily, AtomicString& familyName) 131 FontDescription::GenericFamilyType& genericFamily, AtomicString& familyName)
132 { 132 {
133 if (primitiveValue->isString()) { 133 if (primitiveValue.isString()) {
134 genericFamily = FontDescription::NoFamily; 134 genericFamily = FontDescription::NoFamily;
135 familyName = AtomicString(primitiveValue->getStringValue()); 135 familyName = AtomicString(primitiveValue.getStringValue());
136 } else if (state.document().settings()) { 136 } else if (state.document().settings()) {
137 genericFamily = convertGenericFamily(primitiveValue->getValueID()); 137 genericFamily = convertGenericFamily(primitiveValue.getValueID());
138 familyName = state.fontBuilder().genericFontFamilyName(genericFamily); 138 familyName = state.fontBuilder().genericFontFamilyName(genericFamily);
139 } 139 }
140 140
141 return !familyName.isEmpty(); 141 return !familyName.isEmpty();
142 } 142 }
143 143
144 FontDescription::FamilyDescription StyleBuilderConverter::convertFontFamily(Styl eResolverState& state, CSSValue* value) 144 FontDescription::FamilyDescription StyleBuilderConverter::convertFontFamily(Styl eResolverState& state, CSSValue value)
145 { 145 {
146 ASSERT(value->isValueList()); 146 ASSERT(value.isValueList());
147 147
148 FontDescription::FamilyDescription desc(FontDescription::NoFamily); 148 FontDescription::FamilyDescription desc(FontDescription::NoFamily);
149 FontFamily* currFamily = nullptr; 149 FontFamily* currFamily = nullptr;
150 150
151 for (auto& family : toCSSValueList(*value)) { 151 for (auto& family : toCSSValueList(value)) {
152 FontDescription::GenericFamilyType genericFamily = FontDescription::NoFa mily; 152 FontDescription::GenericFamilyType genericFamily = FontDescription::NoFa mily;
153 AtomicString familyName; 153 AtomicString familyName;
154 154
155 if (!convertFontFamilyName(state, toCSSPrimitiveValue(family.get()), gen ericFamily, familyName)) 155 if (!convertFontFamilyName(state, toCSSPrimitiveValue(family), genericFa mily, familyName))
156 continue; 156 continue;
157 157
158 if (!currFamily) { 158 if (!currFamily) {
159 currFamily = &desc.family; 159 currFamily = &desc.family;
160 } else { 160 } else {
161 RefPtr<SharedFontFamily> newFamily = SharedFontFamily::create(); 161 RefPtr<SharedFontFamily> newFamily = SharedFontFamily::create();
162 currFamily->appendFamily(newFamily); 162 currFamily->appendFamily(newFamily);
163 currFamily = newFamily.get(); 163 currFamily = newFamily.get();
164 } 164 }
165 165
166 currFamily->setFamily(familyName); 166 currFamily->setFamily(familyName);
167 167
168 if (genericFamily != FontDescription::NoFamily) 168 if (genericFamily != FontDescription::NoFamily)
169 desc.genericFamily = genericFamily; 169 desc.genericFamily = genericFamily;
170 } 170 }
171 171
172 return desc; 172 return desc;
173 } 173 }
174 174
175 PassRefPtr<FontFeatureSettings> StyleBuilderConverter::convertFontFeatureSetting s(StyleResolverState& state, CSSValue* value) 175 PassRefPtr<FontFeatureSettings> StyleBuilderConverter::convertFontFeatureSetting s(StyleResolverState& state, CSSValue value)
176 { 176 {
177 if (value->isPrimitiveValue() && toCSSPrimitiveValue(value)->getValueID() == CSSValueNormal) 177 if (value.isPrimitiveValue() && toCSSPrimitiveValue(value).getValueID() == C SSValueNormal)
178 return FontBuilder::initialFeatureSettings(); 178 return FontBuilder::initialFeatureSettings();
179 179
180 CSSValueList* list = toCSSValueList(value); 180 CSSValueList& list = toCSSValueList(value);
181 RefPtr<FontFeatureSettings> settings = FontFeatureSettings::create(); 181 RefPtr<FontFeatureSettings> settings = FontFeatureSettings::create();
182 int len = list->length(); 182 int len = list.length();
183 for (int i = 0; i < len; ++i) { 183 for (int i = 0; i < len; ++i) {
184 CSSFontFeatureValue* feature = toCSSFontFeatureValue(list->item(i)); 184 CSSFontFeatureValue& feature = toCSSFontFeatureValue(list.item(i));
185 settings->append(FontFeature(feature->tag(), feature->value())); 185 settings->append(FontFeature(feature.tag(), feature.value()));
186 } 186 }
187 return settings; 187 return settings;
188 } 188 }
189 189
190 static float computeFontSize(StyleResolverState& state, CSSPrimitiveValue* primi tiveValue, const FontDescription::Size& parentSize) 190 static float computeFontSize(StyleResolverState& state, CSSPrimitiveValue& primi tiveValue, const FontDescription::Size& parentSize)
191 { 191 {
192 float em = state.parentStyle()->specifiedFontSize(); 192 float em = state.parentStyle()->specifiedFontSize();
193 float rem = state.rootElementStyle() ? state.rootElementStyle()->specifiedFo ntSize() : 1.0f; 193 float rem = state.rootElementStyle() ? state.rootElementStyle()->specifiedFo ntSize() : 1.0f;
194 CSSToLengthConversionData::FontSizes fontSizes(em, rem, &state.parentStyle() ->font()); 194 CSSToLengthConversionData::FontSizes fontSizes(em, rem, &state.parentStyle() ->font());
195 CSSToLengthConversionData::ViewportSize viewportSize(state.document().layout View()); 195 CSSToLengthConversionData::ViewportSize viewportSize(state.document().layout View());
196 196
197 CSSToLengthConversionData conversionData(state.style(), fontSizes, viewportS ize, 1.0f); 197 CSSToLengthConversionData conversionData(state.style(), fontSizes, viewportS ize, 1.0f);
198 if (primitiveValue->isLength()) 198 if (primitiveValue.isLength())
199 return primitiveValue->computeLength<float>(conversionData); 199 return primitiveValue.computeLength<float>(conversionData);
200 if (primitiveValue->isCalculatedPercentageWithLength()) 200 if (primitiveValue.isCalculatedPercentageWithLength())
201 return primitiveValue->cssCalcValue()->toCalcValue(conversionData)->eval uate(parentSize.value); 201 return primitiveValue.cssCalcValue()->toCalcValue(conversionData)->evalu ate(parentSize.value);
202 202
203 ASSERT_NOT_REACHED(); 203 ASSERT_NOT_REACHED();
204 return 0; 204 return 0;
205 } 205 }
206 206
207 FontDescription::Size StyleBuilderConverter::convertFontSize(StyleResolverState& state, CSSValue* value) 207 FontDescription::Size StyleBuilderConverter::convertFontSize(StyleResolverState& state, CSSValue value)
208 { 208 {
209 CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value); 209 CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value);
210 210
211 FontDescription::Size parentSize(0, 0.0f, false); 211 FontDescription::Size parentSize(0, 0.0f, false);
212 212
213 // FIXME: Find out when parentStyle could be 0? 213 // FIXME: Find out when parentStyle could be 0?
214 if (state.parentStyle()) 214 if (state.parentStyle())
215 parentSize = state.parentFontDescription().size(); 215 parentSize = state.parentFontDescription().size();
216 216
217 if (CSSValueID valueID = primitiveValue->getValueID()) { 217 if (CSSValueID valueID = primitiveValue.getValueID()) {
218 switch (valueID) { 218 switch (valueID) {
219 case CSSValueXxSmall: 219 case CSSValueXxSmall:
220 case CSSValueXSmall: 220 case CSSValueXSmall:
221 case CSSValueSmall: 221 case CSSValueSmall:
222 case CSSValueMedium: 222 case CSSValueMedium:
223 case CSSValueLarge: 223 case CSSValueLarge:
224 case CSSValueXLarge: 224 case CSSValueXLarge:
225 case CSSValueXxLarge: 225 case CSSValueXxLarge:
226 case CSSValueWebkitXxxLarge: 226 case CSSValueWebkitXxxLarge:
227 return FontDescription::Size(FontSize::keywordSize(valueID), 0.0f, f alse); 227 return FontDescription::Size(FontSize::keywordSize(valueID), 0.0f, f alse);
228 case CSSValueLarger: 228 case CSSValueLarger:
229 return FontDescription::largerSize(parentSize); 229 return FontDescription::largerSize(parentSize);
230 case CSSValueSmaller: 230 case CSSValueSmaller:
231 return FontDescription::smallerSize(parentSize); 231 return FontDescription::smallerSize(parentSize);
232 default: 232 default:
233 ASSERT_NOT_REACHED(); 233 ASSERT_NOT_REACHED();
234 return FontBuilder::initialSize(); 234 return FontBuilder::initialSize();
235 } 235 }
236 } 236 }
237 237
238 bool parentIsAbsoluteSize = state.parentFontDescription().isAbsoluteSize(); 238 bool parentIsAbsoluteSize = state.parentFontDescription().isAbsoluteSize();
239 239
240 if (primitiveValue->isPercentage()) 240 if (primitiveValue.isPercentage())
241 return FontDescription::Size(0, (primitiveValue->getFloatValue() * paren tSize.value / 100.0f), parentIsAbsoluteSize); 241 return FontDescription::Size(0, (primitiveValue.getFloatValue() * parent Size.value / 100.0f), parentIsAbsoluteSize);
242 242
243 return FontDescription::Size(0, computeFontSize(state, primitiveValue, paren tSize), parentIsAbsoluteSize || !primitiveValue->isFontRelativeLength()); 243 return FontDescription::Size(0, computeFontSize(state, primitiveValue, paren tSize), parentIsAbsoluteSize || !primitiveValue.isFontRelativeLength());
244 } 244 }
245 245
246 float StyleBuilderConverter::convertFontSizeAdjust(StyleResolverState& state, CS SValue* value) 246 float StyleBuilderConverter::convertFontSizeAdjust(StyleResolverState& state, CS SValue value)
247 { 247 {
248 CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value); 248 CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value);
249 if (primitiveValue->getValueID() == CSSValueNone) 249 if (primitiveValue.getValueID() == CSSValueNone)
250 return FontBuilder::initialSizeAdjust(); 250 return FontBuilder::initialSizeAdjust();
251 251
252 ASSERT(primitiveValue->isNumber()); 252 ASSERT(primitiveValue.isNumber());
253 return primitiveValue->getFloatValue(); 253 return primitiveValue.getFloatValue();
254 } 254 }
255 255
256 FontWeight StyleBuilderConverter::convertFontWeight(StyleResolverState& state, C SSValue* value) 256 FontWeight StyleBuilderConverter::convertFontWeight(StyleResolverState& state, C SSValue value)
257 { 257 {
258 CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value); 258 CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value);
259 switch (primitiveValue->getValueID()) { 259 switch (primitiveValue.getValueID()) {
260 case CSSValueBolder: 260 case CSSValueBolder:
261 return FontDescription::bolderWeight(state.parentStyle()->fontDescriptio n().weight()); 261 return FontDescription::bolderWeight(state.parentStyle()->fontDescriptio n().weight());
262 case CSSValueLighter: 262 case CSSValueLighter:
263 return FontDescription::lighterWeight(state.parentStyle()->fontDescripti on().weight()); 263 return FontDescription::lighterWeight(state.parentStyle()->fontDescripti on().weight());
264 default: 264 default:
265 return *primitiveValue; 265 return primitiveValue;
266 } 266 }
267 } 267 }
268 268
269 FontDescription::VariantLigatures StyleBuilderConverter::convertFontVariantLigat ures(StyleResolverState&, CSSValue* value) 269 FontDescription::VariantLigatures StyleBuilderConverter::convertFontVariantLigat ures(StyleResolverState&, CSSValue value)
270 { 270 {
271 if (value->isValueList()) { 271 if (value.isValueList()) {
272 FontDescription::VariantLigatures ligatures; 272 FontDescription::VariantLigatures ligatures;
273 CSSValueList* valueList = toCSSValueList(value); 273 CSSValueList& valueList = toCSSValueList(value);
274 for (size_t i = 0; i < valueList->length(); ++i) { 274 for (size_t i = 0; i < valueList.length(); ++i) {
275 CSSValue* item = valueList->item(i); 275 CSSValue item = valueList.item(i);
276 CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(item); 276 CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(item);
277 switch (primitiveValue->getValueID()) { 277 switch (primitiveValue.getValueID()) {
278 case CSSValueNoCommonLigatures: 278 case CSSValueNoCommonLigatures:
279 ligatures.common = FontDescription::DisabledLigaturesState; 279 ligatures.common = FontDescription::DisabledLigaturesState;
280 break; 280 break;
281 case CSSValueCommonLigatures: 281 case CSSValueCommonLigatures:
282 ligatures.common = FontDescription::EnabledLigaturesState; 282 ligatures.common = FontDescription::EnabledLigaturesState;
283 break; 283 break;
284 case CSSValueNoDiscretionaryLigatures: 284 case CSSValueNoDiscretionaryLigatures:
285 ligatures.discretionary = FontDescription::DisabledLigaturesStat e; 285 ligatures.discretionary = FontDescription::DisabledLigaturesStat e;
286 break; 286 break;
287 case CSSValueDiscretionaryLigatures: 287 case CSSValueDiscretionaryLigatures:
(...skipping 12 matching lines...) Expand all
300 ligatures.contextual = FontDescription::EnabledLigaturesState; 300 ligatures.contextual = FontDescription::EnabledLigaturesState;
301 break; 301 break;
302 default: 302 default:
303 ASSERT_NOT_REACHED(); 303 ASSERT_NOT_REACHED();
304 break; 304 break;
305 } 305 }
306 } 306 }
307 return ligatures; 307 return ligatures;
308 } 308 }
309 309
310 ASSERT_WITH_SECURITY_IMPLICATION(value->isPrimitiveValue()); 310 ASSERT_WITH_SECURITY_IMPLICATION(value.isPrimitiveValue());
311 ASSERT(toCSSPrimitiveValue(value)->getValueID() == CSSValueNormal); 311 ASSERT(toCSSPrimitiveValue(value).getValueID() == CSSValueNormal);
312 return FontDescription::VariantLigatures(); 312 return FontDescription::VariantLigatures();
313 } 313 }
314 314
315 EGlyphOrientation StyleBuilderConverter::convertGlyphOrientation(StyleResolverSt ate&, CSSValue* value) 315 EGlyphOrientation StyleBuilderConverter::convertGlyphOrientation(StyleResolverSt ate&, CSSValue value)
316 { 316 {
317 if (!value->isPrimitiveValue()) 317 if (!value.isPrimitiveValue())
318 return GO_0DEG; 318 return GO_0DEG;
319 319
320 CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value); 320 CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value);
321 if (primitiveValue->primitiveType() != CSSPrimitiveValue::CSS_DEG) 321 if (primitiveValue.primitiveType() != CSSPrimitiveValue::CSS_DEG)
322 return GO_0DEG; 322 return GO_0DEG;
323 323
324 float angle = fabsf(fmodf(primitiveValue->getFloatValue(), 360.0f)); 324 float angle = fabsf(fmodf(primitiveValue.getFloatValue(), 360.0f));
325 325
326 if (angle <= 45.0f || angle > 315.0f) 326 if (angle <= 45.0f || angle > 315.0f)
327 return GO_0DEG; 327 return GO_0DEG;
328 if (angle > 45.0f && angle <= 135.0f) 328 if (angle > 45.0f && angle <= 135.0f)
329 return GO_90DEG; 329 return GO_90DEG;
330 if (angle > 135.0f && angle <= 225.0f) 330 if (angle > 135.0f && angle <= 225.0f)
331 return GO_180DEG; 331 return GO_180DEG;
332 return GO_270DEG; 332 return GO_270DEG;
333 } 333 }
334 334
335 StyleSelfAlignmentData StyleBuilderConverter::convertSelfOrDefaultAlignmentData( StyleResolverState&, CSSValue* value) 335 StyleSelfAlignmentData StyleBuilderConverter::convertSelfOrDefaultAlignmentData( StyleResolverState&, CSSValue value)
336 { 336 {
337 StyleSelfAlignmentData alignmentData = ComputedStyle::initialSelfAlignment() ; 337 StyleSelfAlignmentData alignmentData = ComputedStyle::initialSelfAlignment() ;
338 CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value); 338 CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value);
339 if (Pair* pairValue = primitiveValue->getPairValue()) { 339 if (Pair* pairValue = primitiveValue.getPairValue()) {
340 if (pairValue->first()->getValueID() == CSSValueLegacy) { 340 if (pairValue->first()->getValueID() == CSSValueLegacy) {
341 alignmentData.setPositionType(LegacyPosition); 341 alignmentData.setPositionType(LegacyPosition);
342 alignmentData.setPosition(*pairValue->second()); 342 alignmentData.setPosition(*pairValue->second());
343 } else { 343 } else {
344 alignmentData.setPosition(*pairValue->first()); 344 alignmentData.setPosition(*pairValue->first());
345 alignmentData.setOverflow(*pairValue->second()); 345 alignmentData.setOverflow(*pairValue->second());
346 } 346 }
347 } else { 347 } else {
348 alignmentData.setPosition(*primitiveValue); 348 alignmentData.setPosition(primitiveValue);
349 } 349 }
350 return alignmentData; 350 return alignmentData;
351 } 351 }
352 352
353 StyleContentAlignmentData StyleBuilderConverter::convertContentAlignmentData(Sty leResolverState&, CSSValue* value) 353 StyleContentAlignmentData StyleBuilderConverter::convertContentAlignmentData(Sty leResolverState&, CSSValue value)
354 { 354 {
355 StyleContentAlignmentData alignmentData = ComputedStyle::initialContentAlign ment(); 355 StyleContentAlignmentData alignmentData = ComputedStyle::initialContentAlign ment();
356 CSSContentDistributionValue* contentValue = toCSSContentDistributionValue(va lue); 356 CSSContentDistributionValue& contentValue = toCSSContentDistributionValue(va lue);
357 if (contentValue->distribution()->getValueID() != CSSValueInvalid) 357 if (contentValue.distribution()->getValueID() != CSSValueInvalid)
358 alignmentData.setDistribution(*contentValue->distribution()); 358 alignmentData.setDistribution(*contentValue.distribution());
359 if (contentValue->position()->getValueID() != CSSValueInvalid) 359 if (contentValue.position()->getValueID() != CSSValueInvalid)
360 alignmentData.setPosition(*contentValue->position()); 360 alignmentData.setPosition(*contentValue.position());
361 if (contentValue->overflow()->getValueID() != CSSValueInvalid) 361 if (contentValue.overflow()->getValueID() != CSSValueInvalid)
362 alignmentData.setOverflow(*contentValue->overflow()); 362 alignmentData.setOverflow(*contentValue.overflow());
363 return alignmentData; 363 return alignmentData;
364 } 364 }
365 365
366 GridAutoFlow StyleBuilderConverter::convertGridAutoFlow(StyleResolverState&, CSS Value* value) 366 GridAutoFlow StyleBuilderConverter::convertGridAutoFlow(StyleResolverState&, CSS Value value)
367 { 367 {
368 CSSValueList* list = toCSSValueList(value); 368 CSSValueList& list = toCSSValueList(value);
369 369
370 ASSERT(list->length() >= 1); 370 ASSERT(list.length() >= 1);
371 CSSPrimitiveValue* first = toCSSPrimitiveValue(list->item(0)); 371 CSSPrimitiveValue* first = &toCSSPrimitiveValue(list.item(0));
372 CSSPrimitiveValue* second = list->length() == 2 ? toCSSPrimitiveValue(list-> item(1)) : nullptr; 372 CSSPrimitiveValue* second = list.length() == 2 ? &toCSSPrimitiveValue(list.i tem(1)) : nullptr;
373 373
374 switch (first->getValueID()) { 374 switch (first->getValueID()) {
375 case CSSValueRow: 375 case CSSValueRow:
376 if (second && second->getValueID() == CSSValueDense) 376 if (second && second->getValueID() == CSSValueDense)
377 return AutoFlowRowDense; 377 return AutoFlowRowDense;
378 return AutoFlowRow; 378 return AutoFlowRow;
379 case CSSValueColumn: 379 case CSSValueColumn:
380 if (second && second->getValueID() == CSSValueDense) 380 if (second && second->getValueID() == CSSValueDense)
381 return AutoFlowColumnDense; 381 return AutoFlowColumnDense;
382 return AutoFlowColumn; 382 return AutoFlowColumn;
383 case CSSValueDense: 383 case CSSValueDense:
384 if (second && second->getValueID() == CSSValueColumn) 384 if (second && second->getValueID() == CSSValueColumn)
385 return AutoFlowColumnDense; 385 return AutoFlowColumnDense;
386 return AutoFlowRowDense; 386 return AutoFlowRowDense;
387 default: 387 default:
388 ASSERT_NOT_REACHED(); 388 ASSERT_NOT_REACHED();
389 return ComputedStyle::initialGridAutoFlow(); 389 return ComputedStyle::initialGridAutoFlow();
390 } 390 }
391 } 391 }
392 392
393 GridPosition StyleBuilderConverter::convertGridPosition(StyleResolverState&, CSS Value* value) 393 GridPosition StyleBuilderConverter::convertGridPosition(StyleResolverState&, CSS Value value)
394 { 394 {
395 // We accept the specification's grammar: 395 // We accept the specification's grammar:
396 // 'auto' | [ <integer> || <custom-ident> ] | [ span && [ <integer> || <cust om-ident> ] ] | <custom-ident> 396 // 'auto' | [ <integer> || <custom-ident> ] | [ span && [ <integer> || <cust om-ident> ] ] | <custom-ident>
397 397
398 GridPosition position; 398 GridPosition position;
399 399
400 if (value->isPrimitiveValue()) { 400 if (value.isPrimitiveValue()) {
401 CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value); 401 CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value);
402 // We translate <custom-ident> to <string> during parsing as it 402 // We translate <custom-ident> to <string> during parsing as it
403 // makes handling it more simple. 403 // makes handling it more simple.
404 if (primitiveValue->isString()) { 404 if (primitiveValue.isString()) {
405 position.setNamedGridArea(primitiveValue->getStringValue()); 405 position.setNamedGridArea(primitiveValue.getStringValue());
406 return position; 406 return position;
407 } 407 }
408 408
409 ASSERT(primitiveValue->getValueID() == CSSValueAuto); 409 ASSERT(primitiveValue.getValueID() == CSSValueAuto);
410 return position; 410 return position;
411 } 411 }
412 412
413 CSSValueList* values = toCSSValueList(value); 413 CSSValueList& values = toCSSValueList(value);
414 ASSERT(values->length()); 414 ASSERT(values.length());
415 415
416 bool isSpanPosition = false; 416 bool isSpanPosition = false;
417 // The specification makes the <integer> optional, in which case it default to '1'. 417 // The specification makes the <integer> optional, in which case it default to '1'.
418 int gridLineNumber = 1; 418 int gridLineNumber = 1;
419 String gridLineName; 419 String gridLineName;
420 420
421 auto it = values->begin(); 421 auto it = values.begin();
422 CSSPrimitiveValue* currentValue = toCSSPrimitiveValue(it->get()); 422 CSSPrimitiveValue* currentValue = &toCSSPrimitiveValue(*it);
423 if (currentValue->getValueID() == CSSValueSpan) { 423 if (currentValue->getValueID() == CSSValueSpan) {
424 isSpanPosition = true; 424 isSpanPosition = true;
425 ++it; 425 ++it;
426 currentValue = it != values->end() ? toCSSPrimitiveValue(it->get()) : 0; 426 currentValue = it != values.end() ? &toCSSPrimitiveValue(*it) : 0;
427 } 427 }
428 428
429 if (currentValue && currentValue->isNumber()) { 429 if (currentValue && currentValue->isNumber()) {
430 gridLineNumber = currentValue->getIntValue(); 430 gridLineNumber = currentValue->getIntValue();
431 ++it; 431 ++it;
432 currentValue = it != values->end() ? toCSSPrimitiveValue(it->get()) : 0; 432 currentValue = it != values.end() ? &toCSSPrimitiveValue(*it) : 0;
433 } 433 }
434 434
435 if (currentValue && currentValue->isString()) { 435 if (currentValue && currentValue->isString()) {
436 gridLineName = currentValue->getStringValue(); 436 gridLineName = currentValue->getStringValue();
437 ++it; 437 ++it;
438 } 438 }
439 439
440 ASSERT(it == values->end()); 440 ASSERT(it == values.end());
441 if (isSpanPosition) 441 if (isSpanPosition)
442 position.setSpanPosition(gridLineNumber, gridLineName); 442 position.setSpanPosition(gridLineNumber, gridLineName);
443 else 443 else
444 position.setExplicitPosition(gridLineNumber, gridLineName); 444 position.setExplicitPosition(gridLineNumber, gridLineName);
445 445
446 return position; 446 return position;
447 } 447 }
448 448
449 GridTrackSize StyleBuilderConverter::convertGridTrackSize(StyleResolverState& st ate, CSSValue* value) 449 GridTrackSize StyleBuilderConverter::convertGridTrackSize(StyleResolverState& st ate, CSSValue value)
450 { 450 {
451 if (value->isPrimitiveValue()) 451 if (value.isPrimitiveValue())
452 return GridTrackSize(convertGridTrackBreadth(state, toCSSPrimitiveValue( value))); 452 return GridTrackSize(convertGridTrackBreadth(state, &toCSSPrimitiveValue (value)));
453 453
454 CSSFunctionValue* minmaxFunction = toCSSFunctionValue(value); 454 CSSFunctionValue& minmaxFunction = toCSSFunctionValue(value);
455 ASSERT_WITH_SECURITY_IMPLICATION(minmaxFunction->length() == 2); 455 ASSERT_WITH_SECURITY_IMPLICATION(minmaxFunction.length() == 2);
456 GridLength minTrackBreadth(convertGridTrackBreadth(state, toCSSPrimitiveValu e(minmaxFunction->item(0)))); 456 GridLength minTrackBreadth(convertGridTrackBreadth(state, &toCSSPrimitiveVal ue(minmaxFunction.item(0))));
457 GridLength maxTrackBreadth(convertGridTrackBreadth(state, toCSSPrimitiveValu e(minmaxFunction->item(1)))); 457 GridLength maxTrackBreadth(convertGridTrackBreadth(state, &toCSSPrimitiveVal ue(minmaxFunction.item(1))));
458 return GridTrackSize(minTrackBreadth, maxTrackBreadth); 458 return GridTrackSize(minTrackBreadth, maxTrackBreadth);
459 } 459 }
460 460
461 bool StyleBuilderConverter::convertGridTrackList(CSSValue* value, Vector<GridTra ckSize>& trackSizes, NamedGridLinesMap& namedGridLines, OrderedNamedGridLines& o rderedNamedGridLines, StyleResolverState& state) 461 bool StyleBuilderConverter::convertGridTrackList(CSSValue value, Vector<GridTrac kSize>& trackSizes, NamedGridLinesMap& namedGridLines, OrderedNamedGridLines& or deredNamedGridLines, StyleResolverState& state)
462 { 462 {
463 // Handle 'none'. 463 // Handle 'none'.
464 if (value->isPrimitiveValue()) { 464 if (value.isPrimitiveValue()) {
465 CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value); 465 CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value);
466 return primitiveValue->getValueID() == CSSValueNone; 466 return primitiveValue.getValueID() == CSSValueNone;
467 } 467 }
468 468
469 if (!value->isValueList()) 469 if (!value.isValueList())
470 return false; 470 return false;
471 471
472 size_t currentNamedGridLine = 0; 472 size_t currentNamedGridLine = 0;
473 for (auto& currValue : *toCSSValueList(value)) { 473 for (auto& currValue : toCSSValueList(value)) {
474 if (currValue->isGridLineNamesValue()) { 474 if (currValue.isGridLineNamesValue()) {
475 for (auto& namedGridLineValue : toCSSGridLineNamesValue(*currValue)) { 475 for (auto& namedGridLineValue : toCSSGridLineNamesValue(currValue)) {
476 String namedGridLine = toCSSPrimitiveValue(namedGridLineValue.ge t())->getStringValue(); 476 String namedGridLine = toCSSPrimitiveValue(namedGridLineValue).g etStringValue();
477 NamedGridLinesMap::AddResult result = namedGridLines.add(namedGr idLine, Vector<size_t>()); 477 NamedGridLinesMap::AddResult result = namedGridLines.add(namedGr idLine, Vector<size_t>());
478 result.storedValue->value.append(currentNamedGridLine); 478 result.storedValue->value.append(currentNamedGridLine);
479 OrderedNamedGridLines::AddResult orderedInsertionResult = ordere dNamedGridLines.add(currentNamedGridLine, Vector<String>()); 479 OrderedNamedGridLines::AddResult orderedInsertionResult = ordere dNamedGridLines.add(currentNamedGridLine, Vector<String>());
480 orderedInsertionResult.storedValue->value.append(namedGridLine); 480 orderedInsertionResult.storedValue->value.append(namedGridLine);
481 } 481 }
482 continue; 482 continue;
483 } 483 }
484 484
485 ++currentNamedGridLine; 485 ++currentNamedGridLine;
486 trackSizes.append(convertGridTrackSize(state, currValue.get())); 486 trackSizes.append(convertGridTrackSize(state, currValue));
487 } 487 }
488 488
489 // The parser should have rejected any <track-list> without any <track-size> as 489 // The parser should have rejected any <track-list> without any <track-size> as
490 // this is not conformant to the syntax. 490 // this is not conformant to the syntax.
491 ASSERT(!trackSizes.isEmpty()); 491 ASSERT(!trackSizes.isEmpty());
492 return true; 492 return true;
493 } 493 }
494 494
495 void StyleBuilderConverter::convertOrderedNamedGridLinesMapToNamedGridLinesMap(c onst OrderedNamedGridLines& orderedNamedGridLines, NamedGridLinesMap& namedGridL ines) 495 void StyleBuilderConverter::convertOrderedNamedGridLinesMapToNamedGridLinesMap(c onst OrderedNamedGridLines& orderedNamedGridLines, NamedGridLinesMap& namedGridL ines)
496 { 496 {
(...skipping 25 matching lines...) Expand all
522 std::sort(startResult.storedValue->value.begin(), startResult.stored Value->value.end()); 522 std::sort(startResult.storedValue->value.begin(), startResult.stored Value->value.end());
523 } 523 }
524 { 524 {
525 NamedGridLinesMap::AddResult endResult = namedGridLines.add(namedGri dAreaEntry.key + "-end", Vector<size_t>()); 525 NamedGridLinesMap::AddResult endResult = namedGridLines.add(namedGri dAreaEntry.key + "-end", Vector<size_t>());
526 endResult.storedValue->value.append(areaSpan.resolvedFinalPosition.t oInt() + 1); 526 endResult.storedValue->value.append(areaSpan.resolvedFinalPosition.t oInt() + 1);
527 std::sort(endResult.storedValue->value.begin(), endResult.storedValu e->value.end()); 527 std::sort(endResult.storedValue->value.begin(), endResult.storedValu e->value.end());
528 } 528 }
529 } 529 }
530 } 530 }
531 531
532 Length StyleBuilderConverter::convertLength(const StyleResolverState& state, CSS Value* value) 532 Length StyleBuilderConverter::convertLength(const StyleResolverState& state, CSS Value value)
533 { 533 {
534 return toCSSPrimitiveValue(value)->convertToLength(state.cssToLengthConversi onData()); 534 return toCSSPrimitiveValue(value).convertToLength(state.cssToLengthConversio nData());
535 } 535 }
536 536
537 UnzoomedLength StyleBuilderConverter::convertUnzoomedLength(const StyleResolverS tate& state, CSSValue* value) 537 UnzoomedLength StyleBuilderConverter::convertUnzoomedLength(const StyleResolverS tate& state, CSSValue value)
538 { 538 {
539 return UnzoomedLength(toCSSPrimitiveValue(value)->convertToLength(state.cssT oLengthConversionData().copyWithAdjustedZoom(1.0f))); 539 return UnzoomedLength(toCSSPrimitiveValue(value).convertToLength(state.cssTo LengthConversionData().copyWithAdjustedZoom(1.0f)));
540 } 540 }
541 541
542 Length StyleBuilderConverter::convertLengthOrAuto(const StyleResolverState& stat e, CSSValue* value) 542 Length StyleBuilderConverter::convertLengthOrAuto(const StyleResolverState& stat e, CSSValue value)
543 { 543 {
544 CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value); 544 CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value);
545 if (primitiveValue->getValueID() == CSSValueAuto) 545 if (primitiveValue.getValueID() == CSSValueAuto)
546 return Length(Auto); 546 return Length(Auto);
547 return primitiveValue->convertToLength(state.cssToLengthConversionData()); 547 return primitiveValue.convertToLength(state.cssToLengthConversionData());
548 } 548 }
549 549
550 Length StyleBuilderConverter::convertLengthSizing(StyleResolverState& state, CSS Value* value) 550 Length StyleBuilderConverter::convertLengthSizing(StyleResolverState& state, CSS Value value)
551 { 551 {
552 CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value); 552 CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value);
553 switch (primitiveValue->getValueID()) { 553 switch (primitiveValue.getValueID()) {
554 case CSSValueInvalid: 554 case CSSValueInvalid:
555 return convertLength(state, value); 555 return convertLength(state, value);
556 case CSSValueIntrinsic: 556 case CSSValueIntrinsic:
557 return Length(Intrinsic); 557 return Length(Intrinsic);
558 case CSSValueMinIntrinsic: 558 case CSSValueMinIntrinsic:
559 return Length(MinIntrinsic); 559 return Length(MinIntrinsic);
560 case CSSValueWebkitMinContent: 560 case CSSValueWebkitMinContent:
561 return Length(MinContent); 561 return Length(MinContent);
562 case CSSValueWebkitMaxContent: 562 case CSSValueWebkitMaxContent:
563 return Length(MaxContent); 563 return Length(MaxContent);
564 case CSSValueWebkitFillAvailable: 564 case CSSValueWebkitFillAvailable:
565 return Length(FillAvailable); 565 return Length(FillAvailable);
566 case CSSValueWebkitFitContent: 566 case CSSValueWebkitFitContent:
567 return Length(FitContent); 567 return Length(FitContent);
568 case CSSValueAuto: 568 case CSSValueAuto:
569 return Length(Auto); 569 return Length(Auto);
570 default: 570 default:
571 ASSERT_NOT_REACHED(); 571 ASSERT_NOT_REACHED();
572 return Length(); 572 return Length();
573 } 573 }
574 } 574 }
575 575
576 Length StyleBuilderConverter::convertLengthMaxSizing(StyleResolverState& state, CSSValue* value) 576 Length StyleBuilderConverter::convertLengthMaxSizing(StyleResolverState& state, CSSValue value)
577 { 577 {
578 CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value); 578 CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value);
579 if (primitiveValue->getValueID() == CSSValueNone) 579 if (primitiveValue.getValueID() == CSSValueNone)
580 return Length(MaxSizeNone); 580 return Length(MaxSizeNone);
581 return convertLengthSizing(state, value); 581 return convertLengthSizing(state, value);
582 } 582 }
583 583
584 TabSize StyleBuilderConverter::convertLengthOrTabSpaces(StyleResolverState& stat e, CSSValue* value) 584 TabSize StyleBuilderConverter::convertLengthOrTabSpaces(StyleResolverState& stat e, CSSValue value)
585 { 585 {
586 CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value); 586 CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value);
587 if (primitiveValue->isNumber()) 587 if (primitiveValue.isNumber())
588 return TabSize(primitiveValue->getIntValue()); 588 return TabSize(primitiveValue.getIntValue());
589 return TabSize(primitiveValue->computeLength<float>(state.cssToLengthConvers ionData())); 589 return TabSize(primitiveValue.computeLength<float>(state.cssToLengthConversi onData()));
590 } 590 }
591 591
592 LineBoxContain StyleBuilderConverter::convertLineBoxContain(StyleResolverState&, CSSValue* value) 592 LineBoxContain StyleBuilderConverter::convertLineBoxContain(StyleResolverState&, CSSValue value)
593 { 593 {
594 if (value->isPrimitiveValue()) { 594 if (value.isPrimitiveValue()) {
595 ASSERT(toCSSPrimitiveValue(value)->getValueID() == CSSValueNone); 595 ASSERT(toCSSPrimitiveValue(value).getValueID() == CSSValueNone);
596 return LineBoxContainNone; 596 return LineBoxContainNone;
597 } 597 }
598 598
599 return toCSSLineBoxContainValue(value)->value(); 599 return toCSSLineBoxContainValue(value).value();
600 } 600 }
601 601
602 static CSSToLengthConversionData lineHeightToLengthConversionData(StyleResolverS tate& state) 602 static CSSToLengthConversionData lineHeightToLengthConversionData(StyleResolverS tate& state)
603 { 603 {
604 float multiplier = state.style()->effectiveZoom(); 604 float multiplier = state.style()->effectiveZoom();
605 if (LocalFrame* frame = state.document().frame()) 605 if (LocalFrame* frame = state.document().frame())
606 multiplier *= frame->textZoomFactor(); 606 multiplier *= frame->textZoomFactor();
607 return state.cssToLengthConversionData().copyWithAdjustedZoom(multiplier); 607 return state.cssToLengthConversionData().copyWithAdjustedZoom(multiplier);
608 } 608 }
609 609
610 Length StyleBuilderConverter::convertLineHeight(StyleResolverState& state, CSSVa lue* value) 610 Length StyleBuilderConverter::convertLineHeight(StyleResolverState& state, CSSVa lue value)
611 { 611 {
612 CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value); 612 CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value);
613 613
614 if (primitiveValue->isLength()) 614 if (primitiveValue.isLength())
615 return primitiveValue->computeLength<Length>(lineHeightToLengthConversio nData(state)); 615 return primitiveValue.computeLength<Length>(lineHeightToLengthConversion Data(state));
616 if (primitiveValue->isPercentage()) 616 if (primitiveValue.isPercentage())
617 return Length((state.style()->computedFontSize() * primitiveValue->getIn tValue()) / 100.0, Fixed); 617 return Length((state.style()->computedFontSize() * primitiveValue.getInt Value()) / 100.0, Fixed);
618 if (primitiveValue->isNumber()) 618 if (primitiveValue.isNumber())
619 return Length(primitiveValue->getDoubleValue() * 100.0, Percent); 619 return Length(primitiveValue.getDoubleValue() * 100.0, Percent);
620 if (primitiveValue->isCalculated()) { 620 if (primitiveValue.isCalculated()) {
621 Length zoomedLength = Length(primitiveValue->cssCalcValue()->toCalcValue (lineHeightToLengthConversionData(state))); 621 Length zoomedLength = Length(primitiveValue.cssCalcValue()->toCalcValue( lineHeightToLengthConversionData(state)));
622 return Length(valueForLength(zoomedLength, state.style()->fontSize()), F ixed); 622 return Length(valueForLength(zoomedLength, state.style()->fontSize()), F ixed);
623 } 623 }
624 624
625 ASSERT(primitiveValue->getValueID() == CSSValueNormal); 625 ASSERT(primitiveValue.getValueID() == CSSValueNormal);
626 return ComputedStyle::initialLineHeight(); 626 return ComputedStyle::initialLineHeight();
627 } 627 }
628 628
629 float StyleBuilderConverter::convertNumberOrPercentage(StyleResolverState& state , CSSValue* value) 629 float StyleBuilderConverter::convertNumberOrPercentage(StyleResolverState& state , CSSValue value)
630 { 630 {
631 CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value); 631 CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value);
632 ASSERT(primitiveValue->isNumber() || primitiveValue->isPercentage()); 632 ASSERT(primitiveValue.isNumber() || primitiveValue.isPercentage());
633 if (primitiveValue->isNumber()) 633 if (primitiveValue.isNumber())
634 return primitiveValue->getFloatValue(); 634 return primitiveValue.getFloatValue();
635 return primitiveValue->getFloatValue() / 100.0f; 635 return primitiveValue.getFloatValue() / 100.0f;
636 } 636 }
637 637
638 template <CSSValueID cssValueFor0, CSSValueID cssValueFor100> 638 template <CSSValueID cssValueFor0, CSSValueID cssValueFor100>
639 static Length convertPositionLength(StyleResolverState& state, CSSPrimitiveValue * primitiveValue) 639 static Length convertPositionLength(StyleResolverState& state, CSSPrimitiveValue * primitiveValue)
640 { 640 {
641 if (Pair* pair = primitiveValue->getPairValue()) { 641 if (Pair* pair = primitiveValue->getPairValue()) {
642 Length length = StyleBuilderConverter::convertLength(state, pair->second ()); 642 Length length = StyleBuilderConverter::convertLength(state, CSSValue(*pa ir->second()));
643 if (pair->first()->getValueID() == cssValueFor0) 643 if (pair->first()->getValueID() == cssValueFor0)
644 return length; 644 return length;
645 ASSERT(pair->first()->getValueID() == cssValueFor100); 645 ASSERT(pair->first()->getValueID() == cssValueFor100);
646 return length.subtractFromOneHundredPercent(); 646 return length.subtractFromOneHundredPercent();
647 } 647 }
648 648
649 return StyleBuilderConverter::convertLength(state, primitiveValue); 649 return StyleBuilderConverter::convertLength(state, CSSValue(*primitiveValue) );
650 } 650 }
651 651
652 LengthPoint StyleBuilderConverter::convertPosition(StyleResolverState& state, CS SValue* value) 652 LengthPoint StyleBuilderConverter::convertPosition(StyleResolverState& state, CS SValue value)
653 { 653 {
654 CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value); 654 CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value);
655 Pair* pair = primitiveValue->getPairValue(); 655 Pair* pair = primitiveValue.getPairValue();
656 return LengthPoint( 656 return LengthPoint(
657 convertPositionLength<CSSValueLeft, CSSValueRight>(state, pair->first()) , 657 convertPositionLength<CSSValueLeft, CSSValueRight>(state, pair->first()) ,
658 convertPositionLength<CSSValueTop, CSSValueBottom>(state, pair->second() ) 658 convertPositionLength<CSSValueTop, CSSValueBottom>(state, pair->second() )
659 ); 659 );
660 } 660 }
661 661
662 static float convertPerspectiveLength(StyleResolverState& state, CSSPrimitiveVal ue* primitiveValue) 662 static float convertPerspectiveLength(StyleResolverState& state, CSSPrimitiveVal ue& primitiveValue)
663 { 663 {
664 return std::max(primitiveValue->computeLength<float>(state.cssToLengthConver sionData()), 0.0f); 664 return std::max(primitiveValue.computeLength<float>(state.cssToLengthConvers ionData()), 0.0f);
665 } 665 }
666 666
667 float StyleBuilderConverter::convertPerspective(StyleResolverState& state, CSSVa lue* value) 667 float StyleBuilderConverter::convertPerspective(StyleResolverState& state, CSSVa lue value)
668 { 668 {
669 CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value); 669 CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value);
670 670
671 if (primitiveValue->getValueID() == CSSValueNone) 671 if (primitiveValue.getValueID() == CSSValueNone)
672 return ComputedStyle::initialPerspective(); 672 return ComputedStyle::initialPerspective();
673 return convertPerspectiveLength(state, primitiveValue); 673 return convertPerspectiveLength(state, primitiveValue);
674 } 674 }
675 675
676 template <CSSValueID cssValueFor0, CSSValueID cssValueFor100> 676 template <CSSValueID cssValueFor0, CSSValueID cssValueFor100>
677 static Length convertOriginLength(StyleResolverState& state, CSSPrimitiveValue* primitiveValue) 677 static Length convertOriginLength(StyleResolverState& state, CSSPrimitiveValue& primitiveValue)
678 { 678 {
679 if (primitiveValue->isValueID()) { 679 if (primitiveValue.isValueID()) {
680 switch (primitiveValue->getValueID()) { 680 switch (primitiveValue.getValueID()) {
681 case cssValueFor0: 681 case cssValueFor0:
682 return Length(0, Percent); 682 return Length(0, Percent);
683 case cssValueFor100: 683 case cssValueFor100:
684 return Length(100, Percent); 684 return Length(100, Percent);
685 case CSSValueCenter: 685 case CSSValueCenter:
686 return Length(50, Percent); 686 return Length(50, Percent);
687 default: 687 default:
688 ASSERT_NOT_REACHED(); 688 ASSERT_NOT_REACHED();
689 } 689 }
690 } 690 }
691 691
692 return StyleBuilderConverter::convertLength(state, primitiveValue); 692 return StyleBuilderConverter::convertLength(state, CSSValue(primitiveValue)) ;
693 } 693 }
694 694
695 LengthPoint StyleBuilderConverter::convertPerspectiveOrigin(StyleResolverState& state, CSSValue* value) 695 LengthPoint StyleBuilderConverter::convertPerspectiveOrigin(StyleResolverState& state, CSSValue value)
696 { 696 {
697 CSSValueList* list = toCSSValueList(value); 697 CSSValueList& list = toCSSValueList(value);
698 ASSERT(list->length() == 2); 698 ASSERT(list.length() == 2);
699 699
700 CSSPrimitiveValue* primitiveValueX = toCSSPrimitiveValue(list->item(0)); 700 CSSPrimitiveValue& primitiveValueX = toCSSPrimitiveValue(list.item(0));
701 CSSPrimitiveValue* primitiveValueY = toCSSPrimitiveValue(list->item(1)); 701 CSSPrimitiveValue& primitiveValueY = toCSSPrimitiveValue(list.item(1));
702 702
703 return LengthPoint( 703 return LengthPoint(
704 convertOriginLength<CSSValueLeft, CSSValueRight>(state, primitiveValueX) , 704 convertOriginLength<CSSValueLeft, CSSValueRight>(state, primitiveValueX) ,
705 convertOriginLength<CSSValueTop, CSSValueBottom>(state, primitiveValueY) 705 convertOriginLength<CSSValueTop, CSSValueBottom>(state, primitiveValueY)
706 ); 706 );
707 } 707 }
708 708
709 EPaintOrder StyleBuilderConverter::convertPaintOrder(StyleResolverState&, CSSVal ue* cssPaintOrder) 709 EPaintOrder StyleBuilderConverter::convertPaintOrder(StyleResolverState&, CSSVal ue cssPaintOrder)
710 { 710 {
711 if (cssPaintOrder->isValueList()) { 711 if (cssPaintOrder.isValueList()) {
712 int paintOrder = 0; 712 int paintOrder = 0;
713 const CSSValueList& list = *toCSSValueList(cssPaintOrder); 713 const CSSValueList& list = toCSSValueList(cssPaintOrder);
714 for (size_t i = 0; i < list.length(); ++i) { 714 for (size_t i = 0; i < list.length(); ++i) {
715 EPaintOrderType paintOrderType = PT_NONE; 715 EPaintOrderType paintOrderType = PT_NONE;
716 switch (toCSSPrimitiveValue(list.item(i))->getValueID()) { 716 switch (toCSSPrimitiveValue(list.item(i)).getValueID()) {
717 case CSSValueFill: 717 case CSSValueFill:
718 paintOrderType = PT_FILL; 718 paintOrderType = PT_FILL;
719 break; 719 break;
720 case CSSValueStroke: 720 case CSSValueStroke:
721 paintOrderType = PT_STROKE; 721 paintOrderType = PT_STROKE;
722 break; 722 break;
723 case CSSValueMarkers: 723 case CSSValueMarkers:
724 paintOrderType = PT_MARKERS; 724 paintOrderType = PT_MARKERS;
725 break; 725 break;
726 default: 726 default:
727 ASSERT_NOT_REACHED(); 727 ASSERT_NOT_REACHED();
728 break; 728 break;
729 } 729 }
730 730
731 paintOrder |= (paintOrderType << kPaintOrderBitwidth*i); 731 paintOrder |= (paintOrderType << kPaintOrderBitwidth*i);
732 } 732 }
733 return (EPaintOrder)paintOrder; 733 return (EPaintOrder)paintOrder;
734 } 734 }
735 735
736 return PO_NORMAL; 736 return PO_NORMAL;
737 } 737 }
738 738
739 Length StyleBuilderConverter::convertQuirkyLength(StyleResolverState& state, CSS Value* value) 739 Length StyleBuilderConverter::convertQuirkyLength(StyleResolverState& state, CSS Value value)
740 { 740 {
741 Length length = convertLengthOrAuto(state, value); 741 Length length = convertLengthOrAuto(state, value);
742 // This is only for margins which use __qem 742 // This is only for margins which use __qem
743 length.setQuirk(toCSSPrimitiveValue(value)->isQuirkValue()); 743 length.setQuirk(toCSSPrimitiveValue(value).isQuirkValue());
744 return length; 744 return length;
745 } 745 }
746 746
747 PassRefPtr<QuotesData> StyleBuilderConverter::convertQuotes(StyleResolverState&, CSSValue* value) 747 PassRefPtr<QuotesData> StyleBuilderConverter::convertQuotes(StyleResolverState&, CSSValue value)
748 { 748 {
749 if (value->isValueList()) { 749 if (value.isValueList()) {
750 CSSValueList* list = toCSSValueList(value); 750 CSSValueList& list = toCSSValueList(value);
751 RefPtr<QuotesData> quotes = QuotesData::create(); 751 RefPtr<QuotesData> quotes = QuotesData::create();
752 for (size_t i = 0; i < list->length(); i += 2) { 752 for (size_t i = 0; i < list.length(); i += 2) {
753 CSSValue* first = list->item(i); 753 CSSValue first = list.item(i);
754 CSSValue* second = list->item(i + 1); 754 CSSValue second = list.item(i + 1);
755 String startQuote = toCSSPrimitiveValue(first)->getStringValue(); 755 String startQuote = toCSSPrimitiveValue(first).getStringValue();
756 String endQuote = toCSSPrimitiveValue(second)->getStringValue(); 756 String endQuote = toCSSPrimitiveValue(second).getStringValue();
757 quotes->addPair(std::make_pair(startQuote, endQuote)); 757 quotes->addPair(std::make_pair(startQuote, endQuote));
758 } 758 }
759 return quotes.release(); 759 return quotes.release();
760 } 760 }
761 // FIXME: We should assert we're a primitive value with valueID = CSSValueNo ne 761 // FIXME: We should assert we're a primitive value with valueID = CSSValueNo ne
762 return QuotesData::create(); 762 return QuotesData::create();
763 } 763 }
764 764
765 LengthSize StyleBuilderConverter::convertRadius(StyleResolverState& state, CSSVa lue* value) 765 LengthSize StyleBuilderConverter::convertRadius(StyleResolverState& state, CSSVa lue value)
766 { 766 {
767 CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value); 767 CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value);
768 Pair* pair = primitiveValue->getPairValue(); 768 Pair* pair = primitiveValue.getPairValue();
769 Length radiusWidth = pair->first()->convertToLength(state.cssToLengthConvers ionData()); 769 Length radiusWidth = pair->first()->convertToLength(state.cssToLengthConvers ionData());
770 Length radiusHeight = pair->second()->convertToLength(state.cssToLengthConve rsionData()); 770 Length radiusHeight = pair->second()->convertToLength(state.cssToLengthConve rsionData());
771 float width = radiusWidth.value(); 771 float width = radiusWidth.value();
772 float height = radiusHeight.value(); 772 float height = radiusHeight.value();
773 ASSERT(width >= 0 && height >= 0); 773 ASSERT(width >= 0 && height >= 0);
774 if (width <= 0 || height <= 0) 774 if (width <= 0 || height <= 0)
775 return LengthSize(Length(0, Fixed), Length(0, Fixed)); 775 return LengthSize(Length(0, Fixed), Length(0, Fixed));
776 return LengthSize(radiusWidth, radiusHeight); 776 return LengthSize(radiusWidth, radiusHeight);
777 } 777 }
778 778
779 PassRefPtr<ShadowList> StyleBuilderConverter::convertShadow(StyleResolverState& state, CSSValue* value) 779 PassRefPtr<ShadowList> StyleBuilderConverter::convertShadow(StyleResolverState& state, CSSValue value)
780 { 780 {
781 if (value->isPrimitiveValue()) { 781 if (value.isPrimitiveValue()) {
782 ASSERT(toCSSPrimitiveValue(value)->getValueID() == CSSValueNone); 782 ASSERT(toCSSPrimitiveValue(value).getValueID() == CSSValueNone);
783 return PassRefPtr<ShadowList>(); 783 return PassRefPtr<ShadowList>();
784 } 784 }
785 785
786 const CSSValueList* valueList = toCSSValueList(value); 786 const CSSValueList& valueList = toCSSValueList(value);
787 size_t shadowCount = valueList->length(); 787 size_t shadowCount = valueList.length();
788 ShadowDataVector shadows; 788 ShadowDataVector shadows;
789 for (size_t i = 0; i < shadowCount; ++i) { 789 for (size_t i = 0; i < shadowCount; ++i) {
790 const CSSShadowValue* item = toCSSShadowValue(valueList->item(i)); 790 const CSSShadowValue& item = toCSSShadowValue(valueList.item(i));
791 float x = item->x->computeLength<float>(state.cssToLengthConversionData( )); 791 float x = item.x->computeLength<float>(state.cssToLengthConversionData() );
792 float y = item->y->computeLength<float>(state.cssToLengthConversionData( )); 792 float y = item.y->computeLength<float>(state.cssToLengthConversionData() );
793 float blur = item->blur ? item->blur->computeLength<float>(state.cssToLe ngthConversionData()) : 0; 793 float blur = item.blur ? item.blur->computeLength<float>(state.cssToLeng thConversionData()) : 0;
794 float spread = item->spread ? item->spread->computeLength<float>(state.c ssToLengthConversionData()) : 0; 794 float spread = item.spread ? item.spread->computeLength<float>(state.css ToLengthConversionData()) : 0;
795 ShadowStyle shadowStyle = item->style && item->style->getValueID() == CS SValueInset ? Inset : Normal; 795 ShadowStyle shadowStyle = item.style && item.style->getValueID() == CSSV alueInset ? Inset : Normal;
796 StyleColor color = StyleColor::currentColor(); 796 StyleColor color = StyleColor::currentColor();
797 if (item->color) 797 if (item.color)
798 color = convertStyleColor(state, item->color.get()); 798 color = convertStyleColor(state, CSSValue(*item.color));
799 shadows.append(ShadowData(FloatPoint(x, y), blur, spread, shadowStyle, c olor)); 799 shadows.append(ShadowData(FloatPoint(x, y), blur, spread, shadowStyle, c olor));
800 } 800 }
801 return ShadowList::adopt(shadows); 801 return ShadowList::adopt(shadows);
802 } 802 }
803 803
804 PassRefPtr<ShapeValue> StyleBuilderConverter::convertShapeValue(StyleResolverSta te& state, CSSValue* value) 804 PassRefPtr<ShapeValue> StyleBuilderConverter::convertShapeValue(StyleResolverSta te& state, CSSValue value)
805 { 805 {
806 if (value->isPrimitiveValue()) { 806 if (value.isPrimitiveValue()) {
807 ASSERT(toCSSPrimitiveValue(value)->getValueID() == CSSValueNone); 807 ASSERT(toCSSPrimitiveValue(value).getValueID() == CSSValueNone);
808 return nullptr; 808 return nullptr;
809 } 809 }
810 810
811 if (value->isImageValue() || value->isImageGeneratorValue() || value->isImag eSetValue()) 811 if (value.isImageValue() || value.isImageGeneratorValue() || value.isImageSe tValue())
812 return ShapeValue::createImageValue(state.styleImage(CSSPropertyShapeOut side, value)); 812 return ShapeValue::createImageValue(state.styleImage(CSSPropertyShapeOut side, value));
813 813
814 RefPtr<BasicShape> shape; 814 RefPtr<BasicShape> shape;
815 CSSBoxType cssBox = BoxMissing; 815 CSSBoxType cssBox = BoxMissing;
816 CSSValueList* valueList = toCSSValueList(value); 816 CSSValueList& valueList = toCSSValueList(value);
817 for (unsigned i = 0; i < valueList->length(); ++i) { 817 for (unsigned i = 0; i < valueList.length(); ++i) {
818 CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(valueList->item( i)); 818 CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(valueList.item(i ));
819 if (primitiveValue->isShape()) 819 if (primitiveValue.isShape())
820 shape = basicShapeForValue(state, primitiveValue->getShapeValue()); 820 shape = basicShapeForValue(state, primitiveValue.getShapeValue());
821 else 821 else
822 cssBox = CSSBoxType(*primitiveValue); 822 cssBox = CSSBoxType(primitiveValue);
823 } 823 }
824 824
825 if (shape) 825 if (shape)
826 return ShapeValue::createShapeValue(shape.release(), cssBox); 826 return ShapeValue::createShapeValue(shape.release(), cssBox);
827 827
828 ASSERT(cssBox != BoxMissing); 828 ASSERT(cssBox != BoxMissing);
829 return ShapeValue::createBoxShapeValue(cssBox); 829 return ShapeValue::createBoxShapeValue(cssBox);
830 } 830 }
831 831
832 float StyleBuilderConverter::convertSpacing(StyleResolverState& state, CSSValue* value) 832 float StyleBuilderConverter::convertSpacing(StyleResolverState& state, CSSValue value)
833 { 833 {
834 CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value); 834 CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value);
835 if (primitiveValue->getValueID() == CSSValueNormal) 835 if (primitiveValue.getValueID() == CSSValueNormal)
836 return 0; 836 return 0;
837 return primitiveValue->computeLength<float>(state.cssToLengthConversionData( )); 837 return primitiveValue.computeLength<float>(state.cssToLengthConversionData() );
838 } 838 }
839 839
840 PassRefPtr<SVGDashArray> StyleBuilderConverter::convertStrokeDasharray(StyleReso lverState& state, CSSValue* value) 840 PassRefPtr<SVGDashArray> StyleBuilderConverter::convertStrokeDasharray(StyleReso lverState& state, CSSValue value)
841 { 841 {
842 if (!value->isValueList()) 842 if (!value.isValueList())
843 return SVGComputedStyle::initialStrokeDashArray(); 843 return SVGComputedStyle::initialStrokeDashArray();
844 844
845 CSSValueList* dashes = toCSSValueList(value); 845 CSSValueList& dashes = toCSSValueList(value);
846 846
847 RefPtr<SVGDashArray> array = SVGDashArray::create(); 847 RefPtr<SVGDashArray> array = SVGDashArray::create();
848 size_t length = dashes->length(); 848 size_t length = dashes.length();
849 for (size_t i = 0; i < length; ++i) { 849 for (size_t i = 0; i < length; ++i) {
850 CSSValue* currValue = dashes->item(i); 850 CSSValue currValue = dashes.item(i);
851 if (!currValue->isPrimitiveValue()) 851 if (!currValue.isPrimitiveValue())
852 continue; 852 continue;
853 853
854 CSSPrimitiveValue* dash = toCSSPrimitiveValue(dashes->item(i)); 854 array->append(convertLength(state, currValue));
855 array->append(convertLength(state, dash));
856 } 855 }
857 856
858 return array.release(); 857 return array.release();
859 } 858 }
860 859
861 StyleColor StyleBuilderConverter::convertStyleColor(StyleResolverState& state, C SSValue* value, bool forVisitedLink) 860 StyleColor StyleBuilderConverter::convertStyleColor(StyleResolverState& state, C SSValue value, bool forVisitedLink)
862 { 861 {
863 CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value); 862 CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value);
864 if (primitiveValue->getValueID() == CSSValueCurrentcolor) 863 if (primitiveValue.getValueID() == CSSValueCurrentcolor)
865 return StyleColor::currentColor(); 864 return StyleColor::currentColor();
866 return state.document().textLinkColors().colorFromPrimitiveValue(primitiveVa lue, Color(), forVisitedLink); 865 return state.document().textLinkColors().colorFromPrimitiveValue(primitiveVa lue, Color(), forVisitedLink);
867 } 866 }
868 867
869 Color StyleBuilderConverter::convertSVGColor(StyleResolverState& state, CSSValue * value) 868 Color StyleBuilderConverter::convertSVGColor(StyleResolverState& state, CSSValue value)
870 { 869 {
871 CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value); 870 CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value);
872 if (primitiveValue->isRGBColor()) 871 if (primitiveValue.isRGBColor())
873 return primitiveValue->getRGBA32Value(); 872 return primitiveValue.getRGBA32Value();
874 ASSERT(primitiveValue->getValueID() == CSSValueCurrentcolor); 873 ASSERT(primitiveValue.getValueID() == CSSValueCurrentcolor);
875 return state.style()->color(); 874 return state.style()->color();
876 } 875 }
877 876
878 float StyleBuilderConverter::convertTextStrokeWidth(StyleResolverState& state, C SSValue* value) 877 float StyleBuilderConverter::convertTextStrokeWidth(StyleResolverState& state, C SSValue value)
879 { 878 {
880 CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value); 879 CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value);
881 if (primitiveValue->getValueID()) { 880 if (primitiveValue.getValueID()) {
882 float multiplier = convertLineWidth<float>(state, value); 881 float multiplier = convertLineWidth<float>(state, value);
883 return CSSPrimitiveValue::create(multiplier / 48, CSSPrimitiveValue::CSS _EMS)->computeLength<float>(state.cssToLengthConversionData()); 882 return CSSPrimitiveValue::create(multiplier / 48, CSSPrimitiveValue::CSS _EMS)->computeLength<float>(state.cssToLengthConversionData());
884 } 883 }
885 return primitiveValue->computeLength<float>(state.cssToLengthConversionData( )); 884 return primitiveValue.computeLength<float>(state.cssToLengthConversionData() );
886 } 885 }
887 886
888 TransformOrigin StyleBuilderConverter::convertTransformOrigin(StyleResolverState & state, CSSValue* value) 887 TransformOrigin StyleBuilderConverter::convertTransformOrigin(StyleResolverState & state, CSSValue value)
889 { 888 {
890 CSSValueList* list = toCSSValueList(value); 889 CSSValueList& list = toCSSValueList(value);
891 ASSERT(list->length() == 3); 890 ASSERT(list.length() == 3);
892 891
893 CSSPrimitiveValue* primitiveValueX = toCSSPrimitiveValue(list->item(0)); 892 CSSPrimitiveValue& primitiveValueX = toCSSPrimitiveValue(list.item(0));
894 CSSPrimitiveValue* primitiveValueY = toCSSPrimitiveValue(list->item(1)); 893 CSSPrimitiveValue& primitiveValueY = toCSSPrimitiveValue(list.item(1));
895 CSSPrimitiveValue* primitiveValueZ = toCSSPrimitiveValue(list->item(2));
896 894
897 return TransformOrigin( 895 return TransformOrigin(
898 convertOriginLength<CSSValueLeft, CSSValueRight>(state, primitiveValueX) , 896 convertOriginLength<CSSValueLeft, CSSValueRight>(state, primitiveValueX) ,
899 convertOriginLength<CSSValueTop, CSSValueBottom>(state, primitiveValueY) , 897 convertOriginLength<CSSValueTop, CSSValueBottom>(state, primitiveValueY) ,
900 StyleBuilderConverter::convertComputedLength<float>(state, primitiveValu eZ) 898 StyleBuilderConverter::convertComputedLength<float>(state, list.item(2))
901 ); 899 );
902 } 900 }
903 901
904 ScrollSnapPoints StyleBuilderConverter::convertSnapPoints(StyleResolverState& st ate, CSSValue* value) 902 ScrollSnapPoints StyleBuilderConverter::convertSnapPoints(StyleResolverState& st ate, CSSValue value)
905 { 903 {
906 // Handles: none | repeat(<length>) 904 // Handles: none | repeat(<length>)
907 ScrollSnapPoints points; 905 ScrollSnapPoints points;
908 points.hasRepeat = false; 906 points.hasRepeat = false;
909 907
910 if (!value->isFunctionValue()) 908 if (!value.isFunctionValue())
911 return points; 909 return points;
912 910
913 CSSFunctionValue* repeatFunction = toCSSFunctionValue(value); 911 CSSFunctionValue& repeatFunction = toCSSFunctionValue(value);
914 ASSERT_WITH_SECURITY_IMPLICATION(repeatFunction->length() == 1); 912 ASSERT_WITH_SECURITY_IMPLICATION(repeatFunction.length() == 1);
915 points.repeatOffset = convertLength(state, toCSSPrimitiveValue(repeatFunctio n->item(0))); 913 points.repeatOffset = convertLength(state, repeatFunction.item(0));
916 points.hasRepeat = true; 914 points.hasRepeat = true;
917 915
918 return points; 916 return points;
919 } 917 }
920 918
921 Vector<LengthPoint> StyleBuilderConverter::convertSnapCoordinates(StyleResolverS tate& state, CSSValue* value) 919 Vector<LengthPoint> StyleBuilderConverter::convertSnapCoordinates(StyleResolverS tate& state, CSSValue value)
922 { 920 {
923 // Handles: none | <position># 921 // Handles: none | <position>#
924 Vector<LengthPoint> coordinates; 922 Vector<LengthPoint> coordinates;
925 923
926 if (!value->isValueList()) 924 if (!value.isValueList())
927 return coordinates; 925 return coordinates;
928 926
929 CSSValueList* valueList = toCSSValueList(value); 927 CSSValueList& valueList = toCSSValueList(value);
930 coordinates.reserveInitialCapacity(valueList->length()); 928 coordinates.reserveInitialCapacity(valueList.length());
931 for (auto& snapCoordinate : *valueList) { 929 for (auto& snapCoordinate : valueList) {
932 coordinates.uncheckedAppend(convertPosition(state, snapCoordinate.get()) ); 930 coordinates.uncheckedAppend(convertPosition(state, snapCoordinate));
933 } 931 }
934 932
935 return coordinates; 933 return coordinates;
936 } 934 }
937 935
938 } // namespace blink 936 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698