ViewTransitionTypeSet.cpp (2481B)
1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ 2 /* vim:set ts=2 sw=2 sts=2 et cindent: */ 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 5 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 6 7 #include "mozilla/dom/ViewTransitionTypeSet.h" 8 9 #include "mozilla/ErrorResult.h" 10 #include "mozilla/dom/ViewTransition.h" 11 #include "mozilla/dom/ViewTransitionBinding.h" 12 #include "nsISupportsImpl.h" 13 14 namespace mozilla::dom { 15 16 using namespace ViewTransitionTypeSet_Binding; 17 18 // Only needed for refcounted objects. 19 NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE(ViewTransitionTypeSet, mTransition) 20 NS_IMPL_CYCLE_COLLECTING_ADDREF(ViewTransitionTypeSet) 21 NS_IMPL_CYCLE_COLLECTING_RELEASE(ViewTransitionTypeSet) 22 NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(ViewTransitionTypeSet) 23 NS_WRAPPERCACHE_INTERFACE_MAP_ENTRY 24 NS_INTERFACE_MAP_ENTRY(nsISupports) 25 NS_INTERFACE_MAP_END 26 27 ViewTransitionTypeSet::ViewTransitionTypeSet(ViewTransition& aVt) 28 : mTransition(&aVt) {} 29 30 ViewTransitionTypeSet::~ViewTransitionTypeSet() = default; 31 32 nsISupports* ViewTransitionTypeSet::GetParentObject() const { 33 return mTransition.get(); 34 } 35 36 ViewTransitionTypeSet* ViewTransitionTypeSet::Add(const nsAString& aValue, 37 ErrorResult& aRv) { 38 if (SetlikeHelpers::Has(this, aValue, aRv) || aRv.Failed()) { 39 return this; 40 } 41 SetlikeHelpers::Add(this, aValue, aRv); 42 if (aRv.Failed()) { 43 return this; 44 } 45 RefPtr atom = NS_AtomizeMainThread(aValue); 46 MOZ_ASSERT(!mTransition->GetTypeList().Contains(atom)); 47 mTransition->GetTypeList().AppendElement(std::move(atom)); 48 return this; 49 } 50 void ViewTransitionTypeSet::Clear(ErrorResult& aRv) { 51 SetlikeHelpers::Clear(this, aRv); 52 if (aRv.Failed()) { 53 return; 54 } 55 mTransition->GetTypeList().Clear(); 56 } 57 bool ViewTransitionTypeSet::Delete(const nsAString& aValue, ErrorResult& aRv) { 58 if (!SetlikeHelpers::Delete(this, aValue, aRv) || aRv.Failed()) { 59 return false; 60 } 61 RefPtr atom = NS_AtomizeMainThread(aValue); 62 MOZ_ASSERT(mTransition->GetTypeList().Contains(atom)); 63 mTransition->GetTypeList().RemoveElement(atom); 64 return true; 65 } 66 67 JSObject* ViewTransitionTypeSet::WrapObject(JSContext* aCx, 68 JS::Handle<JSObject*> aGivenProto) { 69 return ViewTransitionTypeSet_Binding::Wrap(aCx, this, aGivenProto); 70 } 71 72 } // namespace mozilla::dom