Bug 1456394 - Factor out TimingParams::FromEffectTiming; r?hiro draft
authorBrian Birtles <birtles@gmail.com>
Mon, 07 May 2018 12:34:47 +0900
changeset 793999 6589f368dd17d05d17e7489fd338dda30a85a3ca
parent 793998 b2d965d5c5f91df832c66bb8605ca8605a4079d1
child 794000 2dc4aecf8f8c476ea8b4a6e3d4e6b68a2005df7f
push id109561
push userbmo:bbirtles@mozilla.com
push dateFri, 11 May 2018 06:43:46 +0000
reviewershiro
bugs1456394
milestone62.0a1
Bug 1456394 - Factor out TimingParams::FromEffectTiming; r?hiro Factoring out this method makes the code a little easier to read, particularly when in the next patch in this series we add a TimingParams::MergeOptionalEffectTiming method. MozReview-Commit-ID: 5AU6IfN2grZ
dom/animation/TimingParams.cpp
dom/animation/TimingParams.h
--- a/dom/animation/TimingParams.cpp
+++ b/dom/animation/TimingParams.cpp
@@ -39,57 +39,31 @@ GetTimingProperties(
 
 template <class OptionsType>
 /* static */ TimingParams
 TimingParams::FromOptionsType(const OptionsType& aOptions,
                               nsIDocument* aDocument,
                               ErrorResult& aRv)
 {
   TimingParams result;
+
   if (aOptions.IsUnrestrictedDouble()) {
     double durationInMs = aOptions.GetAsUnrestrictedDouble();
     if (durationInMs >= 0) {
       result.mDuration.emplace(
         StickyTimeDuration::FromMilliseconds(durationInMs));
     } else {
       aRv.Throw(NS_ERROR_DOM_TYPE_ERR);
       return result;
     }
+    result.Update();
   } else {
     const dom::EffectTiming& timing = GetTimingProperties(aOptions);
-
-    Maybe<StickyTimeDuration> duration =
-      TimingParams::ParseDuration(timing.mDuration, aRv);
-    if (aRv.Failed()) {
-      return result;
-    }
-    TimingParams::ValidateIterationStart(timing.mIterationStart, aRv);
-    if (aRv.Failed()) {
-      return result;
-    }
-    TimingParams::ValidateIterations(timing.mIterations, aRv);
-    if (aRv.Failed()) {
-      return result;
-    }
-    Maybe<ComputedTimingFunction> easing =
-      TimingParams::ParseEasing(timing.mEasing, aDocument, aRv);
-    if (aRv.Failed()) {
-      return result;
-    }
-
-    result.mDuration = duration;
-    result.mDelay = TimeDuration::FromMilliseconds(timing.mDelay);
-    result.mEndDelay = TimeDuration::FromMilliseconds(timing.mEndDelay);
-    result.mIterations = timing.mIterations;
-    result.mIterationStart = timing.mIterationStart;
-    result.mDirection = timing.mDirection;
-    result.mFill = timing.mFill;
-    result.mFunction = easing;
+    result = FromEffectTiming(timing, aDocument, aRv);
   }
-  result.Update();
 
   return result;
 }
 
 /* static */ TimingParams
 TimingParams::FromOptionsUnion(
   const dom::UnrestrictedDoubleOrKeyframeEffectOptions& aOptions,
   nsIDocument* aDocument,
@@ -102,16 +76,56 @@ TimingParams::FromOptionsUnion(
 TimingParams::FromOptionsUnion(
   const dom::UnrestrictedDoubleOrKeyframeAnimationOptions& aOptions,
   nsIDocument* aDocument,
   ErrorResult& aRv)
 {
   return FromOptionsType(aOptions, aDocument, aRv);
 }
 
+/* static */ TimingParams
+TimingParams::FromEffectTiming(const dom::EffectTiming& aEffectTiming,
+                               nsIDocument* aDocument,
+                               ErrorResult& aRv)
+{
+  TimingParams result;
+
+  Maybe<StickyTimeDuration> duration =
+    TimingParams::ParseDuration(aEffectTiming.mDuration, aRv);
+  if (aRv.Failed()) {
+    return result;
+  }
+  TimingParams::ValidateIterationStart(aEffectTiming.mIterationStart, aRv);
+  if (aRv.Failed()) {
+    return result;
+  }
+  TimingParams::ValidateIterations(aEffectTiming.mIterations, aRv);
+  if (aRv.Failed()) {
+    return result;
+  }
+  Maybe<ComputedTimingFunction> easing =
+    TimingParams::ParseEasing(aEffectTiming.mEasing, aDocument, aRv);
+  if (aRv.Failed()) {
+    return result;
+  }
+
+  result.mDuration = duration;
+  result.mDelay = TimeDuration::FromMilliseconds(aEffectTiming.mDelay);
+  result.mEndDelay = TimeDuration::FromMilliseconds(aEffectTiming.mEndDelay);
+  result.mIterations = aEffectTiming.mIterations;
+  result.mIterationStart = aEffectTiming.mIterationStart;
+  result.mDirection = aEffectTiming.mDirection;
+  result.mFill = aEffectTiming.mFill;
+  result.mFunction = easing;
+
+  result.Update();
+
+  return result;
+}
+
 /* static */ Maybe<ComputedTimingFunction>
 TimingParams::ParseEasing(const nsAString& aEasing,
                           nsIDocument* aDocument,
                           ErrorResult& aRv)
 {
   MOZ_ASSERT(aDocument);
 
   nsTimingFunction timingFunction;
--- a/dom/animation/TimingParams.h
+++ b/dom/animation/TimingParams.h
@@ -70,16 +70,20 @@ struct TimingParams
     nsIDocument* aDocument,
     ErrorResult& aRv);
   static TimingParams FromOptionsUnion(
     const dom::UnrestrictedDoubleOrKeyframeEffectOptions& aOptions,
     nsIDocument* aDocument, ErrorResult& aRv);
   static TimingParams FromOptionsUnion(
     const dom::UnrestrictedDoubleOrKeyframeAnimationOptions& aOptions,
     nsIDocument* aDocument, ErrorResult& aRv);
+  static TimingParams FromEffectTiming(
+    const dom::EffectTiming& aEffectTiming,
+    nsIDocument* aDocument,
+    ErrorResult& aRv);
 
   // Range-checks and validates an UnrestrictedDoubleOrString or
   // OwningUnrestrictedDoubleOrString object and converts to a
   // StickyTimeDuration value or Nothing() if aDuration is "auto".
   // Caller must check aRv.Failed().
   template <class DoubleOrString>
   static Maybe<StickyTimeDuration> ParseDuration(DoubleOrString& aDuration,
                                                  ErrorResult& aRv)