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

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

Issue 1226123008: CSSValue Immediates: Replace CSSPrimitiveValue usage with const references (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@cssvalue_patch_4_attempt_2
Patch Set: Rebase Created 5 years, 4 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 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
57 57
58 // Fractional unit. 58 // Fractional unit.
59 if (primitiveValue.isFlex()) 59 if (primitiveValue.isFlex())
60 return GridLength(primitiveValue.getDoubleValue()); 60 return GridLength(primitiveValue.getDoubleValue());
61 61
62 return StyleBuilderConverter::convertLengthOrAuto(state, primitiveValue); 62 return StyleBuilderConverter::convertLengthOrAuto(state, primitiveValue);
63 } 63 }
64 64
65 } // namespace 65 } // namespace
66 66
67 PassRefPtr<StyleReflection> StyleBuilderConverter::convertBoxReflect(StyleResolv erState& state, CSSValue value) 67 PassRefPtr<StyleReflection> StyleBuilderConverter::convertBoxReflect(StyleResolv erState& state, const CSSValue& value)
68 { 68 {
69 if (value.isPrimitiveValue()) { 69 if (value.isPrimitiveValue()) {
70 ASSERT(toCSSPrimitiveValue(value).getValueID() == CSSValueNone); 70 ASSERT(toCSSPrimitiveValue(value).getValueID() == CSSValueNone);
71 return ComputedStyle::initialBoxReflect(); 71 return ComputedStyle::initialBoxReflect();
72 } 72 }
73 73
74 CSSReflectValue& reflectValue = toCSSReflectValue(value); 74 CSSReflectValue& reflectValue = toCSSReflectValue(value);
75 RefPtr<StyleReflection> reflection = StyleReflection::create(); 75 RefPtr<StyleReflection> reflection = StyleReflection::create();
76 reflection->setDirection(reflectValue.direction()); 76 reflection->setDirection(reflectValue.direction());
77 reflection->setOffset(reflectValue.offset().convertToLength(state.cssToLengt hConversionData())); 77 reflection->setOffset(reflectValue.offset().convertToLength(state.cssToLengt hConversionData()));
78 NinePieceImage mask; 78 NinePieceImage mask;
79 mask.setMaskDefaults(); 79 mask.setMaskDefaults();
80 CSSToStyleMap::mapNinePieceImage(state, CSSPropertyWebkitBoxReflect, reflect Value.mask(), mask); 80 CSSToStyleMap::mapNinePieceImage(state, CSSPropertyWebkitBoxReflect, reflect Value.mask(), mask);
81 reflection->setMask(mask); 81 reflection->setMask(mask);
82 82
83 return reflection.release(); 83 return reflection.release();
84 } 84 }
85 85
86 Color StyleBuilderConverter::convertColor(StyleResolverState& state, CSSValue va lue, bool forVisitedLink) 86 Color StyleBuilderConverter::convertColor(StyleResolverState& state, const CSSVa lue& value, bool forVisitedLink)
87 { 87 {
88 CSSPrimitiveValue primitiveValue = toCSSPrimitiveValue(value); 88 const CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value);
89 return state.document().textLinkColors().colorFromPrimitiveValue(primitiveVa lue, state.style()->color(), forVisitedLink); 89 return state.document().textLinkColors().colorFromPrimitiveValue(primitiveVa lue, state.style()->color(), forVisitedLink);
90 } 90 }
91 91
92 AtomicString StyleBuilderConverter::convertFragmentIdentifier(StyleResolverState & state, CSSValue value) 92 AtomicString StyleBuilderConverter::convertFragmentIdentifier(StyleResolverState & state, const CSSValue& value)
93 { 93 {
94 CSSPrimitiveValue primitiveValue = toCSSPrimitiveValue(value); 94 const CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value);
95 if (primitiveValue.isURI()) 95 if (primitiveValue.isURI())
96 return SVGURIReference::fragmentIdentifierFromIRIString(primitiveValue.g etStringValue(), state.element()->treeScope()); 96 return SVGURIReference::fragmentIdentifierFromIRIString(primitiveValue.g etStringValue(), state.element()->treeScope());
97 return nullAtom; 97 return nullAtom;
98 } 98 }
99 99
100 LengthBox StyleBuilderConverter::convertClip(StyleResolverState& state, CSSValue value) 100 LengthBox StyleBuilderConverter::convertClip(StyleResolverState& state, const CS SValue& value)
101 { 101 {
102 Rect* rect = toCSSPrimitiveValue(value).getRectValue(); 102 Rect* rect = toCSSPrimitiveValue(value).getRectValue();
103 103
104 return LengthBox(convertLengthOrAuto(state, rect->top()), 104 return LengthBox(convertLengthOrAuto(state, rect->top()),
105 convertLengthOrAuto(state, rect->right()), 105 convertLengthOrAuto(state, rect->right()),
106 convertLengthOrAuto(state, rect->bottom()), 106 convertLengthOrAuto(state, rect->bottom()),
107 convertLengthOrAuto(state, rect->left())); 107 convertLengthOrAuto(state, rect->left()));
108 } 108 }
109 109
110 static FontDescription::GenericFamilyType convertGenericFamily(CSSValueID valueI D) 110 static FontDescription::GenericFamilyType convertGenericFamily(CSSValueID valueI D)
(...skipping 25 matching lines...) Expand all
136 genericFamily = FontDescription::NoFamily; 136 genericFamily = FontDescription::NoFamily;
137 familyName = AtomicString(primitiveValue.getStringValue()); 137 familyName = AtomicString(primitiveValue.getStringValue());
138 } else if (state.document().settings()) { 138 } else if (state.document().settings()) {
139 genericFamily = convertGenericFamily(primitiveValue.getValueID()); 139 genericFamily = convertGenericFamily(primitiveValue.getValueID());
140 familyName = state.fontBuilder().genericFontFamilyName(genericFamily); 140 familyName = state.fontBuilder().genericFontFamilyName(genericFamily);
141 } 141 }
142 142
143 return !familyName.isEmpty(); 143 return !familyName.isEmpty();
144 } 144 }
145 145
146 FontDescription::FamilyDescription StyleBuilderConverter::convertFontFamily(Styl eResolverState& state, CSSValue value) 146 FontDescription::FamilyDescription StyleBuilderConverter::convertFontFamily(Styl eResolverState& state, const CSSValue& value)
147 { 147 {
148 ASSERT(value.isValueList()); 148 ASSERT(value.isValueList());
149 149
150 FontDescription::FamilyDescription desc(FontDescription::NoFamily); 150 FontDescription::FamilyDescription desc(FontDescription::NoFamily);
151 FontFamily* currFamily = nullptr; 151 FontFamily* currFamily = nullptr;
152 152
153 for (auto& family : toCSSValueList(value)) { 153 for (auto& family : toCSSValueList(value)) {
154 FontDescription::GenericFamilyType genericFamily = FontDescription::NoFa mily; 154 FontDescription::GenericFamilyType genericFamily = FontDescription::NoFa mily;
155 AtomicString familyName; 155 AtomicString familyName;
156 156
(...skipping 10 matching lines...) Expand all
167 167
168 currFamily->setFamily(familyName); 168 currFamily->setFamily(familyName);
169 169
170 if (genericFamily != FontDescription::NoFamily) 170 if (genericFamily != FontDescription::NoFamily)
171 desc.genericFamily = genericFamily; 171 desc.genericFamily = genericFamily;
172 } 172 }
173 173
174 return desc; 174 return desc;
175 } 175 }
176 176
177 PassRefPtr<FontFeatureSettings> StyleBuilderConverter::convertFontFeatureSetting s(StyleResolverState& state, CSSValue value) 177 PassRefPtr<FontFeatureSettings> StyleBuilderConverter::convertFontFeatureSetting s(StyleResolverState& state, const CSSValue& value)
178 { 178 {
179 if (value.isPrimitiveValue() && toCSSPrimitiveValue(value).getValueID() == C SSValueNormal) 179 if (value.isPrimitiveValue() && toCSSPrimitiveValue(value).getValueID() == C SSValueNormal)
180 return FontBuilder::initialFeatureSettings(); 180 return FontBuilder::initialFeatureSettings();
181 181
182 CSSValueList& list = toCSSValueList(value); 182 CSSValueList& list = toCSSValueList(value);
183 RefPtr<FontFeatureSettings> settings = FontFeatureSettings::create(); 183 RefPtr<FontFeatureSettings> settings = FontFeatureSettings::create();
184 int len = list.length(); 184 int len = list.length();
185 for (int i = 0; i < len; ++i) { 185 for (int i = 0; i < len; ++i) {
186 CSSFontFeatureValue& feature = toCSSFontFeatureValue(list.item(i)); 186 CSSFontFeatureValue& feature = toCSSFontFeatureValue(list.item(i));
187 settings->append(FontFeature(feature.tag(), feature.value())); 187 settings->append(FontFeature(feature.tag(), feature.value()));
(...skipping 11 matching lines...) Expand all
199 CSSToLengthConversionData conversionData(state.style(), fontSizes, viewportS ize, 1.0f); 199 CSSToLengthConversionData conversionData(state.style(), fontSizes, viewportS ize, 1.0f);
200 if (primitiveValue.isLength()) 200 if (primitiveValue.isLength())
201 return primitiveValue.computeLength<float>(conversionData); 201 return primitiveValue.computeLength<float>(conversionData);
202 if (primitiveValue.isCalculatedPercentageWithLength()) 202 if (primitiveValue.isCalculatedPercentageWithLength())
203 return primitiveValue.cssCalcValue()->toCalcValue(conversionData)->evalu ate(parentSize.value); 203 return primitiveValue.cssCalcValue()->toCalcValue(conversionData)->evalu ate(parentSize.value);
204 204
205 ASSERT_NOT_REACHED(); 205 ASSERT_NOT_REACHED();
206 return 0; 206 return 0;
207 } 207 }
208 208
209 FontDescription::Size StyleBuilderConverter::convertFontSize(StyleResolverState& state, CSSValue value) 209 FontDescription::Size StyleBuilderConverter::convertFontSize(StyleResolverState& state, const CSSValue& value)
210 { 210 {
211 CSSPrimitiveValue primitiveValue = toCSSPrimitiveValue(value); 211 const CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value);
212 212
213 FontDescription::Size parentSize(0, 0.0f, false); 213 FontDescription::Size parentSize(0, 0.0f, false);
214 214
215 // FIXME: Find out when parentStyle could be 0? 215 // FIXME: Find out when parentStyle could be 0?
216 if (state.parentStyle()) 216 if (state.parentStyle())
217 parentSize = state.parentFontDescription().size(); 217 parentSize = state.parentFontDescription().size();
218 218
219 if (CSSValueID valueID = primitiveValue.getValueID()) { 219 if (CSSValueID valueID = primitiveValue.getValueID()) {
220 switch (valueID) { 220 switch (valueID) {
221 case CSSValueXxSmall: 221 case CSSValueXxSmall:
(...skipping 16 matching lines...) Expand all
238 } 238 }
239 239
240 bool parentIsAbsoluteSize = state.parentFontDescription().isAbsoluteSize(); 240 bool parentIsAbsoluteSize = state.parentFontDescription().isAbsoluteSize();
241 241
242 if (primitiveValue.isPercentage()) 242 if (primitiveValue.isPercentage())
243 return FontDescription::Size(0, (primitiveValue.getFloatValue() * parent Size.value / 100.0f), parentIsAbsoluteSize); 243 return FontDescription::Size(0, (primitiveValue.getFloatValue() * parent Size.value / 100.0f), parentIsAbsoluteSize);
244 244
245 return FontDescription::Size(0, computeFontSize(state, primitiveValue, paren tSize), parentIsAbsoluteSize || !primitiveValue.isFontRelativeLength()); 245 return FontDescription::Size(0, computeFontSize(state, primitiveValue, paren tSize), parentIsAbsoluteSize || !primitiveValue.isFontRelativeLength());
246 } 246 }
247 247
248 float StyleBuilderConverter::convertFontSizeAdjust(StyleResolverState& state, CS SValue value) 248 float StyleBuilderConverter::convertFontSizeAdjust(StyleResolverState& state, co nst CSSValue& value)
249 { 249 {
250 CSSPrimitiveValue primitiveValue = toCSSPrimitiveValue(value); 250 const CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value);
251 if (primitiveValue.getValueID() == CSSValueNone) 251 if (primitiveValue.getValueID() == CSSValueNone)
252 return FontBuilder::initialSizeAdjust(); 252 return FontBuilder::initialSizeAdjust();
253 253
254 ASSERT(primitiveValue.isNumber()); 254 ASSERT(primitiveValue.isNumber());
255 return primitiveValue.getFloatValue(); 255 return primitiveValue.getFloatValue();
256 } 256 }
257 257
258 FontWeight StyleBuilderConverter::convertFontWeight(StyleResolverState& state, C SSValue value) 258 FontWeight StyleBuilderConverter::convertFontWeight(StyleResolverState& state, c onst CSSValue& value)
259 { 259 {
260 CSSPrimitiveValue primitiveValue = toCSSPrimitiveValue(value); 260 const CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value);
261 switch (primitiveValue.getValueID()) { 261 switch (primitiveValue.getValueID()) {
262 case CSSValueBolder: 262 case CSSValueBolder:
263 return FontDescription::bolderWeight(state.parentStyle()->fontDescriptio n().weight()); 263 return FontDescription::bolderWeight(state.parentStyle()->fontDescriptio n().weight());
264 case CSSValueLighter: 264 case CSSValueLighter:
265 return FontDescription::lighterWeight(state.parentStyle()->fontDescripti on().weight()); 265 return FontDescription::lighterWeight(state.parentStyle()->fontDescripti on().weight());
266 default: 266 default:
267 return primitiveValue; 267 return primitiveValue;
268 } 268 }
269 } 269 }
270 270
271 FontDescription::VariantLigatures StyleBuilderConverter::convertFontVariantLigat ures(StyleResolverState&, CSSValue value) 271 FontDescription::VariantLigatures StyleBuilderConverter::convertFontVariantLigat ures(StyleResolverState&, const CSSValue& value)
272 { 272 {
273 if (value.isValueList()) { 273 if (value.isValueList()) {
274 FontDescription::VariantLigatures ligatures; 274 FontDescription::VariantLigatures ligatures;
275 CSSValueList& valueList = toCSSValueList(value); 275 CSSValueList& valueList = toCSSValueList(value);
276 for (size_t i = 0; i < valueList.length(); ++i) { 276 for (size_t i = 0; i < valueList.length(); ++i) {
277 CSSValue item = valueList.item(i); 277 const CSSValue& item = valueList.item(i);
278 CSSPrimitiveValue primitiveValue = toCSSPrimitiveValue(item); 278 const CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(item);
279 switch (primitiveValue.getValueID()) { 279 switch (primitiveValue.getValueID()) {
280 case CSSValueNoCommonLigatures: 280 case CSSValueNoCommonLigatures:
281 ligatures.common = FontDescription::DisabledLigaturesState; 281 ligatures.common = FontDescription::DisabledLigaturesState;
282 break; 282 break;
283 case CSSValueCommonLigatures: 283 case CSSValueCommonLigatures:
284 ligatures.common = FontDescription::EnabledLigaturesState; 284 ligatures.common = FontDescription::EnabledLigaturesState;
285 break; 285 break;
286 case CSSValueNoDiscretionaryLigatures: 286 case CSSValueNoDiscretionaryLigatures:
287 ligatures.discretionary = FontDescription::DisabledLigaturesStat e; 287 ligatures.discretionary = FontDescription::DisabledLigaturesStat e;
288 break; 288 break;
(...skipping 18 matching lines...) Expand all
307 } 307 }
308 } 308 }
309 return ligatures; 309 return ligatures;
310 } 310 }
311 311
312 ASSERT_WITH_SECURITY_IMPLICATION(value.isPrimitiveValue()); 312 ASSERT_WITH_SECURITY_IMPLICATION(value.isPrimitiveValue());
313 ASSERT(toCSSPrimitiveValue(value).getValueID() == CSSValueNormal); 313 ASSERT(toCSSPrimitiveValue(value).getValueID() == CSSValueNormal);
314 return FontDescription::VariantLigatures(); 314 return FontDescription::VariantLigatures();
315 } 315 }
316 316
317 EGlyphOrientation StyleBuilderConverter::convertGlyphOrientation(StyleResolverSt ate&, CSSValue value) 317 EGlyphOrientation StyleBuilderConverter::convertGlyphOrientation(StyleResolverSt ate&, const CSSValue& value)
318 { 318 {
319 if (!value.isPrimitiveValue()) 319 if (!value.isPrimitiveValue())
320 return GO_0DEG; 320 return GO_0DEG;
321 321
322 CSSPrimitiveValue primitiveValue = toCSSPrimitiveValue(value); 322 const CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value);
323 if (primitiveValue.primitiveType() != CSSPrimitiveValue::CSS_DEG) 323 if (primitiveValue.primitiveType() != CSSPrimitiveValue::CSS_DEG)
324 return GO_0DEG; 324 return GO_0DEG;
325 325
326 float angle = fabsf(fmodf(primitiveValue.getFloatValue(), 360.0f)); 326 float angle = fabsf(fmodf(primitiveValue.getFloatValue(), 360.0f));
327 327
328 if (angle <= 45.0f || angle > 315.0f) 328 if (angle <= 45.0f || angle > 315.0f)
329 return GO_0DEG; 329 return GO_0DEG;
330 if (angle > 45.0f && angle <= 135.0f) 330 if (angle > 45.0f && angle <= 135.0f)
331 return GO_90DEG; 331 return GO_90DEG;
332 if (angle > 135.0f && angle <= 225.0f) 332 if (angle > 135.0f && angle <= 225.0f)
333 return GO_180DEG; 333 return GO_180DEG;
334 return GO_270DEG; 334 return GO_270DEG;
335 } 335 }
336 336
337 StyleSelfAlignmentData StyleBuilderConverter::convertSelfOrDefaultAlignmentData( StyleResolverState&, CSSValue value) 337 StyleSelfAlignmentData StyleBuilderConverter::convertSelfOrDefaultAlignmentData( StyleResolverState&, const CSSValue& value)
338 { 338 {
339 StyleSelfAlignmentData alignmentData = ComputedStyle::initialSelfAlignment() ; 339 StyleSelfAlignmentData alignmentData = ComputedStyle::initialSelfAlignment() ;
340 CSSPrimitiveValue primitiveValue = toCSSPrimitiveValue(value); 340 const CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value);
341 if (Pair* pairValue = primitiveValue.getPairValue()) { 341 if (Pair* pairValue = primitiveValue.getPairValue()) {
342 if (toCSSPrimitiveValue(*pairValue->first()).getValueID() == CSSValueLeg acy) { 342 if (pairValue->first().getValueID() == CSSValueLegacy) {
343 alignmentData.setPositionType(LegacyPosition); 343 alignmentData.setPositionType(LegacyPosition);
344 alignmentData.setPosition(toCSSPrimitiveValue(*pairValue->second())) ; 344 alignmentData.setPosition(pairValue->second());
345 } else { 345 } else {
346 alignmentData.setPosition(toCSSPrimitiveValue(*pairValue->first())); 346 alignmentData.setPosition(pairValue->first());
347 alignmentData.setOverflow(toCSSPrimitiveValue(*pairValue->second())) ; 347 alignmentData.setOverflow(pairValue->second());
348 } 348 }
349 } else { 349 } else {
350 alignmentData.setPosition(primitiveValue); 350 alignmentData.setPosition(primitiveValue);
351 } 351 }
352 return alignmentData; 352 return alignmentData;
353 } 353 }
354 354
355 StyleContentAlignmentData StyleBuilderConverter::convertContentAlignmentData(Sty leResolverState&, CSSValue value) 355 StyleContentAlignmentData StyleBuilderConverter::convertContentAlignmentData(Sty leResolverState&, const CSSValue& value)
356 { 356 {
357 StyleContentAlignmentData alignmentData = ComputedStyle::initialContentAlign ment(); 357 StyleContentAlignmentData alignmentData = ComputedStyle::initialContentAlign ment();
358 CSSContentDistributionValue& contentValue = toCSSContentDistributionValue(va lue); 358 CSSContentDistributionValue& contentValue = toCSSContentDistributionValue(va lue);
359 if (contentValue.distribution().getValueID() != CSSValueInvalid) 359 if (contentValue.distribution().getValueID() != CSSValueInvalid)
360 alignmentData.setDistribution(contentValue.distribution()); 360 alignmentData.setDistribution(contentValue.distribution());
361 if (contentValue.position().getValueID() != CSSValueInvalid) 361 if (contentValue.position().getValueID() != CSSValueInvalid)
362 alignmentData.setPosition(contentValue.position()); 362 alignmentData.setPosition(contentValue.position());
363 if (contentValue.overflow().getValueID() != CSSValueInvalid) 363 if (contentValue.overflow().getValueID() != CSSValueInvalid)
364 alignmentData.setOverflow(contentValue.overflow()); 364 alignmentData.setOverflow(contentValue.overflow());
365 return alignmentData; 365 return alignmentData;
366 } 366 }
367 367
368 GridAutoFlow StyleBuilderConverter::convertGridAutoFlow(StyleResolverState&, CSS Value value) 368 GridAutoFlow StyleBuilderConverter::convertGridAutoFlow(StyleResolverState&, con st CSSValue& value)
369 { 369 {
370 CSSValueList& list = toCSSValueList(value); 370 CSSValueList& list = toCSSValueList(value);
371 371
372 ASSERT(list.length() >= 1); 372 ASSERT(list.length() >= 1);
373 CSSPrimitiveValue first = toCSSPrimitiveValue(list.item(0)); 373 const CSSPrimitiveValue& first = toCSSPrimitiveValue(list.item(0));
374 NullableCSSValue second = list.length() == 2 ? NullableCSSValue(list.item(1) ) : nullptr; 374 NullableCSSValue second = list.length() == 2 ? NullableCSSValue(list.item(1) ) : nullptr;
375 375
376 switch (first.getValueID()) { 376 switch (first.getValueID()) {
377 case CSSValueRow: 377 case CSSValueRow:
378 if (second && toCSSPrimitiveValue(*second).getValueID() == CSSValueDense ) 378 if (second && toCSSPrimitiveValue(second).getValueID() == CSSValueDense)
379 return AutoFlowRowDense; 379 return AutoFlowRowDense;
380 return AutoFlowRow; 380 return AutoFlowRow;
381 case CSSValueColumn: 381 case CSSValueColumn:
382 if (second && toCSSPrimitiveValue(*second).getValueID() == CSSValueDense ) 382 if (second && toCSSPrimitiveValue(second).getValueID() == CSSValueDense)
383 return AutoFlowColumnDense; 383 return AutoFlowColumnDense;
384 return AutoFlowColumn; 384 return AutoFlowColumn;
385 case CSSValueDense: 385 case CSSValueDense:
386 if (second && toCSSPrimitiveValue(*second).getValueID() == CSSValueColum n) 386 if (second && toCSSPrimitiveValue(second).getValueID() == CSSValueColumn )
387 return AutoFlowColumnDense; 387 return AutoFlowColumnDense;
388 return AutoFlowRowDense; 388 return AutoFlowRowDense;
389 default: 389 default:
390 ASSERT_NOT_REACHED(); 390 ASSERT_NOT_REACHED();
391 return ComputedStyle::initialGridAutoFlow(); 391 return ComputedStyle::initialGridAutoFlow();
392 } 392 }
393 } 393 }
394 394
395 GridPosition StyleBuilderConverter::convertGridPosition(StyleResolverState&, CSS Value value) 395 GridPosition StyleBuilderConverter::convertGridPosition(StyleResolverState&, con st CSSValue& value)
396 { 396 {
397 // We accept the specification's grammar: 397 // We accept the specification's grammar:
398 // 'auto' | [ <integer> || <custom-ident> ] | [ span && [ <integer> || <cust om-ident> ] ] | <custom-ident> 398 // 'auto' | [ <integer> || <custom-ident> ] | [ span && [ <integer> || <cust om-ident> ] ] | <custom-ident>
399 399
400 GridPosition position; 400 GridPosition position;
401 401
402 if (value.isPrimitiveValue()) { 402 if (value.isPrimitiveValue()) {
403 CSSPrimitiveValue primitiveValue = toCSSPrimitiveValue(value); 403 const CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value);
404 // We translate <custom-ident> to <string> during parsing as it 404 // We translate <custom-ident> to <string> during parsing as it
405 // makes handling it more simple. 405 // makes handling it more simple.
406 if (primitiveValue.isCustomIdent()) { 406 if (primitiveValue.isCustomIdent()) {
407 position.setNamedGridArea(primitiveValue.getStringValue()); 407 position.setNamedGridArea(primitiveValue.getStringValue());
408 return position; 408 return position;
409 } 409 }
410 410
411 ASSERT(primitiveValue.getValueID() == CSSValueAuto); 411 ASSERT(primitiveValue.getValueID() == CSSValueAuto);
412 return position; 412 return position;
413 } 413 }
414 414
415 CSSValueList& values = toCSSValueList(value); 415 CSSValueList& values = toCSSValueList(value);
416 ASSERT(values.length()); 416 ASSERT(values.length());
417 417
418 bool isSpanPosition = false; 418 bool isSpanPosition = false;
419 // The specification makes the <integer> optional, in which case it default to '1'. 419 // The specification makes the <integer> optional, in which case it default to '1'.
420 int gridLineNumber = 1; 420 int gridLineNumber = 1;
421 String gridLineName; 421 String gridLineName;
422 422
423 auto it = values.begin(); 423 auto it = values.begin();
424 NullableCSSValue currentValue = *it; 424 NullableCSSValue currentValue = *it;
425 if (toCSSPrimitiveValue(*currentValue).getValueID() == CSSValueSpan) { 425 if (toCSSPrimitiveValue(currentValue).getValueID() == CSSValueSpan) {
426 isSpanPosition = true; 426 isSpanPosition = true;
427 ++it; 427 ++it;
428 currentValue = it != values.end() ? *it : NullableCSSValue(); 428 currentValue = it != values.end() ? *it : NullableCSSValue();
429 } 429 }
430 430
431 if (currentValue && toCSSPrimitiveValue(*currentValue).isNumber()) { 431 if (currentValue && toCSSPrimitiveValue(currentValue).isNumber()) {
432 gridLineNumber = toCSSPrimitiveValue(*currentValue).getIntValue(); 432 gridLineNumber = toCSSPrimitiveValue(currentValue).getIntValue();
433 ++it; 433 ++it;
434 currentValue = it != values.end() ? *it : NullableCSSValue(); 434 currentValue = it != values.end() ? *it : NullableCSSValue();
435 } 435 }
436 436
437 if (currentValue && toCSSPrimitiveValue(*currentValue).isCustomIdent()) { 437 if (currentValue && toCSSPrimitiveValue(currentValue).isCustomIdent()) {
438 gridLineName = toCSSPrimitiveValue(*currentValue).getStringValue(); 438 gridLineName = toCSSPrimitiveValue(currentValue).getStringValue();
439 ++it; 439 ++it;
440 } 440 }
441 441
442 ASSERT(it == values.end()); 442 ASSERT(it == values.end());
443 if (isSpanPosition) 443 if (isSpanPosition)
444 position.setSpanPosition(gridLineNumber, gridLineName); 444 position.setSpanPosition(gridLineNumber, gridLineName);
445 else 445 else
446 position.setExplicitPosition(gridLineNumber, gridLineName); 446 position.setExplicitPosition(gridLineNumber, gridLineName);
447 447
448 return position; 448 return position;
449 } 449 }
450 450
451 GridTrackSize StyleBuilderConverter::convertGridTrackSize(StyleResolverState& st ate, CSSValue value) 451 GridTrackSize StyleBuilderConverter::convertGridTrackSize(StyleResolverState& st ate, const CSSValue& value)
452 { 452 {
453 if (value.isPrimitiveValue()) 453 if (value.isPrimitiveValue())
454 return GridTrackSize(convertGridTrackBreadth(state, toCSSPrimitiveValue( value))); 454 return GridTrackSize(convertGridTrackBreadth(state, toCSSPrimitiveValue( value)));
455 455
456 CSSFunctionValue& minmaxFunction = toCSSFunctionValue(value); 456 CSSFunctionValue& minmaxFunction = toCSSFunctionValue(value);
457 ASSERT_WITH_SECURITY_IMPLICATION(minmaxFunction.length() == 2); 457 ASSERT_WITH_SECURITY_IMPLICATION(minmaxFunction.length() == 2);
458 GridLength minTrackBreadth(convertGridTrackBreadth(state, toCSSPrimitiveValu e(minmaxFunction.item(0)))); 458 GridLength minTrackBreadth(convertGridTrackBreadth(state, toCSSPrimitiveValu e(minmaxFunction.item(0))));
459 GridLength maxTrackBreadth(convertGridTrackBreadth(state, toCSSPrimitiveValu e(minmaxFunction.item(1)))); 459 GridLength maxTrackBreadth(convertGridTrackBreadth(state, toCSSPrimitiveValu e(minmaxFunction.item(1))));
460 return GridTrackSize(minTrackBreadth, maxTrackBreadth); 460 return GridTrackSize(minTrackBreadth, maxTrackBreadth);
461 } 461 }
462 462
463 bool StyleBuilderConverter::convertGridTrackList(CSSValue value, Vector<GridTrac kSize>& trackSizes, NamedGridLinesMap& namedGridLines, OrderedNamedGridLines& or deredNamedGridLines, StyleResolverState& state) 463 bool StyleBuilderConverter::convertGridTrackList(const CSSValue& value, Vector<G ridTrackSize>& trackSizes, NamedGridLinesMap& namedGridLines, OrderedNamedGridLi nes& orderedNamedGridLines, StyleResolverState& state)
464 { 464 {
465 // Handle 'none'. 465 // Handle 'none'.
466 if (value.isPrimitiveValue()) { 466 if (value.isPrimitiveValue()) {
467 CSSPrimitiveValue primitiveValue = toCSSPrimitiveValue(value); 467 const CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value);
468 return primitiveValue.getValueID() == CSSValueNone; 468 return primitiveValue.getValueID() == CSSValueNone;
469 } 469 }
470 470
471 if (!value.isValueList()) 471 if (!value.isValueList())
472 return false; 472 return false;
473 473
474 size_t currentNamedGridLine = 0; 474 size_t currentNamedGridLine = 0;
475 for (auto& currValue : toCSSValueList(value)) { 475 for (auto& currValue : toCSSValueList(value)) {
476 if (currValue.isGridLineNamesValue()) { 476 if (currValue.isGridLineNamesValue()) {
477 for (auto& namedGridLineValue : toCSSGridLineNamesValue(currValue)) { 477 for (auto& namedGridLineValue : toCSSGridLineNamesValue(currValue)) {
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
524 std::sort(startResult.storedValue->value.begin(), startResult.stored Value->value.end()); 524 std::sort(startResult.storedValue->value.begin(), startResult.stored Value->value.end());
525 } 525 }
526 { 526 {
527 NamedGridLinesMap::AddResult endResult = namedGridLines.add(namedGri dAreaEntry.key + "-end", Vector<size_t>()); 527 NamedGridLinesMap::AddResult endResult = namedGridLines.add(namedGri dAreaEntry.key + "-end", Vector<size_t>());
528 endResult.storedValue->value.append(areaSpan.resolvedFinalPosition.t oInt() + 1); 528 endResult.storedValue->value.append(areaSpan.resolvedFinalPosition.t oInt() + 1);
529 std::sort(endResult.storedValue->value.begin(), endResult.storedValu e->value.end()); 529 std::sort(endResult.storedValue->value.begin(), endResult.storedValu e->value.end());
530 } 530 }
531 } 531 }
532 } 532 }
533 533
534 Length StyleBuilderConverter::convertLength(const StyleResolverState& state, CSS Value value) 534 Length StyleBuilderConverter::convertLength(const StyleResolverState& state, con st CSSValue& value)
535 { 535 {
536 return toCSSPrimitiveValue(value).convertToLength(state.cssToLengthConversio nData()); 536 return toCSSPrimitiveValue(value).convertToLength(state.cssToLengthConversio nData());
537 } 537 }
538 538
539 UnzoomedLength StyleBuilderConverter::convertUnzoomedLength(const StyleResolverS tate& state, CSSValue value) 539 UnzoomedLength StyleBuilderConverter::convertUnzoomedLength(const StyleResolverS tate& state, const CSSValue& value)
540 { 540 {
541 return UnzoomedLength(toCSSPrimitiveValue(value).convertToLength(state.cssTo LengthConversionData().copyWithAdjustedZoom(1.0f))); 541 return UnzoomedLength(toCSSPrimitiveValue(value).convertToLength(state.cssTo LengthConversionData().copyWithAdjustedZoom(1.0f)));
542 } 542 }
543 543
544 Length StyleBuilderConverter::convertLengthOrAuto(const StyleResolverState& stat e, CSSValue value) 544 Length StyleBuilderConverter::convertLengthOrAuto(const StyleResolverState& stat e, const CSSValue& value)
545 { 545 {
546 CSSPrimitiveValue primitiveValue = toCSSPrimitiveValue(value); 546 const CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value);
547 if (primitiveValue.getValueID() == CSSValueAuto) 547 if (primitiveValue.getValueID() == CSSValueAuto)
548 return Length(Auto); 548 return Length(Auto);
549 return primitiveValue.convertToLength(state.cssToLengthConversionData()); 549 return primitiveValue.convertToLength(state.cssToLengthConversionData());
550 } 550 }
551 551
552 Length StyleBuilderConverter::convertLengthSizing(StyleResolverState& state, CSS Value value) 552 Length StyleBuilderConverter::convertLengthSizing(StyleResolverState& state, con st CSSValue& value)
553 { 553 {
554 CSSPrimitiveValue primitiveValue = toCSSPrimitiveValue(value); 554 const CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value);
555 switch (primitiveValue.getValueID()) { 555 switch (primitiveValue.getValueID()) {
556 case CSSValueInvalid: 556 case CSSValueInvalid:
557 return convertLength(state, value); 557 return convertLength(state, value);
558 case CSSValueIntrinsic: 558 case CSSValueIntrinsic:
559 return Length(Intrinsic); 559 return Length(Intrinsic);
560 case CSSValueMinIntrinsic: 560 case CSSValueMinIntrinsic:
561 return Length(MinIntrinsic); 561 return Length(MinIntrinsic);
562 case CSSValueMinContent: 562 case CSSValueMinContent:
563 case CSSValueWebkitMinContent: 563 case CSSValueWebkitMinContent:
564 return Length(MinContent); 564 return Length(MinContent);
565 case CSSValueMaxContent: 565 case CSSValueMaxContent:
566 case CSSValueWebkitMaxContent: 566 case CSSValueWebkitMaxContent:
567 return Length(MaxContent); 567 return Length(MaxContent);
568 case CSSValueWebkitFillAvailable: 568 case CSSValueWebkitFillAvailable:
569 return Length(FillAvailable); 569 return Length(FillAvailable);
570 case CSSValueWebkitFitContent: 570 case CSSValueWebkitFitContent:
571 return Length(FitContent); 571 return Length(FitContent);
572 case CSSValueAuto: 572 case CSSValueAuto:
573 return Length(Auto); 573 return Length(Auto);
574 default: 574 default:
575 ASSERT_NOT_REACHED(); 575 ASSERT_NOT_REACHED();
576 return Length(); 576 return Length();
577 } 577 }
578 } 578 }
579 579
580 Length StyleBuilderConverter::convertLengthMaxSizing(StyleResolverState& state, CSSValue value) 580 Length StyleBuilderConverter::convertLengthMaxSizing(StyleResolverState& state, const CSSValue& value)
581 { 581 {
582 CSSPrimitiveValue primitiveValue = toCSSPrimitiveValue(value); 582 const CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value);
583 if (primitiveValue.getValueID() == CSSValueNone) 583 if (primitiveValue.getValueID() == CSSValueNone)
584 return Length(MaxSizeNone); 584 return Length(MaxSizeNone);
585 return convertLengthSizing(state, value); 585 return convertLengthSizing(state, value);
586 } 586 }
587 587
588 TabSize StyleBuilderConverter::convertLengthOrTabSpaces(StyleResolverState& stat e, CSSValue value) 588 TabSize StyleBuilderConverter::convertLengthOrTabSpaces(StyleResolverState& stat e, const CSSValue& value)
589 { 589 {
590 CSSPrimitiveValue primitiveValue = toCSSPrimitiveValue(value); 590 const CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value);
591 if (primitiveValue.isNumber()) 591 if (primitiveValue.isNumber())
592 return TabSize(primitiveValue.getIntValue()); 592 return TabSize(primitiveValue.getIntValue());
593 return TabSize(primitiveValue.computeLength<float>(state.cssToLengthConversi onData())); 593 return TabSize(primitiveValue.computeLength<float>(state.cssToLengthConversi onData()));
594 } 594 }
595 595
596 LineBoxContain StyleBuilderConverter::convertLineBoxContain(StyleResolverState&, CSSValue value) 596 LineBoxContain StyleBuilderConverter::convertLineBoxContain(StyleResolverState&, const CSSValue& value)
597 { 597 {
598 if (value.isPrimitiveValue()) { 598 if (value.isPrimitiveValue()) {
599 ASSERT(toCSSPrimitiveValue(value).getValueID() == CSSValueNone); 599 ASSERT(toCSSPrimitiveValue(value).getValueID() == CSSValueNone);
600 return LineBoxContainNone; 600 return LineBoxContainNone;
601 } 601 }
602 602
603 return toCSSLineBoxContainValue(value).value(); 603 return toCSSLineBoxContainValue(value).value();
604 } 604 }
605 605
606 static CSSToLengthConversionData lineHeightToLengthConversionData(StyleResolverS tate& state) 606 static CSSToLengthConversionData lineHeightToLengthConversionData(StyleResolverS tate& state)
607 { 607 {
608 float multiplier = state.style()->effectiveZoom(); 608 float multiplier = state.style()->effectiveZoom();
609 if (LocalFrame* frame = state.document().frame()) 609 if (LocalFrame* frame = state.document().frame())
610 multiplier *= frame->textZoomFactor(); 610 multiplier *= frame->textZoomFactor();
611 return state.cssToLengthConversionData().copyWithAdjustedZoom(multiplier); 611 return state.cssToLengthConversionData().copyWithAdjustedZoom(multiplier);
612 } 612 }
613 613
614 Length StyleBuilderConverter::convertLineHeight(StyleResolverState& state, CSSVa lue value) 614 Length StyleBuilderConverter::convertLineHeight(StyleResolverState& state, const CSSValue& value)
615 { 615 {
616 CSSPrimitiveValue primitiveValue = toCSSPrimitiveValue(value); 616 const CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value);
617 617
618 if (primitiveValue.isLength()) 618 if (primitiveValue.isLength())
619 return primitiveValue.computeLength<Length>(lineHeightToLengthConversion Data(state)); 619 return primitiveValue.computeLength<Length>(lineHeightToLengthConversion Data(state));
620 if (primitiveValue.isPercentage()) 620 if (primitiveValue.isPercentage())
621 return Length((state.style()->computedFontSize() * primitiveValue.getInt Value()) / 100.0, Fixed); 621 return Length((state.style()->computedFontSize() * primitiveValue.getInt Value()) / 100.0, Fixed);
622 if (primitiveValue.isNumber()) 622 if (primitiveValue.isNumber())
623 return Length(primitiveValue.getDoubleValue() * 100.0, Percent); 623 return Length(primitiveValue.getDoubleValue() * 100.0, Percent);
624 if (primitiveValue.isCalculated()) { 624 if (primitiveValue.isCalculated()) {
625 Length zoomedLength = Length(primitiveValue.cssCalcValue()->toCalcValue( lineHeightToLengthConversionData(state))); 625 Length zoomedLength = Length(primitiveValue.cssCalcValue()->toCalcValue( lineHeightToLengthConversionData(state)));
626 return Length(valueForLength(zoomedLength, state.style()->fontSize()), F ixed); 626 return Length(valueForLength(zoomedLength, state.style()->fontSize()), F ixed);
627 } 627 }
628 628
629 ASSERT(primitiveValue.getValueID() == CSSValueNormal); 629 ASSERT(primitiveValue.getValueID() == CSSValueNormal);
630 return ComputedStyle::initialLineHeight(); 630 return ComputedStyle::initialLineHeight();
631 } 631 }
632 632
633 float StyleBuilderConverter::convertNumberOrPercentage(StyleResolverState& state , CSSValue value) 633 float StyleBuilderConverter::convertNumberOrPercentage(StyleResolverState& state , const CSSValue& value)
634 { 634 {
635 CSSPrimitiveValue primitiveValue = toCSSPrimitiveValue(value); 635 const CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value);
636 ASSERT(primitiveValue.isNumber() || primitiveValue.isPercentage()); 636 ASSERT(primitiveValue.isNumber() || primitiveValue.isPercentage());
637 if (primitiveValue.isNumber()) 637 if (primitiveValue.isNumber())
638 return primitiveValue.getFloatValue(); 638 return primitiveValue.getFloatValue();
639 return primitiveValue.getFloatValue() / 100.0f; 639 return primitiveValue.getFloatValue() / 100.0f;
640 } 640 }
641 641
642 template <CSSValueID cssValueFor0, CSSValueID cssValueFor100> 642 template <CSSValueID cssValueFor0, CSSValueID cssValueFor100>
643 static Length convertPositionLength(StyleResolverState& state, CSSPrimitiveValue primitiveValue) 643 static Length convertPositionLength(StyleResolverState& state, CSSPrimitiveValue primitiveValue)
644 { 644 {
645 if (Pair* pair = primitiveValue.getPairValue()) { 645 if (Pair* pair = primitiveValue.getPairValue()) {
646 Length length = StyleBuilderConverter::convertLength(state, CSSValue(*pa ir->second())); 646 Length length = StyleBuilderConverter::convertLength(state, CSSValue(pai r->second()));
647 if (toCSSPrimitiveValue(*pair->first()).getValueID() == cssValueFor0) 647 if (pair->first().getValueID() == cssValueFor0)
648 return length; 648 return length;
649 ASSERT(toCSSPrimitiveValue(*pair->first()).getValueID() == cssValueFor10 0); 649 ASSERT(pair->first().getValueID() == cssValueFor100);
650 return length.subtractFromOneHundredPercent(); 650 return length.subtractFromOneHundredPercent();
651 } 651 }
652 652
653 return StyleBuilderConverter::convertLength(state, primitiveValue); 653 return StyleBuilderConverter::convertLength(state, primitiveValue);
654 } 654 }
655 655
656 LengthPoint StyleBuilderConverter::convertPosition(StyleResolverState& state, CS SValue value) 656 LengthPoint StyleBuilderConverter::convertPosition(StyleResolverState& state, co nst CSSValue& value)
657 { 657 {
658 CSSPrimitiveValue primitiveValue = toCSSPrimitiveValue(value); 658 const CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value);
659 Pair* pair = primitiveValue.getPairValue(); 659 Pair* pair = primitiveValue.getPairValue();
660 return LengthPoint( 660 return LengthPoint(
661 convertPositionLength<CSSValueLeft, CSSValueRight>(state, toCSSPrimitive Value(*pair->first())), 661 convertPositionLength<CSSValueLeft, CSSValueRight>(state, pair->first()) ,
662 convertPositionLength<CSSValueTop, CSSValueBottom>(state, toCSSPrimitive Value(*pair->second())) 662 convertPositionLength<CSSValueTop, CSSValueBottom>(state, pair->second() )
663 ); 663 );
664 } 664 }
665 665
666 static float convertPerspectiveLength(StyleResolverState& state, CSSPrimitiveVal ue primitiveValue) 666 static float convertPerspectiveLength(StyleResolverState& state, CSSPrimitiveVal ue primitiveValue)
667 { 667 {
668 return std::max(primitiveValue.computeLength<float>(state.cssToLengthConvers ionData()), 0.0f); 668 return std::max(primitiveValue.computeLength<float>(state.cssToLengthConvers ionData()), 0.0f);
669 } 669 }
670 670
671 float StyleBuilderConverter::convertPerspective(StyleResolverState& state, CSSVa lue value) 671 float StyleBuilderConverter::convertPerspective(StyleResolverState& state, const CSSValue& value)
672 { 672 {
673 CSSPrimitiveValue primitiveValue = toCSSPrimitiveValue(value); 673 const CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value);
674 674
675 if (primitiveValue.getValueID() == CSSValueNone) 675 if (primitiveValue.getValueID() == CSSValueNone)
676 return ComputedStyle::initialPerspective(); 676 return ComputedStyle::initialPerspective();
677 return convertPerspectiveLength(state, primitiveValue); 677 return convertPerspectiveLength(state, primitiveValue);
678 } 678 }
679 679
680 template <CSSValueID cssValueFor0, CSSValueID cssValueFor100> 680 template <CSSValueID cssValueFor0, CSSValueID cssValueFor100>
681 static Length convertOriginLength(StyleResolverState& state, CSSPrimitiveValue p rimitiveValue) 681 static Length convertOriginLength(StyleResolverState& state, CSSPrimitiveValue p rimitiveValue)
682 { 682 {
683 if (primitiveValue.isValueID()) { 683 if (primitiveValue.isValueID()) {
684 switch (primitiveValue.getValueID()) { 684 switch (primitiveValue.getValueID()) {
685 case cssValueFor0: 685 case cssValueFor0:
686 return Length(0, Percent); 686 return Length(0, Percent);
687 case cssValueFor100: 687 case cssValueFor100:
688 return Length(100, Percent); 688 return Length(100, Percent);
689 case CSSValueCenter: 689 case CSSValueCenter:
690 return Length(50, Percent); 690 return Length(50, Percent);
691 default: 691 default:
692 ASSERT_NOT_REACHED(); 692 ASSERT_NOT_REACHED();
693 } 693 }
694 } 694 }
695 695
696 return StyleBuilderConverter::convertLength(state, CSSValue(primitiveValue)) ; 696 return StyleBuilderConverter::convertLength(state, CSSValue(primitiveValue)) ;
697 } 697 }
698 698
699 LengthPoint StyleBuilderConverter::convertPerspectiveOrigin(StyleResolverState& state, CSSValue value) 699 LengthPoint StyleBuilderConverter::convertPerspectiveOrigin(StyleResolverState& state, const CSSValue& value)
700 { 700 {
701 CSSValueList& list = toCSSValueList(value); 701 CSSValueList& list = toCSSValueList(value);
702 ASSERT(list.length() == 2); 702 ASSERT(list.length() == 2);
703 703
704 CSSPrimitiveValue primitiveValueX = toCSSPrimitiveValue(list.item(0)); 704 const CSSPrimitiveValue& primitiveValueX = toCSSPrimitiveValue(list.item(0)) ;
705 CSSPrimitiveValue primitiveValueY = toCSSPrimitiveValue(list.item(1)); 705 const CSSPrimitiveValue& primitiveValueY = toCSSPrimitiveValue(list.item(1)) ;
706 706
707 return LengthPoint( 707 return LengthPoint(
708 convertOriginLength<CSSValueLeft, CSSValueRight>(state, primitiveValueX) , 708 convertOriginLength<CSSValueLeft, CSSValueRight>(state, primitiveValueX) ,
709 convertOriginLength<CSSValueTop, CSSValueBottom>(state, primitiveValueY) 709 convertOriginLength<CSSValueTop, CSSValueBottom>(state, primitiveValueY)
710 ); 710 );
711 } 711 }
712 712
713 EPaintOrder StyleBuilderConverter::convertPaintOrder(StyleResolverState&, CSSVal ue cssPaintOrder) 713 EPaintOrder StyleBuilderConverter::convertPaintOrder(StyleResolverState&, const CSSValue& cssPaintOrder)
714 { 714 {
715 if (cssPaintOrder.isValueList()) { 715 if (cssPaintOrder.isValueList()) {
716 int paintOrder = 0; 716 int paintOrder = 0;
717 const CSSValueList& list = toCSSValueList(cssPaintOrder); 717 const CSSValueList& list = toCSSValueList(cssPaintOrder);
718 for (size_t i = 0; i < list.length(); ++i) { 718 for (size_t i = 0; i < list.length(); ++i) {
719 EPaintOrderType paintOrderType = PT_NONE; 719 EPaintOrderType paintOrderType = PT_NONE;
720 switch (toCSSPrimitiveValue(list.item(i)).getValueID()) { 720 switch (toCSSPrimitiveValue(list.item(i)).getValueID()) {
721 case CSSValueFill: 721 case CSSValueFill:
722 paintOrderType = PT_FILL; 722 paintOrderType = PT_FILL;
723 break; 723 break;
724 case CSSValueStroke: 724 case CSSValueStroke:
725 paintOrderType = PT_STROKE; 725 paintOrderType = PT_STROKE;
726 break; 726 break;
727 case CSSValueMarkers: 727 case CSSValueMarkers:
728 paintOrderType = PT_MARKERS; 728 paintOrderType = PT_MARKERS;
729 break; 729 break;
730 default: 730 default:
731 ASSERT_NOT_REACHED(); 731 ASSERT_NOT_REACHED();
732 break; 732 break;
733 } 733 }
734 734
735 paintOrder |= (paintOrderType << kPaintOrderBitwidth*i); 735 paintOrder |= (paintOrderType << kPaintOrderBitwidth*i);
736 } 736 }
737 return (EPaintOrder)paintOrder; 737 return (EPaintOrder)paintOrder;
738 } 738 }
739 739
740 return PO_NORMAL; 740 return PO_NORMAL;
741 } 741 }
742 742
743 Length StyleBuilderConverter::convertQuirkyLength(StyleResolverState& state, CSS Value value) 743 Length StyleBuilderConverter::convertQuirkyLength(StyleResolverState& state, con st CSSValue& value)
744 { 744 {
745 Length length = convertLengthOrAuto(state, value); 745 Length length = convertLengthOrAuto(state, value);
746 // This is only for margins which use __qem 746 // This is only for margins which use __qem
747 length.setQuirk(toCSSPrimitiveValue(value).isQuirkValue()); 747 length.setQuirk(toCSSPrimitiveValue(value).isQuirkValue());
748 return length; 748 return length;
749 } 749 }
750 750
751 PassRefPtr<QuotesData> StyleBuilderConverter::convertQuotes(StyleResolverState&, CSSValue value) 751 PassRefPtr<QuotesData> StyleBuilderConverter::convertQuotes(StyleResolverState&, const CSSValue& value)
752 { 752 {
753 if (value.isValueList()) { 753 if (value.isValueList()) {
754 CSSValueList& list = toCSSValueList(value); 754 CSSValueList& list = toCSSValueList(value);
755 RefPtr<QuotesData> quotes = QuotesData::create(); 755 RefPtr<QuotesData> quotes = QuotesData::create();
756 for (size_t i = 0; i < list.length(); i += 2) { 756 for (size_t i = 0; i < list.length(); i += 2) {
757 CSSValue first = list.item(i); 757 CSSValue first = list.item(i);
758 CSSValue second = list.item(i + 1); 758 CSSValue second = list.item(i + 1);
759 String startQuote = toCSSPrimitiveValue(first).getStringValue(); 759 String startQuote = toCSSPrimitiveValue(first).getStringValue();
760 String endQuote = toCSSPrimitiveValue(second).getStringValue(); 760 String endQuote = toCSSPrimitiveValue(second).getStringValue();
761 quotes->addPair(std::make_pair(startQuote, endQuote)); 761 quotes->addPair(std::make_pair(startQuote, endQuote));
762 } 762 }
763 return quotes.release(); 763 return quotes.release();
764 } 764 }
765 // FIXME: We should assert we're a primitive value with valueID = CSSValueNo ne 765 // FIXME: We should assert we're a primitive value with valueID = CSSValueNo ne
766 return QuotesData::create(); 766 return QuotesData::create();
767 } 767 }
768 768
769 LengthSize StyleBuilderConverter::convertRadius(StyleResolverState& state, CSSVa lue value) 769 LengthSize StyleBuilderConverter::convertRadius(StyleResolverState& state, const CSSValue& value)
770 { 770 {
771 CSSPrimitiveValue primitiveValue = toCSSPrimitiveValue(value); 771 const CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value);
772 Pair* pair = primitiveValue.getPairValue(); 772 Pair* pair = primitiveValue.getPairValue();
773 Length radiusWidth = toCSSPrimitiveValue(*pair->first()).convertToLength(sta te.cssToLengthConversionData()); 773 Length radiusWidth = pair->first().convertToLength(state.cssToLengthConversi onData());
774 Length radiusHeight = toCSSPrimitiveValue(*pair->second()).convertToLength(s tate.cssToLengthConversionData()); 774 Length radiusHeight = pair->second().convertToLength(state.cssToLengthConver sionData());
775 float width = radiusWidth.value(); 775 float width = radiusWidth.value();
776 float height = radiusHeight.value(); 776 float height = radiusHeight.value();
777 ASSERT(width >= 0 && height >= 0); 777 ASSERT(width >= 0 && height >= 0);
778 if (width <= 0 || height <= 0) 778 if (width <= 0 || height <= 0)
779 return LengthSize(Length(0, Fixed), Length(0, Fixed)); 779 return LengthSize(Length(0, Fixed), Length(0, Fixed));
780 return LengthSize(radiusWidth, radiusHeight); 780 return LengthSize(radiusWidth, radiusHeight);
781 } 781 }
782 782
783 PassRefPtr<ShadowList> StyleBuilderConverter::convertShadow(StyleResolverState& state, CSSValue value) 783 PassRefPtr<ShadowList> StyleBuilderConverter::convertShadow(StyleResolverState& state, const CSSValue& value)
784 { 784 {
785 if (value.isPrimitiveValue()) { 785 if (value.isPrimitiveValue()) {
786 ASSERT(toCSSPrimitiveValue(value).getValueID() == CSSValueNone); 786 ASSERT(toCSSPrimitiveValue(value).getValueID() == CSSValueNone);
787 return PassRefPtr<ShadowList>(); 787 return PassRefPtr<ShadowList>();
788 } 788 }
789 789
790 const CSSValueList& valueList = toCSSValueList(value); 790 const CSSValueList& valueList = toCSSValueList(value);
791 size_t shadowCount = valueList.length(); 791 size_t shadowCount = valueList.length();
792 ShadowDataVector shadows; 792 ShadowDataVector shadows;
793 for (size_t i = 0; i < shadowCount; ++i) { 793 for (size_t i = 0; i < shadowCount; ++i) {
794 const CSSShadowValue& item = toCSSShadowValue(valueList.item(i)); 794 const CSSShadowValue& item = toCSSShadowValue(valueList.item(i));
795 float x = toCSSPrimitiveValue(*item.x).computeLength<float>(state.cssToL engthConversionData()); 795 float x = toCSSPrimitiveValue(item.x).computeLength<float>(state.cssToLe ngthConversionData());
796 float y = toCSSPrimitiveValue(*item.y).computeLength<float>(state.cssToL engthConversionData()); 796 float y = toCSSPrimitiveValue(item.y).computeLength<float>(state.cssToLe ngthConversionData());
797 float blur = item.blur ? toCSSPrimitiveValue(*item.blur).computeLength<f loat>(state.cssToLengthConversionData()) : 0; 797 float blur = item.blur ? toCSSPrimitiveValue(item.blur).computeLength<fl oat>(state.cssToLengthConversionData()) : 0;
798 float spread = item.spread ? toCSSPrimitiveValue(*item.spread).computeLe ngth<float>(state.cssToLengthConversionData()) : 0; 798 float spread = item.spread ? toCSSPrimitiveValue(item.spread).computeLen gth<float>(state.cssToLengthConversionData()) : 0;
799 ShadowStyle shadowStyle = item.style && toCSSPrimitiveValue(*item.style) .getValueID() == CSSValueInset ? Inset : Normal; 799 ShadowStyle shadowStyle = item.style && toCSSPrimitiveValue(item.style). getValueID() == CSSValueInset ? Inset : Normal;
800 StyleColor color = StyleColor::currentColor(); 800 StyleColor color = StyleColor::currentColor();
801 if (item.color) 801 if (item.color)
802 color = convertStyleColor(state, CSSValue(*item.color)); 802 color = convertStyleColor(state, CSSValue(*item.color));
803 shadows.append(ShadowData(FloatPoint(x, y), blur, spread, shadowStyle, c olor)); 803 shadows.append(ShadowData(FloatPoint(x, y), blur, spread, shadowStyle, c olor));
804 } 804 }
805 return ShadowList::adopt(shadows); 805 return ShadowList::adopt(shadows);
806 } 806 }
807 807
808 PassRefPtr<ShapeValue> StyleBuilderConverter::convertShapeValue(StyleResolverSta te& state, CSSValue value) 808 PassRefPtr<ShapeValue> StyleBuilderConverter::convertShapeValue(StyleResolverSta te& state, const CSSValue& value)
809 { 809 {
810 if (value.isPrimitiveValue()) { 810 if (value.isPrimitiveValue()) {
811 ASSERT(toCSSPrimitiveValue(value).getValueID() == CSSValueNone); 811 ASSERT(toCSSPrimitiveValue(value).getValueID() == CSSValueNone);
812 return nullptr; 812 return nullptr;
813 } 813 }
814 814
815 if (value.isImageValue() || value.isImageGeneratorValue() || value.isImageSe tValue()) 815 if (value.isImageValue() || value.isImageGeneratorValue() || value.isImageSe tValue())
816 return ShapeValue::createImageValue(state.styleImage(CSSPropertyShapeOut side, value)); 816 return ShapeValue::createImageValue(state.styleImage(CSSPropertyShapeOut side, value));
817 817
818 RefPtr<BasicShape> shape; 818 RefPtr<BasicShape> shape;
819 CSSBoxType cssBox = BoxMissing; 819 CSSBoxType cssBox = BoxMissing;
820 CSSValueList& valueList = toCSSValueList(value); 820 CSSValueList& valueList = toCSSValueList(value);
821 for (unsigned i = 0; i < valueList.length(); ++i) { 821 for (unsigned i = 0; i < valueList.length(); ++i) {
822 CSSPrimitiveValue primitiveValue = toCSSPrimitiveValue(valueList.item(i) ); 822 const CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(valueList. item(i));
823 if (primitiveValue.isShape()) 823 if (primitiveValue.isShape())
824 shape = basicShapeForValue(state, primitiveValue.getShapeValue()); 824 shape = basicShapeForValue(state, primitiveValue.getShapeValue());
825 else 825 else
826 cssBox = CSSBoxType(primitiveValue); 826 cssBox = CSSBoxType(primitiveValue);
827 } 827 }
828 828
829 if (shape) 829 if (shape)
830 return ShapeValue::createShapeValue(shape.release(), cssBox); 830 return ShapeValue::createShapeValue(shape.release(), cssBox);
831 831
832 ASSERT(cssBox != BoxMissing); 832 ASSERT(cssBox != BoxMissing);
833 return ShapeValue::createBoxShapeValue(cssBox); 833 return ShapeValue::createBoxShapeValue(cssBox);
834 } 834 }
835 835
836 float StyleBuilderConverter::convertSpacing(StyleResolverState& state, CSSValue value) 836 float StyleBuilderConverter::convertSpacing(StyleResolverState& state, const CSS Value& value)
837 { 837 {
838 CSSPrimitiveValue primitiveValue = toCSSPrimitiveValue(value); 838 const CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value);
839 if (primitiveValue.getValueID() == CSSValueNormal) 839 if (primitiveValue.getValueID() == CSSValueNormal)
840 return 0; 840 return 0;
841 return primitiveValue.computeLength<float>(state.cssToLengthConversionData() ); 841 return primitiveValue.computeLength<float>(state.cssToLengthConversionData() );
842 } 842 }
843 843
844 PassRefPtr<SVGDashArray> StyleBuilderConverter::convertStrokeDasharray(StyleReso lverState& state, CSSValue value) 844 PassRefPtr<SVGDashArray> StyleBuilderConverter::convertStrokeDasharray(StyleReso lverState& state, const CSSValue& value)
845 { 845 {
846 if (!value.isValueList()) 846 if (!value.isValueList())
847 return SVGComputedStyle::initialStrokeDashArray(); 847 return SVGComputedStyle::initialStrokeDashArray();
848 848
849 CSSValueList& dashes = toCSSValueList(value); 849 CSSValueList& dashes = toCSSValueList(value);
850 850
851 RefPtr<SVGDashArray> array = SVGDashArray::create(); 851 RefPtr<SVGDashArray> array = SVGDashArray::create();
852 size_t length = dashes.length(); 852 size_t length = dashes.length();
853 for (size_t i = 0; i < length; ++i) { 853 for (size_t i = 0; i < length; ++i) {
854 CSSValue currValue = dashes.item(i); 854 CSSValue currValue = dashes.item(i);
855 if (!currValue.isPrimitiveValue()) 855 if (!currValue.isPrimitiveValue())
856 continue; 856 continue;
857 857
858 array->append(convertLength(state, currValue)); 858 array->append(convertLength(state, currValue));
859 } 859 }
860 860
861 return array.release(); 861 return array.release();
862 } 862 }
863 863
864 StyleColor StyleBuilderConverter::convertStyleColor(StyleResolverState& state, C SSValue value, bool forVisitedLink) 864 StyleColor StyleBuilderConverter::convertStyleColor(StyleResolverState& state, c onst CSSValue& value, bool forVisitedLink)
865 { 865 {
866 CSSPrimitiveValue primitiveValue = toCSSPrimitiveValue(value); 866 const CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value);
867 if (primitiveValue.getValueID() == CSSValueCurrentcolor) 867 if (primitiveValue.getValueID() == CSSValueCurrentcolor)
868 return StyleColor::currentColor(); 868 return StyleColor::currentColor();
869 return state.document().textLinkColors().colorFromPrimitiveValue(primitiveVa lue, Color(), forVisitedLink); 869 return state.document().textLinkColors().colorFromPrimitiveValue(primitiveVa lue, Color(), forVisitedLink);
870 } 870 }
871 871
872 float StyleBuilderConverter::convertTextStrokeWidth(StyleResolverState& state, C SSValue value) 872 float StyleBuilderConverter::convertTextStrokeWidth(StyleResolverState& state, c onst CSSValue& value)
873 { 873 {
874 CSSPrimitiveValue primitiveValue = toCSSPrimitiveValue(value); 874 const CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value);
875 if (primitiveValue.getValueID()) { 875 if (primitiveValue.getValueID()) {
876 float multiplier = convertLineWidth<float>(state, value); 876 float multiplier = convertLineWidth<float>(state, value);
877 return CSSPrimitiveValue::create(multiplier / 48, CSSPrimitiveValue::CSS _EMS).computeLength<float>(state.cssToLengthConversionData()); 877 return CSSPrimitiveValue::create(multiplier / 48, CSSPrimitiveValue::CSS _EMS).computeLength<float>(state.cssToLengthConversionData());
878 } 878 }
879 return primitiveValue.computeLength<float>(state.cssToLengthConversionData() ); 879 return primitiveValue.computeLength<float>(state.cssToLengthConversionData() );
880 } 880 }
881 881
882 TransformOrigin StyleBuilderConverter::convertTransformOrigin(StyleResolverState & state, CSSValue value) 882 TransformOrigin StyleBuilderConverter::convertTransformOrigin(StyleResolverState & state, const CSSValue& value)
883 { 883 {
884 CSSValueList& list = toCSSValueList(value); 884 CSSValueList& list = toCSSValueList(value);
885 ASSERT(list.length() == 3); 885 ASSERT(list.length() == 3);
886 886
887 CSSPrimitiveValue primitiveValueX = toCSSPrimitiveValue(list.item(0)); 887 const CSSPrimitiveValue& primitiveValueX = toCSSPrimitiveValue(list.item(0)) ;
888 CSSPrimitiveValue primitiveValueY = toCSSPrimitiveValue(list.item(1)); 888 const CSSPrimitiveValue& primitiveValueY = toCSSPrimitiveValue(list.item(1)) ;
889 889
890 return TransformOrigin( 890 return TransformOrigin(
891 convertOriginLength<CSSValueLeft, CSSValueRight>(state, primitiveValueX) , 891 convertOriginLength<CSSValueLeft, CSSValueRight>(state, primitiveValueX) ,
892 convertOriginLength<CSSValueTop, CSSValueBottom>(state, primitiveValueY) , 892 convertOriginLength<CSSValueTop, CSSValueBottom>(state, primitiveValueY) ,
893 StyleBuilderConverter::convertComputedLength<float>(state, list.item(2)) 893 StyleBuilderConverter::convertComputedLength<float>(state, list.item(2))
894 ); 894 );
895 } 895 }
896 896
897 ScrollSnapPoints StyleBuilderConverter::convertSnapPoints(StyleResolverState& st ate, CSSValue value) 897 ScrollSnapPoints StyleBuilderConverter::convertSnapPoints(StyleResolverState& st ate, const CSSValue& value)
898 { 898 {
899 // Handles: none | repeat(<length>) 899 // Handles: none | repeat(<length>)
900 ScrollSnapPoints points; 900 ScrollSnapPoints points;
901 points.hasRepeat = false; 901 points.hasRepeat = false;
902 902
903 if (!value.isFunctionValue()) 903 if (!value.isFunctionValue())
904 return points; 904 return points;
905 905
906 CSSFunctionValue& repeatFunction = toCSSFunctionValue(value); 906 CSSFunctionValue& repeatFunction = toCSSFunctionValue(value);
907 ASSERT_WITH_SECURITY_IMPLICATION(repeatFunction.length() == 1); 907 ASSERT_WITH_SECURITY_IMPLICATION(repeatFunction.length() == 1);
908 points.repeatOffset = convertLength(state, repeatFunction.item(0)); 908 points.repeatOffset = convertLength(state, repeatFunction.item(0));
909 points.hasRepeat = true; 909 points.hasRepeat = true;
910 910
911 return points; 911 return points;
912 } 912 }
913 913
914 Vector<LengthPoint> StyleBuilderConverter::convertSnapCoordinates(StyleResolverS tate& state, CSSValue value) 914 Vector<LengthPoint> StyleBuilderConverter::convertSnapCoordinates(StyleResolverS tate& state, const CSSValue& value)
915 { 915 {
916 // Handles: none | <position># 916 // Handles: none | <position>#
917 Vector<LengthPoint> coordinates; 917 Vector<LengthPoint> coordinates;
918 918
919 if (!value.isValueList()) 919 if (!value.isValueList())
920 return coordinates; 920 return coordinates;
921 921
922 CSSValueList& valueList = toCSSValueList(value); 922 CSSValueList& valueList = toCSSValueList(value);
923 coordinates.reserveInitialCapacity(valueList.length()); 923 coordinates.reserveInitialCapacity(valueList.length());
924 for (auto& snapCoordinate : valueList) { 924 for (auto& snapCoordinate : valueList) {
925 coordinates.uncheckedAppend(convertPosition(state, snapCoordinate)); 925 coordinates.uncheckedAppend(convertPosition(state, snapCoordinate));
926 } 926 }
927 927
928 return coordinates; 928 return coordinates;
929 } 929 }
930 930
931 PassRefPtr<TranslateTransformOperation> StyleBuilderConverter::convertTranslate( StyleResolverState& state, CSSValue value) 931 PassRefPtr<TranslateTransformOperation> StyleBuilderConverter::convertTranslate( StyleResolverState& state, const CSSValue& value)
932 { 932 {
933 CSSValueList& list = toCSSValueList(value); 933 CSSValueList& list = toCSSValueList(value);
934 ASSERT(list.length() <= 3); 934 ASSERT(list.length() <= 3);
935 Length tx = convertLength(state, list.item(0)); 935 Length tx = convertLength(state, list.item(0));
936 Length ty(0, Fixed); 936 Length ty(0, Fixed);
937 double tz = 0; 937 double tz = 0;
938 if (list.length() >= 2) 938 if (list.length() >= 2)
939 ty = convertLength(state, list.item(1)); 939 ty = convertLength(state, list.item(1));
940 if (list.length() == 3) 940 if (list.length() == 3)
941 tz = toCSSPrimitiveValue(list.item(2)).getDoubleValue(); 941 tz = toCSSPrimitiveValue(list.item(2)).getDoubleValue();
942 942
943 return TranslateTransformOperation::create(tx, ty, tz, TransformOperation::T ranslate3D); 943 return TranslateTransformOperation::create(tx, ty, tz, TransformOperation::T ranslate3D);
944 } 944 }
945 945
946 PassRefPtr<RotateTransformOperation> StyleBuilderConverter::convertRotate(StyleR esolverState& state, CSSValue value) 946 PassRefPtr<RotateTransformOperation> StyleBuilderConverter::convertRotate(StyleR esolverState& state, const CSSValue& value)
947 { 947 {
948 CSSValueList& list = toCSSValueList(value); 948 CSSValueList& list = toCSSValueList(value);
949 ASSERT(list.length() == 1 || list.length() == 4); 949 ASSERT(list.length() == 1 || list.length() == 4);
950 double angle = toCSSPrimitiveValue(list.item(0)).computeDegrees(); 950 double angle = toCSSPrimitiveValue(list.item(0)).computeDegrees();
951 double x = 0; 951 double x = 0;
952 double y = 0; 952 double y = 0;
953 double z = 1; 953 double z = 1;
954 if (list.length() == 4) { 954 if (list.length() == 4) {
955 x = toCSSPrimitiveValue(list.item(1)).getDoubleValue(); 955 x = toCSSPrimitiveValue(list.item(1)).getDoubleValue();
956 y = toCSSPrimitiveValue(list.item(2)).getDoubleValue(); 956 y = toCSSPrimitiveValue(list.item(2)).getDoubleValue();
957 z = toCSSPrimitiveValue(list.item(3)).getDoubleValue(); 957 z = toCSSPrimitiveValue(list.item(3)).getDoubleValue();
958 } 958 }
959 959
960 return RotateTransformOperation::create(x, y, z, angle, TransformOperation:: Rotate3D); 960 return RotateTransformOperation::create(x, y, z, angle, TransformOperation:: Rotate3D);
961 } 961 }
962 962
963 PassRefPtr<ScaleTransformOperation> StyleBuilderConverter::convertScale(StyleRes olverState& state, CSSValue value) 963 PassRefPtr<ScaleTransformOperation> StyleBuilderConverter::convertScale(StyleRes olverState& state, const CSSValue& value)
964 { 964 {
965 CSSValueList& list = toCSSValueList(value); 965 CSSValueList& list = toCSSValueList(value);
966 ASSERT(list.length() <= 3); 966 ASSERT(list.length() <= 3);
967 double sx = toCSSPrimitiveValue(list.item(0)).getDoubleValue(); 967 double sx = toCSSPrimitiveValue(list.item(0)).getDoubleValue();
968 double sy = sx; 968 double sy = sx;
969 double sz = 1; 969 double sz = 1;
970 if (list.length() >= 2) 970 if (list.length() >= 2)
971 sy = toCSSPrimitiveValue(list.item(1)).getDoubleValue(); 971 sy = toCSSPrimitiveValue(list.item(1)).getDoubleValue();
972 if (list.length() == 3) 972 if (list.length() == 3)
973 sz = toCSSPrimitiveValue(list.item(2)).getDoubleValue(); 973 sz = toCSSPrimitiveValue(list.item(2)).getDoubleValue();
974 974
975 return ScaleTransformOperation::create(sx, sy, sz, TransformOperation::Scale 3D); 975 return ScaleTransformOperation::create(sx, sy, sz, TransformOperation::Scale 3D);
976 } 976 }
977 977
978 } // namespace blink 978 } // namespace blink
OLDNEW
« no previous file with comments | « Source/core/css/resolver/StyleBuilderConverter.h ('k') | Source/core/css/resolver/StyleBuilderCustom.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698