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

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

Issue 1225553002: CSSValue Immediates: Make CSSPrimitiveValue a container (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@cssvalue_patch_1
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 29 matching lines...) Expand all
40 #include "core/svg/SVGElement.h" 40 #include "core/svg/SVGElement.h"
41 #include "core/svg/SVGURIReference.h" 41 #include "core/svg/SVGURIReference.h"
42 #include "platform/transforms/RotateTransformOperation.h" 42 #include "platform/transforms/RotateTransformOperation.h"
43 #include "platform/transforms/ScaleTransformOperation.h" 43 #include "platform/transforms/ScaleTransformOperation.h"
44 #include "platform/transforms/TranslateTransformOperation.h" 44 #include "platform/transforms/TranslateTransformOperation.h"
45 45
46 namespace blink { 46 namespace blink {
47 47
48 namespace { 48 namespace {
49 49
50 static GridLength convertGridTrackBreadth(const StyleResolverState& state, CSSPr imitiveValue* primitiveValue) 50 static GridLength convertGridTrackBreadth(const StyleResolverState& state, CSSPr imitiveValue primitiveValue)
51 { 51 {
52 if (primitiveValue->getValueID() == CSSValueMinContent) 52 if (primitiveValue.getValueID() == CSSValueMinContent)
53 return Length(MinContent); 53 return Length(MinContent);
54 54
55 if (primitiveValue->getValueID() == CSSValueMaxContent) 55 if (primitiveValue.getValueID() == CSSValueMaxContent)
56 return Length(MaxContent); 56 return Length(MaxContent);
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, CSSValue(*primitive Value)); 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, 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 if (reflectValue.offset()) 77 reflection->setOffset(reflectValue.offset().convertToLength(state.cssToLengt hConversionData()));
78 reflection->setOffset(reflectValue.offset()->convertToLength(state.cssTo LengthConversionData()));
79 NinePieceImage mask; 78 NinePieceImage mask;
80 mask.setMaskDefaults(); 79 mask.setMaskDefaults();
81 CSSToStyleMap::mapNinePieceImage(state, CSSPropertyWebkitBoxReflect, reflect Value.mask(), mask); 80 CSSToStyleMap::mapNinePieceImage(state, CSSPropertyWebkitBoxReflect, reflect Value.mask(), mask);
82 reflection->setMask(mask); 81 reflection->setMask(mask);
83 82
84 return reflection.release(); 83 return reflection.release();
85 } 84 }
86 85
87 Color StyleBuilderConverter::convertColor(StyleResolverState& state, CSSValue va lue, bool forVisitedLink) 86 Color StyleBuilderConverter::convertColor(StyleResolverState& state, CSSValue va lue, bool forVisitedLink)
88 { 87 {
89 CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value); 88 CSSPrimitiveValue primitiveValue = toCSSPrimitiveValue(value);
90 return state.document().textLinkColors().colorFromPrimitiveValue(primitiveVa lue, state.style()->color(), forVisitedLink); 89 return state.document().textLinkColors().colorFromPrimitiveValue(primitiveVa lue, state.style()->color(), forVisitedLink);
91 } 90 }
92 91
93 AtomicString StyleBuilderConverter::convertFragmentIdentifier(StyleResolverState & state, CSSValue value) 92 AtomicString StyleBuilderConverter::convertFragmentIdentifier(StyleResolverState & state, CSSValue value)
94 { 93 {
95 CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value); 94 CSSPrimitiveValue primitiveValue = toCSSPrimitiveValue(value);
96 if (primitiveValue.isURI()) 95 if (primitiveValue.isURI())
97 return SVGURIReference::fragmentIdentifierFromIRIString(primitiveValue.g etStringValue(), state.element()->treeScope()); 96 return SVGURIReference::fragmentIdentifierFromIRIString(primitiveValue.g etStringValue(), state.element()->treeScope());
98 return nullAtom; 97 return nullAtom;
99 } 98 }
100 99
101 LengthBox StyleBuilderConverter::convertClip(StyleResolverState& state, CSSValue value) 100 LengthBox StyleBuilderConverter::convertClip(StyleResolverState& state, CSSValue value)
102 { 101 {
103 Rect* rect = toCSSPrimitiveValue(value).getRectValue(); 102 Rect* rect = toCSSPrimitiveValue(value).getRectValue();
104 103
105 return LengthBox(convertLengthOrAuto(state, CSSValue(*rect->top())), 104 return LengthBox(convertLengthOrAuto(state, rect->top()),
106 convertLengthOrAuto(state, CSSValue(*rect->right())), 105 convertLengthOrAuto(state, rect->right()),
107 convertLengthOrAuto(state, CSSValue(*rect->bottom())), 106 convertLengthOrAuto(state, rect->bottom()),
108 convertLengthOrAuto(state, CSSValue(*rect->left()))); 107 convertLengthOrAuto(state, rect->left()));
109 } 108 }
110 109
111 static FontDescription::GenericFamilyType convertGenericFamily(CSSValueID valueI D) 110 static FontDescription::GenericFamilyType convertGenericFamily(CSSValueID valueI D)
112 { 111 {
113 switch (valueID) { 112 switch (valueID) {
114 case CSSValueWebkitBody: 113 case CSSValueWebkitBody:
115 return FontDescription::StandardFamily; 114 return FontDescription::StandardFamily;
116 case CSSValueSerif: 115 case CSSValueSerif:
117 return FontDescription::SerifFamily; 116 return FontDescription::SerifFamily;
118 case CSSValueSansSerif: 117 case CSSValueSansSerif:
119 return FontDescription::SansSerifFamily; 118 return FontDescription::SansSerifFamily;
120 case CSSValueCursive: 119 case CSSValueCursive:
121 return FontDescription::CursiveFamily; 120 return FontDescription::CursiveFamily;
122 case CSSValueFantasy: 121 case CSSValueFantasy:
123 return FontDescription::FantasyFamily; 122 return FontDescription::FantasyFamily;
124 case CSSValueMonospace: 123 case CSSValueMonospace:
125 return FontDescription::MonospaceFamily; 124 return FontDescription::MonospaceFamily;
126 case CSSValueWebkitPictograph: 125 case CSSValueWebkitPictograph:
127 return FontDescription::PictographFamily; 126 return FontDescription::PictographFamily;
128 default: 127 default:
129 return FontDescription::NoFamily; 128 return FontDescription::NoFamily;
130 } 129 }
131 } 130 }
132 131
133 static bool convertFontFamilyName(StyleResolverState& state, CSSPrimitiveValue& primitiveValue, 132 static bool convertFontFamilyName(StyleResolverState& state, CSSPrimitiveValue p rimitiveValue,
134 FontDescription::GenericFamilyType& genericFamily, AtomicString& familyName) 133 FontDescription::GenericFamilyType& genericFamily, AtomicString& familyName)
135 { 134 {
136 if (primitiveValue.isCustomIdent()) { 135 if (primitiveValue.isCustomIdent()) {
137 genericFamily = FontDescription::NoFamily; 136 genericFamily = FontDescription::NoFamily;
138 familyName = AtomicString(primitiveValue.getStringValue()); 137 familyName = AtomicString(primitiveValue.getStringValue());
139 } else if (state.document().settings()) { 138 } else if (state.document().settings()) {
140 genericFamily = convertGenericFamily(primitiveValue.getValueID()); 139 genericFamily = convertGenericFamily(primitiveValue.getValueID());
141 familyName = state.fontBuilder().genericFontFamilyName(genericFamily); 140 familyName = state.fontBuilder().genericFontFamilyName(genericFamily);
142 } 141 }
143 142
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
183 CSSValueList& list = toCSSValueList(value); 182 CSSValueList& list = toCSSValueList(value);
184 RefPtr<FontFeatureSettings> settings = FontFeatureSettings::create(); 183 RefPtr<FontFeatureSettings> settings = FontFeatureSettings::create();
185 int len = list.length(); 184 int len = list.length();
186 for (int i = 0; i < len; ++i) { 185 for (int i = 0; i < len; ++i) {
187 CSSFontFeatureValue& feature = toCSSFontFeatureValue(list.item(i)); 186 CSSFontFeatureValue& feature = toCSSFontFeatureValue(list.item(i));
188 settings->append(FontFeature(feature.tag(), feature.value())); 187 settings->append(FontFeature(feature.tag(), feature.value()));
189 } 188 }
190 return settings; 189 return settings;
191 } 190 }
192 191
193 static float computeFontSize(StyleResolverState& state, CSSPrimitiveValue& primi tiveValue, const FontDescription::Size& parentSize) 192 static float computeFontSize(StyleResolverState& state, CSSPrimitiveValue primit iveValue, const FontDescription::Size& parentSize)
194 { 193 {
195 float em = state.parentStyle()->specifiedFontSize(); 194 float em = state.parentStyle()->specifiedFontSize();
196 float rem = state.rootElementStyle() ? state.rootElementStyle()->specifiedFo ntSize() : 1.0f; 195 float rem = state.rootElementStyle() ? state.rootElementStyle()->specifiedFo ntSize() : 1.0f;
197 CSSToLengthConversionData::FontSizes fontSizes(em, rem, &state.parentStyle() ->font()); 196 CSSToLengthConversionData::FontSizes fontSizes(em, rem, &state.parentStyle() ->font());
198 CSSToLengthConversionData::ViewportSize viewportSize(state.document().layout View()); 197 CSSToLengthConversionData::ViewportSize viewportSize(state.document().layout View());
199 198
200 CSSToLengthConversionData conversionData(state.style(), fontSizes, viewportS ize, 1.0f); 199 CSSToLengthConversionData conversionData(state.style(), fontSizes, viewportS ize, 1.0f);
201 if (primitiveValue.isLength()) 200 if (primitiveValue.isLength())
202 return primitiveValue.computeLength<float>(conversionData); 201 return primitiveValue.computeLength<float>(conversionData);
203 if (primitiveValue.isCalculatedPercentageWithLength()) 202 if (primitiveValue.isCalculatedPercentageWithLength())
204 return primitiveValue.cssCalcValue()->toCalcValue(conversionData)->evalu ate(parentSize.value); 203 return primitiveValue.cssCalcValue()->toCalcValue(conversionData)->evalu ate(parentSize.value);
205 204
206 ASSERT_NOT_REACHED(); 205 ASSERT_NOT_REACHED();
207 return 0; 206 return 0;
208 } 207 }
209 208
210 FontDescription::Size StyleBuilderConverter::convertFontSize(StyleResolverState& state, CSSValue value) 209 FontDescription::Size StyleBuilderConverter::convertFontSize(StyleResolverState& state, CSSValue value)
211 { 210 {
212 CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value); 211 CSSPrimitiveValue primitiveValue = toCSSPrimitiveValue(value);
213 212
214 FontDescription::Size parentSize(0, 0.0f, false); 213 FontDescription::Size parentSize(0, 0.0f, false);
215 214
216 // FIXME: Find out when parentStyle could be 0? 215 // FIXME: Find out when parentStyle could be 0?
217 if (state.parentStyle()) 216 if (state.parentStyle())
218 parentSize = state.parentFontDescription().size(); 217 parentSize = state.parentFontDescription().size();
219 218
220 if (CSSValueID valueID = primitiveValue.getValueID()) { 219 if (CSSValueID valueID = primitiveValue.getValueID()) {
221 switch (valueID) { 220 switch (valueID) {
222 case CSSValueXxSmall: 221 case CSSValueXxSmall:
(...skipping 18 matching lines...) Expand all
241 bool parentIsAbsoluteSize = state.parentFontDescription().isAbsoluteSize(); 240 bool parentIsAbsoluteSize = state.parentFontDescription().isAbsoluteSize();
242 241
243 if (primitiveValue.isPercentage()) 242 if (primitiveValue.isPercentage())
244 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);
245 244
246 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());
247 } 246 }
248 247
249 float StyleBuilderConverter::convertFontSizeAdjust(StyleResolverState& state, CS SValue value) 248 float StyleBuilderConverter::convertFontSizeAdjust(StyleResolverState& state, CS SValue value)
250 { 249 {
251 CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value); 250 CSSPrimitiveValue primitiveValue = toCSSPrimitiveValue(value);
252 if (primitiveValue.getValueID() == CSSValueNone) 251 if (primitiveValue.getValueID() == CSSValueNone)
253 return FontBuilder::initialSizeAdjust(); 252 return FontBuilder::initialSizeAdjust();
254 253
255 ASSERT(primitiveValue.isNumber()); 254 ASSERT(primitiveValue.isNumber());
256 return primitiveValue.getFloatValue(); 255 return primitiveValue.getFloatValue();
257 } 256 }
258 257
259 FontWeight StyleBuilderConverter::convertFontWeight(StyleResolverState& state, C SSValue value) 258 FontWeight StyleBuilderConverter::convertFontWeight(StyleResolverState& state, C SSValue value)
260 { 259 {
261 CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value); 260 CSSPrimitiveValue primitiveValue = toCSSPrimitiveValue(value);
262 switch (primitiveValue.getValueID()) { 261 switch (primitiveValue.getValueID()) {
263 case CSSValueBolder: 262 case CSSValueBolder:
264 return FontDescription::bolderWeight(state.parentStyle()->fontDescriptio n().weight()); 263 return FontDescription::bolderWeight(state.parentStyle()->fontDescriptio n().weight());
265 case CSSValueLighter: 264 case CSSValueLighter:
266 return FontDescription::lighterWeight(state.parentStyle()->fontDescripti on().weight()); 265 return FontDescription::lighterWeight(state.parentStyle()->fontDescripti on().weight());
267 default: 266 default:
268 return primitiveValue; 267 return primitiveValue;
269 } 268 }
270 } 269 }
271 270
272 FontDescription::VariantLigatures StyleBuilderConverter::convertFontVariantLigat ures(StyleResolverState&, CSSValue value) 271 FontDescription::VariantLigatures StyleBuilderConverter::convertFontVariantLigat ures(StyleResolverState&, CSSValue value)
273 { 272 {
274 if (value.isValueList()) { 273 if (value.isValueList()) {
275 FontDescription::VariantLigatures ligatures; 274 FontDescription::VariantLigatures ligatures;
276 CSSValueList& valueList = toCSSValueList(value); 275 CSSValueList& valueList = toCSSValueList(value);
277 for (size_t i = 0; i < valueList.length(); ++i) { 276 for (size_t i = 0; i < valueList.length(); ++i) {
278 CSSValue item = valueList.item(i); 277 CSSValue item = valueList.item(i);
279 CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(item); 278 CSSPrimitiveValue primitiveValue = toCSSPrimitiveValue(item);
280 switch (primitiveValue.getValueID()) { 279 switch (primitiveValue.getValueID()) {
281 case CSSValueNoCommonLigatures: 280 case CSSValueNoCommonLigatures:
282 ligatures.common = FontDescription::DisabledLigaturesState; 281 ligatures.common = FontDescription::DisabledLigaturesState;
283 break; 282 break;
284 case CSSValueCommonLigatures: 283 case CSSValueCommonLigatures:
285 ligatures.common = FontDescription::EnabledLigaturesState; 284 ligatures.common = FontDescription::EnabledLigaturesState;
286 break; 285 break;
287 case CSSValueNoDiscretionaryLigatures: 286 case CSSValueNoDiscretionaryLigatures:
288 ligatures.discretionary = FontDescription::DisabledLigaturesStat e; 287 ligatures.discretionary = FontDescription::DisabledLigaturesStat e;
289 break; 288 break;
(...skipping 23 matching lines...) Expand all
313 ASSERT_WITH_SECURITY_IMPLICATION(value.isPrimitiveValue()); 312 ASSERT_WITH_SECURITY_IMPLICATION(value.isPrimitiveValue());
314 ASSERT(toCSSPrimitiveValue(value).getValueID() == CSSValueNormal); 313 ASSERT(toCSSPrimitiveValue(value).getValueID() == CSSValueNormal);
315 return FontDescription::VariantLigatures(); 314 return FontDescription::VariantLigatures();
316 } 315 }
317 316
318 EGlyphOrientation StyleBuilderConverter::convertGlyphOrientation(StyleResolverSt ate&, CSSValue value) 317 EGlyphOrientation StyleBuilderConverter::convertGlyphOrientation(StyleResolverSt ate&, CSSValue value)
319 { 318 {
320 if (!value.isPrimitiveValue()) 319 if (!value.isPrimitiveValue())
321 return GO_0DEG; 320 return GO_0DEG;
322 321
323 CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value); 322 CSSPrimitiveValue primitiveValue = toCSSPrimitiveValue(value);
324 if (primitiveValue.primitiveType() != CSSPrimitiveValue::CSS_DEG) 323 if (primitiveValue.primitiveType() != CSSPrimitiveValue::CSS_DEG)
325 return GO_0DEG; 324 return GO_0DEG;
326 325
327 float angle = fabsf(fmodf(primitiveValue.getFloatValue(), 360.0f)); 326 float angle = fabsf(fmodf(primitiveValue.getFloatValue(), 360.0f));
328 327
329 if (angle <= 45.0f || angle > 315.0f) 328 if (angle <= 45.0f || angle > 315.0f)
330 return GO_0DEG; 329 return GO_0DEG;
331 if (angle > 45.0f && angle <= 135.0f) 330 if (angle > 45.0f && angle <= 135.0f)
332 return GO_90DEG; 331 return GO_90DEG;
333 if (angle > 135.0f && angle <= 225.0f) 332 if (angle > 135.0f && angle <= 225.0f)
334 return GO_180DEG; 333 return GO_180DEG;
335 return GO_270DEG; 334 return GO_270DEG;
336 } 335 }
337 336
338 StyleSelfAlignmentData StyleBuilderConverter::convertSelfOrDefaultAlignmentData( StyleResolverState&, CSSValue value) 337 StyleSelfAlignmentData StyleBuilderConverter::convertSelfOrDefaultAlignmentData( StyleResolverState&, CSSValue value)
339 { 338 {
340 StyleSelfAlignmentData alignmentData = ComputedStyle::initialSelfAlignment() ; 339 StyleSelfAlignmentData alignmentData = ComputedStyle::initialSelfAlignment() ;
341 CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value); 340 CSSPrimitiveValue primitiveValue = toCSSPrimitiveValue(value);
342 if (Pair* pairValue = primitiveValue.getPairValue()) { 341 if (Pair* pairValue = primitiveValue.getPairValue()) {
343 if (pairValue->first()->getValueID() == CSSValueLegacy) { 342 if (toCSSPrimitiveValue(*pairValue->first()).getValueID() == CSSValueLeg acy) {
344 alignmentData.setPositionType(LegacyPosition); 343 alignmentData.setPositionType(LegacyPosition);
345 alignmentData.setPosition(*pairValue->second()); 344 alignmentData.setPosition(toCSSPrimitiveValue(*pairValue->second())) ;
346 } else { 345 } else {
347 alignmentData.setPosition(*pairValue->first()); 346 alignmentData.setPosition(toCSSPrimitiveValue(*pairValue->first()));
348 alignmentData.setOverflow(*pairValue->second()); 347 alignmentData.setOverflow(toCSSPrimitiveValue(*pairValue->second())) ;
349 } 348 }
350 } else { 349 } else {
351 alignmentData.setPosition(primitiveValue); 350 alignmentData.setPosition(primitiveValue);
352 } 351 }
353 return alignmentData; 352 return alignmentData;
354 } 353 }
355 354
356 StyleContentAlignmentData StyleBuilderConverter::convertContentAlignmentData(Sty leResolverState&, CSSValue value) 355 StyleContentAlignmentData StyleBuilderConverter::convertContentAlignmentData(Sty leResolverState&, CSSValue value)
357 { 356 {
358 StyleContentAlignmentData alignmentData = ComputedStyle::initialContentAlign ment(); 357 StyleContentAlignmentData alignmentData = ComputedStyle::initialContentAlign ment();
359 CSSContentDistributionValue& contentValue = toCSSContentDistributionValue(va lue); 358 CSSContentDistributionValue& contentValue = toCSSContentDistributionValue(va lue);
360 if (contentValue.distribution()->getValueID() != CSSValueInvalid) 359 if (contentValue.distribution().getValueID() != CSSValueInvalid)
361 alignmentData.setDistribution(*contentValue.distribution()); 360 alignmentData.setDistribution(contentValue.distribution());
362 if (contentValue.position()->getValueID() != CSSValueInvalid) 361 if (contentValue.position().getValueID() != CSSValueInvalid)
363 alignmentData.setPosition(*contentValue.position()); 362 alignmentData.setPosition(contentValue.position());
364 if (contentValue.overflow()->getValueID() != CSSValueInvalid) 363 if (contentValue.overflow().getValueID() != CSSValueInvalid)
365 alignmentData.setOverflow(*contentValue.overflow()); 364 alignmentData.setOverflow(contentValue.overflow());
366 return alignmentData; 365 return alignmentData;
367 } 366 }
368 367
369 GridAutoFlow StyleBuilderConverter::convertGridAutoFlow(StyleResolverState&, CSS Value value) 368 GridAutoFlow StyleBuilderConverter::convertGridAutoFlow(StyleResolverState&, CSS Value value)
370 { 369 {
371 CSSValueList& list = toCSSValueList(value); 370 CSSValueList& list = toCSSValueList(value);
372 371
373 ASSERT(list.length() >= 1); 372 ASSERT(list.length() >= 1);
374 CSSPrimitiveValue* first = &toCSSPrimitiveValue(list.item(0)); 373 CSSPrimitiveValue first = toCSSPrimitiveValue(list.item(0));
375 CSSPrimitiveValue* second = list.length() == 2 ? &toCSSPrimitiveValue(list.i tem(1)) : nullptr; 374 NullableCSSValue second = list.length() == 2 ? NullableCSSValue(list.item(1) ) : nullptr;
376 375
377 switch (first->getValueID()) { 376 switch (first.getValueID()) {
378 case CSSValueRow: 377 case CSSValueRow:
379 if (second && second->getValueID() == CSSValueDense) 378 if (second && toCSSPrimitiveValue(*second).getValueID() == CSSValueDense )
380 return AutoFlowRowDense; 379 return AutoFlowRowDense;
381 return AutoFlowRow; 380 return AutoFlowRow;
382 case CSSValueColumn: 381 case CSSValueColumn:
383 if (second && second->getValueID() == CSSValueDense) 382 if (second && toCSSPrimitiveValue(*second).getValueID() == CSSValueDense )
384 return AutoFlowColumnDense; 383 return AutoFlowColumnDense;
385 return AutoFlowColumn; 384 return AutoFlowColumn;
386 case CSSValueDense: 385 case CSSValueDense:
387 if (second && second->getValueID() == CSSValueColumn) 386 if (second && toCSSPrimitiveValue(*second).getValueID() == CSSValueColum n)
388 return AutoFlowColumnDense; 387 return AutoFlowColumnDense;
389 return AutoFlowRowDense; 388 return AutoFlowRowDense;
390 default: 389 default:
391 ASSERT_NOT_REACHED(); 390 ASSERT_NOT_REACHED();
392 return ComputedStyle::initialGridAutoFlow(); 391 return ComputedStyle::initialGridAutoFlow();
393 } 392 }
394 } 393 }
395 394
396 GridPosition StyleBuilderConverter::convertGridPosition(StyleResolverState&, CSS Value value) 395 GridPosition StyleBuilderConverter::convertGridPosition(StyleResolverState&, CSS Value value)
397 { 396 {
398 // We accept the specification's grammar: 397 // We accept the specification's grammar:
399 // 'auto' | [ <integer> || <custom-ident> ] | [ span && [ <integer> || <cust om-ident> ] ] | <custom-ident> 398 // 'auto' | [ <integer> || <custom-ident> ] | [ span && [ <integer> || <cust om-ident> ] ] | <custom-ident>
400 399
401 GridPosition position; 400 GridPosition position;
402 401
403 if (value.isPrimitiveValue()) { 402 if (value.isPrimitiveValue()) {
404 CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value); 403 CSSPrimitiveValue primitiveValue = toCSSPrimitiveValue(value);
405 // We translate <custom-ident> to <string> during parsing as it 404 // We translate <custom-ident> to <string> during parsing as it
406 // makes handling it more simple. 405 // makes handling it more simple.
407 if (primitiveValue.isCustomIdent()) { 406 if (primitiveValue.isCustomIdent()) {
408 position.setNamedGridArea(primitiveValue.getStringValue()); 407 position.setNamedGridArea(primitiveValue.getStringValue());
409 return position; 408 return position;
410 } 409 }
411 410
412 ASSERT(primitiveValue.getValueID() == CSSValueAuto); 411 ASSERT(primitiveValue.getValueID() == CSSValueAuto);
413 return position; 412 return position;
414 } 413 }
415 414
416 CSSValueList& values = toCSSValueList(value); 415 CSSValueList& values = toCSSValueList(value);
417 ASSERT(values.length()); 416 ASSERT(values.length());
418 417
419 bool isSpanPosition = false; 418 bool isSpanPosition = false;
420 // 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'.
421 int gridLineNumber = 1; 420 int gridLineNumber = 1;
422 String gridLineName; 421 String gridLineName;
423 422
424 auto it = values.begin(); 423 auto it = values.begin();
425 CSSPrimitiveValue* currentValue = &toCSSPrimitiveValue(*it); 424 NullableCSSValue currentValue = *it;
426 if (currentValue->getValueID() == CSSValueSpan) { 425 if (toCSSPrimitiveValue(*currentValue).getValueID() == CSSValueSpan) {
427 isSpanPosition = true; 426 isSpanPosition = true;
428 ++it; 427 ++it;
429 currentValue = it != values.end() ? &toCSSPrimitiveValue(*it) : 0; 428 currentValue = it != values.end() ? *it : NullableCSSValue();
430 } 429 }
431 430
432 if (currentValue && currentValue->isNumber()) { 431 if (currentValue && toCSSPrimitiveValue(*currentValue).isNumber()) {
433 gridLineNumber = currentValue->getIntValue(); 432 gridLineNumber = toCSSPrimitiveValue(*currentValue).getIntValue();
434 ++it; 433 ++it;
435 currentValue = it != values.end() ? &toCSSPrimitiveValue(*it) : 0; 434 currentValue = it != values.end() ? *it : NullableCSSValue();
436 } 435 }
437 436
438 if (currentValue && currentValue->isCustomIdent()) { 437 if (currentValue && toCSSPrimitiveValue(*currentValue).isCustomIdent()) {
439 gridLineName = currentValue->getStringValue(); 438 gridLineName = toCSSPrimitiveValue(*currentValue).getStringValue();
440 ++it; 439 ++it;
441 } 440 }
442 441
443 ASSERT(it == values.end()); 442 ASSERT(it == values.end());
444 if (isSpanPosition) 443 if (isSpanPosition)
445 position.setSpanPosition(gridLineNumber, gridLineName); 444 position.setSpanPosition(gridLineNumber, gridLineName);
446 else 445 else
447 position.setExplicitPosition(gridLineNumber, gridLineName); 446 position.setExplicitPosition(gridLineNumber, gridLineName);
448 447
449 return position; 448 return position;
450 } 449 }
451 450
452 GridTrackSize StyleBuilderConverter::convertGridTrackSize(StyleResolverState& st ate, CSSValue value) 451 GridTrackSize StyleBuilderConverter::convertGridTrackSize(StyleResolverState& st ate, CSSValue value)
453 { 452 {
454 if (value.isPrimitiveValue()) 453 if (value.isPrimitiveValue())
455 return GridTrackSize(convertGridTrackBreadth(state, &toCSSPrimitiveValue (value))); 454 return GridTrackSize(convertGridTrackBreadth(state, toCSSPrimitiveValue( value)));
456 455
457 CSSFunctionValue& minmaxFunction = toCSSFunctionValue(value); 456 CSSFunctionValue& minmaxFunction = toCSSFunctionValue(value);
458 ASSERT_WITH_SECURITY_IMPLICATION(minmaxFunction.length() == 2); 457 ASSERT_WITH_SECURITY_IMPLICATION(minmaxFunction.length() == 2);
459 GridLength minTrackBreadth(convertGridTrackBreadth(state, &toCSSPrimitiveVal ue(minmaxFunction.item(0)))); 458 GridLength minTrackBreadth(convertGridTrackBreadth(state, toCSSPrimitiveValu e(minmaxFunction.item(0))));
460 GridLength maxTrackBreadth(convertGridTrackBreadth(state, &toCSSPrimitiveVal ue(minmaxFunction.item(1)))); 459 GridLength maxTrackBreadth(convertGridTrackBreadth(state, toCSSPrimitiveValu e(minmaxFunction.item(1))));
461 return GridTrackSize(minTrackBreadth, maxTrackBreadth); 460 return GridTrackSize(minTrackBreadth, maxTrackBreadth);
462 } 461 }
463 462
464 bool StyleBuilderConverter::convertGridTrackList(CSSValue value, Vector<GridTrac kSize>& trackSizes, NamedGridLinesMap& namedGridLines, OrderedNamedGridLines& or deredNamedGridLines, StyleResolverState& state) 463 bool StyleBuilderConverter::convertGridTrackList(CSSValue value, Vector<GridTrac kSize>& trackSizes, NamedGridLinesMap& namedGridLines, OrderedNamedGridLines& or deredNamedGridLines, StyleResolverState& state)
465 { 464 {
466 // Handle 'none'. 465 // Handle 'none'.
467 if (value.isPrimitiveValue()) { 466 if (value.isPrimitiveValue()) {
468 CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value); 467 CSSPrimitiveValue primitiveValue = toCSSPrimitiveValue(value);
469 return primitiveValue.getValueID() == CSSValueNone; 468 return primitiveValue.getValueID() == CSSValueNone;
470 } 469 }
471 470
472 if (!value.isValueList()) 471 if (!value.isValueList())
473 return false; 472 return false;
474 473
475 size_t currentNamedGridLine = 0; 474 size_t currentNamedGridLine = 0;
476 for (auto& currValue : toCSSValueList(value)) { 475 for (auto& currValue : toCSSValueList(value)) {
477 if (currValue.isGridLineNamesValue()) { 476 if (currValue.isGridLineNamesValue()) {
478 for (auto& namedGridLineValue : toCSSGridLineNamesValue(currValue)) { 477 for (auto& namedGridLineValue : toCSSGridLineNamesValue(currValue)) {
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
537 return toCSSPrimitiveValue(value).convertToLength(state.cssToLengthConversio nData()); 536 return toCSSPrimitiveValue(value).convertToLength(state.cssToLengthConversio nData());
538 } 537 }
539 538
540 UnzoomedLength StyleBuilderConverter::convertUnzoomedLength(const StyleResolverS tate& state, CSSValue value) 539 UnzoomedLength StyleBuilderConverter::convertUnzoomedLength(const StyleResolverS tate& state, CSSValue value)
541 { 540 {
542 return UnzoomedLength(toCSSPrimitiveValue(value).convertToLength(state.cssTo LengthConversionData().copyWithAdjustedZoom(1.0f))); 541 return UnzoomedLength(toCSSPrimitiveValue(value).convertToLength(state.cssTo LengthConversionData().copyWithAdjustedZoom(1.0f)));
543 } 542 }
544 543
545 Length StyleBuilderConverter::convertLengthOrAuto(const StyleResolverState& stat e, CSSValue value) 544 Length StyleBuilderConverter::convertLengthOrAuto(const StyleResolverState& stat e, CSSValue value)
546 { 545 {
547 CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value); 546 CSSPrimitiveValue primitiveValue = toCSSPrimitiveValue(value);
548 if (primitiveValue.getValueID() == CSSValueAuto) 547 if (primitiveValue.getValueID() == CSSValueAuto)
549 return Length(Auto); 548 return Length(Auto);
550 return primitiveValue.convertToLength(state.cssToLengthConversionData()); 549 return primitiveValue.convertToLength(state.cssToLengthConversionData());
551 } 550 }
552 551
553 Length StyleBuilderConverter::convertLengthSizing(StyleResolverState& state, CSS Value value) 552 Length StyleBuilderConverter::convertLengthSizing(StyleResolverState& state, CSS Value value)
554 { 553 {
555 CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value); 554 CSSPrimitiveValue primitiveValue = toCSSPrimitiveValue(value);
556 switch (primitiveValue.getValueID()) { 555 switch (primitiveValue.getValueID()) {
557 case CSSValueInvalid: 556 case CSSValueInvalid:
558 return convertLength(state, value); 557 return convertLength(state, value);
559 case CSSValueIntrinsic: 558 case CSSValueIntrinsic:
560 return Length(Intrinsic); 559 return Length(Intrinsic);
561 case CSSValueMinIntrinsic: 560 case CSSValueMinIntrinsic:
562 return Length(MinIntrinsic); 561 return Length(MinIntrinsic);
563 case CSSValueMinContent: 562 case CSSValueMinContent:
564 case CSSValueWebkitMinContent: 563 case CSSValueWebkitMinContent:
565 return Length(MinContent); 564 return Length(MinContent);
566 case CSSValueMaxContent: 565 case CSSValueMaxContent:
567 case CSSValueWebkitMaxContent: 566 case CSSValueWebkitMaxContent:
568 return Length(MaxContent); 567 return Length(MaxContent);
569 case CSSValueWebkitFillAvailable: 568 case CSSValueWebkitFillAvailable:
570 return Length(FillAvailable); 569 return Length(FillAvailable);
571 case CSSValueWebkitFitContent: 570 case CSSValueWebkitFitContent:
572 return Length(FitContent); 571 return Length(FitContent);
573 case CSSValueAuto: 572 case CSSValueAuto:
574 return Length(Auto); 573 return Length(Auto);
575 default: 574 default:
576 ASSERT_NOT_REACHED(); 575 ASSERT_NOT_REACHED();
577 return Length(); 576 return Length();
578 } 577 }
579 } 578 }
580 579
581 Length StyleBuilderConverter::convertLengthMaxSizing(StyleResolverState& state, CSSValue value) 580 Length StyleBuilderConverter::convertLengthMaxSizing(StyleResolverState& state, CSSValue value)
582 { 581 {
583 CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value); 582 CSSPrimitiveValue primitiveValue = toCSSPrimitiveValue(value);
584 if (primitiveValue.getValueID() == CSSValueNone) 583 if (primitiveValue.getValueID() == CSSValueNone)
585 return Length(MaxSizeNone); 584 return Length(MaxSizeNone);
586 return convertLengthSizing(state, value); 585 return convertLengthSizing(state, value);
587 } 586 }
588 587
589 TabSize StyleBuilderConverter::convertLengthOrTabSpaces(StyleResolverState& stat e, CSSValue value) 588 TabSize StyleBuilderConverter::convertLengthOrTabSpaces(StyleResolverState& stat e, CSSValue value)
590 { 589 {
591 CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value); 590 CSSPrimitiveValue primitiveValue = toCSSPrimitiveValue(value);
592 if (primitiveValue.isNumber()) 591 if (primitiveValue.isNumber())
593 return TabSize(primitiveValue.getIntValue()); 592 return TabSize(primitiveValue.getIntValue());
594 return TabSize(primitiveValue.computeLength<float>(state.cssToLengthConversi onData())); 593 return TabSize(primitiveValue.computeLength<float>(state.cssToLengthConversi onData()));
595 } 594 }
596 595
597 LineBoxContain StyleBuilderConverter::convertLineBoxContain(StyleResolverState&, CSSValue value) 596 LineBoxContain StyleBuilderConverter::convertLineBoxContain(StyleResolverState&, CSSValue value)
598 { 597 {
599 if (value.isPrimitiveValue()) { 598 if (value.isPrimitiveValue()) {
600 ASSERT(toCSSPrimitiveValue(value).getValueID() == CSSValueNone); 599 ASSERT(toCSSPrimitiveValue(value).getValueID() == CSSValueNone);
601 return LineBoxContainNone; 600 return LineBoxContainNone;
602 } 601 }
603 602
604 return toCSSLineBoxContainValue(value).value(); 603 return toCSSLineBoxContainValue(value).value();
605 } 604 }
606 605
607 static CSSToLengthConversionData lineHeightToLengthConversionData(StyleResolverS tate& state) 606 static CSSToLengthConversionData lineHeightToLengthConversionData(StyleResolverS tate& state)
608 { 607 {
609 float multiplier = state.style()->effectiveZoom(); 608 float multiplier = state.style()->effectiveZoom();
610 if (LocalFrame* frame = state.document().frame()) 609 if (LocalFrame* frame = state.document().frame())
611 multiplier *= frame->textZoomFactor(); 610 multiplier *= frame->textZoomFactor();
612 return state.cssToLengthConversionData().copyWithAdjustedZoom(multiplier); 611 return state.cssToLengthConversionData().copyWithAdjustedZoom(multiplier);
613 } 612 }
614 613
615 Length StyleBuilderConverter::convertLineHeight(StyleResolverState& state, CSSVa lue value) 614 Length StyleBuilderConverter::convertLineHeight(StyleResolverState& state, CSSVa lue value)
616 { 615 {
617 CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value); 616 CSSPrimitiveValue primitiveValue = toCSSPrimitiveValue(value);
618 617
619 if (primitiveValue.isLength()) 618 if (primitiveValue.isLength())
620 return primitiveValue.computeLength<Length>(lineHeightToLengthConversion Data(state)); 619 return primitiveValue.computeLength<Length>(lineHeightToLengthConversion Data(state));
621 if (primitiveValue.isPercentage()) 620 if (primitiveValue.isPercentage())
622 return Length((state.style()->computedFontSize() * primitiveValue.getInt Value()) / 100.0, Fixed); 621 return Length((state.style()->computedFontSize() * primitiveValue.getInt Value()) / 100.0, Fixed);
623 if (primitiveValue.isNumber()) 622 if (primitiveValue.isNumber())
624 return Length(primitiveValue.getDoubleValue() * 100.0, Percent); 623 return Length(primitiveValue.getDoubleValue() * 100.0, Percent);
625 if (primitiveValue.isCalculated()) { 624 if (primitiveValue.isCalculated()) {
626 Length zoomedLength = Length(primitiveValue.cssCalcValue()->toCalcValue( lineHeightToLengthConversionData(state))); 625 Length zoomedLength = Length(primitiveValue.cssCalcValue()->toCalcValue( lineHeightToLengthConversionData(state)));
627 return Length(valueForLength(zoomedLength, state.style()->fontSize()), F ixed); 626 return Length(valueForLength(zoomedLength, state.style()->fontSize()), F ixed);
628 } 627 }
629 628
630 ASSERT(primitiveValue.getValueID() == CSSValueNormal); 629 ASSERT(primitiveValue.getValueID() == CSSValueNormal);
631 return ComputedStyle::initialLineHeight(); 630 return ComputedStyle::initialLineHeight();
632 } 631 }
633 632
634 float StyleBuilderConverter::convertNumberOrPercentage(StyleResolverState& state , CSSValue value) 633 float StyleBuilderConverter::convertNumberOrPercentage(StyleResolverState& state , CSSValue value)
635 { 634 {
636 CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value); 635 CSSPrimitiveValue primitiveValue = toCSSPrimitiveValue(value);
637 ASSERT(primitiveValue.isNumber() || primitiveValue.isPercentage()); 636 ASSERT(primitiveValue.isNumber() || primitiveValue.isPercentage());
638 if (primitiveValue.isNumber()) 637 if (primitiveValue.isNumber())
639 return primitiveValue.getFloatValue(); 638 return primitiveValue.getFloatValue();
640 return primitiveValue.getFloatValue() / 100.0f; 639 return primitiveValue.getFloatValue() / 100.0f;
641 } 640 }
642 641
643 template <CSSValueID cssValueFor0, CSSValueID cssValueFor100> 642 template <CSSValueID cssValueFor0, CSSValueID cssValueFor100>
644 static Length convertPositionLength(StyleResolverState& state, CSSPrimitiveValue * primitiveValue) 643 static Length convertPositionLength(StyleResolverState& state, CSSPrimitiveValue primitiveValue)
645 { 644 {
646 if (Pair* pair = primitiveValue->getPairValue()) { 645 if (Pair* pair = primitiveValue.getPairValue()) {
647 Length length = StyleBuilderConverter::convertLength(state, CSSValue(*pa ir->second())); 646 Length length = StyleBuilderConverter::convertLength(state, CSSValue(*pa ir->second()));
648 if (pair->first()->getValueID() == cssValueFor0) 647 if (toCSSPrimitiveValue(*pair->first()).getValueID() == cssValueFor0)
649 return length; 648 return length;
650 ASSERT(pair->first()->getValueID() == cssValueFor100); 649 ASSERT(toCSSPrimitiveValue(*pair->first()).getValueID() == cssValueFor10 0);
651 return length.subtractFromOneHundredPercent(); 650 return length.subtractFromOneHundredPercent();
652 } 651 }
653 652
654 return StyleBuilderConverter::convertLength(state, CSSValue(*primitiveValue) ); 653 return StyleBuilderConverter::convertLength(state, primitiveValue);
655 } 654 }
656 655
657 LengthPoint StyleBuilderConverter::convertPosition(StyleResolverState& state, CS SValue value) 656 LengthPoint StyleBuilderConverter::convertPosition(StyleResolverState& state, CS SValue value)
658 { 657 {
659 CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value); 658 CSSPrimitiveValue primitiveValue = toCSSPrimitiveValue(value);
660 Pair* pair = primitiveValue.getPairValue(); 659 Pair* pair = primitiveValue.getPairValue();
661 return LengthPoint( 660 return LengthPoint(
662 convertPositionLength<CSSValueLeft, CSSValueRight>(state, pair->first()) , 661 convertPositionLength<CSSValueLeft, CSSValueRight>(state, toCSSPrimitive Value(*pair->first())),
663 convertPositionLength<CSSValueTop, CSSValueBottom>(state, pair->second() ) 662 convertPositionLength<CSSValueTop, CSSValueBottom>(state, toCSSPrimitive Value(*pair->second()))
664 ); 663 );
665 } 664 }
666 665
667 static float convertPerspectiveLength(StyleResolverState& state, CSSPrimitiveVal ue& primitiveValue) 666 static float convertPerspectiveLength(StyleResolverState& state, CSSPrimitiveVal ue primitiveValue)
668 { 667 {
669 return std::max(primitiveValue.computeLength<float>(state.cssToLengthConvers ionData()), 0.0f); 668 return std::max(primitiveValue.computeLength<float>(state.cssToLengthConvers ionData()), 0.0f);
670 } 669 }
671 670
672 float StyleBuilderConverter::convertPerspective(StyleResolverState& state, CSSVa lue value) 671 float StyleBuilderConverter::convertPerspective(StyleResolverState& state, CSSVa lue value)
673 { 672 {
674 CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value); 673 CSSPrimitiveValue primitiveValue = toCSSPrimitiveValue(value);
675 674
676 if (primitiveValue.getValueID() == CSSValueNone) 675 if (primitiveValue.getValueID() == CSSValueNone)
677 return ComputedStyle::initialPerspective(); 676 return ComputedStyle::initialPerspective();
678 return convertPerspectiveLength(state, primitiveValue); 677 return convertPerspectiveLength(state, primitiveValue);
679 } 678 }
680 679
681 template <CSSValueID cssValueFor0, CSSValueID cssValueFor100> 680 template <CSSValueID cssValueFor0, CSSValueID cssValueFor100>
682 static Length convertOriginLength(StyleResolverState& state, CSSPrimitiveValue& primitiveValue) 681 static Length convertOriginLength(StyleResolverState& state, CSSPrimitiveValue p rimitiveValue)
683 { 682 {
684 if (primitiveValue.isValueID()) { 683 if (primitiveValue.isValueID()) {
685 switch (primitiveValue.getValueID()) { 684 switch (primitiveValue.getValueID()) {
686 case cssValueFor0: 685 case cssValueFor0:
687 return Length(0, Percent); 686 return Length(0, Percent);
688 case cssValueFor100: 687 case cssValueFor100:
689 return Length(100, Percent); 688 return Length(100, Percent);
690 case CSSValueCenter: 689 case CSSValueCenter:
691 return Length(50, Percent); 690 return Length(50, Percent);
692 default: 691 default:
693 ASSERT_NOT_REACHED(); 692 ASSERT_NOT_REACHED();
694 } 693 }
695 } 694 }
696 695
697 return StyleBuilderConverter::convertLength(state, CSSValue(primitiveValue)) ; 696 return StyleBuilderConverter::convertLength(state, CSSValue(primitiveValue)) ;
698 } 697 }
699 698
700 LengthPoint StyleBuilderConverter::convertPerspectiveOrigin(StyleResolverState& state, CSSValue value) 699 LengthPoint StyleBuilderConverter::convertPerspectiveOrigin(StyleResolverState& state, CSSValue value)
701 { 700 {
702 CSSValueList& list = toCSSValueList(value); 701 CSSValueList& list = toCSSValueList(value);
703 ASSERT(list.length() == 2); 702 ASSERT(list.length() == 2);
704 703
705 CSSPrimitiveValue& primitiveValueX = toCSSPrimitiveValue(list.item(0)); 704 CSSPrimitiveValue primitiveValueX = toCSSPrimitiveValue(list.item(0));
706 CSSPrimitiveValue& primitiveValueY = toCSSPrimitiveValue(list.item(1)); 705 CSSPrimitiveValue primitiveValueY = toCSSPrimitiveValue(list.item(1));
707 706
708 return LengthPoint( 707 return LengthPoint(
709 convertOriginLength<CSSValueLeft, CSSValueRight>(state, primitiveValueX) , 708 convertOriginLength<CSSValueLeft, CSSValueRight>(state, primitiveValueX) ,
710 convertOriginLength<CSSValueTop, CSSValueBottom>(state, primitiveValueY) 709 convertOriginLength<CSSValueTop, CSSValueBottom>(state, primitiveValueY)
711 ); 710 );
712 } 711 }
713 712
714 EPaintOrder StyleBuilderConverter::convertPaintOrder(StyleResolverState&, CSSVal ue cssPaintOrder) 713 EPaintOrder StyleBuilderConverter::convertPaintOrder(StyleResolverState&, CSSVal ue cssPaintOrder)
715 { 714 {
716 if (cssPaintOrder.isValueList()) { 715 if (cssPaintOrder.isValueList()) {
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
762 quotes->addPair(std::make_pair(startQuote, endQuote)); 761 quotes->addPair(std::make_pair(startQuote, endQuote));
763 } 762 }
764 return quotes.release(); 763 return quotes.release();
765 } 764 }
766 // 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
767 return QuotesData::create(); 766 return QuotesData::create();
768 } 767 }
769 768
770 LengthSize StyleBuilderConverter::convertRadius(StyleResolverState& state, CSSVa lue value) 769 LengthSize StyleBuilderConverter::convertRadius(StyleResolverState& state, CSSVa lue value)
771 { 770 {
772 CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value); 771 CSSPrimitiveValue primitiveValue = toCSSPrimitiveValue(value);
773 Pair* pair = primitiveValue.getPairValue(); 772 Pair* pair = primitiveValue.getPairValue();
774 Length radiusWidth = pair->first()->convertToLength(state.cssToLengthConvers ionData()); 773 Length radiusWidth = toCSSPrimitiveValue(*pair->first()).convertToLength(sta te.cssToLengthConversionData());
775 Length radiusHeight = pair->second()->convertToLength(state.cssToLengthConve rsionData()); 774 Length radiusHeight = toCSSPrimitiveValue(*pair->second()).convertToLength(s tate.cssToLengthConversionData());
776 float width = radiusWidth.value(); 775 float width = radiusWidth.value();
777 float height = radiusHeight.value(); 776 float height = radiusHeight.value();
778 ASSERT(width >= 0 && height >= 0); 777 ASSERT(width >= 0 && height >= 0);
779 if (width <= 0 || height <= 0) 778 if (width <= 0 || height <= 0)
780 return LengthSize(Length(0, Fixed), Length(0, Fixed)); 779 return LengthSize(Length(0, Fixed), Length(0, Fixed));
781 return LengthSize(radiusWidth, radiusHeight); 780 return LengthSize(radiusWidth, radiusHeight);
782 } 781 }
783 782
784 PassRefPtr<ShadowList> StyleBuilderConverter::convertShadow(StyleResolverState& state, CSSValue value) 783 PassRefPtr<ShadowList> StyleBuilderConverter::convertShadow(StyleResolverState& state, CSSValue value)
785 { 784 {
786 if (value.isPrimitiveValue()) { 785 if (value.isPrimitiveValue()) {
787 ASSERT(toCSSPrimitiveValue(value).getValueID() == CSSValueNone); 786 ASSERT(toCSSPrimitiveValue(value).getValueID() == CSSValueNone);
788 return PassRefPtr<ShadowList>(); 787 return PassRefPtr<ShadowList>();
789 } 788 }
790 789
791 const CSSValueList& valueList = toCSSValueList(value); 790 const CSSValueList& valueList = toCSSValueList(value);
792 size_t shadowCount = valueList.length(); 791 size_t shadowCount = valueList.length();
793 ShadowDataVector shadows; 792 ShadowDataVector shadows;
794 for (size_t i = 0; i < shadowCount; ++i) { 793 for (size_t i = 0; i < shadowCount; ++i) {
795 const CSSShadowValue& item = toCSSShadowValue(valueList.item(i)); 794 const CSSShadowValue& item = toCSSShadowValue(valueList.item(i));
796 float x = item.x->computeLength<float>(state.cssToLengthConversionData() ); 795 float x = toCSSPrimitiveValue(*item.x).computeLength<float>(state.cssToL engthConversionData());
797 float y = item.y->computeLength<float>(state.cssToLengthConversionData() ); 796 float y = toCSSPrimitiveValue(*item.y).computeLength<float>(state.cssToL engthConversionData());
798 float blur = item.blur ? item.blur->computeLength<float>(state.cssToLeng thConversionData()) : 0; 797 float blur = item.blur ? toCSSPrimitiveValue(*item.blur).computeLength<f loat>(state.cssToLengthConversionData()) : 0;
799 float spread = item.spread ? item.spread->computeLength<float>(state.css ToLengthConversionData()) : 0; 798 float spread = item.spread ? toCSSPrimitiveValue(*item.spread).computeLe ngth<float>(state.cssToLengthConversionData()) : 0;
800 ShadowStyle shadowStyle = item.style && item.style->getValueID() == CSSV alueInset ? Inset : Normal; 799 ShadowStyle shadowStyle = item.style && toCSSPrimitiveValue(*item.style) .getValueID() == CSSValueInset ? Inset : Normal;
801 StyleColor color = StyleColor::currentColor(); 800 StyleColor color = StyleColor::currentColor();
802 if (item.color) 801 if (item.color)
803 color = convertStyleColor(state, CSSValue(*item.color)); 802 color = convertStyleColor(state, CSSValue(*item.color));
804 shadows.append(ShadowData(FloatPoint(x, y), blur, spread, shadowStyle, c olor)); 803 shadows.append(ShadowData(FloatPoint(x, y), blur, spread, shadowStyle, c olor));
805 } 804 }
806 return ShadowList::adopt(shadows); 805 return ShadowList::adopt(shadows);
807 } 806 }
808 807
809 PassRefPtr<ShapeValue> StyleBuilderConverter::convertShapeValue(StyleResolverSta te& state, CSSValue value) 808 PassRefPtr<ShapeValue> StyleBuilderConverter::convertShapeValue(StyleResolverSta te& state, CSSValue value)
810 { 809 {
811 if (value.isPrimitiveValue()) { 810 if (value.isPrimitiveValue()) {
812 ASSERT(toCSSPrimitiveValue(value).getValueID() == CSSValueNone); 811 ASSERT(toCSSPrimitiveValue(value).getValueID() == CSSValueNone);
813 return nullptr; 812 return nullptr;
814 } 813 }
815 814
816 if (value.isImageValue() || value.isImageGeneratorValue() || value.isImageSe tValue()) 815 if (value.isImageValue() || value.isImageGeneratorValue() || value.isImageSe tValue())
817 return ShapeValue::createImageValue(state.styleImage(CSSPropertyShapeOut side, value)); 816 return ShapeValue::createImageValue(state.styleImage(CSSPropertyShapeOut side, value));
818 817
819 RefPtr<BasicShape> shape; 818 RefPtr<BasicShape> shape;
820 CSSBoxType cssBox = BoxMissing; 819 CSSBoxType cssBox = BoxMissing;
821 CSSValueList& valueList = toCSSValueList(value); 820 CSSValueList& valueList = toCSSValueList(value);
822 for (unsigned i = 0; i < valueList.length(); ++i) { 821 for (unsigned i = 0; i < valueList.length(); ++i) {
823 CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(valueList.item(i )); 822 CSSPrimitiveValue primitiveValue = toCSSPrimitiveValue(valueList.item(i) );
824 if (primitiveValue.isShape()) 823 if (primitiveValue.isShape())
825 shape = basicShapeForValue(state, primitiveValue.getShapeValue()); 824 shape = basicShapeForValue(state, primitiveValue.getShapeValue());
826 else 825 else
827 cssBox = CSSBoxType(primitiveValue); 826 cssBox = CSSBoxType(primitiveValue);
828 } 827 }
829 828
830 if (shape) 829 if (shape)
831 return ShapeValue::createShapeValue(shape.release(), cssBox); 830 return ShapeValue::createShapeValue(shape.release(), cssBox);
832 831
833 ASSERT(cssBox != BoxMissing); 832 ASSERT(cssBox != BoxMissing);
834 return ShapeValue::createBoxShapeValue(cssBox); 833 return ShapeValue::createBoxShapeValue(cssBox);
835 } 834 }
836 835
837 float StyleBuilderConverter::convertSpacing(StyleResolverState& state, CSSValue value) 836 float StyleBuilderConverter::convertSpacing(StyleResolverState& state, CSSValue value)
838 { 837 {
839 CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value); 838 CSSPrimitiveValue primitiveValue = toCSSPrimitiveValue(value);
840 if (primitiveValue.getValueID() == CSSValueNormal) 839 if (primitiveValue.getValueID() == CSSValueNormal)
841 return 0; 840 return 0;
842 return primitiveValue.computeLength<float>(state.cssToLengthConversionData() ); 841 return primitiveValue.computeLength<float>(state.cssToLengthConversionData() );
843 } 842 }
844 843
845 PassRefPtr<SVGDashArray> StyleBuilderConverter::convertStrokeDasharray(StyleReso lverState& state, CSSValue value) 844 PassRefPtr<SVGDashArray> StyleBuilderConverter::convertStrokeDasharray(StyleReso lverState& state, CSSValue value)
846 { 845 {
847 if (!value.isValueList()) 846 if (!value.isValueList())
848 return SVGComputedStyle::initialStrokeDashArray(); 847 return SVGComputedStyle::initialStrokeDashArray();
849 848
850 CSSValueList& dashes = toCSSValueList(value); 849 CSSValueList& dashes = toCSSValueList(value);
851 850
852 RefPtr<SVGDashArray> array = SVGDashArray::create(); 851 RefPtr<SVGDashArray> array = SVGDashArray::create();
853 size_t length = dashes.length(); 852 size_t length = dashes.length();
854 for (size_t i = 0; i < length; ++i) { 853 for (size_t i = 0; i < length; ++i) {
855 CSSValue currValue = dashes.item(i); 854 CSSValue currValue = dashes.item(i);
856 if (!currValue.isPrimitiveValue()) 855 if (!currValue.isPrimitiveValue())
857 continue; 856 continue;
858 857
859 array->append(convertLength(state, currValue)); 858 array->append(convertLength(state, currValue));
860 } 859 }
861 860
862 return array.release(); 861 return array.release();
863 } 862 }
864 863
865 StyleColor StyleBuilderConverter::convertStyleColor(StyleResolverState& state, C SSValue value, bool forVisitedLink) 864 StyleColor StyleBuilderConverter::convertStyleColor(StyleResolverState& state, C SSValue value, bool forVisitedLink)
866 { 865 {
867 CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value); 866 CSSPrimitiveValue primitiveValue = toCSSPrimitiveValue(value);
868 if (primitiveValue.getValueID() == CSSValueCurrentcolor) 867 if (primitiveValue.getValueID() == CSSValueCurrentcolor)
869 return StyleColor::currentColor(); 868 return StyleColor::currentColor();
870 return state.document().textLinkColors().colorFromPrimitiveValue(primitiveVa lue, Color(), forVisitedLink); 869 return state.document().textLinkColors().colorFromPrimitiveValue(primitiveVa lue, Color(), forVisitedLink);
871 } 870 }
872 871
873 float StyleBuilderConverter::convertTextStrokeWidth(StyleResolverState& state, C SSValue value) 872 float StyleBuilderConverter::convertTextStrokeWidth(StyleResolverState& state, C SSValue value)
874 { 873 {
875 CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value); 874 CSSPrimitiveValue primitiveValue = toCSSPrimitiveValue(value);
876 if (primitiveValue.getValueID()) { 875 if (primitiveValue.getValueID()) {
877 float multiplier = convertLineWidth<float>(state, value); 876 float multiplier = convertLineWidth<float>(state, value);
878 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());
879 } 878 }
880 return primitiveValue.computeLength<float>(state.cssToLengthConversionData() ); 879 return primitiveValue.computeLength<float>(state.cssToLengthConversionData() );
881 } 880 }
882 881
883 TransformOrigin StyleBuilderConverter::convertTransformOrigin(StyleResolverState & state, CSSValue value) 882 TransformOrigin StyleBuilderConverter::convertTransformOrigin(StyleResolverState & state, CSSValue value)
884 { 883 {
885 CSSValueList& list = toCSSValueList(value); 884 CSSValueList& list = toCSSValueList(value);
886 ASSERT(list.length() == 3); 885 ASSERT(list.length() == 3);
887 886
888 CSSPrimitiveValue& primitiveValueX = toCSSPrimitiveValue(list.item(0)); 887 CSSPrimitiveValue primitiveValueX = toCSSPrimitiveValue(list.item(0));
889 CSSPrimitiveValue& primitiveValueY = toCSSPrimitiveValue(list.item(1)); 888 CSSPrimitiveValue primitiveValueY = toCSSPrimitiveValue(list.item(1));
890 889
891 return TransformOrigin( 890 return TransformOrigin(
892 convertOriginLength<CSSValueLeft, CSSValueRight>(state, primitiveValueX) , 891 convertOriginLength<CSSValueLeft, CSSValueRight>(state, primitiveValueX) ,
893 convertOriginLength<CSSValueTop, CSSValueBottom>(state, primitiveValueY) , 892 convertOriginLength<CSSValueTop, CSSValueBottom>(state, primitiveValueY) ,
894 StyleBuilderConverter::convertComputedLength<float>(state, list.item(2)) 893 StyleBuilderConverter::convertComputedLength<float>(state, list.item(2))
895 ); 894 );
896 } 895 }
897 896
898 ScrollSnapPoints StyleBuilderConverter::convertSnapPoints(StyleResolverState& st ate, CSSValue value) 897 ScrollSnapPoints StyleBuilderConverter::convertSnapPoints(StyleResolverState& st ate, CSSValue value)
899 { 898 {
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
970 double sz = 1; 969 double sz = 1;
971 if (list.length() >= 2) 970 if (list.length() >= 2)
972 sy = toCSSPrimitiveValue(list.item(1)).getDoubleValue(); 971 sy = toCSSPrimitiveValue(list.item(1)).getDoubleValue();
973 if (list.length() == 3) 972 if (list.length() == 3)
974 sz = toCSSPrimitiveValue(list.item(2)).getDoubleValue(); 973 sz = toCSSPrimitiveValue(list.item(2)).getDoubleValue();
975 974
976 return ScaleTransformOperation::create(sx, sy, sz, TransformOperation::Scale 3D); 975 return ScaleTransformOperation::create(sx, sy, sz, TransformOperation::Scale 3D);
977 } 976 }
978 977
979 } // 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