mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-10 20:05:49 +00:00
3521fc20c7
This refactors the observer service code to improve readability, uses MOZ_TRY and other checking macros wherever possible to simplify error handling and replaces the ObserverRef class with the more generic nsMaybeWeakPtr class. This cuts away some code and halves the amount of memory needed to store an event listener. The external behavior is almost unchanged save for some error codes which are now more specific. Differential Revision: https://phabricator.services.mozilla.com/D11646 --HG-- extra : source : 10d910aa9f31435116a718bafe8a2b71c61fe23d
58 lines
1.7 KiB
C++
58 lines
1.7 KiB
C++
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
|
/* vim: set ts=8 sts=2 et sw=2 tw=80: */
|
|
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
#ifndef nsObserverService_h___
|
|
#define nsObserverService_h___
|
|
|
|
#include "nsIObserverService.h"
|
|
#include "nsObserverList.h"
|
|
#include "nsIMemoryReporter.h"
|
|
#include "nsTHashtable.h"
|
|
#include "mozilla/Attributes.h"
|
|
|
|
// {D07F5195-E3D1-11d2-8ACD-00105A1B8860}
|
|
#define NS_OBSERVERSERVICE_CID \
|
|
{ 0xd07f5195, 0xe3d1, 0x11d2, { 0x8a, 0xcd, 0x0, 0x10, 0x5a, 0x1b, 0x88, 0x60 } }
|
|
|
|
class nsIMemoryReporter;
|
|
|
|
class nsObserverService final
|
|
: public nsIObserverService
|
|
, public nsIMemoryReporter
|
|
{
|
|
public:
|
|
NS_DECLARE_STATIC_IID_ACCESSOR(NS_OBSERVERSERVICE_CID)
|
|
|
|
nsObserverService();
|
|
|
|
NS_DECL_ISUPPORTS
|
|
NS_DECL_NSIOBSERVERSERVICE
|
|
NS_DECL_NSIMEMORYREPORTER
|
|
|
|
void Shutdown();
|
|
|
|
static MOZ_MUST_USE nsresult Create(nsISupports* aOuter, const nsIID& aIID,
|
|
void** aInstancePtr);
|
|
|
|
// Unmark any strongly held observers implemented in JS so the cycle
|
|
// collector will not traverse them.
|
|
NS_IMETHOD UnmarkGrayStrongObservers();
|
|
|
|
private:
|
|
~nsObserverService(void);
|
|
void RegisterReporter();
|
|
nsresult EnsureValidCall() const;
|
|
nsresult FilterHttpOnTopics(const char* aTopic);
|
|
|
|
static const size_t kSuspectReferentCount = 100;
|
|
bool mShuttingDown;
|
|
nsTHashtable<nsObserverList> mObserverTopicTable;
|
|
};
|
|
|
|
NS_DEFINE_STATIC_IID_ACCESSOR(nsObserverService, NS_OBSERVERSERVICE_CID)
|
|
|
|
#endif /* nsObserverService_h___ */
|