TestReflectedHTMLAttribute.cpp (2183B)
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/TestReflectedHTMLAttribute.h" 8 9 #include "mozilla/dom/TestFunctionsBinding.h" 10 11 namespace mozilla::dom { 12 13 NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE(TestReflectedHTMLAttribute, 14 mCachedElements, mNewElements) 15 16 /* static */ 17 already_AddRefed<TestReflectedHTMLAttribute> 18 TestReflectedHTMLAttribute::Constructor(GlobalObject& aGlobal) { 19 return MakeAndAddRef<TestReflectedHTMLAttribute>(); 20 } 21 22 template <typename ArrayLike> 23 static void AssignElements(const ArrayLike& aFrom, 24 Nullable<nsTArray<RefPtr<Element>>>& aTo) { 25 if (aTo.IsNull()) { 26 aTo.SetValue(); 27 } else { 28 aTo.Value().Clear(); 29 } 30 aTo.Value().AppendElements(aFrom); 31 } 32 33 void TestReflectedHTMLAttribute::GetReflectedHTMLAttribute( 34 bool* aUseCachedValue, Nullable<nsTArray<RefPtr<Element>>>& aResult) { 35 if (aUseCachedValue) { 36 if (mCachedElements == mNewElements) { 37 *aUseCachedValue = true; 38 return; 39 } 40 41 *aUseCachedValue = false; 42 } 43 44 if (mNewElements.IsNull()) { 45 mCachedElements.SetNull(); 46 aResult.SetNull(); 47 } else { 48 AssignElements(mNewElements.Value(), mCachedElements); 49 aResult.SetValue(mCachedElements.Value().Clone()); 50 } 51 } 52 53 void TestReflectedHTMLAttribute::SetReflectedHTMLAttribute( 54 const Nullable<Sequence<OwningNonNull<Element>>>& aValue) { 55 // We're just testing getters, so do nothing. But this would either clear or 56 // set the "explicitly set attr-elements". 57 } 58 59 void TestReflectedHTMLAttribute::SetReflectedHTMLAttributeValue( 60 const Sequence<OwningNonNull<Element>>& aElements) { 61 AssignElements(aElements, mNewElements); 62 } 63 64 JSObject* TestReflectedHTMLAttribute::WrapObject( 65 JSContext* aCx, JS::Handle<JSObject*> aGivenProto) { 66 return TestReflectedHTMLAttribute_Binding::Wrap(aCx, this, aGivenProto); 67 } 68 69 } // namespace mozilla::dom