blob: 17ab37b6a490b61e7d9afb191336d32992bff105 [file] [log] [blame]
// Copyright 2014 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "third_party/blink/renderer/core/css/css_property_equality.h"
#include "base/memory/values_equivalent.h"
#include "third_party/blink/renderer/core/animation/css/css_animations.h"
#include "third_party/blink/renderer/core/animation/property_handle.h"
#include "third_party/blink/renderer/core/css/css_property_names.h"
#include "third_party/blink/renderer/core/css/css_value.h"
#include "third_party/blink/renderer/core/style/computed_style.h"
#include "third_party/blink/renderer/core/style/shadow_list.h"
// TODO(ikilpatrick): generate this file.
namespace blink {
namespace {
template <CSSPropertyID property>
bool CounterRulesEqual(const CounterDirectiveMap* a_map,
const CounterDirectiveMap* b_map) {
if (a_map == b_map) {
return true;
}
if (!a_map || !b_map) {
return false;
}
return base::ranges::equal(*a_map, *b_map, [](const auto& a, const auto& b) {
switch (property) {
case CSSPropertyID::kCounterIncrement:
if (a.value.IsIncrement() != b.value.IsIncrement()) {
return false;
}
if (a.value.IsIncrement() &&
a.value.IncrementValue() != b.value.IncrementValue()) {
return false;
}
break;
case CSSPropertyID::kCounterReset:
if (a.value.IsReset() != b.value.IsReset()) {
return false;
}
if (a.value.IsReset() && a.value.ResetValue() != b.value.ResetValue()) {
return false;
}
break;
case CSSPropertyID::kCounterSet:
if (a.value.IsSet() != b.value.IsSet()) {
return false;
}
if (a.value.IsSet() && a.value.SetValue() != b.value.SetValue()) {
return false;
}
break;
default:
NOTREACHED();
return true;
}
return true;
});
}
template <CSSPropertyID property>
bool FillLayersEqual(const FillLayer& a_layers, const FillLayer& b_layers) {
const FillLayer* a_layer = &a_layers;
const FillLayer* b_layer = &b_layers;
while (a_layer && b_layer) {
switch (property) {
case CSSPropertyID::kBackgroundAttachment:
if (a_layer->Attachment() != b_layer->Attachment()) {
return false;
}
break;
case CSSPropertyID::kBackgroundBlendMode:
if (a_layer->GetBlendMode() != b_layer->GetBlendMode()) {
return false;
}
break;
case CSSPropertyID::kBackgroundClip:
case CSSPropertyID::kMaskClip:
if (a_layer->Clip() != b_layer->Clip()) {
return false;
}
break;
case CSSPropertyID::kMaskComposite:
if (a_layer->CompositingOperator() != b_layer->CompositingOperator()) {
return false;
}
break;
case CSSPropertyID::kBackgroundOrigin:
case CSSPropertyID::kMaskOrigin:
if (a_layer->Origin() != b_layer->Origin()) {
return false;
}
break;
case CSSPropertyID::kMaskMode:
if (a_layer->MaskMode() != b_layer->MaskMode()) {
return false;
}
break;
case CSSPropertyID::kBackgroundPositionX:
case CSSPropertyID::kWebkitMaskPositionX:
if (a_layer->PositionX() != b_layer->PositionX()) {
return false;
}
if (a_layer->BackgroundXOrigin() != b_layer->BackgroundXOrigin()) {
return false;
}
break;
case CSSPropertyID::kBackgroundPositionY:
case CSSPropertyID::kWebkitMaskPositionY:
if (a_layer->PositionY() != b_layer->PositionY()) {
return false;
}
if (a_layer->BackgroundYOrigin() != b_layer->BackgroundYOrigin()) {
return false;
}
break;
case CSSPropertyID::kBackgroundRepeat:
case CSSPropertyID::kMaskRepeat:
if (a_layer->Repeat() != b_layer->Repeat()) {
return false;
}
break;
case CSSPropertyID::kBackgroundSize:
case CSSPropertyID::kMaskSize:
if (!(a_layer->SizeLength() == b_layer->SizeLength())) {
return false;
}
break;
case CSSPropertyID::kBackgroundImage:
case CSSPropertyID::kMaskImage:
if (!base::ValuesEquivalent(a_layer->GetImage(), b_layer->GetImage())) {
return false;
}
break;
default:
NOTREACHED();
return true;
}
a_layer = a_layer->Next();
b_layer = b_layer->Next();
}
// FIXME: Shouldn't this be return !aLayer && !bLayer; ?
return true;
}
} // namespace
bool CSSPropertyEquality::PropertiesEqual(const PropertyHandle& property,
const ComputedStyle& a,
const ComputedStyle& b) {
if (property.IsCSSCustomProperty()) {
const AtomicString& name = property.CustomPropertyName();
return base::ValuesEquivalent(a.GetVariableValue(name),
b.GetVariableValue(name));
}
switch (property.GetCSSProperty().PropertyID()) {
case CSSPropertyID::kAlignContent:
return a.AlignContent() == b.AlignContent();
case CSSPropertyID::kAlignItems:
return a.AlignItems() == b.AlignItems();
case CSSPropertyID::kAlignSelf:
return a.AlignSelf() == b.AlignSelf();
case CSSPropertyID::kAlignmentBaseline:
return a.AlignmentBaseline() == b.AlignmentBaseline();
case CSSPropertyID::kPositionAnchor:
return base::ValuesEquivalent(a.PositionAnchor(), b.PositionAnchor());
case CSSPropertyID::kAnchorName:
return base::ValuesEquivalent(a.AnchorName(), b.AnchorName());
case CSSPropertyID::kAppearance:
return a.Appearance() == b.Appearance();
case CSSPropertyID::kAppRegion:
return a.DraggableRegionMode() == b.DraggableRegionMode();
case CSSPropertyID::kBackfaceVisibility:
return a.BackfaceVisibility() == b.BackfaceVisibility();
case CSSPropertyID::kBackgroundAttachment:
return FillLayersEqual<CSSPropertyID::kBackgroundAttachment>(
a.BackgroundLayers(), b.BackgroundLayers());
case CSSPropertyID::kBackgroundBlendMode:
return FillLayersEqual<CSSPropertyID::kBackgroundBlendMode>(
a.BackgroundLayers(), b.BackgroundLayers());
case CSSPropertyID::kBackgroundClip:
return FillLayersEqual<CSSPropertyID::kBackgroundClip>(
a.BackgroundLayers(), b.BackgroundLayers());
case CSSPropertyID::kBackgroundColor:
return a.BackgroundColor() == b.BackgroundColor() &&
a.InternalVisitedBackgroundColor() ==
b.InternalVisitedBackgroundColor();
case CSSPropertyID::kBackgroundImage:
return FillLayersEqual<CSSPropertyID::kBackgroundImage>(
a.BackgroundLayers(), b.BackgroundLayers());
case CSSPropertyID::kBackgroundOrigin:
return FillLayersEqual<CSSPropertyID::kBackgroundOrigin>(
a.BackgroundLayers(), b.BackgroundLayers());
case CSSPropertyID::kBackgroundPositionX:
return FillLayersEqual<CSSPropertyID::kBackgroundPositionX>(
a.BackgroundLayers(), b.BackgroundLayers());
case CSSPropertyID::kBackgroundPositionY:
return FillLayersEqual<CSSPropertyID::kBackgroundPositionY>(
a.BackgroundLayers(), b.BackgroundLayers());
case CSSPropertyID::kBackgroundRepeat:
return FillLayersEqual<CSSPropertyID::kBackgroundRepeat>(
a.BackgroundLayers(), b.BackgroundLayers());
case CSSPropertyID::kBackgroundSize:
return FillLayersEqual<CSSPropertyID::kBackgroundSize>(
a.BackgroundLayers(), b.BackgroundLayers());
case CSSPropertyID::kBaselineShift:
return a.BaselineShift() == b.BaselineShift();
case CSSPropertyID::kBaselineSource:
return a.BaselineSource() == b.BaselineSource();
case CSSPropertyID::kBorderBottomColor:
return a.BorderBottomColor() == b.BorderBottomColor() &&
a.InternalVisitedBorderBottomColor() ==
b.InternalVisitedBorderBottomColor();
case CSSPropertyID::kBorderBottomLeftRadius:
return a.BorderBottomLeftRadius() == b.BorderBottomLeftRadius();
case CSSPropertyID::kBorderBottomRightRadius:
return a.BorderBottomRightRadius() == b.BorderBottomRightRadius();
case CSSPropertyID::kBorderBottomStyle:
return a.BorderBottomStyle() == b.BorderBottomStyle();
case CSSPropertyID::kBorderBottomWidth:
return a.BorderBottomWidth() == b.BorderBottomWidth();
case CSSPropertyID::kBorderCollapse:
return a.BorderCollapse() == b.BorderCollapse();
case CSSPropertyID::kBorderImageOutset:
return a.BorderImageOutset() == b.BorderImageOutset();
case CSSPropertyID::kBorderImageRepeat:
return (a.BorderImage().HorizontalRule() ==
b.BorderImage().HorizontalRule()) &&
(a.BorderImage().VerticalRule() == b.BorderImage().VerticalRule());
case CSSPropertyID::kBorderImageSlice:
return a.BorderImageSlices() == b.BorderImageSlices();
case CSSPropertyID::kBorderImageSource:
return base::ValuesEquivalent(a.BorderImageSource(),
b.BorderImageSource());
case CSSPropertyID::kBorderImageWidth:
return a.BorderImageWidth() == b.BorderImageWidth();
case CSSPropertyID::kBorderLeftColor:
return a.BorderLeftColor() == b.BorderLeftColor() &&
a.InternalVisitedBorderLeftColor() ==
b.InternalVisitedBorderLeftColor();
case CSSPropertyID::kBorderLeftStyle:
return a.BorderLeftStyle() == b.BorderLeftStyle();
case CSSPropertyID::kBorderLeftWidth:
return a.BorderLeftWidth() == b.BorderLeftWidth();
case CSSPropertyID::kBorderRightColor:
return a.BorderRightColor() == b.BorderRightColor() &&
a.InternalVisitedBorderRightColor() ==
b.InternalVisitedBorderRightColor();
case CSSPropertyID::kBorderRightStyle:
return a.BorderRightStyle() == b.BorderRightStyle();
case CSSPropertyID::kBorderRightWidth:
return a.BorderRightWidth() == b.BorderRightWidth();
case CSSPropertyID::kBorderTopColor:
return a.BorderTopColor() == b.BorderTopColor() &&
a.InternalVisitedBorderTopColor() ==
b.InternalVisitedBorderTopColor();
case CSSPropertyID::kBorderTopLeftRadius:
return a.BorderTopLeftRadius() == b.BorderTopLeftRadius();
case CSSPropertyID::kBorderTopRightRadius:
return a.BorderTopRightRadius() == b.BorderTopRightRadius();
case CSSPropertyID::kBorderTopStyle:
return a.BorderTopStyle() == b.BorderTopStyle();
case CSSPropertyID::kBorderTopWidth:
return a.BorderTopWidth() == b.BorderTopWidth();
case CSSPropertyID::kBottom:
return a.Bottom() == b.Bottom();
case CSSPropertyID::kBoxShadow:
return base::ValuesEquivalent(a.BoxShadow(), b.BoxShadow());
case CSSPropertyID::kBoxSizing:
return a.BoxSizing() == b.BoxSizing();
case CSSPropertyID::kBreakAfter:
return a.BreakAfter() == b.BreakAfter();
case CSSPropertyID::kBreakBefore:
return a.BreakBefore() == b.BreakBefore();
case CSSPropertyID::kBreakInside:
return a.BreakInside() == b.BreakInside();
case CSSPropertyID::kBufferedRendering:
return a.BufferedRendering() == b.BufferedRendering();
case CSSPropertyID::kCaptionSide:
return a.CaptionSide() == b.CaptionSide();
case CSSPropertyID::kCaretColor:
return a.CaretColor() == b.CaretColor() &&
a.InternalVisitedCaretColor() == b.InternalVisitedCaretColor();
case CSSPropertyID::kClear:
return a.Clear() == b.Clear();
case CSSPropertyID::kClip:
return a.Clip() == b.Clip();
case CSSPropertyID::kClipRule:
return a.ClipRule() == b.ClipRule();
case CSSPropertyID::kColor:
return a.Color() == b.Color() &&
a.InternalVisitedColor() == b.InternalVisitedColor();
case CSSPropertyID::kColorInterpolation:
return a.ColorInterpolation() == b.ColorInterpolation();
case CSSPropertyID::kColorInterpolationFilters:
return a.ColorInterpolationFilters() == b.ColorInterpolationFilters();
case CSSPropertyID::kColorRendering:
return a.ColorRendering() == b.ColorRendering();
case CSSPropertyID::kColorScheme:
return a.ColorScheme() == b.ColorScheme();
case CSSPropertyID::kColumnFill:
return a.GetColumnFill() == b.GetColumnFill();
case CSSPropertyID::kColumnRuleStyle:
return a.ColumnRuleStyle() == b.ColumnRuleStyle();
case CSSPropertyID::kColumnSpan:
return a.GetColumnSpan() == b.GetColumnSpan();
case CSSPropertyID::kContent:
return base::ValuesEquivalent(a.GetContentData(), b.GetContentData());
case CSSPropertyID::kCounterIncrement:
return CounterRulesEqual<CSSPropertyID::kCounterIncrement>(
a.GetCounterDirectives(), b.GetCounterDirectives());
case CSSPropertyID::kCounterReset:
return CounterRulesEqual<CSSPropertyID::kCounterReset>(
a.GetCounterDirectives(), b.GetCounterDirectives());
case CSSPropertyID::kCounterSet:
return CounterRulesEqual<CSSPropertyID::kCounterSet>(
a.GetCounterDirectives(), b.GetCounterDirectives());
case CSSPropertyID::kCursor:
return a.Cursor() == b.Cursor();
case CSSPropertyID::kDisplay:
return a.Display() == b.Display();
case CSSPropertyID::kContentVisibility:
return a.ContentVisibility() == b.ContentVisibility();
case CSSPropertyID::kDominantBaseline:
return a.DominantBaseline() == b.DominantBaseline();
case CSSPropertyID::kDynamicRangeLimit:
return a.GetDynamicRangeLimit() == b.GetDynamicRangeLimit();
case CSSPropertyID::kEmptyCells:
return a.EmptyCells() == b.EmptyCells();
case CSSPropertyID::kFill:
return a.FillPaint().EqualTypeOrColor(b.FillPaint()) &&
a.InternalVisitedFillPaint().EqualTypeOrColor(
b.InternalVisitedFillPaint());
case CSSPropertyID::kFillRule:
return a.FillRule() == b.FillRule();
case CSSPropertyID::kFlexDirection:
return a.FlexDirection() == b.FlexDirection();
case CSSPropertyID::kFillOpacity:
return a.FillOpacity() == b.FillOpacity();
case CSSPropertyID::kFlexBasis:
return a.FlexBasis() == b.FlexBasis();
case CSSPropertyID::kFlexGrow:
return a.FlexGrow() == b.FlexGrow();
case CSSPropertyID::kFlexShrink:
return a.FlexShrink() == b.FlexShrink();
case CSSPropertyID::kFlexWrap:
return a.FlexWrap() == b.FlexWrap();
case CSSPropertyID::kFloat:
return a.Floating() == b.Floating();
case CSSPropertyID::kFloodColor:
return a.FloodColor() == b.FloodColor();
case CSSPropertyID::kFloodOpacity:
return a.FloodOpacity() == b.FloodOpacity();
case CSSPropertyID::kFontFamily:
return a.GetFontDescription().Family() == b.GetFontDescription().Family();
case CSSPropertyID::kFontKerning:
return a.GetFontDescription().GetKerning() ==
b.GetFontDescription().GetKerning();
case CSSPropertyID::kFontOpticalSizing:
return a.GetFontDescription().FontOpticalSizing() ==
b.GetFontDescription().FontOpticalSizing();
case CSSPropertyID::kFontPalette:
return base::ValuesEquivalent(a.GetFontPalette(), b.GetFontPalette());
case CSSPropertyID::kFontFeatureSettings:
return a.GetFontDescription().FeatureSettings() ==
b.GetFontDescription().FeatureSettings();
case CSSPropertyID::kFontSize:
// CSSPropertyID::kFontSize: Must pass a specified size to setFontSize if
// Text Autosizing is enabled, but a computed size if text zoom is enabled
// (if neither is enabled it's irrelevant as they're probably the same).
// FIXME: Should we introduce an option to pass the computed font size
// here, allowing consumers to enable text zoom rather than Text
// Autosizing? See http://crbug.com/227545.
return a.SpecifiedFontSize() == b.SpecifiedFontSize();
case CSSPropertyID::kFontSizeAdjust:
return a.FontSizeAdjust() == b.FontSizeAdjust();
case CSSPropertyID::kFontStretch:
return a.GetFontStretch() == b.GetFontStretch();
case CSSPropertyID::kFontStyle:
return a.GetFontStyle() == b.GetFontStyle();
case CSSPropertyID::kFontSynthesisSmallCaps:
return a.GetFontDescription().GetFontSynthesisSmallCaps() ==
b.GetFontDescription().GetFontSynthesisSmallCaps();
case CSSPropertyID::kFontSynthesisStyle:
return a.GetFontDescription().GetFontSynthesisStyle() ==
b.GetFontDescription().GetFontSynthesisStyle();
case CSSPropertyID::kFontSynthesisWeight:
return a.GetFontDescription().GetFontSynthesisWeight() ==
b.GetFontDescription().GetFontSynthesisWeight();
case CSSPropertyID::kFontVariantAlternates:
return a.GetFontDescription().GetFontVariantAlternates() ==
b.GetFontDescription().GetFontVariantAlternates();
case CSSPropertyID::kFontVariantCaps:
return a.GetFontDescription().VariantCaps() ==
b.GetFontDescription().VariantCaps();
case CSSPropertyID::kFontVariantEastAsian:
return a.GetFontDescription().VariantEastAsian() ==
b.GetFontDescription().VariantEastAsian();
case CSSPropertyID::kFontVariantLigatures:
return a.GetFontDescription().GetVariantLigatures() ==
b.GetFontDescription().GetVariantLigatures();
case CSSPropertyID::kFontVariantNumeric:
return a.GetFontDescription().VariantNumeric() ==
b.GetFontDescription().VariantNumeric();
case CSSPropertyID::kFontVariantPosition:
return a.GetFontDescription().VariantPosition() ==
b.GetFontDescription().VariantPosition();
case CSSPropertyID::kFontVariationSettings:
return base::ValuesEquivalent(a.GetFontDescription().VariationSettings(),
b.GetFontDescription().VariationSettings());
case CSSPropertyID::kFontWeight:
return a.GetFontWeight() == b.GetFontWeight();
case CSSPropertyID::kForcedColorAdjust:
return a.ForcedColorAdjust() == b.ForcedColorAdjust();
case CSSPropertyID::kFieldSizing:
return a.FieldSizing() == b.FieldSizing();
case CSSPropertyID::kGridAutoColumns:
return a.GridAutoColumns() == b.GridAutoColumns();
case CSSPropertyID::kGridAutoFlow:
return a.GetGridAutoFlow() == b.GetGridAutoFlow();
case CSSPropertyID::kGridAutoRows:
return a.GridAutoRows() == b.GridAutoRows();
case CSSPropertyID::kGridColumnEnd:
return a.GridColumnEnd() == b.GridColumnEnd();
case CSSPropertyID::kGridColumnStart:
return a.GridColumnStart() == b.GridColumnStart();
case CSSPropertyID::kGridRowEnd:
return a.GridRowEnd() == b.GridRowEnd();
case CSSPropertyID::kGridRowStart:
return a.GridRowStart() == b.GridRowStart();
case CSSPropertyID::kGridTemplateAreas:
return base::ValuesEquivalent(a.GridTemplateAreas(),
b.GridTemplateAreas());
case CSSPropertyID::kGridTemplateColumns:
return a.GridTemplateColumns() == b.GridTemplateColumns();
case CSSPropertyID::kGridTemplateRows:
return a.GridTemplateRows() == b.GridTemplateRows();
case CSSPropertyID::kHeight:
return a.Height() == b.Height();
case CSSPropertyID::kPopoverShowDelay:
return a.PopoverShowDelay() == b.PopoverShowDelay();
case CSSPropertyID::kPopoverHideDelay:
return a.PopoverHideDelay() == b.PopoverHideDelay();
case CSSPropertyID::kHyphenateCharacter:
return a.HyphenationString() == b.HyphenationString();
case CSSPropertyID::kHyphenateLimitChars:
return a.HyphenateLimitChars() == b.HyphenateLimitChars();
case CSSPropertyID::kHyphens:
return a.GetHyphens() == b.GetHyphens();
case CSSPropertyID::kImageOrientation:
return a.ImageOrientation() == b.ImageOrientation();
case CSSPropertyID::kImageRendering:
return a.ImageRendering() == b.ImageRendering();
case CSSPropertyID::kInitialLetter:
return a.InitialLetter() == b.InitialLetter();
case CSSPropertyID::kInsetArea:
return a.GetInsetArea() == b.GetInsetArea();
case CSSPropertyID::kIsolation:
return a.Isolation() == b.Isolation();
case CSSPropertyID::kJustifyContent:
return a.JustifyContent() == b.JustifyContent();
case CSSPropertyID::kJustifyItems:
return a.JustifyItems() == b.JustifyItems();
case CSSPropertyID::kJustifySelf:
return a.JustifySelf() == b.JustifySelf();
case CSSPropertyID::kLeft:
return a.Left() == b.Left();
case CSSPropertyID::kLetterSpacing:
return a.LetterSpacing() == b.LetterSpacing();
case CSSPropertyID::kLightingColor:
return a.LightingColor() == b.LightingColor();
case CSSPropertyID::kLineBreak:
return a.GetLineBreak() == b.GetLineBreak();
case CSSPropertyID::kLineClamp:
return a.StandardLineClamp() == b.StandardLineClamp();
case CSSPropertyID::kLineHeight:
return a.SpecifiedLineHeight() == b.SpecifiedLineHeight();
case CSSPropertyID::kTabSize:
return a.GetTabSize() == b.GetTabSize();
case CSSPropertyID::kListStyleImage:
return base::ValuesEquivalent(a.ListStyleImage(), b.ListStyleImage());
case CSSPropertyID::kListStylePosition:
return a.ListStylePosition() == b.ListStylePosition();
case CSSPropertyID::kListStyleType:
return a.ListStyleType() == b.ListStyleType();
case CSSPropertyID::kMarginBottom:
return a.MarginBottom() == b.MarginBottom();
case CSSPropertyID::kMarginLeft:
return a.MarginLeft() == b.MarginLeft();
case CSSPropertyID::kMarginRight:
return a.MarginRight() == b.MarginRight();
case CSSPropertyID::kMarginTop:
return a.MarginTop() == b.MarginTop();
case CSSPropertyID::kMarkerEnd:
return a.MarkerEndResource() == b.MarkerEndResource();
case CSSPropertyID::kMarkerMid:
return a.MarkerMidResource() == b.MarkerMidResource();
case CSSPropertyID::kMarkerStart:
return a.MarkerStartResource() == b.MarkerStartResource();
case CSSPropertyID::kMaskType:
return a.MaskType() == b.MaskType();
case CSSPropertyID::kMathShift:
return a.MathShift() == b.MathShift();
case CSSPropertyID::kMathStyle:
return a.MathStyle() == b.MathStyle();
case CSSPropertyID::kMaxHeight:
return a.MaxHeight() == b.MaxHeight();
case CSSPropertyID::kMaxWidth:
return a.MaxWidth() == b.MaxWidth();
case CSSPropertyID::kMinHeight:
return a.MinHeight() == b.MinHeight();
case CSSPropertyID::kMinWidth:
return a.MinWidth() == b.MinWidth();
case CSSPropertyID::kMixBlendMode:
return a.GetBlendMode() == b.GetBlendMode();
case CSSPropertyID::kObjectFit:
return a.GetObjectFit() == b.GetObjectFit();
case CSSPropertyID::kObjectPosition:
return a.ObjectPosition() == b.ObjectPosition();
case CSSPropertyID::kObjectViewBox:
return base::ValuesEquivalent(a.ObjectViewBox(), b.ObjectViewBox());
case CSSPropertyID::kOffsetAnchor:
return a.OffsetAnchor() == b.OffsetAnchor();
case CSSPropertyID::kOffsetDistance:
return a.OffsetDistance() == b.OffsetDistance();
case CSSPropertyID::kOffsetPath:
return base::ValuesEquivalent(a.OffsetPath(), b.OffsetPath());
case CSSPropertyID::kOffsetPosition:
return a.OffsetPosition() == b.OffsetPosition();
case CSSPropertyID::kOffsetRotate:
return a.OffsetRotate() == b.OffsetRotate();
case CSSPropertyID::kOpacity:
return a.Opacity() == b.Opacity();
case CSSPropertyID::kOrder:
return a.Order() == b.Order();
case CSSPropertyID::kOriginTrialTestProperty:
return a.OriginTrialTestProperty() == b.OriginTrialTestProperty();
case CSSPropertyID::kOrphans:
return a.Orphans() == b.Orphans();
case CSSPropertyID::kOutlineColor:
return a.OutlineColor() == b.OutlineColor() &&
a.InternalVisitedOutlineColor() == b.InternalVisitedOutlineColor();
case CSSPropertyID::kOutlineOffset:
return a.OutlineOffset() == b.OutlineOffset();
case CSSPropertyID::kOutlineStyle:
return a.OutlineStyle() == b.OutlineStyle();
case CSSPropertyID::kOutlineWidth:
return a.OutlineWidth() == b.OutlineWidth();
case CSSPropertyID::kOverflowAnchor:
return a.OverflowAnchor() == b.OverflowAnchor();
case CSSPropertyID::kOverflowClipMargin:
return a.OverflowClipMargin() == b.OverflowClipMargin();
case CSSPropertyID::kOverflowWrap:
return a.OverflowWrap() == b.OverflowWrap();
case CSSPropertyID::kOverflowX:
return a.OverflowX() == b.OverflowX();
case CSSPropertyID::kOverflowY:
return a.OverflowY() == b.OverflowY();
case CSSPropertyID::kOverscrollBehaviorX:
return a.OverscrollBehaviorX() == b.OverscrollBehaviorX();
case CSSPropertyID::kOverscrollBehaviorY:
return a.OverscrollBehaviorY() == b.OverscrollBehaviorY();
case CSSPropertyID::kPaddingBottom:
return a.PaddingBottom() == b.PaddingBottom();
case CSSPropertyID::kPaddingLeft:
return a.PaddingLeft() == b.PaddingLeft();
case CSSPropertyID::kPaddingRight:
return a.PaddingRight() == b.PaddingRight();
case CSSPropertyID::kPaddingTop:
return a.PaddingTop() == b.PaddingTop();
case CSSPropertyID::kPage:
return a.Page() == b.Page();
case CSSPropertyID::kPageOrientation:
return a.GetPageOrientation() == b.GetPageOrientation();
case CSSPropertyID::kPaintOrder:
return a.PaintOrder() == b.PaintOrder();
case CSSPropertyID::kPointerEvents:
return a.PointerEvents() == b.PointerEvents();
case CSSPropertyID::kPosition:
return a.GetPosition() == b.GetPosition();
case CSSPropertyID::kQuotes:
return a.Quotes() == b.Quotes();
case CSSPropertyID::kReadingOrderItems:
return a.ReadingOrderItems() == b.ReadingOrderItems();
case CSSPropertyID::kResize:
return a.Resize() == b.Resize();
case CSSPropertyID::kRight:
return a.Right() == b.Right();
case CSSPropertyID::kRubyPosition:
return a.GetRubyPosition() == b.GetRubyPosition();
case CSSPropertyID::kScrollbarColor:
return a.ScrollbarColor() == b.ScrollbarColor();
case CSSPropertyID::kScrollbarGutter:
return a.ScrollbarGutter() == b.ScrollbarGutter();
case CSSPropertyID::kScrollbarWidth:
return a.ScrollbarWidth() == b.ScrollbarWidth();
case CSSPropertyID::kScrollBehavior:
return a.GetScrollBehavior() == b.GetScrollBehavior();
case CSSPropertyID::kScrollMarginBottom:
return a.ScrollMarginBottom() == b.ScrollMarginBottom();
case CSSPropertyID::kScrollMarginLeft:
return a.ScrollMarginLeft() == b.ScrollMarginLeft();
case CSSPropertyID::kScrollMarginRight:
return a.ScrollMarginRight() == b.ScrollMarginRight();
case CSSPropertyID::kScrollMarginTop:
return a.ScrollMarginTop() == b.ScrollMarginTop();
case CSSPropertyID::kScrollPaddingBottom:
return a.ScrollPaddingBottom() == b.ScrollPaddingBottom();
case CSSPropertyID::kScrollPaddingLeft:
return a.ScrollPaddingLeft() == b.ScrollPaddingLeft();
case CSSPropertyID::kScrollPaddingRight:
return a.ScrollPaddingRight() == b.ScrollPaddingRight();
case CSSPropertyID::kScrollPaddingTop:
return a.ScrollPaddingTop() == b.ScrollPaddingTop();
case CSSPropertyID::kScrollSnapAlign:
return a.GetScrollSnapAlign() == b.GetScrollSnapAlign();
case CSSPropertyID::kScrollSnapStop:
return a.ScrollSnapStop() == b.ScrollSnapStop();
case CSSPropertyID::kScrollSnapType:
return a.GetScrollSnapType() == b.GetScrollSnapType();
case CSSPropertyID::kScrollStartX:
return a.ScrollStartX() == b.ScrollStartX();
case CSSPropertyID::kScrollStartY:
return a.ScrollStartY() == b.ScrollStartY();
case CSSPropertyID::kScrollStartTargetX:
return a.ScrollStartTargetX() == b.ScrollStartTargetX();
case CSSPropertyID::kScrollStartTargetY:
return a.ScrollStartTargetY() == b.ScrollStartTargetY();
case CSSPropertyID::kShapeImageThreshold:
return a.ShapeImageThreshold() == b.ShapeImageThreshold();
case CSSPropertyID::kShapeMargin:
return a.ShapeMargin() == b.ShapeMargin();
case CSSPropertyID::kShapeOutside:
return base::ValuesEquivalent(a.ShapeOutside(), b.ShapeOutside());
case CSSPropertyID::kShapeRendering:
return a.ShapeRendering() == b.ShapeRendering();
case CSSPropertyID::kSizeAdjust:
return a.GetFontDescription().SizeAdjust() ==
b.GetFontDescription().SizeAdjust();
case CSSPropertyID::kSpeak:
return a.Speak() == b.Speak();
case CSSPropertyID::kStopColor:
return a.StopColor() == b.StopColor();
case CSSPropertyID::kStopOpacity:
return a.StopOpacity() == b.StopOpacity();
case CSSPropertyID::kStroke:
return a.StrokePaint().EqualTypeOrColor(b.StrokePaint()) &&
a.InternalVisitedStrokePaint().EqualTypeOrColor(
b.InternalVisitedStrokePaint());
case CSSPropertyID::kStrokeDasharray:
return a.StrokeDashArray() == b.StrokeDashArray();
case CSSPropertyID::kStrokeDashoffset:
return a.StrokeDashOffset() == b.StrokeDashOffset();
case CSSPropertyID::kStrokeLinecap:
return a.CapStyle() == b.CapStyle();
case CSSPropertyID::kStrokeLinejoin:
return a.JoinStyle() == b.JoinStyle();
case CSSPropertyID::kStrokeMiterlimit:
return a.StrokeMiterLimit() == b.StrokeMiterLimit();
case CSSPropertyID::kStrokeOpacity:
return a.StrokeOpacity() == b.StrokeOpacity();
case CSSPropertyID::kStrokeWidth:
return a.StrokeWidth() == b.StrokeWidth();
case CSSPropertyID::kTableLayout:
return a.TableLayout() == b.TableLayout();
case CSSPropertyID::kTextAlign:
return a.GetTextAlign() == b.GetTextAlign();
case CSSPropertyID::kTextAlignLast:
return a.TextAlignLast() == b.TextAlignLast();
case CSSPropertyID::kTextAnchor:
return a.TextAnchor() == b.TextAnchor();
case CSSPropertyID::kTextAutospace:
return a.TextAutospace() == b.TextAutospace();
case blink::CSSPropertyID::kTextBoxEdge:
return a.GetTextBoxEdge() == b.GetTextBoxEdge();
case blink::CSSPropertyID::kTextBoxTrim:
return a.TextBoxTrim() == b.TextBoxTrim();
case CSSPropertyID::kTextDecorationColor:
return a.TextDecorationColor() == b.TextDecorationColor() &&
a.InternalVisitedTextDecorationColor() ==
b.InternalVisitedTextDecorationColor();
case CSSPropertyID::kTextDecorationLine:
return a.GetTextDecorationLine() == b.GetTextDecorationLine();
case CSSPropertyID::kTextDecorationSkipInk:
return a.TextDecorationSkipInk() == b.TextDecorationSkipInk();
case CSSPropertyID::kTextDecorationStyle:
return a.TextDecorationStyle() == b.TextDecorationStyle();
case CSSPropertyID::kTextDecorationThickness:
return a.GetTextDecorationThickness() == b.GetTextDecorationThickness();
case CSSPropertyID::kTextEmphasisPosition:
return a.GetTextEmphasisPosition() == b.GetTextEmphasisPosition();
case CSSPropertyID::kTextEmphasisStyle:
return (a.GetTextEmphasisFill() == b.GetTextEmphasisFill()) &&
(a.GetTextEmphasisMark() == b.GetTextEmphasisMark()) &&
(a.TextEmphasisCustomMark() == b.TextEmphasisCustomMark());
case CSSPropertyID::kTextIndent:
return a.TextIndent() == b.TextIndent();
case CSSPropertyID::kTextOverflow:
return a.TextOverflow() == b.TextOverflow();
case CSSPropertyID::kTextRendering:
return a.GetFontDescription().TextRendering() ==
b.GetFontDescription().TextRendering();
case CSSPropertyID::kTextShadow:
return base::ValuesEquivalent(a.TextShadow(), b.TextShadow());
case CSSPropertyID::kTextSizeAdjust:
return a.GetTextSizeAdjust() == b.GetTextSizeAdjust();
case CSSPropertyID::kTextSpacingTrim:
return a.GetFontDescription().GetTextSpacingTrim() ==
b.GetFontDescription().GetTextSpacingTrim();
case CSSPropertyID::kTextTransform:
return a.TextTransform() == b.TextTransform();
case CSSPropertyID::kTextUnderlineOffset:
return a.TextUnderlineOffset() == b.TextUnderlineOffset();
case CSSPropertyID::kTextUnderlinePosition:
return a.GetTextUnderlinePosition() == b.GetTextUnderlinePosition();
case CSSPropertyID::kTextWrap:
return a.GetTextWrap() == b.GetTextWrap();
case CSSPropertyID::kTop:
return a.Top() == b.Top();
case CSSPropertyID::kOverlay:
return a.Overlay() == b.Overlay();
case CSSPropertyID::kTouchAction:
return a.GetTouchAction() == b.GetTouchAction();
case CSSPropertyID::kTransformBox:
return a.TransformBox() == b.TransformBox();
case CSSPropertyID::kTransformStyle:
return a.TransformStyle3D() == b.TransformStyle3D();
case CSSPropertyID::kUserSelect:
return a.UserSelect() == b.UserSelect();
case CSSPropertyID::kVectorEffect:
return a.VectorEffect() == b.VectorEffect();
case CSSPropertyID::kVerticalAlign:
return a.VerticalAlign() == b.VerticalAlign() &&
(a.VerticalAlign() != EVerticalAlign::kLength ||
a.GetVerticalAlignLength() == b.GetVerticalAlignLength());
case CSSPropertyID::kViewTransitionClass:
return a.ViewTransitionClass() == b.ViewTransitionClass();
case CSSPropertyID::kViewTransitionName:
return a.ViewTransitionName() == b.ViewTransitionName();
case CSSPropertyID::kVisibility:
return a.Visibility() == b.Visibility();
case CSSPropertyID::kWebkitBorderHorizontalSpacing:
return a.HorizontalBorderSpacing() == b.HorizontalBorderSpacing();
case CSSPropertyID::kWebkitBorderVerticalSpacing:
return a.VerticalBorderSpacing() == b.VerticalBorderSpacing();
case CSSPropertyID::kClipPath:
return base::ValuesEquivalent(a.ClipPath(), b.ClipPath());
case CSSPropertyID::kColumnCount:
return a.ColumnCount() == b.ColumnCount();
case CSSPropertyID::kColumnGap:
return a.ColumnGap() == b.ColumnGap();
case CSSPropertyID::kRowGap:
return a.RowGap() == b.RowGap();
case CSSPropertyID::kColumnRuleColor:
return a.ColumnRuleColor() == b.ColumnRuleColor() &&
a.InternalVisitedColumnRuleColor() ==
b.InternalVisitedColumnRuleColor();
case CSSPropertyID::kColumnRuleWidth:
return a.ColumnRuleWidth() == b.ColumnRuleWidth();
case CSSPropertyID::kColumnWidth:
return a.ColumnWidth() == b.ColumnWidth();
case CSSPropertyID::kFilter:
return a.Filter() == b.Filter();
case CSSPropertyID::kBackdropFilter:
return a.BackdropFilter() == b.BackdropFilter();
case CSSPropertyID::kWebkitFontSmoothing:
return a.GetFontDescription().FontSmoothing() ==
b.GetFontDescription().FontSmoothing();
case CSSPropertyID::kWebkitLineClamp:
return a.WebkitLineClamp() == b.WebkitLineClamp();
case CSSPropertyID::kWebkitLocale:
return a.Locale() == b.Locale();
case CSSPropertyID::kWebkitMaskBoxImageOutset:
return a.MaskBoxImageOutset() == b.MaskBoxImageOutset();
case CSSPropertyID::kWebkitMaskBoxImageSlice:
return a.MaskBoxImageSlices() == b.MaskBoxImageSlices();
case CSSPropertyID::kWebkitMaskBoxImageSource:
return base::ValuesEquivalent(a.MaskBoxImageSource(),
b.MaskBoxImageSource());
case CSSPropertyID::kWebkitMaskBoxImageWidth:
return a.MaskBoxImageWidth() == b.MaskBoxImageWidth();
case CSSPropertyID::kMaskClip:
return FillLayersEqual<CSSPropertyID::kMaskClip>(a.MaskLayers(),
b.MaskLayers());
case CSSPropertyID::kMaskComposite:
return FillLayersEqual<CSSPropertyID::kMaskComposite>(a.MaskLayers(),
b.MaskLayers());
case CSSPropertyID::kMaskImage:
return FillLayersEqual<CSSPropertyID::kMaskImage>(a.MaskLayers(),
b.MaskLayers());
case CSSPropertyID::kMaskOrigin:
return FillLayersEqual<CSSPropertyID::kMaskOrigin>(a.MaskLayers(),
b.MaskLayers());
case CSSPropertyID::kMaskMode:
return FillLayersEqual<CSSPropertyID::kMaskMode>(a.MaskLayers(),
b.MaskLayers());
case CSSPropertyID::kWebkitMaskPositionX:
return FillLayersEqual<CSSPropertyID::kWebkitMaskPositionX>(
a.MaskLayers(), b.MaskLayers());
case CSSPropertyID::kWebkitMaskPositionY:
return FillLayersEqual<CSSPropertyID::kWebkitMaskPositionY>(
a.MaskLayers(), b.MaskLayers());
case CSSPropertyID::kMaskRepeat:
return FillLayersEqual<CSSPropertyID::kMaskRepeat>(a.MaskLayers(),
b.MaskLayers());
case CSSPropertyID::kMaskSize:
return FillLayersEqual<CSSPropertyID::kMaskSize>(a.MaskLayers(),
b.MaskLayers());
case CSSPropertyID::kWebkitTextFillColor:
return a.TextFillColor() == b.TextFillColor();
case CSSPropertyID::kWebkitTextOrientation:
return a.GetTextOrientation() == b.GetTextOrientation();
case CSSPropertyID::kPerspective:
return a.Perspective() == b.Perspective();
case CSSPropertyID::kPerspectiveOrigin:
return a.PerspectiveOrigin() == b.PerspectiveOrigin();
case CSSPropertyID::kWebkitTextStrokeColor:
return a.TextStrokeColor() == b.TextStrokeColor() &&
a.InternalVisitedTextStrokeColor() ==
b.InternalVisitedTextStrokeColor();
case CSSPropertyID::kWebkitTextStrokeWidth:
return a.TextStrokeWidth() == b.TextStrokeWidth();
case CSSPropertyID::kTransform:
return a.Transform() == b.Transform();
case CSSPropertyID::kTranslate:
return base::ValuesEquivalent<TransformOperation>(a.Translate(),
b.Translate());
case CSSPropertyID::kRotate:
return base::ValuesEquivalent<TransformOperation>(a.Rotate(), b.Rotate());
case CSSPropertyID::kScale:
return base::ValuesEquivalent<TransformOperation>(a.Scale(), b.Scale());
case CSSPropertyID::kSize:
return a.GetPageSizeType() == b.GetPageSizeType() &&
a.PageSize() == b.PageSize();
case CSSPropertyID::kTransformOrigin:
return a.GetTransformOrigin() == b.GetTransformOrigin();
case CSSPropertyID::kWebkitPerspectiveOriginX:
return a.PerspectiveOrigin().X() == b.PerspectiveOrigin().X();
case CSSPropertyID::kWebkitPerspectiveOriginY:
return a.PerspectiveOrigin().Y() == b.PerspectiveOrigin().Y();
case CSSPropertyID::kWebkitTransformOriginX:
return a.GetTransformOrigin().X() == b.GetTransformOrigin().X();
case CSSPropertyID::kWebkitTransformOriginY:
return a.GetTransformOrigin().Y() == b.GetTransformOrigin().Y();
case CSSPropertyID::kWebkitTransformOriginZ:
return a.GetTransformOrigin().Z() == b.GetTransformOrigin().Z();
case CSSPropertyID::kWhiteSpaceCollapse:
return a.GetWhiteSpaceCollapse() == b.GetWhiteSpaceCollapse();
case CSSPropertyID::kWidows:
return a.Widows() == b.Widows();
case CSSPropertyID::kWidth:
return a.Width() == b.Width();
case CSSPropertyID::kWordBreak:
return a.WordBreak() == b.WordBreak();
case CSSPropertyID::kWordSpacing:
return a.WordSpacing() == b.WordSpacing();
case CSSPropertyID::kD:
return base::ValuesEquivalent(a.D(), b.D());
case CSSPropertyID::kCx:
return a.Cx() == b.Cx();
case CSSPropertyID::kCy:
return a.Cy() == b.Cy();
case CSSPropertyID::kX:
return a.X() == b.X();
case CSSPropertyID::kY:
return a.Y() == b.Y();
case CSSPropertyID::kR:
return a.R() == b.R();
case CSSPropertyID::kRx:
return a.Rx() == b.Rx();
case CSSPropertyID::kRy:
return a.Ry() == b.Ry();
case CSSPropertyID::kZIndex:
return a.HasAutoZIndex() == b.HasAutoZIndex() &&
(a.HasAutoZIndex() || a.ZIndex() == b.ZIndex());
case CSSPropertyID::kContainIntrinsicWidth:
return a.ContainIntrinsicWidth() == b.ContainIntrinsicWidth();
case CSSPropertyID::kContainIntrinsicHeight:
return a.ContainIntrinsicHeight() == b.ContainIntrinsicHeight();
case CSSPropertyID::kAspectRatio:
return a.AspectRatio() == b.AspectRatio();
case CSSPropertyID::kMathDepth:
return a.MathDepth() == b.MathDepth();
case CSSPropertyID::kAccentColor:
return a.AccentColor() == b.AccentColor();
case CSSPropertyID::kTextEmphasisColor:
return a.TextEmphasisColor() == b.TextEmphasisColor();
case CSSPropertyID::kZoom:
return a.Zoom() == b.Zoom();
case CSSPropertyID::kPositionTryOrder:
return a.PositionTryOrder() == b.PositionTryOrder();
case CSSPropertyID::kPositionTryOptions:
return base::ValuesEquivalent(a.GetPositionTryOptions(),
b.GetPositionTryOptions());
case CSSPropertyID::kPositionVisibility:
return a.GetPositionVisibility() == b.GetPositionVisibility();
// These properties are not animateable, but perhaps equality should still
// be defined for them.
case CSSPropertyID::kScrollTimelineAxis:
case CSSPropertyID::kScrollTimelineName:
case CSSPropertyID::kViewTimelineAxis:
case CSSPropertyID::kViewTimelineInset:
case CSSPropertyID::kViewTimelineName:
NOTREACHED() << property.GetCSSPropertyName().ToAtomicString().Ascii();
return true;
// Webkit Aliases. These should not be reachable since they are converted to
// their non-aliased counterpart before calling this function.
case CSSPropertyID::kAliasEpubCaptionSide:
case CSSPropertyID::kAliasEpubTextCombine:
case CSSPropertyID::kAliasEpubTextEmphasis:
case CSSPropertyID::kAliasEpubTextEmphasisColor:
case CSSPropertyID::kAliasEpubTextEmphasisStyle:
case CSSPropertyID::kAliasEpubTextOrientation:
case CSSPropertyID::kAliasEpubTextTransform:
case CSSPropertyID::kAliasEpubWordBreak:
case CSSPropertyID::kAliasEpubWritingMode:
case CSSPropertyID::kAliasWebkitAlignContent:
case CSSPropertyID::kAliasWebkitAlignItems:
case CSSPropertyID::kAliasWebkitAlignSelf:
case CSSPropertyID::kAliasWebkitAlternativeAnimationDelay:
case CSSPropertyID::kAliasWebkitAlternativeAnimationWithDelayStartEnd:
case CSSPropertyID::kAliasWebkitAlternativeAnimationWithTimeline:
case CSSPropertyID::kAliasWebkitAnimation:
case CSSPropertyID::kAliasWebkitAnimationDelay:
case CSSPropertyID::kAliasWebkitAnimationDirection:
case CSSPropertyID::kAliasWebkitAnimationDuration:
case CSSPropertyID::kAliasWebkitAnimationFillMode:
case CSSPropertyID::kAliasWebkitAnimationIterationCount:
case CSSPropertyID::kAliasWebkitAnimationName:
case CSSPropertyID::kAliasWebkitAnimationPlayState:
case CSSPropertyID::kAliasWebkitAnimationTimingFunction:
case CSSPropertyID::kAliasWebkitAppRegion:
case CSSPropertyID::kAliasWebkitAppearance:
case CSSPropertyID::kAliasWebkitBackfaceVisibility:
case CSSPropertyID::kAliasWebkitBackgroundClip:
case CSSPropertyID::kAliasWebkitBackgroundOrigin:
case CSSPropertyID::kAliasWebkitBackgroundSize:
case CSSPropertyID::kAliasWebkitBorderAfter:
case CSSPropertyID::kAliasWebkitBorderAfterColor:
case CSSPropertyID::kAliasWebkitBorderAfterStyle:
case CSSPropertyID::kAliasWebkitBorderAfterWidth:
case CSSPropertyID::kAliasWebkitBorderBefore:
case CSSPropertyID::kAliasWebkitBorderBeforeColor:
case CSSPropertyID::kAliasWebkitBorderBeforeStyle:
case CSSPropertyID::kAliasWebkitBorderBeforeWidth:
case CSSPropertyID::kAliasWebkitBorderBottomLeftRadius:
case CSSPropertyID::kAliasWebkitBorderBottomRightRadius:
case CSSPropertyID::kAliasWebkitBorderEnd:
case CSSPropertyID::kAliasWebkitBorderEndColor:
case CSSPropertyID::kAliasWebkitBorderEndStyle:
case CSSPropertyID::kAliasWebkitBorderEndWidth:
case CSSPropertyID::kAliasWebkitBorderRadius:
case CSSPropertyID::kAliasWebkitBorderStart:
case CSSPropertyID::kAliasWebkitBorderStartColor:
case CSSPropertyID::kAliasWebkitBorderStartStyle:
case CSSPropertyID::kAliasWebkitBorderStartWidth:
case CSSPropertyID::kAliasWebkitBorderTopLeftRadius:
case CSSPropertyID::kAliasWebkitBorderTopRightRadius:
case CSSPropertyID::kAliasWebkitBoxShadow:
case CSSPropertyID::kAliasWebkitBoxSizing:
case CSSPropertyID::kAliasWebkitClipPath:
case CSSPropertyID::kAliasWebkitColumnCount:
case CSSPropertyID::kAliasWebkitColumnGap:
case CSSPropertyID::kAliasWebkitColumnRule:
case CSSPropertyID::kAliasWebkitColumnRuleColor:
case CSSPropertyID::kAliasWebkitColumnRuleStyle:
case CSSPropertyID::kAliasWebkitColumnRuleWidth:
case CSSPropertyID::kAliasWebkitColumnSpan:
case CSSPropertyID::kAliasWebkitColumnWidth:
case CSSPropertyID::kAliasWebkitColumns:
case CSSPropertyID::kAliasWebkitFilter:
case CSSPropertyID::kAliasWebkitFlex:
case CSSPropertyID::kAliasWebkitFlexBasis:
case CSSPropertyID::kAliasWebkitFlexDirection:
case CSSPropertyID::kAliasWebkitFlexFlow:
case CSSPropertyID::kAliasWebkitFlexGrow:
case CSSPropertyID::kAliasWebkitFlexShrink:
case CSSPropertyID::kAliasWebkitFlexWrap:
case CSSPropertyID::kAliasWebkitFontFeatureSettings:
case CSSPropertyID::kAliasWebkitHyphenateCharacter:
case CSSPropertyID::kAliasWebkitJustifyContent:
case CSSPropertyID::kAliasWebkitLogicalHeight:
case CSSPropertyID::kAliasWebkitLogicalWidth:
case CSSPropertyID::kAliasWebkitMarginAfter:
case CSSPropertyID::kAliasWebkitMarginBefore:
case CSSPropertyID::kAliasWebkitMarginEnd:
case CSSPropertyID::kAliasWebkitMarginStart:
case CSSPropertyID::kAliasWebkitMask:
case CSSPropertyID::kAliasWebkitMaskClip:
case CSSPropertyID::kAliasWebkitMaskComposite:
case CSSPropertyID::kAliasWebkitMaskImage:
case CSSPropertyID::kAliasWebkitMaskOrigin:
case CSSPropertyID::kAliasWebkitMaskPosition:
case CSSPropertyID::kAliasWebkitMaskRepeat:
case CSSPropertyID::kAliasWebkitMaskSize:
case CSSPropertyID::kAliasWebkitMaxLogicalHeight:
case CSSPropertyID::kAliasWebkitMaxLogicalWidth:
case CSSPropertyID::kAliasWebkitMinLogicalHeight:
case CSSPropertyID::kAliasWebkitMinLogicalWidth:
case CSSPropertyID::kAliasWebkitOpacity:
case CSSPropertyID::kAliasWebkitOrder:
case CSSPropertyID::kAliasWebkitPaddingAfter:
case CSSPropertyID::kAliasWebkitPaddingBefore:
case CSSPropertyID::kAliasWebkitPaddingEnd:
case CSSPropertyID::kAliasWebkitPaddingStart:
case CSSPropertyID::kAliasWebkitPerspective:
case CSSPropertyID::kAliasWebkitPerspectiveOrigin:
case CSSPropertyID::kAliasWebkitShapeImageThreshold:
case CSSPropertyID::kAliasWebkitShapeMargin:
case CSSPropertyID::kAliasWebkitShapeOutside:
case CSSPropertyID::kAliasWebkitTextEmphasis:
case CSSPropertyID::kAliasWebkitTextEmphasisColor:
case CSSPropertyID::kAliasWebkitTextEmphasisPosition:
case CSSPropertyID::kAliasWebkitTextEmphasisStyle:
case CSSPropertyID::kAliasWebkitTextSizeAdjust:
case CSSPropertyID::kAliasWebkitTransform:
case CSSPropertyID::kAliasWebkitTransformOrigin:
case CSSPropertyID::kAliasWebkitTransformStyle:
case CSSPropertyID::kAliasWebkitTransition:
case CSSPropertyID::kAliasWebkitTransitionDelay:
case CSSPropertyID::kAliasWebkitTransitionDuration:
case CSSPropertyID::kAliasWebkitTransitionProperty:
case CSSPropertyID::kAliasWebkitTransitionTimingFunction:
case CSSPropertyID::kAliasWebkitUserSelect:
case CSSPropertyID::kAliasWordWrap:
case CSSPropertyID::kAliasGridColumnGap:
case CSSPropertyID::kAliasGridRowGap:
case CSSPropertyID::kAliasGridGap:
NOTREACHED()
<< "Aliases CSS properties should be converted to their non-aliased "
"counterpart before calling this function. CSS property name: "
<< property.GetCSSPropertyName().ToAtomicString().Ascii();
return true;
// Webkit prefixed properties which don't have non-aliased counterparts.
// TODO ensure that each of these are reachable since they supposedly aren't
// just aliases.
case CSSPropertyID::kWebkitBorderImage:
case CSSPropertyID::kWebkitBoxAlign:
case CSSPropertyID::kWebkitBoxDecorationBreak:
case CSSPropertyID::kWebkitBoxDirection:
case CSSPropertyID::kWebkitBoxFlex:
case CSSPropertyID::kWebkitBoxOrdinalGroup:
case CSSPropertyID::kWebkitBoxOrient:
case CSSPropertyID::kWebkitBoxPack:
case CSSPropertyID::kWebkitBoxReflect:
case CSSPropertyID::kWebkitLineBreak:
case CSSPropertyID::kWebkitMaskBoxImageRepeat:
case CSSPropertyID::kWebkitPrintColorAdjust:
case CSSPropertyID::kWebkitRtlOrdering:
case CSSPropertyID::kWebkitRubyPosition:
case CSSPropertyID::kWebkitTapHighlightColor:
case CSSPropertyID::kWebkitTextCombine:
case CSSPropertyID::kWebkitTextDecorationsInEffect:
case CSSPropertyID::kWebkitTextSecurity:
case CSSPropertyID::kWebkitUserDrag:
case CSSPropertyID::kWebkitUserModify:
return true;
// These logical properties compute to physical properties. Transitions
// should check for equality on physical properties and run there.
case CSSPropertyID::kBlockSize:
case CSSPropertyID::kBorderBlockEndColor:
case CSSPropertyID::kBorderBlockEndStyle:
case CSSPropertyID::kBorderBlockEndWidth:
case CSSPropertyID::kBorderBlockStartColor:
case CSSPropertyID::kBorderBlockStartStyle:
case CSSPropertyID::kBorderBlockStartWidth:
case CSSPropertyID::kBorderEndEndRadius:
case CSSPropertyID::kBorderEndStartRadius:
case CSSPropertyID::kBorderInlineEndColor:
case CSSPropertyID::kBorderInlineEndStyle:
case CSSPropertyID::kBorderInlineEndWidth:
case CSSPropertyID::kBorderInlineStartColor:
case CSSPropertyID::kBorderInlineStartStyle:
case CSSPropertyID::kBorderInlineStartWidth:
case CSSPropertyID::kBorderStartEndRadius:
case CSSPropertyID::kBorderStartStartRadius:
case CSSPropertyID::kBorderBlock:
case CSSPropertyID::kBorderBlockColor:
case CSSPropertyID::kBorderBlockEnd:
case CSSPropertyID::kBorderBlockStart:
case CSSPropertyID::kBorderBlockStyle:
case CSSPropertyID::kBorderBlockWidth:
case CSSPropertyID::kBorderInline:
case CSSPropertyID::kBorderInlineColor:
case CSSPropertyID::kBorderInlineEnd:
case CSSPropertyID::kBorderInlineStart:
case CSSPropertyID::kBorderInlineStyle:
case CSSPropertyID::kBorderInlineWidth:
case CSSPropertyID::kContainIntrinsicBlockSize:
case CSSPropertyID::kContainIntrinsicInlineSize:
case CSSPropertyID::kInsetInlineStart:
case CSSPropertyID::kInsetInlineEnd:
case CSSPropertyID::kInsetBlockStart:
case CSSPropertyID::kInsetBlockEnd:
case CSSPropertyID::kInternalOverflowBlock:
case CSSPropertyID::kInternalOverflowInline:
case CSSPropertyID::kOverflowBlock:
case CSSPropertyID::kOverflowInline:
case CSSPropertyID::kOverscrollBehaviorBlock:
case CSSPropertyID::kOverscrollBehaviorInline:
case CSSPropertyID::kMinInlineSize:
case CSSPropertyID::kMinBlockSize:
case CSSPropertyID::kMaxInlineSize:
case CSSPropertyID::kMaxBlockSize:
case CSSPropertyID::kMarginInlineStart:
case CSSPropertyID::kMarginInlineEnd:
case CSSPropertyID::kMarginBlockStart:
case CSSPropertyID::kMarginBlockEnd:
case CSSPropertyID::kPaddingInlineStart:
case CSSPropertyID::kPaddingInlineEnd:
case CSSPropertyID::kPaddingBlockStart:
case CSSPropertyID::kPaddingBlockEnd:
case CSSPropertyID::kScrollMarginBlockEnd:
case CSSPropertyID::kScrollMarginBlockStart:
case CSSPropertyID::kScrollMarginInlineEnd:
case CSSPropertyID::kScrollMarginInlineStart:
case CSSPropertyID::kScrollPaddingBlockEnd:
case CSSPropertyID::kScrollPaddingBlockStart:
case CSSPropertyID::kScrollPaddingInlineEnd:
case CSSPropertyID::kScrollPaddingInlineStart:
case CSSPropertyID::kScrollStartBlock:
case CSSPropertyID::kScrollStartInline:
case CSSPropertyID::kScrollStartTargetBlock:
case CSSPropertyID::kScrollStartTargetInline:
case CSSPropertyID::kInlineSize:
case CSSPropertyID::kInsetBlock:
case CSSPropertyID::kInsetInline:
case CSSPropertyID::kMarginBlock:
case CSSPropertyID::kMarginInline:
case CSSPropertyID::kPaddingBlock:
case CSSPropertyID::kPaddingInline:
case CSSPropertyID::kScrollMarginBlock:
case CSSPropertyID::kScrollMarginInline:
case CSSPropertyID::kScrollPaddingBlock:
case CSSPropertyID::kScrollPaddingInline:
NOTREACHED() << property.GetCSSPropertyName().ToAtomicString().Ascii();
return true;
// No transitions on internal properties:
case CSSPropertyID::kInternalAlignContentBlock:
case CSSPropertyID::kInternalEmptyLineHeight:
case CSSPropertyID::kInternalFontSizeDelta:
case CSSPropertyID::kInternalForcedBackgroundColor:
case CSSPropertyID::kInternalForcedBorderColor:
case CSSPropertyID::kInternalForcedColor:
case CSSPropertyID::kInternalForcedOutlineColor:
case CSSPropertyID::kInternalForcedVisitedColor:
case CSSPropertyID::kInternalVisitedBackgroundColor:
case CSSPropertyID::kInternalVisitedBorderBlockEndColor:
case CSSPropertyID::kInternalVisitedBorderBlockStartColor:
case CSSPropertyID::kInternalVisitedBorderBottomColor:
case CSSPropertyID::kInternalVisitedBorderInlineEndColor:
case CSSPropertyID::kInternalVisitedBorderInlineStartColor:
case CSSPropertyID::kInternalVisitedBorderLeftColor:
case CSSPropertyID::kInternalVisitedBorderRightColor:
case CSSPropertyID::kInternalVisitedBorderTopColor:
case CSSPropertyID::kInternalVisitedCaretColor:
case CSSPropertyID::kInternalVisitedColor:
case CSSPropertyID::kInternalVisitedColumnRuleColor:
case CSSPropertyID::kInternalVisitedFill:
case CSSPropertyID::kInternalVisitedOutlineColor:
case CSSPropertyID::kInternalVisitedStroke:
case CSSPropertyID::kInternalVisitedTextDecorationColor:
case CSSPropertyID::kInternalVisitedTextEmphasisColor:
case CSSPropertyID::kInternalVisitedTextFillColor:
case CSSPropertyID::kInternalVisitedTextStrokeColor:
NOTREACHED() << property.GetCSSPropertyName().ToAtomicString().Ascii();
return true;
// Shorthand properties shouldn't be compared, use their longhands.
case CSSPropertyID::kBackground:
case CSSPropertyID::kBackgroundPosition:
case CSSPropertyID::kBorder:
case CSSPropertyID::kBorderBottom:
case CSSPropertyID::kBorderColor:
case CSSPropertyID::kBorderImage:
case CSSPropertyID::kBorderLeft:
case CSSPropertyID::kBorderRadius:
case CSSPropertyID::kBorderRight:
case CSSPropertyID::kBorderSpacing:
case CSSPropertyID::kBorderStyle:
case CSSPropertyID::kBorderTop:
case CSSPropertyID::kBorderWidth:
case CSSPropertyID::kColumnRule:
case CSSPropertyID::kColumns:
case CSSPropertyID::kContainIntrinsicSize:
case CSSPropertyID::kContainer:
case CSSPropertyID::kInset:
case CSSPropertyID::kFlex:
case CSSPropertyID::kFlexFlow:
case CSSPropertyID::kFont:
case CSSPropertyID::kFontSynthesis:
case CSSPropertyID::kFontVariant:
case CSSPropertyID::kGap:
case CSSPropertyID::kGrid:
case CSSPropertyID::kGridArea:
case CSSPropertyID::kGridColumn:
case CSSPropertyID::kGridRow:
case CSSPropertyID::kGridTemplate:
case CSSPropertyID::kListStyle:
case CSSPropertyID::kMargin:
case CSSPropertyID::kMarker:
case CSSPropertyID::kMask:
case CSSPropertyID::kOffset:
case CSSPropertyID::kOutline:
case CSSPropertyID::kOverflow:
case CSSPropertyID::kOverscrollBehavior:
case CSSPropertyID::kPadding:
case CSSPropertyID::kPageBreakAfter:
case CSSPropertyID::kPageBreakBefore:
case CSSPropertyID::kPageBreakInside:
case CSSPropertyID::kPlaceContent:
case CSSPropertyID::kPlaceItems:
case CSSPropertyID::kPlaceSelf:
case CSSPropertyID::kPositionTry:
case CSSPropertyID::kScrollMargin:
case CSSPropertyID::kScrollPadding:
case CSSPropertyID::kScrollStart:
case CSSPropertyID::kScrollStartTarget:
case CSSPropertyID::kScrollTimeline:
case CSSPropertyID::kTextDecoration:
case CSSPropertyID::kTextEmphasis:
case CSSPropertyID::kTextSpacing:
case CSSPropertyID::kTransition:
case CSSPropertyID::kViewTimeline:
case CSSPropertyID::kAlternativeViewTimelineWithInset:
case CSSPropertyID::kWebkitColumnBreakAfter:
case CSSPropertyID::kWebkitColumnBreakBefore:
case CSSPropertyID::kWebkitColumnBreakInside:
case CSSPropertyID::kWebkitMaskBoxImage:
case CSSPropertyID::kMaskPosition:
case CSSPropertyID::kWebkitTextStroke:
case CSSPropertyID::kWhiteSpace:
NOTREACHED() << property.GetCSSPropertyName().ToAtomicString().Ascii();
return true;
// Non-animateable properties
case CSSPropertyID::kAlternativeAnimationDelay:
case CSSPropertyID::kAlternativeAnimationWithDelayStartEnd:
case CSSPropertyID::kAlternativeAnimationWithTimeline:
case CSSPropertyID::kAnimation:
case CSSPropertyID::kAnimationComposition:
case CSSPropertyID::kAnimationDelay:
case CSSPropertyID::kAnimationDelayEnd:
case CSSPropertyID::kAnimationDelayStart:
case CSSPropertyID::kAnimationDirection:
case CSSPropertyID::kAnimationDuration:
case CSSPropertyID::kAnimationFillMode:
case CSSPropertyID::kAnimationIterationCount:
case CSSPropertyID::kAnimationName:
case CSSPropertyID::kAnimationPlayState:
case CSSPropertyID::kAnimationRange:
case CSSPropertyID::kAnimationRangeEnd:
case CSSPropertyID::kAnimationRangeStart:
case CSSPropertyID::kAnimationTimeline:
case CSSPropertyID::kAnimationTimingFunction:
case CSSPropertyID::kContain:
case CSSPropertyID::kContainerName:
case CSSPropertyID::kContainerType:
case CSSPropertyID::kDirection:
case CSSPropertyID::kTextCombineUpright:
case CSSPropertyID::kTextOrientation:
case CSSPropertyID::kTimelineScope:
case CSSPropertyID::kTransitionBehavior:
case CSSPropertyID::kTransitionDelay:
case CSSPropertyID::kTransitionDuration:
case CSSPropertyID::kTransitionProperty:
case CSSPropertyID::kTransitionTimingFunction:
case CSSPropertyID::kUnicodeBidi:
case CSSPropertyID::kWebkitWritingMode:
case CSSPropertyID::kWillChange:
case CSSPropertyID::kWritingMode:
NOTREACHED() << property.GetCSSPropertyName().ToAtomicString().Ascii();
return true;
// TODO(crbug.com/1459374): Implement comparison for these properties. They
// are reachable via transitions now.
case CSSPropertyID::kAdditiveSymbols:
case CSSPropertyID::kAscentOverride:
case CSSPropertyID::kBasePalette:
case CSSPropertyID::kDescentOverride:
case CSSPropertyID::kFallback:
case CSSPropertyID::kFontDisplay:
case CSSPropertyID::kInherits:
case CSSPropertyID::kInitialValue:
case CSSPropertyID::kLineGapOverride:
case CSSPropertyID::kNavigation:
case CSSPropertyID::kNegative:
case CSSPropertyID::kOverrideColors:
case CSSPropertyID::kPad:
case CSSPropertyID::kPrefix:
case CSSPropertyID::kRange:
case CSSPropertyID::kSpeakAs:
case CSSPropertyID::kSrc:
case CSSPropertyID::kSuffix:
case CSSPropertyID::kSymbols:
case CSSPropertyID::kSyntax:
case CSSPropertyID::kSystem:
case CSSPropertyID::kTypes:
case CSSPropertyID::kUnicodeRange:
return true;
// Invalid properties.
case CSSPropertyID::kAll:
case CSSPropertyID::kInvalid:
case CSSPropertyID::kVariable:
NOTREACHED() << property.GetCSSPropertyName().ToAtomicString().Ascii();
return true;
}
}
} // namespace blink