75e63f75ef4f9accbcfd1cc049dd24689bd8a55d
[WebKit-https.git] / Source / WebCore / css / CSSProperty.cpp
1 /**
2  * (C) 1999-2003 Lars Knoll (knoll@kde.org)
3  * Copyright (C) 2004, 2005, 2006 Apple Computer, Inc.
4  *
5  * This library is free software; you can redistribute it and/or
6  * modify it under the terms of the GNU Library General Public
7  * License as published by the Free Software Foundation; either
8  * version 2 of the License, or (at your option) any later version.
9  *
10  * This library is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13  * Library General Public License for more details.
14  *
15  * You should have received a copy of the GNU Library General Public License
16  * along with this library; see the file COPYING.LIB.  If not, write to
17  * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
18  * Boston, MA 02110-1301, USA.
19  */
20
21 #include "config.h"
22 #include "CSSProperty.h"
23
24 #include "CSSValueList.h"
25 #include "MemoryInstrumentation.h"
26 #include "PlatformString.h"
27 #include "RenderStyleConstants.h"
28 #include "StylePropertyShorthand.h"
29
30 #if ENABLE(CSS_VARIABLES)
31 #include "CSSVariableValue.h"
32 #endif
33
34 namespace WebCore {
35
36 struct SameSizeAsCSSProperty {
37     uint32_t bitfields;
38     void* value;
39 };
40
41 COMPILE_ASSERT(sizeof(CSSProperty) == sizeof(SameSizeAsCSSProperty), CSSProperty_should_stay_small);
42
43 String CSSProperty::cssName() const
44 {
45 #if ENABLE(CSS_VARIABLES)
46     if (id() == CSSPropertyVariable) {
47         ASSERT(value()->isVariableValue());
48         return "-webkit-var-" + static_cast<CSSVariableValue*>(value())->name();
49     }
50 #endif
51     return getPropertyNameString(id());
52 }
53
54 String CSSProperty::cssText() const
55 {
56     return cssName() + ": " + m_value->cssText() + (isImportant() ? " !important" : "") + "; ";
57 }
58
59 void CSSProperty::wrapValueInCommaSeparatedList()
60 {
61     RefPtr<CSSValue> value = m_value.release();
62     m_value = CSSValueList::createCommaSeparated();
63     static_cast<CSSValueList*>(m_value.get())->append(value.release());
64 }
65
66 enum LogicalBoxSide { BeforeSide, EndSide, AfterSide, StartSide };
67 enum PhysicalBoxSide { TopSide, RightSide, BottomSide, LeftSide };
68
69 static CSSPropertyID resolveToPhysicalProperty(TextDirection direction, WritingMode writingMode, LogicalBoxSide logicalSide, const StylePropertyShorthand& shorthand)
70 {
71     if (direction == LTR) {
72         if (writingMode == TopToBottomWritingMode) {
73             // The common case. The logical and physical box sides match.
74             // Left = Start, Right = End, Before = Top, After = Bottom
75             return shorthand.properties()[logicalSide];
76         }
77
78         if (writingMode == BottomToTopWritingMode) {
79             // Start = Left, End = Right, Before = Bottom, After = Top.
80             switch (logicalSide) {
81             case StartSide:
82                 return shorthand.properties()[LeftSide];
83             case EndSide:
84                 return shorthand.properties()[RightSide];
85             case BeforeSide:
86                 return shorthand.properties()[BottomSide];
87             default:
88                 return shorthand.properties()[TopSide];
89             }
90         }
91
92         if (writingMode == LeftToRightWritingMode) {
93             // Start = Top, End = Bottom, Before = Left, After = Right.
94             switch (logicalSide) {
95             case StartSide:
96                 return shorthand.properties()[TopSide];
97             case EndSide:
98                 return shorthand.properties()[BottomSide];
99             case BeforeSide:
100                 return shorthand.properties()[LeftSide];
101             default:
102                 return shorthand.properties()[RightSide];
103             }
104         }
105
106         // Start = Top, End = Bottom, Before = Right, After = Left
107         switch (logicalSide) {
108         case StartSide:
109             return shorthand.properties()[TopSide];
110         case EndSide:
111             return shorthand.properties()[BottomSide];
112         case BeforeSide:
113             return shorthand.properties()[RightSide];
114         default:
115             return shorthand.properties()[LeftSide];
116         }
117     }
118
119     if (writingMode == TopToBottomWritingMode) {
120         // Start = Right, End = Left, Before = Top, After = Bottom
121         switch (logicalSide) {
122         case StartSide:
123             return shorthand.properties()[RightSide];
124         case EndSide:
125             return shorthand.properties()[LeftSide];
126         case BeforeSide:
127             return shorthand.properties()[TopSide];
128         default:
129             return shorthand.properties()[BottomSide];
130         }
131     }
132
133     if (writingMode == BottomToTopWritingMode) {
134         // Start = Right, End = Left, Before = Bottom, After = Top
135         switch (logicalSide) {
136         case StartSide:
137             return shorthand.properties()[RightSide];
138         case EndSide:
139             return shorthand.properties()[LeftSide];
140         case BeforeSide:
141             return shorthand.properties()[BottomSide];
142         default:
143             return shorthand.properties()[TopSide];
144         }
145     }
146
147     if (writingMode == LeftToRightWritingMode) {
148         // Start = Bottom, End = Top, Before = Left, After = Right
149         switch (logicalSide) {
150         case StartSide:
151             return shorthand.properties()[BottomSide];
152         case EndSide:
153             return shorthand.properties()[TopSide];
154         case BeforeSide:
155             return shorthand.properties()[LeftSide];
156         default:
157             return shorthand.properties()[RightSide];
158         }
159     }
160
161     // Start = Bottom, End = Top, Before = Right, After = Left
162     switch (logicalSide) {
163     case StartSide:
164         return shorthand.properties()[BottomSide];
165     case EndSide:
166         return shorthand.properties()[TopSide];
167     case BeforeSide:
168         return shorthand.properties()[RightSide];
169     default:
170         return shorthand.properties()[LeftSide];
171     }
172 }
173
174 enum LogicalExtent { LogicalWidth, LogicalHeight };
175
176 static CSSPropertyID resolveToPhysicalProperty(WritingMode writingMode, LogicalExtent logicalSide, const CSSPropertyID* properties)
177 {
178     if (writingMode == TopToBottomWritingMode || writingMode == BottomToTopWritingMode)
179         return properties[logicalSide];
180     return logicalSide == LogicalWidth ? properties[1] : properties[0];
181 }
182
183 static const StylePropertyShorthand& borderDirections()
184 {
185     static const CSSPropertyID properties[4] = { CSSPropertyBorderTop, CSSPropertyBorderRight, CSSPropertyBorderBottom, CSSPropertyBorderLeft };
186     DEFINE_STATIC_LOCAL(StylePropertyShorthand, borderDirections, (properties, WTF_ARRAY_LENGTH(properties)));
187     return borderDirections;
188 }
189
190 CSSPropertyID CSSProperty::resolveDirectionAwareProperty(CSSPropertyID propertyID, TextDirection direction, WritingMode writingMode)
191 {
192     switch (propertyID) {
193     case CSSPropertyWebkitMarginEnd:
194         return resolveToPhysicalProperty(direction, writingMode, EndSide, marginShorthand());
195     case CSSPropertyWebkitMarginStart:
196         return resolveToPhysicalProperty(direction, writingMode, StartSide, marginShorthand());
197     case CSSPropertyWebkitMarginBefore:
198         return resolveToPhysicalProperty(direction, writingMode, BeforeSide, marginShorthand());
199     case CSSPropertyWebkitMarginAfter:
200         return resolveToPhysicalProperty(direction, writingMode, AfterSide, marginShorthand());
201     case CSSPropertyWebkitPaddingEnd:
202         return resolveToPhysicalProperty(direction, writingMode, EndSide, paddingShorthand());
203     case CSSPropertyWebkitPaddingStart:
204         return resolveToPhysicalProperty(direction, writingMode, StartSide, paddingShorthand());
205     case CSSPropertyWebkitPaddingBefore:
206         return resolveToPhysicalProperty(direction, writingMode, BeforeSide, paddingShorthand());
207     case CSSPropertyWebkitPaddingAfter:
208         return resolveToPhysicalProperty(direction, writingMode, AfterSide, paddingShorthand());
209     case CSSPropertyWebkitBorderEnd:
210         return resolveToPhysicalProperty(direction, writingMode, EndSide, borderDirections());
211     case CSSPropertyWebkitBorderStart:
212         return resolveToPhysicalProperty(direction, writingMode, StartSide, borderDirections());
213     case CSSPropertyWebkitBorderBefore:
214         return resolveToPhysicalProperty(direction, writingMode, BeforeSide, borderDirections());
215     case CSSPropertyWebkitBorderAfter:
216         return resolveToPhysicalProperty(direction, writingMode, AfterSide, borderDirections());
217     case CSSPropertyWebkitBorderEndColor:
218         return resolveToPhysicalProperty(direction, writingMode, EndSide, borderColorShorthand());
219     case CSSPropertyWebkitBorderStartColor:
220         return resolveToPhysicalProperty(direction, writingMode, StartSide, borderColorShorthand());
221     case CSSPropertyWebkitBorderBeforeColor:
222         return resolveToPhysicalProperty(direction, writingMode, BeforeSide, borderColorShorthand());
223     case CSSPropertyWebkitBorderAfterColor:
224         return resolveToPhysicalProperty(direction, writingMode, AfterSide, borderColorShorthand());
225     case CSSPropertyWebkitBorderEndStyle:
226         return resolveToPhysicalProperty(direction, writingMode, EndSide, borderStyleShorthand());
227     case CSSPropertyWebkitBorderStartStyle:
228         return resolveToPhysicalProperty(direction, writingMode, StartSide, borderStyleShorthand());
229     case CSSPropertyWebkitBorderBeforeStyle:
230         return resolveToPhysicalProperty(direction, writingMode, BeforeSide, borderStyleShorthand());
231     case CSSPropertyWebkitBorderAfterStyle:
232         return resolveToPhysicalProperty(direction, writingMode, AfterSide, borderStyleShorthand());
233     case CSSPropertyWebkitBorderEndWidth:
234         return resolveToPhysicalProperty(direction, writingMode, EndSide, borderWidthShorthand());
235     case CSSPropertyWebkitBorderStartWidth:
236         return resolveToPhysicalProperty(direction, writingMode, StartSide, borderWidthShorthand());
237     case CSSPropertyWebkitBorderBeforeWidth:
238         return resolveToPhysicalProperty(direction, writingMode, BeforeSide, borderWidthShorthand());
239     case CSSPropertyWebkitBorderAfterWidth:
240         return resolveToPhysicalProperty(direction, writingMode, AfterSide, borderWidthShorthand());
241     case CSSPropertyWebkitLogicalWidth: {
242         const CSSPropertyID properties[2] = { CSSPropertyWidth, CSSPropertyHeight };
243         return resolveToPhysicalProperty(writingMode, LogicalWidth, properties);
244     }
245     case CSSPropertyWebkitLogicalHeight: {
246         const CSSPropertyID properties[2] = { CSSPropertyWidth, CSSPropertyHeight };
247         return resolveToPhysicalProperty(writingMode, LogicalHeight, properties);
248     }
249     case CSSPropertyWebkitMinLogicalWidth: {
250         const CSSPropertyID properties[2] = { CSSPropertyMinWidth, CSSPropertyMinHeight };
251         return resolveToPhysicalProperty(writingMode, LogicalWidth, properties);
252     }
253     case CSSPropertyWebkitMinLogicalHeight: {
254         const CSSPropertyID properties[2] = { CSSPropertyMinWidth, CSSPropertyMinHeight };
255         return resolveToPhysicalProperty(writingMode, LogicalHeight, properties);
256     }
257     case CSSPropertyWebkitMaxLogicalWidth: {
258         const CSSPropertyID properties[2] = { CSSPropertyMaxWidth, CSSPropertyMaxHeight };
259         return resolveToPhysicalProperty(writingMode, LogicalWidth, properties);
260     }
261     case CSSPropertyWebkitMaxLogicalHeight: {
262         const CSSPropertyID properties[2] = { CSSPropertyMaxWidth, CSSPropertyMaxHeight };
263         return resolveToPhysicalProperty(writingMode, LogicalHeight, properties);
264     }
265     default:
266         return propertyID;
267     }
268 }
269
270 bool CSSProperty::isInheritedProperty(CSSPropertyID propertyID)
271 {
272     switch (propertyID) {
273     case CSSPropertyBorderCollapse:
274     case CSSPropertyBorderSpacing:
275     case CSSPropertyCaptionSide:
276     case CSSPropertyColor:
277     case CSSPropertyCursor:
278     case CSSPropertyDirection:
279     case CSSPropertyEmptyCells:
280     case CSSPropertyFont:
281     case CSSPropertyFontFamily:
282     case CSSPropertyFontSize:
283     case CSSPropertyFontStyle:
284     case CSSPropertyFontVariant:
285     case CSSPropertyFontWeight:
286 #if ENABLE(CSS_IMAGE_ORIENTATION)
287     case CSSPropertyImageOrientation:
288 #endif
289     case CSSPropertyImageRendering:
290 #if ENABLE(CSS_IMAGE_RESOLUTION)
291     case CSSPropertyImageResolution:
292 #endif
293     case CSSPropertyLetterSpacing:
294     case CSSPropertyLineHeight:
295     case CSSPropertyListStyle:
296     case CSSPropertyListStyleImage:
297     case CSSPropertyListStyleType:
298     case CSSPropertyListStylePosition:
299     case CSSPropertyOrphans:
300     case CSSPropertyPointerEvents:
301     case CSSPropertyQuotes:
302     case CSSPropertyResize:
303     case CSSPropertySpeak:
304     case CSSPropertyTabSize:
305     case CSSPropertyTextAlign:
306     case CSSPropertyTextDecoration:
307     case CSSPropertyTextIndent:
308     case CSSPropertyTextRendering:
309     case CSSPropertyTextShadow:
310     case CSSPropertyTextTransform:
311 #if ENABLE(CSS_VARIABLES)
312     case CSSPropertyVariable:
313 #endif
314     case CSSPropertyVisibility:
315     case CSSPropertyWebkitAspectRatio:
316     case CSSPropertyWebkitBorderHorizontalSpacing:
317     case CSSPropertyWebkitBorderVerticalSpacing:
318     case CSSPropertyWebkitBoxDirection:
319     case CSSPropertyWebkitColorCorrection:
320     case CSSPropertyWebkitFontFeatureSettings:
321     case CSSPropertyWebkitFontKerning:
322     case CSSPropertyWebkitFontSmoothing:
323     case CSSPropertyWebkitFontVariantLigatures:
324     case CSSPropertyWebkitLocale:
325     case CSSPropertyWebkitHighlight:
326     case CSSPropertyWebkitHyphenateCharacter:
327     case CSSPropertyWebkitHyphenateLimitAfter:
328     case CSSPropertyWebkitHyphenateLimitBefore:
329     case CSSPropertyWebkitHyphenateLimitLines:
330     case CSSPropertyWebkitHyphens:
331     case CSSPropertyWebkitLineAlign:
332     case CSSPropertyWebkitLineBoxContain:
333     case CSSPropertyWebkitLineBreak:
334     case CSSPropertyWebkitLineGrid:
335     case CSSPropertyWebkitLineSnap:
336     case CSSPropertyWebkitNbspMode:
337 #if ENABLE(OVERFLOW_SCROLLING)
338     case CSSPropertyWebkitOverflowScrolling:
339 #endif
340     case CSSPropertyWebkitPrintColorAdjust:
341     case CSSPropertyWebkitRtlOrdering:
342     case CSSPropertyWebkitTextCombine:
343 #if ENABLE(CSS3_TEXT_DECORATION)
344     case CSSPropertyWebkitTextDecorationLine:
345 #endif // CSS3_TEXT_DECORATION
346     case CSSPropertyWebkitTextDecorationsInEffect:
347     case CSSPropertyWebkitTextEmphasis:
348     case CSSPropertyWebkitTextEmphasisColor:
349     case CSSPropertyWebkitTextEmphasisPosition:
350     case CSSPropertyWebkitTextEmphasisStyle:
351     case CSSPropertyWebkitTextFillColor:
352     case CSSPropertyWebkitTextOrientation:
353     case CSSPropertyWebkitTextSecurity:
354     case CSSPropertyWebkitTextSizeAdjust:
355     case CSSPropertyWebkitTextStroke:
356     case CSSPropertyWebkitTextStrokeColor:
357     case CSSPropertyWebkitTextStrokeWidth:
358     case CSSPropertyWebkitUserModify:
359     case CSSPropertyWebkitUserSelect:
360     case CSSPropertyWebkitWritingMode:
361     case CSSPropertyWhiteSpace:
362     case CSSPropertyWidows:
363     case CSSPropertyWordBreak:
364     case CSSPropertyWordSpacing:
365     case CSSPropertyWordWrap:
366 #if ENABLE(SVG)
367     case CSSPropertyClipRule:
368     case CSSPropertyColorInterpolation:
369     case CSSPropertyColorInterpolationFilters:
370     case CSSPropertyColorRendering:
371     case CSSPropertyFill:
372     case CSSPropertyFillOpacity:
373     case CSSPropertyFillRule:
374     case CSSPropertyGlyphOrientationHorizontal:
375     case CSSPropertyGlyphOrientationVertical:
376     case CSSPropertyKerning:
377     case CSSPropertyMarker:
378     case CSSPropertyMarkerEnd:
379     case CSSPropertyMarkerMid:
380     case CSSPropertyMarkerStart:
381     case CSSPropertyStroke:
382     case CSSPropertyStrokeDasharray:
383     case CSSPropertyStrokeDashoffset:
384     case CSSPropertyStrokeLinecap:
385     case CSSPropertyStrokeLinejoin:
386     case CSSPropertyStrokeMiterlimit:
387     case CSSPropertyStrokeOpacity:
388     case CSSPropertyStrokeWidth:
389     case CSSPropertyShapeRendering:
390     case CSSPropertyTextAnchor:
391     case CSSPropertyWritingMode:
392 #endif
393 #if ENABLE(TOUCH_EVENTS)
394     case CSSPropertyWebkitTapHighlightColor:
395 #endif
396         return true;
397     case CSSPropertyDisplay:
398     case CSSPropertyZoom:
399     case CSSPropertyBackground:
400     case CSSPropertyBackgroundAttachment:
401     case CSSPropertyBackgroundClip:
402     case CSSPropertyBackgroundColor:
403     case CSSPropertyBackgroundImage:
404     case CSSPropertyBackgroundOrigin:
405     case CSSPropertyBackgroundPosition:
406     case CSSPropertyBackgroundPositionX:
407     case CSSPropertyBackgroundPositionY:
408     case CSSPropertyBackgroundRepeat:
409     case CSSPropertyBackgroundRepeatX:
410     case CSSPropertyBackgroundRepeatY:
411     case CSSPropertyBackgroundSize:
412     case CSSPropertyBorder:
413     case CSSPropertyBorderBottom:
414     case CSSPropertyBorderBottomColor:
415     case CSSPropertyBorderBottomLeftRadius:
416     case CSSPropertyBorderBottomRightRadius:
417     case CSSPropertyBorderBottomStyle:
418     case CSSPropertyBorderBottomWidth:
419     case CSSPropertyBorderColor:
420     case CSSPropertyBorderImage:
421     case CSSPropertyBorderImageOutset:
422     case CSSPropertyBorderImageRepeat:
423     case CSSPropertyBorderImageSlice:
424     case CSSPropertyBorderImageSource:
425     case CSSPropertyBorderImageWidth:
426     case CSSPropertyBorderLeft:
427     case CSSPropertyBorderLeftColor:
428     case CSSPropertyBorderLeftStyle:
429     case CSSPropertyBorderLeftWidth:
430     case CSSPropertyBorderRadius:
431     case CSSPropertyBorderRight:
432     case CSSPropertyBorderRightColor:
433     case CSSPropertyBorderRightStyle:
434     case CSSPropertyBorderRightWidth:
435     case CSSPropertyBorderStyle:
436     case CSSPropertyBorderTop:
437     case CSSPropertyBorderTopColor:
438     case CSSPropertyBorderTopLeftRadius:
439     case CSSPropertyBorderTopRightRadius:
440     case CSSPropertyBorderTopStyle:
441     case CSSPropertyBorderTopWidth:
442     case CSSPropertyBorderWidth:
443     case CSSPropertyBottom:
444     case CSSPropertyBoxShadow:
445     case CSSPropertyBoxSizing:
446     case CSSPropertyClear:
447     case CSSPropertyClip:
448     case CSSPropertyContent:
449     case CSSPropertyCounterIncrement:
450     case CSSPropertyCounterReset:
451     case CSSPropertyFloat:
452     case CSSPropertyFontStretch:
453     case CSSPropertyHeight:
454     case CSSPropertyLeft:
455     case CSSPropertyMargin:
456     case CSSPropertyMarginBottom:
457     case CSSPropertyMarginLeft:
458     case CSSPropertyMarginRight:
459     case CSSPropertyMarginTop:
460     case CSSPropertyMaxHeight:
461     case CSSPropertyMaxWidth:
462     case CSSPropertyMinHeight:
463     case CSSPropertyMinWidth:
464     case CSSPropertyOpacity:
465     case CSSPropertyOutline:
466     case CSSPropertyOutlineColor:
467     case CSSPropertyOutlineOffset:
468     case CSSPropertyOutlineStyle:
469     case CSSPropertyOutlineWidth:
470     case CSSPropertyOverflow:
471     case CSSPropertyOverflowX:
472     case CSSPropertyOverflowY:
473     case CSSPropertyPadding:
474     case CSSPropertyPaddingBottom:
475     case CSSPropertyPaddingLeft:
476     case CSSPropertyPaddingRight:
477     case CSSPropertyPaddingTop:
478     case CSSPropertyPage:
479     case CSSPropertyPageBreakAfter:
480     case CSSPropertyPageBreakBefore:
481     case CSSPropertyPageBreakInside:
482     case CSSPropertyPosition:
483     case CSSPropertyRight:
484     case CSSPropertySize:
485     case CSSPropertySrc:
486     case CSSPropertyTableLayout:
487     case CSSPropertyTextLineThrough:
488     case CSSPropertyTextLineThroughColor:
489     case CSSPropertyTextLineThroughMode:
490     case CSSPropertyTextLineThroughStyle:
491     case CSSPropertyTextLineThroughWidth:
492     case CSSPropertyTextOverflow:
493     case CSSPropertyTextOverline:
494     case CSSPropertyTextOverlineColor:
495     case CSSPropertyTextOverlineMode:
496     case CSSPropertyTextOverlineStyle:
497     case CSSPropertyTextOverlineWidth:
498     case CSSPropertyTextUnderline:
499     case CSSPropertyTextUnderlineColor:
500     case CSSPropertyTextUnderlineMode:
501     case CSSPropertyTextUnderlineStyle:
502     case CSSPropertyTextUnderlineWidth:
503     case CSSPropertyTop:
504     case CSSPropertyUnicodeBidi:
505     case CSSPropertyUnicodeRange:
506     case CSSPropertyVerticalAlign:
507     case CSSPropertyWidth:
508     case CSSPropertyZIndex:
509     case CSSPropertyWebkitAnimation:
510     case CSSPropertyWebkitAnimationDelay:
511     case CSSPropertyWebkitAnimationDirection:
512     case CSSPropertyWebkitAnimationDuration:
513     case CSSPropertyWebkitAnimationFillMode:
514     case CSSPropertyWebkitAnimationIterationCount:
515     case CSSPropertyWebkitAnimationName:
516     case CSSPropertyWebkitAnimationPlayState:
517     case CSSPropertyWebkitAnimationTimingFunction:
518     case CSSPropertyWebkitAppearance:
519     case CSSPropertyWebkitBackfaceVisibility:
520     case CSSPropertyWebkitBackgroundClip:
521     case CSSPropertyWebkitBackgroundComposite:
522     case CSSPropertyWebkitBackgroundOrigin:
523     case CSSPropertyWebkitBackgroundSize:
524     case CSSPropertyWebkitBorderAfter:
525     case CSSPropertyWebkitBorderAfterColor:
526     case CSSPropertyWebkitBorderAfterStyle:
527     case CSSPropertyWebkitBorderAfterWidth:
528     case CSSPropertyWebkitBorderBefore:
529     case CSSPropertyWebkitBorderBeforeColor:
530     case CSSPropertyWebkitBorderBeforeStyle:
531     case CSSPropertyWebkitBorderBeforeWidth:
532     case CSSPropertyWebkitBorderEnd:
533     case CSSPropertyWebkitBorderEndColor:
534     case CSSPropertyWebkitBorderEndStyle:
535     case CSSPropertyWebkitBorderEndWidth:
536     case CSSPropertyWebkitBorderFit:
537     case CSSPropertyWebkitBorderImage:
538     case CSSPropertyWebkitBorderRadius:
539     case CSSPropertyWebkitBorderStart:
540     case CSSPropertyWebkitBorderStartColor:
541     case CSSPropertyWebkitBorderStartStyle:
542     case CSSPropertyWebkitBorderStartWidth:
543     case CSSPropertyWebkitBoxAlign:
544 #if ENABLE(CSS_BOX_DECORATION_BREAK)
545     case CSSPropertyWebkitBoxDecorationBreak:
546 #endif
547     case CSSPropertyWebkitBoxFlex:
548     case CSSPropertyWebkitBoxFlexGroup:
549     case CSSPropertyWebkitBoxLines:
550     case CSSPropertyWebkitBoxOrdinalGroup:
551     case CSSPropertyWebkitBoxOrient:
552     case CSSPropertyWebkitBoxPack:
553     case CSSPropertyWebkitBoxReflect:
554     case CSSPropertyWebkitBoxShadow:
555     case CSSPropertyWebkitColumnAxis:
556     case CSSPropertyWebkitColumnBreakAfter:
557     case CSSPropertyWebkitColumnBreakBefore:
558     case CSSPropertyWebkitColumnBreakInside:
559     case CSSPropertyWebkitColumnCount:
560     case CSSPropertyWebkitColumnGap:
561     case CSSPropertyWebkitColumnProgression:
562     case CSSPropertyWebkitColumnRule:
563     case CSSPropertyWebkitColumnRuleColor:
564     case CSSPropertyWebkitColumnRuleStyle:
565     case CSSPropertyWebkitColumnRuleWidth:
566     case CSSPropertyWebkitColumnSpan:
567     case CSSPropertyWebkitColumnWidth:
568     case CSSPropertyWebkitColumns:
569 #if ENABLE(CSS_FILTERS)
570     case CSSPropertyWebkitFilter:
571 #endif
572 #if ENABLE(CSS3_FLEXBOX)
573     case CSSPropertyWebkitAlignContent:
574     case CSSPropertyWebkitAlignItems:
575     case CSSPropertyWebkitAlignSelf:
576     case CSSPropertyWebkitFlex:
577     case CSSPropertyWebkitFlexBasis:
578     case CSSPropertyWebkitFlexDirection:
579     case CSSPropertyWebkitFlexFlow:
580     case CSSPropertyWebkitFlexGrow:
581     case CSSPropertyWebkitFlexShrink:
582     case CSSPropertyWebkitFlexWrap:
583     case CSSPropertyWebkitJustifyContent:
584     case CSSPropertyWebkitOrder:
585 #endif
586     case CSSPropertyWebkitFontSizeDelta:
587     case CSSPropertyWebkitGridColumns:
588     case CSSPropertyWebkitGridRows:
589     case CSSPropertyWebkitGridColumn:
590     case CSSPropertyWebkitGridRow:
591     case CSSPropertyWebkitLineClamp:
592     case CSSPropertyWebkitLogicalWidth:
593     case CSSPropertyWebkitLogicalHeight:
594     case CSSPropertyWebkitMarginAfterCollapse:
595     case CSSPropertyWebkitMarginBeforeCollapse:
596     case CSSPropertyWebkitMarginBottomCollapse:
597     case CSSPropertyWebkitMarginTopCollapse:
598     case CSSPropertyWebkitMarginCollapse:
599     case CSSPropertyWebkitMarginAfter:
600     case CSSPropertyWebkitMarginBefore:
601     case CSSPropertyWebkitMarginEnd:
602     case CSSPropertyWebkitMarginStart:
603     case CSSPropertyWebkitMarquee:
604     case CSSPropertyWebkitMarqueeDirection:
605     case CSSPropertyWebkitMarqueeIncrement:
606     case CSSPropertyWebkitMarqueeRepetition:
607     case CSSPropertyWebkitMarqueeSpeed:
608     case CSSPropertyWebkitMarqueeStyle:
609     case CSSPropertyWebkitMask:
610     case CSSPropertyWebkitMaskAttachment:
611     case CSSPropertyWebkitMaskBoxImage:
612     case CSSPropertyWebkitMaskBoxImageOutset:
613     case CSSPropertyWebkitMaskBoxImageRepeat:
614     case CSSPropertyWebkitMaskBoxImageSlice:
615     case CSSPropertyWebkitMaskBoxImageSource:
616     case CSSPropertyWebkitMaskBoxImageWidth:
617     case CSSPropertyWebkitMaskClip:
618     case CSSPropertyWebkitMaskComposite:
619     case CSSPropertyWebkitMaskImage:
620     case CSSPropertyWebkitMaskOrigin:
621     case CSSPropertyWebkitMaskPosition:
622     case CSSPropertyWebkitMaskPositionX:
623     case CSSPropertyWebkitMaskPositionY:
624     case CSSPropertyWebkitMaskRepeat:
625     case CSSPropertyWebkitMaskRepeatX:
626     case CSSPropertyWebkitMaskRepeatY:
627     case CSSPropertyWebkitMaskSize:
628     case CSSPropertyWebkitMaxLogicalWidth:
629     case CSSPropertyWebkitMaxLogicalHeight:
630     case CSSPropertyWebkitMinLogicalWidth:
631     case CSSPropertyWebkitMinLogicalHeight:
632     case CSSPropertyWebkitPaddingAfter:
633     case CSSPropertyWebkitPaddingBefore:
634     case CSSPropertyWebkitPaddingEnd:
635     case CSSPropertyWebkitPaddingStart:
636     case CSSPropertyWebkitPerspective:
637     case CSSPropertyWebkitPerspectiveOrigin:
638     case CSSPropertyWebkitPerspectiveOriginX:
639     case CSSPropertyWebkitPerspectiveOriginY:
640 #if ENABLE(CSS3_TEXT_DECORATION)
641     case CSSPropertyWebkitTextDecorationStyle:
642 #endif // CSS3_TEXT_DECORATION
643     case CSSPropertyWebkitTransform:
644     case CSSPropertyWebkitTransformOrigin:
645     case CSSPropertyWebkitTransformOriginX:
646     case CSSPropertyWebkitTransformOriginY:
647     case CSSPropertyWebkitTransformOriginZ:
648     case CSSPropertyWebkitTransformStyle:
649     case CSSPropertyWebkitTransition:
650     case CSSPropertyWebkitTransitionDelay:
651     case CSSPropertyWebkitTransitionDuration:
652     case CSSPropertyWebkitTransitionProperty:
653     case CSSPropertyWebkitTransitionTimingFunction:
654     case CSSPropertyWebkitUserDrag:
655 #if ENABLE(CSS_REGIONS)
656     case CSSPropertyWebkitFlowInto:
657     case CSSPropertyWebkitFlowFrom:
658     case CSSPropertyWebkitRegionOverflow:
659     case CSSPropertyWebkitRegionBreakAfter:
660     case CSSPropertyWebkitRegionBreakBefore:
661     case CSSPropertyWebkitRegionBreakInside:
662 #endif
663 #if ENABLE(CSS_EXCLUSIONS)
664     case CSSPropertyWebkitWrap:
665     case CSSPropertyWebkitWrapFlow:
666     case CSSPropertyWebkitWrapMargin:
667     case CSSPropertyWebkitWrapPadding:
668     case CSSPropertyWebkitShapeInside:
669     case CSSPropertyWebkitShapeOutside:
670     case CSSPropertyWebkitWrapThrough:
671 #endif
672 #if ENABLE(SVG)
673     case CSSPropertyClipPath:
674     case CSSPropertyMask:
675     case CSSPropertyEnableBackground:
676     case CSSPropertyFilter:
677     case CSSPropertyFloodColor:
678     case CSSPropertyFloodOpacity:
679     case CSSPropertyLightingColor:
680     case CSSPropertyStopColor:
681     case CSSPropertyStopOpacity:
682     case CSSPropertyColorProfile:
683     case CSSPropertyAlignmentBaseline:
684     case CSSPropertyBaselineShift:
685     case CSSPropertyDominantBaseline:
686     case CSSPropertyVectorEffect:
687     case CSSPropertyWebkitSvgShadow:
688 #endif
689 #if ENABLE(DASHBOARD_SUPPORT)
690     case CSSPropertyWebkitDashboardRegion:
691 #endif
692 #if ENABLE(WIDGET_REGION)
693     case CSSPropertyWebkitWidgetRegion:
694 #endif
695         return false;
696     case CSSPropertyInvalid:
697         ASSERT_NOT_REACHED();
698         return false;
699     }
700     ASSERT_NOT_REACHED();
701     return false;
702 }
703
704 void CSSProperty::reportMemoryUsage(MemoryObjectInfo* memoryObjectInfo) const
705 {
706     MemoryClassInfo info(memoryObjectInfo, this, MemoryInstrumentation::CSS);
707     info.addInstrumentedMember(m_value);
708 }
709
710 } // namespace WebCore