Bug 1067769 - Part 2: Support nullable target in KeyframeEffect(ReadOnly) constructor. r=birtles
We set a null target only from Web Animations API, so make sure
KeyframeEffectReadOnly::ConstructKeyframeEffect() can handle null target
properly.
MozReview-Commit-ID: D6PoV7PGFj3
--- a/dom/animation/KeyframeEffect.cpp
+++ b/dom/animation/KeyframeEffect.cpp
@@ -92,17 +92,16 @@ KeyframeEffectReadOnly::KeyframeEffectRe
AnimationEffectTimingReadOnly* aTiming)
: AnimationEffectReadOnly(aDocument)
, mTarget(aTarget)
, mTiming(aTiming)
, mPseudoType(aPseudoType)
, mInEffectOnLastAnimationTimingUpdate(false)
{
MOZ_ASSERT(aTiming);
- MOZ_ASSERT(aTarget, "null animation target is not yet supported");
}
JSObject*
KeyframeEffectReadOnly::WrapObject(JSContext* aCx,
JS::Handle<JSObject*> aGivenProto)
{
return KeyframeEffectReadOnlyBinding::Wrap(aCx, this, aGivenProto);
}
@@ -732,38 +731,32 @@ KeyframeEffectReadOnly::ConstructKeyfram
}
TimingParams timingParams =
TimingParams::FromOptionsUnion(aOptions, doc, aRv);
if (aRv.Failed()) {
return nullptr;
}
- if (aTarget.IsNull()) {
- // We don't support null targets yet.
- aRv.Throw(NS_ERROR_DOM_ANIM_NO_TARGET_ERR);
- return nullptr;
- }
-
- const ElementOrCSSPseudoElement& target = aTarget.Value();
- MOZ_ASSERT(target.IsElement() || target.IsCSSPseudoElement(),
- "Uninitialized target");
-
RefPtr<Element> targetElement;
CSSPseudoElementType pseudoType = CSSPseudoElementType::NotPseudo;
- if (target.IsElement()) {
- targetElement = &target.GetAsElement();
- } else {
- targetElement = target.GetAsCSSPseudoElement().ParentElement();
- pseudoType = target.GetAsCSSPseudoElement().GetType();
+ if (!aTarget.IsNull()) {
+ const ElementOrCSSPseudoElement& target = aTarget.Value();
+ MOZ_ASSERT(target.IsElement() || target.IsCSSPseudoElement(),
+ "Uninitialized target");
+ if (target.IsElement()) {
+ targetElement = &target.GetAsElement();
+ } else {
+ targetElement = target.GetAsCSSPseudoElement().ParentElement();
+ pseudoType = target.GetAsCSSPseudoElement().GetType();
+ }
}
RefPtr<KeyframeEffectType> effect =
- new KeyframeEffectType(targetElement->OwnerDoc(), targetElement,
- pseudoType, timingParams);
+ new KeyframeEffectType(doc, targetElement, pseudoType, timingParams);
effect->SetFrames(aGlobal.Context(), aFrames, aRv);
if (aRv.Failed()) {
return nullptr;
}
return effect.forget();
}
--- a/dom/base/domerr.msg
+++ b/dom/base/domerr.msg
@@ -113,17 +113,16 @@ DOM4_MSG_DEF(BtParmInvalidError, "Inval
DOM4_MSG_DEF(BtUnhandledError, "Unhandled", NS_ERROR_DOM_BLUETOOTH_UNHANDLED)
DOM4_MSG_DEF(BtAuthFailureError, "Authentication failure", NS_ERROR_DOM_BLUETOOTH_AUTH_FAILURE)
DOM4_MSG_DEF(BtRmtDevDownError, "Remote device down", NS_ERROR_DOM_BLUETOOTH_RMT_DEV_DOWN)
DOM4_MSG_DEF(BtAuthRejectedError, "Authentication rejected", NS_ERROR_DOM_BLUETOOTH_AUTH_REJECTED)
/* Web Animations errors */
DOM4_MSG_DEF(NotSupportedError, "Animation to or from an underlying value is not yet supported.", NS_ERROR_DOM_ANIM_MISSING_PROPS_ERR)
-DOM4_MSG_DEF(NotSupportedError, "Animation with no target is not yet supported.", NS_ERROR_DOM_ANIM_NO_TARGET_ERR)
DOM4_MSG_DEF(NotSupportedError, "Animation with no timeline is not yet supported.", NS_ERROR_DOM_ANIM_NO_TIMELINE_ERR)
DOM4_MSG_DEF(NotSupportedError, "Animation with no effect is not yet supported.", NS_ERROR_DOM_ANIM_NO_EFFECT_ERR)
/* common global codes (from nsError.h) */
DOM_MSG_DEF(NS_OK , "Success")
DOM_MSG_DEF(NS_ERROR_NOT_INITIALIZED , "Component not initialized")
DOM_MSG_DEF(NS_ERROR_ALREADY_INITIALIZED , "Component already initialized")
--- a/xpcom/base/ErrorList.h
+++ b/xpcom/base/ErrorList.h
@@ -948,19 +948,18 @@
ERROR(NS_ERROR_SIGNED_APP_MANIFEST_INVALID, FAILURE(1)),
#undef MODULE
/* ======================================================================= */
/* 39: NS_ERROR_MODULE_DOM_ANIM */
/* ======================================================================= */
#define MODULE NS_ERROR_MODULE_DOM_ANIM
ERROR(NS_ERROR_DOM_ANIM_MISSING_PROPS_ERR, FAILURE(1)),
- ERROR(NS_ERROR_DOM_ANIM_NO_TARGET_ERR, FAILURE(2)),
- ERROR(NS_ERROR_DOM_ANIM_NO_TIMELINE_ERR, FAILURE(3)),
- ERROR(NS_ERROR_DOM_ANIM_NO_EFFECT_ERR, FAILURE(4)),
+ ERROR(NS_ERROR_DOM_ANIM_NO_TIMELINE_ERR, FAILURE(2)),
+ ERROR(NS_ERROR_DOM_ANIM_NO_EFFECT_ERR, FAILURE(3)),
#undef MODULE
/* ======================================================================= */
/* 40: NS_ERROR_MODULE_DOM_PUSH */
/* ======================================================================= */
#define MODULE NS_ERROR_MODULE_DOM_PUSH
ERROR(NS_ERROR_DOM_PUSH_INVALID_REGISTRATION_ERR, FAILURE(1)),
ERROR(NS_ERROR_DOM_PUSH_DENIED_ERR, FAILURE(2)),