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
--- 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)