TestInterfaceObservableArray.cpp (8630B)
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/. */ 6 7 #include "mozilla/dom/TestInterfaceObservableArray.h" 8 9 #include "mozilla/dom/BindingUtils.h" 10 #include "mozilla/dom/TestInterfaceObservableArrayBinding.h" 11 #include "nsPIDOMWindow.h" 12 13 namespace mozilla::dom { 14 15 NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE(TestInterfaceObservableArray, mParent, 16 mSetBooleanCallback, 17 mDeleteBooleanCallback, 18 mSetObjectCallback, mDeleteObjectCallback, 19 mSetInterfaceCallback, 20 mDeleteInterfaceCallback) 21 22 NS_IMPL_CYCLE_COLLECTING_ADDREF(TestInterfaceObservableArray) 23 NS_IMPL_CYCLE_COLLECTING_RELEASE(TestInterfaceObservableArray) 24 25 NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(TestInterfaceObservableArray) 26 NS_WRAPPERCACHE_INTERFACE_MAP_ENTRY 27 NS_INTERFACE_MAP_ENTRY(nsISupports) 28 NS_INTERFACE_MAP_END 29 30 TestInterfaceObservableArray::TestInterfaceObservableArray( 31 nsPIDOMWindowInner* aParent, const ObservableArrayCallbacks& aCallbacks) 32 : mParent(aParent) { 33 if (aCallbacks.mSetBooleanCallback.WasPassed()) { 34 mSetBooleanCallback = &aCallbacks.mSetBooleanCallback.Value(); 35 } 36 if (aCallbacks.mDeleteBooleanCallback.WasPassed()) { 37 mDeleteBooleanCallback = &aCallbacks.mDeleteBooleanCallback.Value(); 38 } 39 if (aCallbacks.mSetObjectCallback.WasPassed()) { 40 mSetObjectCallback = &aCallbacks.mSetObjectCallback.Value(); 41 } 42 if (aCallbacks.mDeleteObjectCallback.WasPassed()) { 43 mDeleteObjectCallback = &aCallbacks.mDeleteObjectCallback.Value(); 44 } 45 if (aCallbacks.mSetInterfaceCallback.WasPassed()) { 46 mSetInterfaceCallback = &aCallbacks.mSetInterfaceCallback.Value(); 47 } 48 if (aCallbacks.mDeleteInterfaceCallback.WasPassed()) { 49 mDeleteInterfaceCallback = &aCallbacks.mDeleteInterfaceCallback.Value(); 50 } 51 } 52 53 // static 54 already_AddRefed<TestInterfaceObservableArray> 55 TestInterfaceObservableArray::Constructor( 56 const GlobalObject& aGlobal, const ObservableArrayCallbacks& aCallbacks, 57 ErrorResult& aRv) { 58 nsCOMPtr<nsPIDOMWindowInner> window = 59 do_QueryInterface(aGlobal.GetAsSupports()); 60 if (!window) { 61 aRv.Throw(NS_ERROR_FAILURE); 62 return nullptr; 63 } 64 65 RefPtr<TestInterfaceObservableArray> r = 66 new TestInterfaceObservableArray(window, aCallbacks); 67 return r.forget(); 68 } 69 70 JSObject* TestInterfaceObservableArray::WrapObject( 71 JSContext* aCx, JS::Handle<JSObject*> aGivenProto) { 72 return TestInterfaceObservableArray_Binding::Wrap(aCx, this, aGivenProto); 73 } 74 75 nsPIDOMWindowInner* TestInterfaceObservableArray::GetParentObject() const { 76 return mParent; 77 } 78 79 void TestInterfaceObservableArray::OnSetObservableArrayObject( 80 JSContext* aCx, JS::Handle<JSObject*> aValue, uint32_t aIndex, 81 ErrorResult& aRv) { 82 if (mSetObjectCallback) { 83 MOZ_KnownLive(mSetObjectCallback) 84 ->Call(aValue, aIndex, aRv, "OnSetObservableArrayObject", 85 CallbackFunction::eRethrowExceptions); 86 } 87 } 88 89 void TestInterfaceObservableArray::OnDeleteObservableArrayObject( 90 JSContext* aCx, JS::Handle<JSObject*> aValue, uint32_t aIndex, 91 ErrorResult& aRv) { 92 if (mDeleteObjectCallback) { 93 MOZ_KnownLive(mDeleteObjectCallback) 94 ->Call(aValue, aIndex, aRv, "OnDeleteObservableArrayObject", 95 CallbackFunction::eRethrowExceptions); 96 } 97 } 98 99 void TestInterfaceObservableArray::OnSetObservableArrayBoolean( 100 bool aValue, uint32_t aIndex, ErrorResult& aRv) { 101 if (mSetBooleanCallback) { 102 MOZ_KnownLive(mSetBooleanCallback) 103 ->Call(aValue, aIndex, aRv, "OnSetObservableArrayBoolean", 104 CallbackFunction::eRethrowExceptions); 105 } 106 } 107 108 void TestInterfaceObservableArray::OnDeleteObservableArrayBoolean( 109 bool aValue, uint32_t aIndex, ErrorResult& aRv) { 110 if (mDeleteBooleanCallback) { 111 MOZ_KnownLive(mDeleteBooleanCallback) 112 ->Call(aValue, aIndex, aRv, "OnDeleteObservableArrayBoolean", 113 CallbackFunction::eRethrowExceptions); 114 } 115 } 116 117 void TestInterfaceObservableArray::OnSetObservableArrayInterface( 118 TestInterfaceObservableArray* aValue, uint32_t aIndex, ErrorResult& aRv) { 119 if (mSetInterfaceCallback && aValue) { 120 MOZ_KnownLive(mSetInterfaceCallback) 121 ->Call(*aValue, aIndex, aRv, "OnSetObservableArrayInterface", 122 CallbackFunction::eRethrowExceptions); 123 } 124 } 125 126 void TestInterfaceObservableArray::OnDeleteObservableArrayInterface( 127 TestInterfaceObservableArray* aValue, uint32_t aIndex, ErrorResult& aRv) { 128 if (mDeleteInterfaceCallback && aValue) { 129 MOZ_KnownLive(mDeleteInterfaceCallback) 130 ->Call(*aValue, aIndex, aRv, "OnDeleteObservableArrayInterface", 131 CallbackFunction::eRethrowExceptions); 132 } 133 } 134 135 bool TestInterfaceObservableArray::BooleanElementAtInternal(uint32_t aIndex, 136 ErrorResult& aRv) { 137 return TestInterfaceObservableArray_Binding::ObservableArrayBooleanHelpers:: 138 ElementAt(this, aIndex, aRv); 139 } 140 141 void TestInterfaceObservableArray::ObjectElementAtInternal( 142 JSContext* aCx, uint32_t aIndex, JS::MutableHandle<JSObject*> aValue, 143 ErrorResult& aRv) { 144 TestInterfaceObservableArray_Binding::ObservableArrayObjectHelpers::ElementAt( 145 this, aCx, aIndex, aValue, aRv); 146 } 147 148 already_AddRefed<TestInterfaceObservableArray> 149 TestInterfaceObservableArray::InterfaceElementAtInternal(uint32_t aIndex, 150 ErrorResult& aRv) { 151 return TestInterfaceObservableArray_Binding::ObservableArrayInterfaceHelpers:: 152 ElementAt(this, aIndex, aRv); 153 } 154 155 void TestInterfaceObservableArray::BooleanReplaceElementAtInternal( 156 uint32_t aIndex, bool aValue, ErrorResult& aRv) { 157 TestInterfaceObservableArray_Binding::ObservableArrayBooleanHelpers:: 158 ReplaceElementAt(this, aIndex, aValue, aRv); 159 } 160 161 void TestInterfaceObservableArray::ObjectReplaceElementAtInternal( 162 JSContext* aCx, uint32_t aIndex, JS::Handle<JSObject*> aValue, 163 ErrorResult& aRv) { 164 TestInterfaceObservableArray_Binding::ObservableArrayObjectHelpers:: 165 ReplaceElementAt(this, aIndex, aValue, aRv); 166 } 167 168 void TestInterfaceObservableArray::InterfaceReplaceElementAtInternal( 169 uint32_t aIndex, TestInterfaceObservableArray& aValue, ErrorResult& aRv) { 170 TestInterfaceObservableArray_Binding::ObservableArrayInterfaceHelpers:: 171 ReplaceElementAt(this, aIndex, aValue, aRv); 172 } 173 174 void TestInterfaceObservableArray::BooleanAppendElementInternal( 175 bool aValue, ErrorResult& aRv) { 176 TestInterfaceObservableArray_Binding::ObservableArrayBooleanHelpers:: 177 AppendElement(this, aValue, aRv); 178 } 179 180 void TestInterfaceObservableArray::ObjectAppendElementInternal( 181 JSContext* aCx, JS::Handle<JSObject*> aValue, ErrorResult& aRv) { 182 TestInterfaceObservableArray_Binding::ObservableArrayObjectHelpers:: 183 AppendElement(this, aValue, aRv); 184 } 185 186 void TestInterfaceObservableArray::InterfaceAppendElementInternal( 187 TestInterfaceObservableArray& aValue, ErrorResult& aRv) { 188 TestInterfaceObservableArray_Binding::ObservableArrayInterfaceHelpers:: 189 AppendElement(this, aValue, aRv); 190 } 191 192 void TestInterfaceObservableArray::BooleanRemoveLastElementInternal( 193 ErrorResult& aRv) { 194 TestInterfaceObservableArray_Binding::ObservableArrayBooleanHelpers:: 195 RemoveLastElement(this, aRv); 196 } 197 198 void TestInterfaceObservableArray::ObjectRemoveLastElementInternal( 199 ErrorResult& aRv) { 200 TestInterfaceObservableArray_Binding::ObservableArrayObjectHelpers:: 201 RemoveLastElement(this, aRv); 202 } 203 204 void TestInterfaceObservableArray::InterfaceRemoveLastElementInternal( 205 ErrorResult& aRv) { 206 TestInterfaceObservableArray_Binding::ObservableArrayInterfaceHelpers:: 207 RemoveLastElement(this, aRv); 208 } 209 210 uint32_t TestInterfaceObservableArray::BooleanLengthInternal(ErrorResult& aRv) { 211 return TestInterfaceObservableArray_Binding::ObservableArrayBooleanHelpers:: 212 Length(this, aRv); 213 } 214 215 uint32_t TestInterfaceObservableArray::ObjectLengthInternal(ErrorResult& aRv) { 216 return TestInterfaceObservableArray_Binding::ObservableArrayObjectHelpers:: 217 Length(this, aRv); 218 } 219 220 uint32_t TestInterfaceObservableArray::InterfaceLengthInternal( 221 ErrorResult& aRv) { 222 return TestInterfaceObservableArray_Binding::ObservableArrayInterfaceHelpers:: 223 Length(this, aRv); 224 } 225 226 } // namespace mozilla::dom