Remove DEFINE_TYPE_CASTS from t_p/blink/renderer/core/animation (3/n)

The goal of this CL is to use new downcast helper and remove
DEFINE_TYPE_CASTS to adopt new downcast helpers.

This CL removes DEFINE_TYPE_CASTS for below element.
- KeyframeEffectModelBase,
- StringKeyframeEffectModel,
- TransitionKeyframeEffectModel,
- ScrollTimeline

Bug: 891908
Change-Id: I0f10a50f41f0ba1660eb8f36972c56b0427a4149
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1962127
Reviewed-by: Jeremy Roman <jbroman@chromium.org>
Commit-Queue: Abhijeet Kandalkar <abhijeet@igalia.com>
Cr-Commit-Position: refs/heads/master@{#723826}
diff --git a/third_party/blink/renderer/core/animation/compositor_animations.cc b/third_party/blink/renderer/core/animation/compositor_animations.cc
index 98c3832..58ff2fe 100644
--- a/third_party/blink/renderer/core/animation/compositor_animations.cc
+++ b/third_party/blink/renderer/core/animation/compositor_animations.cc
@@ -188,8 +188,7 @@
     const PaintArtifactCompositor* paint_artifact_compositor,
     double animation_playback_rate) {
   FailureReasons reasons = kNoFailure;
-  const KeyframeEffectModelBase& keyframe_effect =
-      ToKeyframeEffectModelBase(effect);
+  const auto& keyframe_effect = To<KeyframeEffectModelBase>(effect);
 
   LayoutObject* layout_object = target_element.GetLayoutObject();
   if (paint_artifact_compositor) {
@@ -456,8 +455,7 @@
                                          nullptr, animation_playback_rate),
       kNoFailure);
 
-  const KeyframeEffectModelBase& keyframe_effect =
-      ToKeyframeEffectModelBase(effect);
+  const auto& keyframe_effect = To<KeyframeEffectModelBase>(effect);
 
   Vector<std::unique_ptr<CompositorKeyframeModel>> keyframe_models;
   GetAnimationOnCompositor(element, timing, group, start_time, time_offset,
diff --git a/third_party/blink/renderer/core/animation/css/css_animations.cc b/third_party/blink/renderer/core/animation/css/css_animations.cc
index 15b8517..4ae9080 100644
--- a/third_party/blink/renderer/core/animation/css/css_animations.cc
+++ b/third_party/blink/renderer/core/animation/css/css_animations.cc
@@ -239,7 +239,7 @@
     model = ToInertEffect(effect)->Model();
   if (!model || !model->IsKeyframeEffectModel())
     return nullptr;
-  return ToKeyframeEffectModelBase(model);
+  return To<KeyframeEffectModelBase>(model);
 }
 
 }  // namespace
diff --git a/third_party/blink/renderer/core/animation/keyframe_effect.cc b/third_party/blink/renderer/core/animation/keyframe_effect.cc
index f821ad8..f0969e51 100644
--- a/third_party/blink/renderer/core/animation/keyframe_effect.cc
+++ b/third_party/blink/renderer/core/animation/keyframe_effect.cc
@@ -196,7 +196,7 @@
   Model()->SetComposite(
       EffectInput::ResolveCompositeOperation(Model()->Composite(), keyframes));
 
-  ToStringKeyframeEffectModel(Model())->SetFrames(keyframes);
+  To<StringKeyframeEffectModel>(Model())->SetFrames(keyframes);
 
   // Changing the keyframes will invalidate any sampled effect, as well as
   // potentially affect the effect owner.
diff --git a/third_party/blink/renderer/core/animation/keyframe_effect_model.h b/third_party/blink/renderer/core/animation/keyframe_effect_model.h
index 54224d1..ce556022 100644
--- a/third_party/blink/renderer/core/animation/keyframe_effect_model.h
+++ b/third_party/blink/renderer/core/animation/keyframe_effect_model.h
@@ -253,35 +253,38 @@
 using TransitionPropertySpecificKeyframeVector =
     TransitionKeyframeEffectModel::PropertySpecificKeyframeVector;
 
-DEFINE_TYPE_CASTS(KeyframeEffectModelBase,
-                  EffectModel,
-                  value,
-                  value->IsKeyframeEffectModel(),
-                  value.IsKeyframeEffectModel());
-DEFINE_TYPE_CASTS(StringKeyframeEffectModel,
-                  KeyframeEffectModelBase,
-                  value,
-                  value->IsStringKeyframeEffectModel(),
-                  value.IsStringKeyframeEffectModel());
-DEFINE_TYPE_CASTS(TransitionKeyframeEffectModel,
-                  KeyframeEffectModelBase,
-                  value,
-                  value->IsTransitionKeyframeEffectModel(),
-                  value.IsTransitionKeyframeEffectModel());
+template <>
+struct DowncastTraits<KeyframeEffectModelBase> {
+  static bool AllowFrom(const EffectModel& value) {
+    return value.IsKeyframeEffectModel();
+  }
+};
+template <>
+struct DowncastTraits<StringKeyframeEffectModel> {
+  static bool AllowFrom(const KeyframeEffectModelBase& value) {
+    return value.IsStringKeyframeEffectModel();
+  }
+};
+template <>
+struct DowncastTraits<TransitionKeyframeEffectModel> {
+  static bool AllowFrom(const KeyframeEffectModelBase& value) {
+    return value.IsTransitionKeyframeEffectModel();
+  }
+};
 
 inline const StringKeyframeEffectModel* ToStringKeyframeEffectModel(
     const EffectModel* base) {
-  return ToStringKeyframeEffectModel(ToKeyframeEffectModelBase(base));
+  return To<StringKeyframeEffectModel>(To<KeyframeEffectModelBase>(base));
 }
 
 inline StringKeyframeEffectModel* ToStringKeyframeEffectModel(
     EffectModel* base) {
-  return ToStringKeyframeEffectModel(ToKeyframeEffectModelBase(base));
+  return To<StringKeyframeEffectModel>(To<KeyframeEffectModelBase>(base));
 }
 
 inline TransitionKeyframeEffectModel* ToTransitionKeyframeEffectModel(
     EffectModel* base) {
-  return ToTransitionKeyframeEffectModel(ToKeyframeEffectModelBase(base));
+  return To<TransitionKeyframeEffectModel>(To<KeyframeEffectModelBase>(base));
 }
 
 template <>
diff --git a/third_party/blink/renderer/core/animation/scroll_timeline.h b/third_party/blink/renderer/core/animation/scroll_timeline.h
index 31eaab0b..43e4a581 100644
--- a/third_party/blink/renderer/core/animation/scroll_timeline.h
+++ b/third_party/blink/renderer/core/animation/scroll_timeline.h
@@ -106,11 +106,12 @@
   Timing::FillMode fill_;
 };
 
-DEFINE_TYPE_CASTS(ScrollTimeline,
-                  AnimationTimeline,
-                  value,
-                  value->IsScrollTimeline(),
-                  value.IsScrollTimeline());
+template <>
+struct DowncastTraits<ScrollTimeline> {
+  static bool AllowFrom(const AnimationTimeline& value) {
+    return value.IsScrollTimeline();
+  }
+};
 
 }  // namespace blink
 
diff --git a/third_party/blink/renderer/core/animation/scroll_timeline_util.cc b/third_party/blink/renderer/core/animation/scroll_timeline_util.cc
index 906fb06..b2fa993 100644
--- a/third_party/blink/renderer/core/animation/scroll_timeline_util.cc
+++ b/third_party/blink/renderer/core/animation/scroll_timeline_util.cc
@@ -19,7 +19,7 @@
   if (!timeline || timeline->IsDocumentTimeline())
     return nullptr;
 
-  ScrollTimeline* scroll_timeline = ToScrollTimeline(timeline);
+  auto* scroll_timeline = To<ScrollTimeline>(timeline);
   Node* scroll_source = scroll_timeline->ResolvedScrollSource();
   base::Optional<CompositorElementId> element_id =
       GetCompositorScrollElementId(scroll_source);
diff --git a/third_party/blink/renderer/core/animation/worklet_animation_controller.cc b/third_party/blink/renderer/core/animation/worklet_animation_controller.cc
index 4b73d0a..65ec508 100644
--- a/third_party/blink/renderer/core/animation/worklet_animation_controller.cc
+++ b/third_party/blink/renderer/core/animation/worklet_animation_controller.cc
@@ -86,7 +86,7 @@
   DCHECK(ScrollTimeline::HasActiveScrollTimeline(node));
   for (const auto& animation : animations_.Values()) {
     if (animation->GetTimeline()->IsScrollTimeline() &&
-        ToScrollTimeline(animation->GetTimeline())->scrollSource() == node) {
+        To<ScrollTimeline>(animation->GetTimeline())->scrollSource() == node) {
       InvalidateAnimation(*animation);
     }
   }
diff --git a/third_party/blink/renderer/core/inspector/inspector_animation_agent.cc b/third_party/blink/renderer/core/inspector/inspector_animation_agent.cc
index 9e59ad9..84c0b8d 100644
--- a/third_party/blink/renderer/core/inspector/inspector_animation_agent.cc
+++ b/third_party/blink/renderer/core/inspector/inspector_animation_agent.cc
@@ -281,8 +281,8 @@
     // Clone EffectModel.
     // TODO(samli): Determine if this is an animations bug.
     if (old_model->IsStringKeyframeEffectModel()) {
-      StringKeyframeEffectModel* old_string_keyframe_model =
-          ToStringKeyframeEffectModel(old_model);
+      auto* old_string_keyframe_model =
+          To<StringKeyframeEffectModel>(old_model);
       KeyframeVector old_keyframes = old_string_keyframe_model->GetFrames();
       StringKeyframeVector new_keyframes;
       for (auto& old_keyframe : old_keyframes)
@@ -290,8 +290,8 @@
       new_model =
           MakeGarbageCollected<StringKeyframeEffectModel>(new_keyframes);
     } else if (old_model->IsTransitionKeyframeEffectModel()) {
-      TransitionKeyframeEffectModel* old_transition_keyframe_model =
-          ToTransitionKeyframeEffectModel(old_model);
+      auto* old_transition_keyframe_model =
+          To<TransitionKeyframeEffectModel>(old_model);
       KeyframeVector old_keyframes = old_transition_keyframe_model->GetFrames();
       TransitionKeyframeVector new_keyframes;
       for (auto& old_keyframe : old_keyframes)
diff --git a/third_party/blink/renderer/modules/animationworklet/worklet_animation.cc b/third_party/blink/renderer/modules/animationworklet/worklet_animation.cc
index beb3bf5..63d612d7 100644
--- a/third_party/blink/renderer/modules/animationworklet/worklet_animation.cc
+++ b/third_party/blink/renderer/modules/animationworklet/worklet_animation.cc
@@ -573,7 +573,7 @@
   // If the scroll source is not composited, fall back to main thread.
   if (timeline_->IsScrollTimeline() &&
       !CheckElementComposited(
-          *ToScrollTimeline(timeline_)->ResolvedScrollSource())) {
+          *To<ScrollTimeline>(*timeline_).ResolvedScrollSource())) {
     return false;
   }
 
@@ -644,7 +644,7 @@
   }
 
   if (timeline_->IsScrollTimeline()) {
-    Node* scroll_source = ToScrollTimeline(timeline_)->ResolvedScrollSource();
+    Node* scroll_source = To<ScrollTimeline>(*timeline_).ResolvedScrollSource();
     LayoutBox* box = scroll_source ? scroll_source->GetLayoutBox() : nullptr;
 
     base::Optional<double> start_scroll_offset;
@@ -652,14 +652,15 @@
     if (box) {
       double current_offset;
       double max_offset;
-      ToScrollTimeline(timeline_)->GetCurrentAndMaxOffset(box, current_offset,
-                                                          max_offset);
+      To<ScrollTimeline>(*timeline_)
+          .GetCurrentAndMaxOffset(box, current_offset, max_offset);
 
       double resolved_start_scroll_offset = 0;
       double resolved_end_scroll_offset = max_offset;
-      ToScrollTimeline(timeline_)->ResolveScrollStartAndEnd(
-          box, max_offset, resolved_start_scroll_offset,
-          resolved_end_scroll_offset);
+      To<ScrollTimeline>(*timeline_)
+          .ResolveScrollStartAndEnd(box, max_offset,
+                                    resolved_start_scroll_offset,
+                                    resolved_end_scroll_offset);
       start_scroll_offset = resolved_start_scroll_offset;
       end_scroll_offset = resolved_end_scroll_offset;
     }