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