tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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