CacheWorkerRef.h (1650B)
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 5 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 6 7 #ifndef mozilla_dom_cache_CacheWorkerRef_h 8 #define mozilla_dom_cache_CacheWorkerRef_h 9 10 #include "mozilla/dom/SafeRefPtr.h" 11 #include "nsISupportsImpl.h" 12 #include "nsTArray.h" 13 14 namespace mozilla::dom { 15 16 class IPCWorkerRef; 17 class StrongWorkerRef; 18 class WorkerPrivate; 19 20 namespace cache { 21 22 class ActorChild; 23 24 class CacheWorkerRef final : public SafeRefCounted<CacheWorkerRef> { 25 public: 26 enum Behavior { 27 eStrongWorkerRef, 28 eIPCWorkerRef, 29 }; 30 31 static SafeRefPtr<CacheWorkerRef> Create(WorkerPrivate* aWorkerPrivate, 32 Behavior aBehavior); 33 34 static SafeRefPtr<CacheWorkerRef> PreferBehavior( 35 SafeRefPtr<CacheWorkerRef> aCurrentRef, Behavior aBehavior); 36 37 void AddActor(ActorChild& aActor); 38 void RemoveActor(ActorChild& aActor); 39 40 bool Notified() const; 41 42 private: 43 struct ConstructorGuard {}; 44 45 void Notify(); 46 47 nsTArray<NotNull<ActorChild*>> mActorList; 48 49 Behavior mBehavior; 50 bool mNotified; 51 52 RefPtr<StrongWorkerRef> mStrongWorkerRef; 53 RefPtr<IPCWorkerRef> mIPCWorkerRef; 54 55 public: 56 CacheWorkerRef(Behavior aBehavior, ConstructorGuard); 57 58 ~CacheWorkerRef(); 59 60 NS_DECL_OWNINGTHREAD 61 MOZ_DECLARE_REFCOUNTED_TYPENAME(mozilla::dom::cache::CacheWorkerRef) 62 }; 63 64 } // namespace cache 65 } // namespace mozilla::dom 66 67 #endif // mozilla_dom_cache_CacheWorkerRef_h