1 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 /* vim: set ts=8 sts=2 et sw=2 tw=80: */
3 /* This Source Code Form is subject to the terms of the Mozilla Public
4 * License, v. 2.0. If a copy of the MPL was not distributed with this file,
5 * You can obtain one at http://mozilla.org/MPL/2.0/. */
7 #include "mozilla/dom/TestInterfaceObservableArray.h"
8 #include "mozilla/dom/TestInterfaceObservableArrayBinding.h"
9 #include "nsPIDOMWindow.h"
10 #include "mozilla/dom/BindingUtils.h"
12 namespace mozilla::dom
{
14 NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE(TestInterfaceObservableArray
, mParent
,
16 mDeleteBooleanCallback
,
17 mSetObjectCallback
, mDeleteObjectCallback
,
18 mSetInterfaceCallback
,
19 mDeleteInterfaceCallback
)
21 NS_IMPL_CYCLE_COLLECTING_ADDREF(TestInterfaceObservableArray
)
22 NS_IMPL_CYCLE_COLLECTING_RELEASE(TestInterfaceObservableArray
)
24 NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(TestInterfaceObservableArray
)
25 NS_WRAPPERCACHE_INTERFACE_MAP_ENTRY
26 NS_INTERFACE_MAP_ENTRY(nsISupports
)
29 TestInterfaceObservableArray::TestInterfaceObservableArray(
30 nsPIDOMWindowInner
* aParent
, const ObservableArrayCallbacks
& aCallbacks
)
32 if (aCallbacks
.mSetBooleanCallback
.WasPassed()) {
33 mSetBooleanCallback
= &aCallbacks
.mSetBooleanCallback
.Value();
35 if (aCallbacks
.mDeleteBooleanCallback
.WasPassed()) {
36 mDeleteBooleanCallback
= &aCallbacks
.mDeleteBooleanCallback
.Value();
38 if (aCallbacks
.mSetObjectCallback
.WasPassed()) {
39 mSetObjectCallback
= &aCallbacks
.mSetObjectCallback
.Value();
41 if (aCallbacks
.mDeleteObjectCallback
.WasPassed()) {
42 mDeleteObjectCallback
= &aCallbacks
.mDeleteObjectCallback
.Value();
44 if (aCallbacks
.mSetInterfaceCallback
.WasPassed()) {
45 mSetInterfaceCallback
= &aCallbacks
.mSetInterfaceCallback
.Value();
47 if (aCallbacks
.mDeleteInterfaceCallback
.WasPassed()) {
48 mDeleteInterfaceCallback
= &aCallbacks
.mDeleteInterfaceCallback
.Value();
53 already_AddRefed
<TestInterfaceObservableArray
>
54 TestInterfaceObservableArray::Constructor(
55 const GlobalObject
& aGlobal
, const ObservableArrayCallbacks
& aCallbacks
,
57 nsCOMPtr
<nsPIDOMWindowInner
> window
=
58 do_QueryInterface(aGlobal
.GetAsSupports());
60 aRv
.Throw(NS_ERROR_FAILURE
);
64 RefPtr
<TestInterfaceObservableArray
> r
=
65 new TestInterfaceObservableArray(window
, aCallbacks
);
69 JSObject
* TestInterfaceObservableArray::WrapObject(
70 JSContext
* aCx
, JS::Handle
<JSObject
*> aGivenProto
) {
71 return TestInterfaceObservableArray_Binding::Wrap(aCx
, this, aGivenProto
);
74 nsPIDOMWindowInner
* TestInterfaceObservableArray::GetParentObject() const {
78 void TestInterfaceObservableArray::OnSetObservableArrayObject(
79 JSContext
* aCx
, JS::Handle
<JSObject
*> aValue
, uint32_t aIndex
,
81 if (mSetObjectCallback
) {
82 MOZ_KnownLive(mSetObjectCallback
)
83 ->Call(aValue
, aIndex
, aRv
, "OnSetObservableArrayObject",
84 CallbackFunction::eRethrowExceptions
);
88 void TestInterfaceObservableArray::OnDeleteObservableArrayObject(
89 JSContext
* aCx
, JS::Handle
<JSObject
*> aValue
, uint32_t aIndex
,
91 if (mDeleteObjectCallback
) {
92 MOZ_KnownLive(mDeleteObjectCallback
)
93 ->Call(aValue
, aIndex
, aRv
, "OnDeleteObservableArrayObject",
94 CallbackFunction::eRethrowExceptions
);
98 void TestInterfaceObservableArray::OnSetObservableArrayBoolean(
99 bool aValue
, uint32_t aIndex
, ErrorResult
& aRv
) {
100 if (mSetBooleanCallback
) {
101 MOZ_KnownLive(mSetBooleanCallback
)
102 ->Call(aValue
, aIndex
, aRv
, "OnSetObservableArrayBoolean",
103 CallbackFunction::eRethrowExceptions
);
107 void TestInterfaceObservableArray::OnDeleteObservableArrayBoolean(
108 bool aValue
, uint32_t aIndex
, ErrorResult
& aRv
) {
109 if (mDeleteBooleanCallback
) {
110 MOZ_KnownLive(mDeleteBooleanCallback
)
111 ->Call(aValue
, aIndex
, aRv
, "OnDeleteObservableArrayBoolean",
112 CallbackFunction::eRethrowExceptions
);
116 void TestInterfaceObservableArray::OnSetObservableArrayInterface(
117 TestInterfaceObservableArray
* aValue
, uint32_t aIndex
, ErrorResult
& aRv
) {
118 if (mSetInterfaceCallback
&& aValue
) {
119 MOZ_KnownLive(mSetInterfaceCallback
)
120 ->Call(*aValue
, aIndex
, aRv
, "OnSetObservableArrayInterface",
121 CallbackFunction::eRethrowExceptions
);
125 void TestInterfaceObservableArray::OnDeleteObservableArrayInterface(
126 TestInterfaceObservableArray
* aValue
, uint32_t aIndex
, ErrorResult
& aRv
) {
127 if (mDeleteInterfaceCallback
&& aValue
) {
128 MOZ_KnownLive(mDeleteInterfaceCallback
)
129 ->Call(*aValue
, aIndex
, aRv
, "OnDeleteObservableArrayInterface",
130 CallbackFunction::eRethrowExceptions
);
134 bool TestInterfaceObservableArray::BooleanElementAtInternal(uint32_t aIndex
,
136 return TestInterfaceObservableArray_Binding::ObservableArrayBooleanHelpers::
137 ElementAt(this, aIndex
, aRv
);
140 void TestInterfaceObservableArray::ObjectElementAtInternal(
141 JSContext
* aCx
, uint32_t aIndex
, JS::MutableHandle
<JSObject
*> aValue
,
143 TestInterfaceObservableArray_Binding::ObservableArrayObjectHelpers::ElementAt(
144 this, aCx
, aIndex
, aValue
, aRv
);
147 already_AddRefed
<TestInterfaceObservableArray
>
148 TestInterfaceObservableArray::InterfaceElementAtInternal(uint32_t aIndex
,
150 return TestInterfaceObservableArray_Binding::ObservableArrayInterfaceHelpers::
151 ElementAt(this, aIndex
, aRv
);
154 void TestInterfaceObservableArray::BooleanReplaceElementAtInternal(
155 uint32_t aIndex
, bool aValue
, ErrorResult
& aRv
) {
156 TestInterfaceObservableArray_Binding::ObservableArrayBooleanHelpers::
157 ReplaceElementAt(this, aIndex
, aValue
, aRv
);
160 void TestInterfaceObservableArray::ObjectReplaceElementAtInternal(
161 JSContext
* aCx
, uint32_t aIndex
, JS::Handle
<JSObject
*> aValue
,
163 TestInterfaceObservableArray_Binding::ObservableArrayObjectHelpers::
164 ReplaceElementAt(this, aIndex
, aValue
, aRv
);
167 void TestInterfaceObservableArray::InterfaceReplaceElementAtInternal(
168 uint32_t aIndex
, TestInterfaceObservableArray
& aValue
, ErrorResult
& aRv
) {
169 TestInterfaceObservableArray_Binding::ObservableArrayInterfaceHelpers::
170 ReplaceElementAt(this, aIndex
, aValue
, aRv
);
173 void TestInterfaceObservableArray::BooleanAppendElementInternal(
174 bool aValue
, ErrorResult
& aRv
) {
175 TestInterfaceObservableArray_Binding::ObservableArrayBooleanHelpers::
176 AppendElement(this, aValue
, aRv
);
179 void TestInterfaceObservableArray::ObjectAppendElementInternal(
180 JSContext
* aCx
, JS::Handle
<JSObject
*> aValue
, ErrorResult
& aRv
) {
181 TestInterfaceObservableArray_Binding::ObservableArrayObjectHelpers::
182 AppendElement(this, aValue
, aRv
);
185 void TestInterfaceObservableArray::InterfaceAppendElementInternal(
186 TestInterfaceObservableArray
& aValue
, ErrorResult
& aRv
) {
187 TestInterfaceObservableArray_Binding::ObservableArrayInterfaceHelpers::
188 AppendElement(this, aValue
, aRv
);
191 void TestInterfaceObservableArray::BooleanRemoveLastElementInternal(
193 TestInterfaceObservableArray_Binding::ObservableArrayBooleanHelpers::
194 RemoveLastElement(this, aRv
);
197 void TestInterfaceObservableArray::ObjectRemoveLastElementInternal(
199 TestInterfaceObservableArray_Binding::ObservableArrayObjectHelpers::
200 RemoveLastElement(this, aRv
);
203 void TestInterfaceObservableArray::InterfaceRemoveLastElementInternal(
205 TestInterfaceObservableArray_Binding::ObservableArrayInterfaceHelpers::
206 RemoveLastElement(this, aRv
);
209 uint32_t TestInterfaceObservableArray::BooleanLengthInternal(ErrorResult
& aRv
) {
210 return TestInterfaceObservableArray_Binding::ObservableArrayBooleanHelpers::
214 uint32_t TestInterfaceObservableArray::ObjectLengthInternal(ErrorResult
& aRv
) {
215 return TestInterfaceObservableArray_Binding::ObservableArrayObjectHelpers::
219 uint32_t TestInterfaceObservableArray::InterfaceLengthInternal(
221 return TestInterfaceObservableArray_Binding::ObservableArrayInterfaceHelpers::
225 } // namespace mozilla::dom