gecko-dev/widget/cocoa/nsUserIdleServiceX.h
Jens Stutte b8cb45e0e0 Bug 1836980 - Move the check for late instantiation to UserIdleService[type] specializations. r=kmag,xpcom-reviewers,geckoview-reviewers,m_kato
We need to avoid the new for each specialization, the GetInstance of the base class does actually not create anything new.
If the UserIdleService has been instantiated earlier than shutdown we continue to hand it out via GetInstance to give other things shutting down a chance to remove their observers, but if it has never been instantiated (or it is gone as we are very, very late in shutdown) we won't create a new one.

Differential Revision: https://phabricator.services.mozilla.com/D180130
2023-06-07 06:27:52 +00:00

37 lines
1.1 KiB
C++

/* 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 nsUserIdleServiceX_h_
#define nsUserIdleServiceX_h_
#include "nsUserIdleService.h"
#include "mozilla/AppShutdown.h"
class nsUserIdleServiceX : public nsUserIdleService {
public:
NS_INLINE_DECL_REFCOUNTING_INHERITED(nsUserIdleServiceX, nsUserIdleService)
bool PollIdleTime(uint32_t* aIdleTime) override;
static already_AddRefed<nsUserIdleServiceX> GetInstance() {
RefPtr<nsUserIdleService> idleService = nsUserIdleService::GetInstance();
if (!idleService) {
// Avoid late instantiation or resurrection during shutdown.
if (mozilla::AppShutdown::IsInOrBeyond(
mozilla::ShutdownPhase::AppShutdownConfirmed)) {
return nullptr;
}
idleService = new nsUserIdleServiceX();
}
return idleService.forget().downcast<nsUserIdleServiceX>();
}
protected:
nsUserIdleServiceX() {}
virtual ~nsUserIdleServiceX() {}
};
#endif // nsUserIdleServiceX_h_