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 nsObserverService_h___ 8 #define nsObserverService_h___ 9 10 #include "nsIObserverService.h" 11 #include "nsObserverList.h" 12 #include "nsIMemoryReporter.h" 13 #include "nsTHashtable.h" 14 #include "mozilla/Attributes.h" 15 16 // {D07F5195-E3D1-11d2-8ACD-00105A1B8860} 17 #define NS_OBSERVERSERVICE_CID \ 18 { \ 19 0xd07f5195, 0xe3d1, 0x11d2, { \ 20 0x8a, 0xcd, 0x0, 0x10, 0x5a, 0x1b, 0x88, 0x60 \ 21 } \ 22 } 23 24 class nsObserverService final : public nsIObserverService, 25 public nsIMemoryReporter { 26 public: 27 NS_DECLARE_STATIC_IID_ACCESSOR(NS_OBSERVERSERVICE_CID) 28 29 nsObserverService(); 30 31 NS_DECL_ISUPPORTS 32 NS_DECL_NSIOBSERVERSERVICE 33 NS_DECL_NSIMEMORYREPORTER 34 35 void Shutdown(); 36 37 [[nodiscard]] static nsresult Create(nsISupports* aOuter, const nsIID& aIID, 38 void** aInstancePtr); 39 40 // Unmark any strongly held observers implemented in JS so the cycle 41 // collector will not traverse them. 42 NS_IMETHOD UnmarkGrayStrongObservers(); 43 44 private: 45 ~nsObserverService(void); 46 void RegisterReporter(); 47 nsresult EnsureValidCall() const; 48 nsresult FilterHttpOnTopics(const char* aTopic); 49 50 static const size_t kSuspectReferentCount = 100; 51 bool mShuttingDown; 52 nsTHashtable<nsObserverList> mObserverTopicTable; 53 }; 54 55 NS_DEFINE_STATIC_IID_ACCESSOR(nsObserverService, NS_OBSERVERSERVICE_CID) 56 57 #endif /* nsObserverService_h___ */ 58