Copy as Markdown

Other Tools

/* THIS FILE IS AUTOGENERATED FROM BaseKeyframeTypes.webidl BY Codegen.py - DO NOT EDIT */
#ifndef DOM_BASEKEYFRAMETYPESBINDING_H_
#define DOM_BASEKEYFRAMETYPESBINDING_H_
#include "js/CallAndConstruct.h"
#include "js/RootingAPI.h"
#include "js/TypeDecls.h"
#include "mozilla/ArrayUtils.h"
#include "mozilla/EnumTypeTraits.h"
#include "mozilla/Span.h"
#include "mozilla/dom/BindingDeclarations.h"
#include "mozilla/dom/FakeString.h"
#include "mozilla/dom/Nullable.h"
#include "mozilla/dom/UnionMember.h"
#include "mozilla/dom/UnionTypes.h"
namespace mozilla {
namespace dom {
struct BaseComputedKeyframeAtoms;
struct BaseKeyframeAtoms;
struct BasePropertyIndexedKeyframeAtoms;
class CompositeOperationOrAutoOrCompositeOperationOrAutoSequence;
class DoubleOrNullOrDoubleOrNullSequence;
struct NativePropertyHooks;
class OwningCompositeOperationOrAutoOrCompositeOperationOrAutoSequence;
class OwningDoubleOrNullOrDoubleOrNullSequence;
class OwningUTF8StringOrUTF8StringSequence;
class ProtoAndIfaceCache;
class UTF8StringOrUTF8StringSequence;
} // namespace dom
} // namespace mozilla
namespace mozilla {
namespace dom {
enum class CompositeOperation : uint8_t {
Replace,
Add,
Accumulate,
};
namespace binding_detail {
template <> struct EnumStrings<CompositeOperation> {
static const nsLiteralCString Values[3];
};
} // namespace binding_detail
bool
ToJSValue(JSContext* aCx, CompositeOperation aArgument, JS::MutableHandle<JS::Value> aValue);
enum class CompositeOperationOrAuto : uint8_t {
Replace,
Add,
Accumulate,
Auto,
};
namespace binding_detail {
template <> struct EnumStrings<CompositeOperationOrAuto> {
static const nsLiteralCString Values[4];
};
} // namespace binding_detail
bool
ToJSValue(JSContext* aCx, CompositeOperationOrAuto aArgument, JS::MutableHandle<JS::Value> aValue);
struct BaseKeyframe : public DictionaryBase
{
MOZ_INIT_OUTSIDE_CTOR CompositeOperationOrAuto mComposite;
MOZ_INIT_OUTSIDE_CTOR nsCString mEasing;
MOZ_INIT_OUTSIDE_CTOR Nullable<double> mOffset;
MOZ_INIT_OUTSIDE_CTOR bool mSimulateComputeValuesFailure;
BaseKeyframe();
explicit inline BaseKeyframe(const FastDictionaryInitializer& )
{
// Do nothing here; this is used by our "Fast" subclass
}
BaseKeyframe(BaseKeyframe&& aOther) = default;
explicit inline BaseKeyframe(const BaseKeyframe& aOther)
{
*this = aOther;
}
bool
Init(BindingCallContext& cx, JS::Handle<JS::Value> val, const char* sourceDescription = "Value", bool passedToJSImpl = false);
bool
Init(JSContext* cx_, JS::Handle<JS::Value> val, const char* sourceDescription = "Value", bool passedToJSImpl = false);
bool
ToObjectInternal(JSContext* cx, JS::MutableHandle<JS::Value> rval) const;
void
TraceDictionary(JSTracer* trc);
BaseKeyframe&
operator=(const BaseKeyframe& aOther);
private:
static bool
InitIds(JSContext* cx, BaseKeyframeAtoms* atomsCache);
};
namespace binding_detail {
struct FastBaseKeyframe : public BaseKeyframe
{
inline FastBaseKeyframe()
: BaseKeyframe(FastDictionaryInitializer())
{
// Doesn't matter what int we pass to the parent constructor
}
};
} // namespace binding_detail
class CompositeOperationOrAutoOrCompositeOperationOrAutoSequence : public AllUnionBase
{
enum TypeOrUninit
{
eUninitialized,
eCompositeOperationOrAuto,
eCompositeOperationOrAutoSequence
};
public:
enum class Type
{
eCompositeOperationOrAuto = TypeOrUninit::eCompositeOperationOrAuto,
eCompositeOperationOrAutoSequence = TypeOrUninit::eCompositeOperationOrAutoSequence
};
private:
union Value
{
UnionMember<CompositeOperationOrAuto > mCompositeOperationOrAuto;
UnionMember<binding_detail::AutoSequence<CompositeOperationOrAuto> > mCompositeOperationOrAutoSequence;
};
TypeOrUninit mType;
Value mValue;
CompositeOperationOrAutoOrCompositeOperationOrAutoSequence(const CompositeOperationOrAutoOrCompositeOperationOrAutoSequence&) = delete;
CompositeOperationOrAutoOrCompositeOperationOrAutoSequence& operator=(const CompositeOperationOrAutoOrCompositeOperationOrAutoSequence&) = delete;
public:
explicit inline CompositeOperationOrAutoOrCompositeOperationOrAutoSequence()
: mType(eUninitialized)
{
}
inline ~CompositeOperationOrAutoOrCompositeOperationOrAutoSequence()
{
Uninit();
}
[[nodiscard]] inline CompositeOperationOrAuto&
RawSetAsCompositeOperationOrAuto()
{
if (mType == eCompositeOperationOrAuto) {
return mValue.mCompositeOperationOrAuto.Value();
}
MOZ_ASSERT(mType == eUninitialized);
mType = eCompositeOperationOrAuto;
return mValue.mCompositeOperationOrAuto.SetValue();
}
[[nodiscard]] inline CompositeOperationOrAuto&
SetAsCompositeOperationOrAuto()
{
if (mType == eCompositeOperationOrAuto) {
return mValue.mCompositeOperationOrAuto.Value();
}
Uninit();
mType = eCompositeOperationOrAuto;
return mValue.mCompositeOperationOrAuto.SetValue();
}
inline bool
IsCompositeOperationOrAuto() const
{
return mType == eCompositeOperationOrAuto;
}
inline CompositeOperationOrAuto&
GetAsCompositeOperationOrAuto()
{
MOZ_RELEASE_ASSERT(IsCompositeOperationOrAuto(), "Wrong type!");
return mValue.mCompositeOperationOrAuto.Value();
}
inline CompositeOperationOrAuto
GetAsCompositeOperationOrAuto() const
{
MOZ_RELEASE_ASSERT(IsCompositeOperationOrAuto(), "Wrong type!");
return mValue.mCompositeOperationOrAuto.Value();
}
[[nodiscard]] inline binding_detail::AutoSequence<CompositeOperationOrAuto>&
RawSetAsCompositeOperationOrAutoSequence()
{
if (mType == eCompositeOperationOrAutoSequence) {
return mValue.mCompositeOperationOrAutoSequence.Value();
}
MOZ_ASSERT(mType == eUninitialized);
mType = eCompositeOperationOrAutoSequence;
return mValue.mCompositeOperationOrAutoSequence.SetValue();
}
[[nodiscard]] inline binding_detail::AutoSequence<CompositeOperationOrAuto>&
SetAsCompositeOperationOrAutoSequence()
{
if (mType == eCompositeOperationOrAutoSequence) {
return mValue.mCompositeOperationOrAutoSequence.Value();
}
Uninit();
mType = eCompositeOperationOrAutoSequence;
return mValue.mCompositeOperationOrAutoSequence.SetValue();
}
inline bool
IsCompositeOperationOrAutoSequence() const
{
return mType == eCompositeOperationOrAutoSequence;
}
inline binding_detail::AutoSequence<CompositeOperationOrAuto>&
GetAsCompositeOperationOrAutoSequence()
{
MOZ_RELEASE_ASSERT(IsCompositeOperationOrAutoSequence(), "Wrong type!");
return mValue.mCompositeOperationOrAutoSequence.Value();
}
inline const Sequence<CompositeOperationOrAuto>&
GetAsCompositeOperationOrAutoSequence() const
{
MOZ_RELEASE_ASSERT(IsCompositeOperationOrAutoSequence(), "Wrong type!");
return mValue.mCompositeOperationOrAutoSequence.Value();
}
bool
Init(BindingCallContext& cx, JS::Handle<JS::Value> value, const char* sourceDescription = "Value", bool passedToJSImpl = false);
bool
Init(JSContext* cx_, JS::Handle<JS::Value> value, const char* sourceDescription = "Value", bool passedToJSImpl = false);
inline void
Uninit()
{
switch (mType) {
case eUninitialized: {
break;
}
case eCompositeOperationOrAuto: {
DestroyCompositeOperationOrAuto();
break;
}
case eCompositeOperationOrAutoSequence: {
DestroyCompositeOperationOrAutoSequence();
break;
}
}
}
bool
ToJSVal(JSContext* cx, JS::Handle<JSObject*> scopeObj, JS::MutableHandle<JS::Value> rval) const;
private:
bool
TrySetToCompositeOperationOrAuto(BindingCallContext& cx, JS::Handle<JS::Value> value, bool& tryNext, bool passedToJSImpl = false);
bool
TrySetToCompositeOperationOrAuto(JSContext* cx_, JS::Handle<JS::Value> value, bool& tryNext, bool passedToJSImpl = false);
inline void
DestroyCompositeOperationOrAuto()
{
MOZ_RELEASE_ASSERT(IsCompositeOperationOrAuto(), "Wrong type!");
mValue.mCompositeOperationOrAuto.Destroy();
mType = eUninitialized;
}
bool
TrySetToCompositeOperationOrAutoSequence(BindingCallContext& cx, JS::Handle<JS::Value> value, bool& tryNext, bool passedToJSImpl = false);
bool
TrySetToCompositeOperationOrAutoSequence(JSContext* cx_, JS::Handle<JS::Value> value, bool& tryNext, bool passedToJSImpl = false);
inline void
DestroyCompositeOperationOrAutoSequence()
{
MOZ_RELEASE_ASSERT(IsCompositeOperationOrAutoSequence(), "Wrong type!");
mValue.mCompositeOperationOrAutoSequence.Destroy();
mType = eUninitialized;
}
};
class OwningCompositeOperationOrAutoOrCompositeOperationOrAutoSequence : public AllOwningUnionBase
{
enum TypeOrUninit
{
eUninitialized,
eCompositeOperationOrAuto,
eCompositeOperationOrAutoSequence
};
public:
enum class Type
{
eCompositeOperationOrAuto = TypeOrUninit::eCompositeOperationOrAuto,
eCompositeOperationOrAutoSequence = TypeOrUninit::eCompositeOperationOrAutoSequence
};
private:
union Value
{
UnionMember<CompositeOperationOrAuto > mCompositeOperationOrAuto;
UnionMember<Sequence<CompositeOperationOrAuto> > mCompositeOperationOrAutoSequence;
};
TypeOrUninit mType;
Value mValue;
public:
explicit inline OwningCompositeOperationOrAutoOrCompositeOperationOrAutoSequence()
: mType(eUninitialized)
{
}
OwningCompositeOperationOrAutoOrCompositeOperationOrAutoSequence(OwningCompositeOperationOrAutoOrCompositeOperationOrAutoSequence&& aOther);
explicit inline OwningCompositeOperationOrAutoOrCompositeOperationOrAutoSequence(const OwningCompositeOperationOrAutoOrCompositeOperationOrAutoSequence& aOther)
: mType(eUninitialized)
{
*this = aOther;
}
inline ~OwningCompositeOperationOrAutoOrCompositeOperationOrAutoSequence()
{
Uninit();
}
[[nodiscard]] CompositeOperationOrAuto&
RawSetAsCompositeOperationOrAuto();
[[nodiscard]] CompositeOperationOrAuto&
SetAsCompositeOperationOrAuto();
inline bool
IsCompositeOperationOrAuto() const
{
return mType == eCompositeOperationOrAuto;
}
inline CompositeOperationOrAuto&
GetAsCompositeOperationOrAuto()
{
MOZ_RELEASE_ASSERT(IsCompositeOperationOrAuto(), "Wrong type!");
return mValue.mCompositeOperationOrAuto.Value();
}
inline CompositeOperationOrAuto const &
GetAsCompositeOperationOrAuto() const
{
MOZ_RELEASE_ASSERT(IsCompositeOperationOrAuto(), "Wrong type!");
return mValue.mCompositeOperationOrAuto.Value();
}
[[nodiscard]] Sequence<CompositeOperationOrAuto>&
RawSetAsCompositeOperationOrAutoSequence();
[[nodiscard]] Sequence<CompositeOperationOrAuto>&
SetAsCompositeOperationOrAutoSequence();
inline bool
IsCompositeOperationOrAutoSequence() const
{
return mType == eCompositeOperationOrAutoSequence;
}
inline Sequence<CompositeOperationOrAuto>&
GetAsCompositeOperationOrAutoSequence()
{
MOZ_RELEASE_ASSERT(IsCompositeOperationOrAutoSequence(), "Wrong type!");
return mValue.mCompositeOperationOrAutoSequence.Value();
}
inline Sequence<CompositeOperationOrAuto> const &
GetAsCompositeOperationOrAutoSequence() const
{
MOZ_RELEASE_ASSERT(IsCompositeOperationOrAutoSequence(), "Wrong type!");
return mValue.mCompositeOperationOrAutoSequence.Value();
}
bool
Init(BindingCallContext& cx, JS::Handle<JS::Value> value, const char* sourceDescription = "Value", bool passedToJSImpl = false);
bool
Init(JSContext* cx_, JS::Handle<JS::Value> value, const char* sourceDescription = "Value", bool passedToJSImpl = false);
void
Uninit();
bool
ToJSVal(JSContext* cx, JS::Handle<JSObject*> scopeObj, JS::MutableHandle<JS::Value> rval) const;
OwningCompositeOperationOrAutoOrCompositeOperationOrAutoSequence&
operator=(OwningCompositeOperationOrAutoOrCompositeOperationOrAutoSequence&& aOther);
inline Type
GetType() const
{
MOZ_RELEASE_ASSERT(mType != eUninitialized);
return static_cast<Type>(mType);
}
OwningCompositeOperationOrAutoOrCompositeOperationOrAutoSequence&
operator=(const OwningCompositeOperationOrAutoOrCompositeOperationOrAutoSequence& aOther);
private:
bool
TrySetToCompositeOperationOrAuto(BindingCallContext& cx, JS::Handle<JS::Value> value, bool& tryNext, bool passedToJSImpl = false);
bool
TrySetToCompositeOperationOrAuto(JSContext* cx_, JS::Handle<JS::Value> value, bool& tryNext, bool passedToJSImpl = false);
void
DestroyCompositeOperationOrAuto();
bool
TrySetToCompositeOperationOrAutoSequence(BindingCallContext& cx, JS::Handle<JS::Value> value, bool& tryNext, bool passedToJSImpl = false);
bool
TrySetToCompositeOperationOrAutoSequence(JSContext* cx_, JS::Handle<JS::Value> value, bool& tryNext, bool passedToJSImpl = false);
void
DestroyCompositeOperationOrAutoSequence();
};
class DoubleOrNullOrDoubleOrNullSequence : public AllUnionBase
{
enum TypeOrUninit
{
eUninitialized,
eNull,
eDouble,
eDoubleOrNullSequence
};
public:
enum class Type
{
eNull = TypeOrUninit::eNull,
eDouble = TypeOrUninit::eDouble,
eDoubleOrNullSequence = TypeOrUninit::eDoubleOrNullSequence
};
private:
union Value
{
UnionMember<double > mDouble;
UnionMember<binding_detail::AutoSequence<Nullable<double>> > mDoubleOrNullSequence;
};
TypeOrUninit mType;
Value mValue;
DoubleOrNullOrDoubleOrNullSequence(const DoubleOrNullOrDoubleOrNullSequence&) = delete;
DoubleOrNullOrDoubleOrNullSequence& operator=(const DoubleOrNullOrDoubleOrNullSequence&) = delete;
public:
explicit inline DoubleOrNullOrDoubleOrNullSequence()
: mType(eUninitialized)
{
}
inline ~DoubleOrNullOrDoubleOrNullSequence()
{
Uninit();
}
inline bool
IsNull() const
{
return mType == eNull;
}
inline void
SetNull()
{
Uninit();
mType = eNull;
}
[[nodiscard]] inline double&
RawSetAsDouble()
{
if (mType == eDouble) {
return mValue.mDouble.Value();
}
MOZ_ASSERT(mType == eUninitialized);
mType = eDouble;
return mValue.mDouble.SetValue();
}
[[nodiscard]] inline double&
SetAsDouble()
{
if (mType == eDouble) {
return mValue.mDouble.Value();
}
Uninit();
mType = eDouble;
return mValue.mDouble.SetValue();
}
inline bool
IsDouble() const
{
return mType == eDouble;
}
inline double&
GetAsDouble()
{
MOZ_RELEASE_ASSERT(IsDouble(), "Wrong type!");
return mValue.mDouble.Value();
}
inline double
GetAsDouble() const
{
MOZ_RELEASE_ASSERT(IsDouble(), "Wrong type!");
return mValue.mDouble.Value();
}
[[nodiscard]] inline binding_detail::AutoSequence<Nullable<double>>&
RawSetAsDoubleOrNullSequence()
{
if (mType == eDoubleOrNullSequence) {
return mValue.mDoubleOrNullSequence.Value();
}
MOZ_ASSERT(mType == eUninitialized);
mType = eDoubleOrNullSequence;
return mValue.mDoubleOrNullSequence.SetValue();
}
[[nodiscard]] inline binding_detail::AutoSequence<Nullable<double>>&
SetAsDoubleOrNullSequence()
{
if (mType == eDoubleOrNullSequence) {
return mValue.mDoubleOrNullSequence.Value();
}
Uninit();
mType = eDoubleOrNullSequence;
return mValue.mDoubleOrNullSequence.SetValue();
}
inline bool
IsDoubleOrNullSequence() const
{
return mType == eDoubleOrNullSequence;
}
inline binding_detail::AutoSequence<Nullable<double>>&
GetAsDoubleOrNullSequence()
{
MOZ_RELEASE_ASSERT(IsDoubleOrNullSequence(), "Wrong type!");
return mValue.mDoubleOrNullSequence.Value();
}
inline const Sequence<Nullable<double>>&
GetAsDoubleOrNullSequence() const
{
MOZ_RELEASE_ASSERT(IsDoubleOrNullSequence(), "Wrong type!");
return mValue.mDoubleOrNullSequence.Value();
}
bool
Init(BindingCallContext& cx, JS::Handle<JS::Value> value, const char* sourceDescription = "Value", bool passedToJSImpl = false);
bool
Init(JSContext* cx_, JS::Handle<JS::Value> value, const char* sourceDescription = "Value", bool passedToJSImpl = false);
inline void
Uninit()
{
switch (mType) {
case eUninitialized: {
break;
}
case eNull: {
break;
}
case eDouble: {
DestroyDouble();
break;
}
case eDoubleOrNullSequence: {
DestroyDoubleOrNullSequence();
break;
}
}
}
bool
ToJSVal(JSContext* cx, JS::Handle<JSObject*> scopeObj, JS::MutableHandle<JS::Value> rval) const;
private:
bool
TrySetToDouble(BindingCallContext& cx, JS::Handle<JS::Value> value, bool& tryNext, bool passedToJSImpl = false);
bool
TrySetToDouble(JSContext* cx_, JS::Handle<JS::Value> value, bool& tryNext, bool passedToJSImpl = false);
inline void
DestroyDouble()
{
MOZ_RELEASE_ASSERT(IsDouble(), "Wrong type!");
mValue.mDouble.Destroy();
mType = eUninitialized;
}
bool
TrySetToDoubleOrNullSequence(BindingCallContext& cx, JS::Handle<JS::Value> value, bool& tryNext, bool passedToJSImpl = false);
bool
TrySetToDoubleOrNullSequence(JSContext* cx_, JS::Handle<JS::Value> value, bool& tryNext, bool passedToJSImpl = false);
inline void
DestroyDoubleOrNullSequence()
{
MOZ_RELEASE_ASSERT(IsDoubleOrNullSequence(), "Wrong type!");
mValue.mDoubleOrNullSequence.Destroy();
mType = eUninitialized;
}
};
class OwningDoubleOrNullOrDoubleOrNullSequence : public AllOwningUnionBase
{
enum TypeOrUninit
{
eUninitialized,
eNull,
eDouble,
eDoubleOrNullSequence
};
public:
enum class Type
{
eNull = TypeOrUninit::eNull,
eDouble = TypeOrUninit::eDouble,
eDoubleOrNullSequence = TypeOrUninit::eDoubleOrNullSequence
};
private:
union Value
{
UnionMember<double > mDouble;
UnionMember<Sequence<Nullable<double>> > mDoubleOrNullSequence;
};
TypeOrUninit mType;
Value mValue;
public:
explicit inline OwningDoubleOrNullOrDoubleOrNullSequence()
: mType(eUninitialized)
{
}
OwningDoubleOrNullOrDoubleOrNullSequence(OwningDoubleOrNullOrDoubleOrNullSequence&& aOther);
explicit inline OwningDoubleOrNullOrDoubleOrNullSequence(const OwningDoubleOrNullOrDoubleOrNullSequence& aOther)
: mType(eUninitialized)
{
*this = aOther;
}
inline ~OwningDoubleOrNullOrDoubleOrNullSequence()
{
Uninit();
}
inline bool
IsNull() const
{
return mType == eNull;
}
inline void
SetNull()
{
Uninit();
mType = eNull;
}
[[nodiscard]] double&
RawSetAsDouble();
[[nodiscard]] double&
SetAsDouble();
inline bool
IsDouble() const
{
return mType == eDouble;
}
inline double&
GetAsDouble()
{
MOZ_RELEASE_ASSERT(IsDouble(), "Wrong type!");
return mValue.mDouble.Value();
}
inline double const &
GetAsDouble() const
{
MOZ_RELEASE_ASSERT(IsDouble(), "Wrong type!");
return mValue.mDouble.Value();
}
[[nodiscard]] Sequence<Nullable<double>>&
RawSetAsDoubleOrNullSequence();
[[nodiscard]] Sequence<Nullable<double>>&
SetAsDoubleOrNullSequence();
inline bool
IsDoubleOrNullSequence() const
{
return mType == eDoubleOrNullSequence;
}
inline Sequence<Nullable<double>>&
GetAsDoubleOrNullSequence()
{
MOZ_RELEASE_ASSERT(IsDoubleOrNullSequence(), "Wrong type!");
return mValue.mDoubleOrNullSequence.Value();
}
inline Sequence<Nullable<double>> const &
GetAsDoubleOrNullSequence() const
{
MOZ_RELEASE_ASSERT(IsDoubleOrNullSequence(), "Wrong type!");
return mValue.mDoubleOrNullSequence.Value();
}
bool
Init(BindingCallContext& cx, JS::Handle<JS::Value> value, const char* sourceDescription = "Value", bool passedToJSImpl = false);
bool
Init(JSContext* cx_, JS::Handle<JS::Value> value, const char* sourceDescription = "Value", bool passedToJSImpl = false);
void
Uninit();
bool
ToJSVal(JSContext* cx, JS::Handle<JSObject*> scopeObj, JS::MutableHandle<JS::Value> rval) const;
OwningDoubleOrNullOrDoubleOrNullSequence&
operator=(OwningDoubleOrNullOrDoubleOrNullSequence&& aOther);
inline Type
GetType() const
{
MOZ_RELEASE_ASSERT(mType != eUninitialized);
return static_cast<Type>(mType);
}
OwningDoubleOrNullOrDoubleOrNullSequence&
operator=(const OwningDoubleOrNullOrDoubleOrNullSequence& aOther);
private:
bool
TrySetToDouble(BindingCallContext& cx, JS::Handle<JS::Value> value, bool& tryNext, bool passedToJSImpl = false);
bool
TrySetToDouble(JSContext* cx_, JS::Handle<JS::Value> value, bool& tryNext, bool passedToJSImpl = false);
void
DestroyDouble();
bool
TrySetToDoubleOrNullSequence(BindingCallContext& cx, JS::Handle<JS::Value> value, bool& tryNext, bool passedToJSImpl = false);
bool
TrySetToDoubleOrNullSequence(JSContext* cx_, JS::Handle<JS::Value> value, bool& tryNext, bool passedToJSImpl = false);
void
DestroyDoubleOrNullSequence();
};
struct BaseComputedKeyframe : public BaseKeyframe
{
MOZ_INIT_OUTSIDE_CTOR Optional<double> mComputedOffset;
BaseComputedKeyframe();
explicit inline BaseComputedKeyframe(const FastDictionaryInitializer& )
: BaseKeyframe(FastDictionaryInitializer())
{
// Do nothing here; this is used by our "Fast" subclass
}
BaseComputedKeyframe(BaseComputedKeyframe&& aOther) = default;
explicit inline BaseComputedKeyframe(const BaseComputedKeyframe& aOther)
: BaseKeyframe(FastDictionaryInitializer())
{
*this = aOther;
}
bool
Init(const char* sourceDescription = "Value", bool passedToJSImpl = false);
bool
ToObjectInternal(JSContext* cx, JS::MutableHandle<JS::Value> rval) const;
void
TraceDictionary(JSTracer* trc);
BaseComputedKeyframe&
operator=(const BaseComputedKeyframe& aOther);
bool
operator==(const BaseComputedKeyframe& aOther) const;
private:
static bool
InitIds(JSContext* cx, BaseComputedKeyframeAtoms* atomsCache);
};
namespace binding_detail {
struct FastBaseComputedKeyframe : public BaseComputedKeyframe
{
inline FastBaseComputedKeyframe()
: BaseComputedKeyframe(FastDictionaryInitializer())
{
// Doesn't matter what int we pass to the parent constructor
}
};
} // namespace binding_detail
struct BasePropertyIndexedKeyframe : public DictionaryBase
{
MOZ_INIT_OUTSIDE_CTOR OwningCompositeOperationOrAutoOrCompositeOperationOrAutoSequence mComposite;
MOZ_INIT_OUTSIDE_CTOR OwningUTF8StringOrUTF8StringSequence mEasing;
MOZ_INIT_OUTSIDE_CTOR OwningDoubleOrNullOrDoubleOrNullSequence mOffset;
BasePropertyIndexedKeyframe();
explicit inline BasePropertyIndexedKeyframe(const FastDictionaryInitializer& )
{
// Do nothing here; this is used by our "Fast" subclass
}
BasePropertyIndexedKeyframe(BasePropertyIndexedKeyframe&& aOther) = default;
explicit inline BasePropertyIndexedKeyframe(const BasePropertyIndexedKeyframe& aOther)
{
*this = aOther;
}
bool
Init(BindingCallContext& cx, JS::Handle<JS::Value> val, const char* sourceDescription = "Value", bool passedToJSImpl = false);
bool
Init(JSContext* cx_, JS::Handle<JS::Value> val, const char* sourceDescription = "Value", bool passedToJSImpl = false);
void
TraceDictionary(JSTracer* trc);
BasePropertyIndexedKeyframe&
operator=(const BasePropertyIndexedKeyframe& aOther);
private:
static bool
InitIds(JSContext* cx, BasePropertyIndexedKeyframeAtoms* atomsCache);
};
namespace binding_detail {
struct FastBasePropertyIndexedKeyframe : public BasePropertyIndexedKeyframe
{
inline FastBasePropertyIndexedKeyframe()
: BasePropertyIndexedKeyframe(FastDictionaryInitializer())
{
// Doesn't matter what int we pass to the parent constructor
}
};
} // namespace binding_detail
} // namespace dom
template <>
struct MaxContiguousEnumValue<dom::CompositeOperation>
{
static constexpr dom::CompositeOperation value = dom::CompositeOperation::Accumulate;
static_assert(static_cast<uint8_t>(dom::CompositeOperation::Replace) == 0,
"We rely on this in ContiguousEnumValues");
static_assert(mozilla::ArrayLength(dom::binding_detail::EnumStrings<dom::CompositeOperation>::Values) - 1 == UnderlyingValue(value),
"Mismatch between enum strings and enum count");
};
template <>
struct MaxContiguousEnumValue<dom::CompositeOperationOrAuto>
{
static constexpr dom::CompositeOperationOrAuto value = dom::CompositeOperationOrAuto::Auto;
static_assert(static_cast<uint8_t>(dom::CompositeOperationOrAuto::Replace) == 0,
"We rely on this in ContiguousEnumValues");
static_assert(mozilla::ArrayLength(dom::binding_detail::EnumStrings<dom::CompositeOperationOrAuto>::Values) - 1 == UnderlyingValue(value),
"Mismatch between enum strings and enum count");
};
} // namespace mozilla
#endif // DOM_BASEKEYFRAMETYPESBINDING_H_