TestInterfaceIterableDoubleUnion.cpp (2601B)
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/TestInterfaceIterableDoubleUnion.h" 8 9 #include "mozilla/dom/BindingUtils.h" 10 #include "mozilla/dom/TestInterfaceJSMaplikeSetlikeIterableBinding.h" 11 #include "mozilla/dom/UnionTypes.h" 12 #include "nsPIDOMWindow.h" 13 14 namespace mozilla::dom { 15 16 NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE(TestInterfaceIterableDoubleUnion, mParent) 17 18 NS_IMPL_CYCLE_COLLECTING_ADDREF(TestInterfaceIterableDoubleUnion) 19 NS_IMPL_CYCLE_COLLECTING_RELEASE(TestInterfaceIterableDoubleUnion) 20 21 NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(TestInterfaceIterableDoubleUnion) 22 NS_WRAPPERCACHE_INTERFACE_MAP_ENTRY 23 NS_INTERFACE_MAP_ENTRY(nsISupports) 24 NS_INTERFACE_MAP_END 25 26 TestInterfaceIterableDoubleUnion::TestInterfaceIterableDoubleUnion( 27 nsPIDOMWindowInner* aParent) 28 : mParent(aParent) { 29 OwningStringOrLong a; 30 a.SetAsLong() = 1; 31 mValues.AppendElement(std::pair<nsString, OwningStringOrLong>(u"long"_ns, a)); 32 a.SetAsString() = u"a"_ns; 33 mValues.AppendElement( 34 std::pair<nsString, OwningStringOrLong>(u"string"_ns, a)); 35 } 36 37 // static 38 already_AddRefed<TestInterfaceIterableDoubleUnion> 39 TestInterfaceIterableDoubleUnion::Constructor(const GlobalObject& aGlobal, 40 ErrorResult& aRv) { 41 nsCOMPtr<nsPIDOMWindowInner> window = 42 do_QueryInterface(aGlobal.GetAsSupports()); 43 if (!window) { 44 aRv.Throw(NS_ERROR_FAILURE); 45 return nullptr; 46 } 47 48 RefPtr<TestInterfaceIterableDoubleUnion> r = 49 new TestInterfaceIterableDoubleUnion(window); 50 return r.forget(); 51 } 52 53 JSObject* TestInterfaceIterableDoubleUnion::WrapObject( 54 JSContext* aCx, JS::Handle<JSObject*> aGivenProto) { 55 return TestInterfaceIterableDoubleUnion_Binding::Wrap(aCx, this, aGivenProto); 56 } 57 58 nsPIDOMWindowInner* TestInterfaceIterableDoubleUnion::GetParentObject() const { 59 return mParent; 60 } 61 62 size_t TestInterfaceIterableDoubleUnion::GetIterableLength() { 63 return mValues.Length(); 64 } 65 66 nsAString& TestInterfaceIterableDoubleUnion::GetKeyAtIndex(uint32_t aIndex) { 67 MOZ_ASSERT(aIndex < mValues.Length()); 68 return mValues.ElementAt(aIndex).first; 69 } 70 71 OwningStringOrLong& TestInterfaceIterableDoubleUnion::GetValueAtIndex( 72 uint32_t aIndex) { 73 MOZ_ASSERT(aIndex < mValues.Length()); 74 return mValues.ElementAt(aIndex).second; 75 } 76 77 } // namespace mozilla::dom