Home | History | Annotate | Download | only in css
      1 /**
      2  * (C) 1999-2003 Lars Knoll (knoll (at) 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 "core/css/CSSProperty.h"
     23 
     24 #include "core/StylePropertyShorthand.h"
     25 #include "core/css/CSSValueList.h"
     26 #include "core/rendering/style/RenderStyleConstants.h"
     27 
     28 namespace WebCore {
     29 
     30 struct SameSizeAsCSSProperty {
     31     uint32_t bitfields;
     32     void* value;
     33 };
     34 
     35 COMPILE_ASSERT(sizeof(CSSProperty) == sizeof(SameSizeAsCSSProperty), CSSProperty_should_stay_small);
     36 
     37 CSSPropertyID StylePropertyMetadata::shorthandID() const
     38 {
     39     if (!m_isSetFromShorthand)
     40         return CSSPropertyInvalid;
     41 
     42     Vector<StylePropertyShorthand, 4> shorthands;
     43     getMatchingShorthandsForLonghand(static_cast<CSSPropertyID>(m_propertyID), &shorthands);
     44     ASSERT(shorthands.size() && m_indexInShorthandsVector >= 0 && m_indexInShorthandsVector < shorthands.size());
     45     return shorthands.at(m_indexInShorthandsVector).id();
     46 }
     47 
     48 void CSSProperty::wrapValueInCommaSeparatedList()
     49 {
     50     RefPtrWillBeRawPtr<CSSValue> value = m_value.release();
     51     m_value = CSSValueList::createCommaSeparated();
     52     toCSSValueList(m_value.get())->append(value.release());
     53 }
     54 
     55 enum LogicalBoxSide { BeforeSide, EndSide, AfterSide, StartSide };
     56 enum PhysicalBoxSide { TopSide, RightSide, BottomSide, LeftSide };
     57 
     58 static CSSPropertyID resolveToPhysicalProperty(TextDirection direction, WritingMode writingMode, LogicalBoxSide logicalSide, const StylePropertyShorthand& shorthand)
     59 {
     60     if (direction == LTR) {
     61         if (writingMode == TopToBottomWritingMode) {
     62             // The common case. The logical and physical box sides match.
     63             // Left = Start, Right = End, Before = Top, After = Bottom
     64             return shorthand.properties()[logicalSide];
     65         }
     66 
     67         if (writingMode == BottomToTopWritingMode) {
     68             // Start = Left, End = Right, Before = Bottom, After = Top.
     69             switch (logicalSide) {
     70             case StartSide:
     71                 return shorthand.properties()[LeftSide];
     72             case EndSide:
     73                 return shorthand.properties()[RightSide];
     74             case BeforeSide:
     75                 return shorthand.properties()[BottomSide];
     76             default:
     77                 return shorthand.properties()[TopSide];
     78             }
     79         }
     80 
     81         if (writingMode == LeftToRightWritingMode) {
     82             // Start = Top, End = Bottom, Before = Left, After = Right.
     83             switch (logicalSide) {
     84             case StartSide:
     85                 return shorthand.properties()[TopSide];
     86             case EndSide:
     87                 return shorthand.properties()[BottomSide];
     88             case BeforeSide:
     89                 return shorthand.properties()[LeftSide];
     90             default:
     91                 return shorthand.properties()[RightSide];
     92             }
     93         }
     94 
     95         // Start = Top, End = Bottom, Before = Right, After = Left
     96         switch (logicalSide) {
     97         case StartSide:
     98             return shorthand.properties()[TopSide];
     99         case EndSide:
    100             return shorthand.properties()[BottomSide];
    101         case BeforeSide:
    102             return shorthand.properties()[RightSide];
    103         default:
    104             return shorthand.properties()[LeftSide];
    105         }
    106     }
    107 
    108     if (writingMode == TopToBottomWritingMode) {
    109         // Start = Right, End = Left, Before = Top, After = Bottom
    110         switch (logicalSide) {
    111         case StartSide:
    112             return shorthand.properties()[RightSide];
    113         case EndSide:
    114             return shorthand.properties()[LeftSide];
    115         case BeforeSide:
    116             return shorthand.properties()[TopSide];
    117         default:
    118             return shorthand.properties()[BottomSide];
    119         }
    120     }
    121 
    122     if (writingMode == BottomToTopWritingMode) {
    123         // Start = Right, End = Left, Before = Bottom, After = Top
    124         switch (logicalSide) {
    125         case StartSide:
    126             return shorthand.properties()[RightSide];
    127         case EndSide:
    128             return shorthand.properties()[LeftSide];
    129         case BeforeSide:
    130             return shorthand.properties()[BottomSide];
    131         default:
    132             return shorthand.properties()[TopSide];
    133         }
    134     }
    135 
    136     if (writingMode == LeftToRightWritingMode) {
    137         // Start = Bottom, End = Top, Before = Left, After = Right
    138         switch (logicalSide) {
    139         case StartSide:
    140             return shorthand.properties()[BottomSide];
    141         case EndSide:
    142             return shorthand.properties()[TopSide];
    143         case BeforeSide:
    144             return shorthand.properties()[LeftSide];
    145         default:
    146             return shorthand.properties()[RightSide];
    147         }
    148     }
    149 
    150     // Start = Bottom, End = Top, Before = Right, After = Left
    151     switch (logicalSide) {
    152     case StartSide:
    153         return shorthand.properties()[BottomSide];
    154     case EndSide:
    155         return shorthand.properties()[TopSide];
    156     case BeforeSide:
    157         return shorthand.properties()[RightSide];
    158     default:
    159         return shorthand.properties()[LeftSide];
    160     }
    161 }
    162 
    163 enum LogicalExtent { LogicalWidth, LogicalHeight };
    164 
    165 static CSSPropertyID resolveToPhysicalProperty(WritingMode writingMode, LogicalExtent logicalSide, const CSSPropertyID* properties)
    166 {
    167     if (writingMode == TopToBottomWritingMode || writingMode == BottomToTopWritingMode)
    168         return properties[logicalSide];
    169     return logicalSide == LogicalWidth ? properties[1] : properties[0];
    170 }
    171 
    172 static const StylePropertyShorthand& borderDirections()
    173 {
    174     static const CSSPropertyID properties[4] = { CSSPropertyBorderTop, CSSPropertyBorderRight, CSSPropertyBorderBottom, CSSPropertyBorderLeft };
    175     DEFINE_STATIC_LOCAL(StylePropertyShorthand, borderDirections, (CSSPropertyBorder, properties, WTF_ARRAY_LENGTH(properties)));
    176     return borderDirections;
    177 }
    178 
    179 CSSPropertyID CSSProperty::resolveDirectionAwareProperty(CSSPropertyID propertyID, TextDirection direction, WritingMode writingMode)
    180 {
    181     switch (propertyID) {
    182     case CSSPropertyWebkitMarginEnd:
    183         return resolveToPhysicalProperty(direction, writingMode, EndSide, marginShorthand());
    184     case CSSPropertyWebkitMarginStart:
    185         return resolveToPhysicalProperty(direction, writingMode, StartSide, marginShorthand());
    186     case CSSPropertyWebkitMarginBefore:
    187         return resolveToPhysicalProperty(direction, writingMode, BeforeSide, marginShorthand());
    188     case CSSPropertyWebkitMarginAfter:
    189         return resolveToPhysicalProperty(direction, writingMode, AfterSide, marginShorthand());
    190     case CSSPropertyWebkitPaddingEnd:
    191         return resolveToPhysicalProperty(direction, writingMode, EndSide, paddingShorthand());
    192     case CSSPropertyWebkitPaddingStart:
    193         return resolveToPhysicalProperty(direction, writingMode, StartSide, paddingShorthand());
    194     case CSSPropertyWebkitPaddingBefore:
    195         return resolveToPhysicalProperty(direction, writingMode, BeforeSide, paddingShorthand());
    196     case CSSPropertyWebkitPaddingAfter:
    197         return resolveToPhysicalProperty(direction, writingMode, AfterSide, paddingShorthand());
    198     case CSSPropertyWebkitBorderEnd:
    199         return resolveToPhysicalProperty(direction, writingMode, EndSide, borderDirections());
    200     case CSSPropertyWebkitBorderStart:
    201         return resolveToPhysicalProperty(direction, writingMode, StartSide, borderDirections());
    202     case CSSPropertyWebkitBorderBefore:
    203         return resolveToPhysicalProperty(direction, writingMode, BeforeSide, borderDirections());
    204     case CSSPropertyWebkitBorderAfter:
    205         return resolveToPhysicalProperty(direction, writingMode, AfterSide, borderDirections());
    206     case CSSPropertyWebkitBorderEndColor:
    207         return resolveToPhysicalProperty(direction, writingMode, EndSide, borderColorShorthand());
    208     case CSSPropertyWebkitBorderStartColor:
    209         return resolveToPhysicalProperty(direction, writingMode, StartSide, borderColorShorthand());
    210     case CSSPropertyWebkitBorderBeforeColor:
    211         return resolveToPhysicalProperty(direction, writingMode, BeforeSide, borderColorShorthand());
    212     case CSSPropertyWebkitBorderAfterColor:
    213         return resolveToPhysicalProperty(direction, writingMode, AfterSide, borderColorShorthand());
    214     case CSSPropertyWebkitBorderEndStyle:
    215         return resolveToPhysicalProperty(direction, writingMode, EndSide, borderStyleShorthand());
    216     case CSSPropertyWebkitBorderStartStyle:
    217         return resolveToPhysicalProperty(direction, writingMode, StartSide, borderStyleShorthand());
    218     case CSSPropertyWebkitBorderBeforeStyle:
    219         return resolveToPhysicalProperty(direction, writingMode, BeforeSide, borderStyleShorthand());
    220     case CSSPropertyWebkitBorderAfterStyle:
    221         return resolveToPhysicalProperty(direction, writingMode, AfterSide, borderStyleShorthand());
    222     case CSSPropertyWebkitBorderEndWidth:
    223         return resolveToPhysicalProperty(direction, writingMode, EndSide, borderWidthShorthand());
    224     case CSSPropertyWebkitBorderStartWidth:
    225         return resolveToPhysicalProperty(direction, writingMode, StartSide, borderWidthShorthand());
    226     case CSSPropertyWebkitBorderBeforeWidth:
    227         return resolveToPhysicalProperty(direction, writingMode, BeforeSide, borderWidthShorthand());
    228     case CSSPropertyWebkitBorderAfterWidth:
    229         return resolveToPhysicalProperty(direction, writingMode, AfterSide, borderWidthShorthand());
    230     case CSSPropertyWebkitLogicalWidth: {
    231         const CSSPropertyID properties[2] = { CSSPropertyWidth, CSSPropertyHeight };
    232         return resolveToPhysicalProperty(writingMode, LogicalWidth, properties);
    233     }
    234     case CSSPropertyWebkitLogicalHeight: {
    235         const CSSPropertyID properties[2] = { CSSPropertyWidth, CSSPropertyHeight };
    236         return resolveToPhysicalProperty(writingMode, LogicalHeight, properties);
    237     }
    238     case CSSPropertyWebkitMinLogicalWidth: {
    239         const CSSPropertyID properties[2] = { CSSPropertyMinWidth, CSSPropertyMinHeight };
    240         return resolveToPhysicalProperty(writingMode, LogicalWidth, properties);
    241     }
    242     case CSSPropertyWebkitMinLogicalHeight: {
    243         const CSSPropertyID properties[2] = { CSSPropertyMinWidth, CSSPropertyMinHeight };
    244         return resolveToPhysicalProperty(writingMode, LogicalHeight, properties);
    245     }
    246     case CSSPropertyWebkitMaxLogicalWidth: {
    247         const CSSPropertyID properties[2] = { CSSPropertyMaxWidth, CSSPropertyMaxHeight };
    248         return resolveToPhysicalProperty(writingMode, LogicalWidth, properties);
    249     }
    250     case CSSPropertyWebkitMaxLogicalHeight: {
    251         const CSSPropertyID properties[2] = { CSSPropertyMaxWidth, CSSPropertyMaxHeight };
    252         return resolveToPhysicalProperty(writingMode, LogicalHeight, properties);
    253     }
    254     default:
    255         return propertyID;
    256     }
    257 }
    258 
    259 bool CSSProperty::isInheritedProperty(CSSPropertyID propertyID)
    260 {
    261     switch (propertyID) {
    262     case CSSPropertyBorderCollapse:
    263     case CSSPropertyBorderSpacing:
    264     case CSSPropertyCaptionSide:
    265     case CSSPropertyClipRule:
    266     case CSSPropertyColor:
    267     case CSSPropertyColorInterpolation:
    268     case CSSPropertyColorInterpolationFilters:
    269     case CSSPropertyColorRendering:
    270     case CSSPropertyCursor:
    271     case CSSPropertyDirection:
    272     case CSSPropertyEmptyCells:
    273     case CSSPropertyFill:
    274     case CSSPropertyFillOpacity:
    275     case CSSPropertyFillRule:
    276     case CSSPropertyFont:
    277     case CSSPropertyFontFamily:
    278     case CSSPropertyFontSize:
    279     case CSSPropertyFontStyle:
    280     case CSSPropertyFontVariant:
    281     case CSSPropertyFontWeight:
    282     case CSSPropertyGlyphOrientationHorizontal:
    283     case CSSPropertyGlyphOrientationVertical:
    284     case CSSPropertyImageRendering:
    285     case CSSPropertyLetterSpacing:
    286     case CSSPropertyLineHeight:
    287     case CSSPropertyListStyle:
    288     case CSSPropertyListStyleImage:
    289     case CSSPropertyListStylePosition:
    290     case CSSPropertyListStyleType:
    291     case CSSPropertyMarker:
    292     case CSSPropertyMarkerEnd:
    293     case CSSPropertyMarkerMid:
    294     case CSSPropertyMarkerStart:
    295     case CSSPropertyOrphans:
    296     case CSSPropertyPointerEvents:
    297     case CSSPropertyQuotes:
    298     case CSSPropertyResize:
    299     case CSSPropertyShapeRendering:
    300     case CSSPropertySpeak:
    301     case CSSPropertyStroke:
    302     case CSSPropertyStrokeDasharray:
    303     case CSSPropertyStrokeDashoffset:
    304     case CSSPropertyStrokeLinecap:
    305     case CSSPropertyStrokeLinejoin:
    306     case CSSPropertyStrokeMiterlimit:
    307     case CSSPropertyStrokeOpacity:
    308     case CSSPropertyStrokeWidth:
    309     case CSSPropertyTabSize:
    310     case CSSPropertyTextAlign:
    311     case CSSPropertyTextAlignLast:
    312     case CSSPropertyTextJustify:
    313     case CSSPropertyTextAnchor:
    314     case CSSPropertyTextIndent:
    315     case CSSPropertyTextRendering:
    316     case CSSPropertyTextShadow:
    317     case CSSPropertyTextTransform:
    318     case CSSPropertyTouchActionDelay:
    319     case CSSPropertyVisibility:
    320     case CSSPropertyWebkitAspectRatio:
    321     case CSSPropertyWebkitBorderHorizontalSpacing:
    322     case CSSPropertyWebkitBorderVerticalSpacing:
    323     case CSSPropertyWebkitBoxDirection:
    324     case CSSPropertyWebkitFontFeatureSettings:
    325     case CSSPropertyFontKerning:
    326     case CSSPropertyWebkitFontSmoothing:
    327     case CSSPropertyFontVariantLigatures:
    328     case CSSPropertyWebkitLocale:
    329     case CSSPropertyWebkitHighlight:
    330     case CSSPropertyWebkitHyphenateCharacter:
    331     case CSSPropertyWebkitLineBoxContain:
    332     case CSSPropertyWebkitLineBreak:
    333     case CSSPropertyWebkitPrintColorAdjust:
    334     case CSSPropertyWebkitRtlOrdering:
    335     case CSSPropertyWebkitRubyPosition:
    336     case CSSPropertyWebkitTapHighlightColor:
    337     case CSSPropertyWebkitTextCombine:
    338     case CSSPropertyTextUnderlinePosition:
    339     case CSSPropertyWebkitTextDecorationsInEffect:
    340     case CSSPropertyWebkitTextEmphasis:
    341     case CSSPropertyWebkitTextEmphasisColor:
    342     case CSSPropertyWebkitTextEmphasisPosition:
    343     case CSSPropertyWebkitTextEmphasisStyle:
    344     case CSSPropertyWebkitTextFillColor:
    345     case CSSPropertyWebkitTextOrientation:
    346     case CSSPropertyWebkitTextSecurity:
    347     case CSSPropertyWebkitTextStroke:
    348     case CSSPropertyWebkitTextStrokeColor:
    349     case CSSPropertyWebkitTextStrokeWidth:
    350     case CSSPropertyWebkitUserModify:
    351     case CSSPropertyWebkitUserSelect:
    352     case CSSPropertyWebkitWritingMode:
    353     case CSSPropertyWhiteSpace:
    354     case CSSPropertyWidows:
    355     case CSSPropertyWordBreak:
    356     case CSSPropertyWordSpacing:
    357     case CSSPropertyWordWrap:
    358     case CSSPropertyWritingMode:
    359         return true;
    360     case CSSPropertyAnimation:
    361     case CSSPropertyAnimationDelay:
    362     case CSSPropertyAnimationDirection:
    363     case CSSPropertyAnimationDuration:
    364     case CSSPropertyAnimationFillMode:
    365     case CSSPropertyAnimationIterationCount:
    366     case CSSPropertyAnimationName:
    367     case CSSPropertyAnimationPlayState:
    368     case CSSPropertyAnimationTimingFunction:
    369     case CSSPropertyAlignmentBaseline:
    370     case CSSPropertyBackground:
    371     case CSSPropertyBackgroundAttachment:
    372     case CSSPropertyBackgroundBlendMode:
    373     case CSSPropertyBackgroundClip:
    374     case CSSPropertyBackgroundColor:
    375     case CSSPropertyBackgroundImage:
    376     case CSSPropertyBackgroundOrigin:
    377     case CSSPropertyBackgroundPosition:
    378     case CSSPropertyBackgroundPositionX:
    379     case CSSPropertyBackgroundPositionY:
    380     case CSSPropertyBackgroundRepeat:
    381     case CSSPropertyBackgroundRepeatX:
    382     case CSSPropertyBackgroundRepeatY:
    383     case CSSPropertyBackgroundSize:
    384     case CSSPropertyBaselineShift:
    385     case CSSPropertyBorder:
    386     case CSSPropertyBorderBottom:
    387     case CSSPropertyBorderBottomColor:
    388     case CSSPropertyBorderBottomLeftRadius:
    389     case CSSPropertyBorderBottomRightRadius:
    390     case CSSPropertyBorderBottomStyle:
    391     case CSSPropertyBorderBottomWidth:
    392     case CSSPropertyBorderColor:
    393     case CSSPropertyBorderImage:
    394     case CSSPropertyBorderImageOutset:
    395     case CSSPropertyBorderImageRepeat:
    396     case CSSPropertyBorderImageSlice:
    397     case CSSPropertyBorderImageSource:
    398     case CSSPropertyBorderImageWidth:
    399     case CSSPropertyBorderLeft:
    400     case CSSPropertyBorderLeftColor:
    401     case CSSPropertyBorderLeftStyle:
    402     case CSSPropertyBorderLeftWidth:
    403     case CSSPropertyBorderRadius:
    404     case CSSPropertyBorderRight:
    405     case CSSPropertyBorderRightColor:
    406     case CSSPropertyBorderRightStyle:
    407     case CSSPropertyBorderRightWidth:
    408     case CSSPropertyBorderStyle:
    409     case CSSPropertyBorderTop:
    410     case CSSPropertyBorderTopColor:
    411     case CSSPropertyBorderTopLeftRadius:
    412     case CSSPropertyBorderTopRightRadius:
    413     case CSSPropertyBorderTopStyle:
    414     case CSSPropertyBorderTopWidth:
    415     case CSSPropertyBorderWidth:
    416     case CSSPropertyBottom:
    417     case CSSPropertyBoxShadow:
    418     case CSSPropertyBoxSizing:
    419     case CSSPropertyBufferedRendering:
    420     case CSSPropertyClear:
    421     case CSSPropertyClip:
    422     case CSSPropertyClipPath:
    423     case CSSPropertyContent:
    424     case CSSPropertyCounterIncrement:
    425     case CSSPropertyCounterReset:
    426     case CSSPropertyDisplay:
    427     case CSSPropertyDominantBaseline:
    428     case CSSPropertyEnableBackground:
    429     case CSSPropertyFilter:
    430     case CSSPropertyFloat:
    431     case CSSPropertyFloodColor:
    432     case CSSPropertyFloodOpacity:
    433     case CSSPropertyFontStretch:
    434     case CSSPropertyHeight:
    435     case CSSPropertyIsolation:
    436     case CSSPropertyJustifySelf:
    437     case CSSPropertyLeft:
    438     case CSSPropertyLightingColor:
    439     case CSSPropertyMargin:
    440     case CSSPropertyMarginBottom:
    441     case CSSPropertyMarginLeft:
    442     case CSSPropertyMarginRight:
    443     case CSSPropertyMarginTop:
    444     case CSSPropertyMask:
    445     case CSSPropertyMaskType:
    446     case CSSPropertyMaskSourceType:
    447     case CSSPropertyMaxHeight:
    448     case CSSPropertyMaxWidth:
    449     case CSSPropertyMinHeight:
    450     case CSSPropertyMinWidth:
    451     case CSSPropertyMixBlendMode:
    452     case CSSPropertyObjectFit:
    453     case CSSPropertyObjectPosition:
    454     case CSSPropertyOpacity:
    455     case CSSPropertyOutline:
    456     case CSSPropertyOutlineColor:
    457     case CSSPropertyOutlineOffset:
    458     case CSSPropertyOutlineStyle:
    459     case CSSPropertyOutlineWidth:
    460     case CSSPropertyOverflow:
    461     case CSSPropertyOverflowWrap:
    462     case CSSPropertyOverflowX:
    463     case CSSPropertyOverflowY:
    464     case CSSPropertyPadding:
    465     case CSSPropertyPaddingBottom:
    466     case CSSPropertyPaddingLeft:
    467     case CSSPropertyPaddingRight:
    468     case CSSPropertyPaddingTop:
    469     case CSSPropertyPage:
    470     case CSSPropertyPageBreakAfter:
    471     case CSSPropertyPageBreakBefore:
    472     case CSSPropertyPageBreakInside:
    473     case CSSPropertyPaintOrder:
    474     case CSSPropertyPosition:
    475     case CSSPropertyRight:
    476     case CSSPropertyScrollBehavior:
    477     case CSSPropertySize:
    478     case CSSPropertySrc:
    479     case CSSPropertyStopColor:
    480     case CSSPropertyStopOpacity:
    481     case CSSPropertyTableLayout:
    482     case CSSPropertyTextDecoration:
    483     case CSSPropertyTextDecorationLine:
    484     case CSSPropertyTextDecorationStyle:
    485     case CSSPropertyTextDecorationColor:
    486     case CSSPropertyTextLineThroughColor:
    487     case CSSPropertyTextLineThroughMode:
    488     case CSSPropertyTextLineThroughStyle:
    489     case CSSPropertyTextLineThroughWidth:
    490     case CSSPropertyTextOverflow:
    491     case CSSPropertyTextOverlineColor:
    492     case CSSPropertyTextOverlineMode:
    493     case CSSPropertyTextOverlineStyle:
    494     case CSSPropertyTextOverlineWidth:
    495     case CSSPropertyTextUnderlineColor:
    496     case CSSPropertyTextUnderlineMode:
    497     case CSSPropertyTextUnderlineStyle:
    498     case CSSPropertyTextUnderlineWidth:
    499     case CSSPropertyTop:
    500     case CSSPropertyTouchAction:
    501     case CSSPropertyTransition:
    502     case CSSPropertyTransitionDelay:
    503     case CSSPropertyTransitionDuration:
    504     case CSSPropertyTransitionProperty:
    505     case CSSPropertyTransitionTimingFunction:
    506     case CSSPropertyUnicodeBidi:
    507     case CSSPropertyUnicodeRange:
    508     case CSSPropertyVectorEffect:
    509     case CSSPropertyVerticalAlign:
    510     case CSSPropertyAlignContent:
    511     case CSSPropertyAlignItems:
    512     case CSSPropertyAlignSelf:
    513     case CSSPropertyWebkitAnimation:
    514     case CSSPropertyWebkitAnimationDelay:
    515     case CSSPropertyWebkitAnimationDirection:
    516     case CSSPropertyWebkitAnimationDuration:
    517     case CSSPropertyWebkitAnimationFillMode:
    518     case CSSPropertyWebkitAnimationIterationCount:
    519     case CSSPropertyWebkitAnimationName:
    520     case CSSPropertyWebkitAnimationPlayState:
    521     case CSSPropertyWebkitAnimationTimingFunction:
    522     case CSSPropertyWebkitAppearance:
    523     case CSSPropertyBackfaceVisibility:
    524     case CSSPropertyWebkitBackfaceVisibility:
    525     case CSSPropertyWebkitBackgroundClip:
    526     case CSSPropertyWebkitBackgroundComposite:
    527     case CSSPropertyWebkitBackgroundOrigin:
    528     case CSSPropertyWebkitBackgroundSize:
    529     case CSSPropertyWebkitBorderAfter:
    530     case CSSPropertyWebkitBorderAfterColor:
    531     case CSSPropertyWebkitBorderAfterStyle:
    532     case CSSPropertyWebkitBorderAfterWidth:
    533     case CSSPropertyWebkitBorderBefore:
    534     case CSSPropertyWebkitBorderBeforeColor:
    535     case CSSPropertyWebkitBorderBeforeStyle:
    536     case CSSPropertyWebkitBorderBeforeWidth:
    537     case CSSPropertyWebkitBorderEnd:
    538     case CSSPropertyWebkitBorderEndColor:
    539     case CSSPropertyWebkitBorderEndStyle:
    540     case CSSPropertyWebkitBorderEndWidth:
    541     case CSSPropertyWebkitBorderFit:
    542     case CSSPropertyWebkitBorderImage:
    543     case CSSPropertyWebkitBorderRadius:
    544     case CSSPropertyWebkitBorderStart:
    545     case CSSPropertyWebkitBorderStartColor:
    546     case CSSPropertyWebkitBorderStartStyle:
    547     case CSSPropertyWebkitBorderStartWidth:
    548     case CSSPropertyWebkitBoxAlign:
    549     case CSSPropertyWebkitBoxDecorationBreak:
    550     case CSSPropertyWebkitBoxFlex:
    551     case CSSPropertyWebkitBoxFlexGroup:
    552     case CSSPropertyWebkitBoxLines:
    553     case CSSPropertyWebkitBoxOrdinalGroup:
    554     case CSSPropertyWebkitBoxOrient:
    555     case CSSPropertyWebkitBoxPack:
    556     case CSSPropertyWebkitBoxReflect:
    557     case CSSPropertyWebkitBoxShadow:
    558     case CSSPropertyInternalCallback:
    559     case CSSPropertyWebkitClipPath:
    560     case CSSPropertyWebkitColumnBreakAfter:
    561     case CSSPropertyWebkitColumnBreakBefore:
    562     case CSSPropertyWebkitColumnBreakInside:
    563     case CSSPropertyWebkitColumnCount:
    564     case CSSPropertyColumnFill:
    565     case CSSPropertyWebkitColumnGap:
    566     case CSSPropertyWebkitColumnRule:
    567     case CSSPropertyWebkitColumnRuleColor:
    568     case CSSPropertyWebkitColumnRuleStyle:
    569     case CSSPropertyWebkitColumnRuleWidth:
    570     case CSSPropertyWebkitColumnSpan:
    571     case CSSPropertyWebkitColumnWidth:
    572     case CSSPropertyWebkitColumns:
    573     case CSSPropertyWebkitFilter:
    574     case CSSPropertyFlex:
    575     case CSSPropertyFlexBasis:
    576     case CSSPropertyFlexDirection:
    577     case CSSPropertyFlexFlow:
    578     case CSSPropertyFlexGrow:
    579     case CSSPropertyFlexShrink:
    580     case CSSPropertyFlexWrap:
    581     case CSSPropertyWebkitFontSizeDelta:
    582     case CSSPropertyGridArea:
    583     case CSSPropertyGridAutoColumns:
    584     case CSSPropertyGridAutoFlow:
    585     case CSSPropertyGridAutoRows:
    586     case CSSPropertyGridColumn:
    587     case CSSPropertyGridColumnEnd:
    588     case CSSPropertyGridColumnStart:
    589     case CSSPropertyGrid:
    590     case CSSPropertyGridTemplate:
    591     case CSSPropertyGridTemplateColumns:
    592     case CSSPropertyGridTemplateRows:
    593     case CSSPropertyGridRow:
    594     case CSSPropertyGridRowEnd:
    595     case CSSPropertyGridRowStart:
    596     case CSSPropertyGridTemplateAreas:
    597     case CSSPropertyJustifyContent:
    598     case CSSPropertyWebkitLineClamp:
    599     case CSSPropertyWebkitLogicalHeight:
    600     case CSSPropertyWebkitLogicalWidth:
    601     case CSSPropertyWebkitMarginAfter:
    602     case CSSPropertyWebkitMarginAfterCollapse:
    603     case CSSPropertyWebkitMarginBefore:
    604     case CSSPropertyWebkitMarginBeforeCollapse:
    605     case CSSPropertyWebkitMarginBottomCollapse:
    606     case CSSPropertyWebkitMarginCollapse:
    607     case CSSPropertyWebkitMarginEnd:
    608     case CSSPropertyWebkitMarginStart:
    609     case CSSPropertyWebkitMarginTopCollapse:
    610     case CSSPropertyInternalMarqueeDirection:
    611     case CSSPropertyInternalMarqueeIncrement:
    612     case CSSPropertyInternalMarqueeRepetition:
    613     case CSSPropertyInternalMarqueeSpeed:
    614     case CSSPropertyOrder:
    615     case CSSPropertyInternalMarqueeStyle:
    616     case CSSPropertyWebkitMask:
    617     case CSSPropertyWebkitMaskBoxImage:
    618     case CSSPropertyWebkitMaskBoxImageOutset:
    619     case CSSPropertyWebkitMaskBoxImageRepeat:
    620     case CSSPropertyWebkitMaskBoxImageSlice:
    621     case CSSPropertyWebkitMaskBoxImageSource:
    622     case CSSPropertyWebkitMaskBoxImageWidth:
    623     case CSSPropertyWebkitMaskClip:
    624     case CSSPropertyWebkitMaskComposite:
    625     case CSSPropertyWebkitMaskImage:
    626     case CSSPropertyWebkitMaskOrigin:
    627     case CSSPropertyWebkitMaskPosition:
    628     case CSSPropertyWebkitMaskPositionX:
    629     case CSSPropertyWebkitMaskPositionY:
    630     case CSSPropertyWebkitMaskRepeat:
    631     case CSSPropertyWebkitMaskRepeatX:
    632     case CSSPropertyWebkitMaskRepeatY:
    633     case CSSPropertyWebkitMaskSize:
    634     case CSSPropertyWebkitMaxLogicalWidth:
    635     case CSSPropertyWebkitMaxLogicalHeight:
    636     case CSSPropertyWebkitMinLogicalWidth:
    637     case CSSPropertyWebkitMinLogicalHeight:
    638     case CSSPropertyWebkitPaddingAfter:
    639     case CSSPropertyWebkitPaddingBefore:
    640     case CSSPropertyWebkitPaddingEnd:
    641     case CSSPropertyWebkitPaddingStart:
    642     case CSSPropertyPerspective:
    643     case CSSPropertyWebkitPerspective:
    644     case CSSPropertyPerspectiveOrigin:
    645     case CSSPropertyWebkitPerspectiveOrigin:
    646     case CSSPropertyWebkitPerspectiveOriginX:
    647     case CSSPropertyWebkitPerspectiveOriginY:
    648     case CSSPropertyTransform:
    649     case CSSPropertyWebkitTransform:
    650     case CSSPropertyTransformOrigin:
    651     case CSSPropertyWebkitTransformOrigin:
    652     case CSSPropertyWebkitTransformOriginX:
    653     case CSSPropertyWebkitTransformOriginY:
    654     case CSSPropertyWebkitTransformOriginZ:
    655     case CSSPropertyTransformStyle:
    656     case CSSPropertyWebkitTransformStyle:
    657     case CSSPropertyWebkitTransition:
    658     case CSSPropertyWebkitTransitionDelay:
    659     case CSSPropertyWebkitTransitionDuration:
    660     case CSSPropertyWebkitTransitionProperty:
    661     case CSSPropertyWebkitTransitionTimingFunction:
    662     case CSSPropertyWebkitUserDrag:
    663     case CSSPropertyWebkitWrapFlow:
    664     case CSSPropertyShapeMargin:
    665     case CSSPropertyShapeImageThreshold:
    666     case CSSPropertyShapeOutside:
    667     case CSSPropertyWebkitWrapThrough:
    668     case CSSPropertyWebkitAppRegion:
    669     case CSSPropertyWidth:
    670     case CSSPropertyWillChange:
    671     case CSSPropertyMaxZoom:
    672     case CSSPropertyMinZoom:
    673     case CSSPropertyOrientation:
    674     case CSSPropertyUserZoom:
    675     case CSSPropertyZIndex:
    676     case CSSPropertyZoom:
    677     case CSSPropertyAll:
    678         return false;
    679     case CSSPropertyInvalid:
    680         ASSERT_NOT_REACHED();
    681         return false;
    682     }
    683     ASSERT_NOT_REACHED();
    684     return false;
    685 }
    686 
    687 bool CSSProperty::isAffectedByAllProperty(CSSPropertyID propertyID)
    688 {
    689     if (propertyID == CSSPropertyAll)
    690         return false;
    691 
    692     // all shorthand spec says:
    693     // The all property is a shorthand that resets all CSS properties except
    694     // direction and unicode-bidi. It only accepts the CSS-wide keywords.
    695     // c.f. http://dev.w3.org/csswg/css-cascade/#all-shorthand
    696     // So CSSPropertyUnicodeBidi and CSSPropertyDirection are not
    697     // affected by all property.
    698     return propertyID != CSSPropertyUnicodeBidi && propertyID != CSSPropertyDirection;
    699 }
    700 
    701 } // namespace WebCore
    702