mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-12-01 08:42:13 +00:00
d7356251cd
This changes the behavior in a few ways: - the 'active' notification is now only fired when a new user event has been received by Firefox, rather than by any application on the entire system. - the 'active' notification will fire immediately when Firefox receives a new event. Before the patch is was fired within 5s of the user returning on some plateforms (eg. Mac) and immediately on some other platforms that already called ResetIdleTimeout (windows, gtk, android). I'm not sure if these existing calls to ResetIdleTimeout are really needed, nor if they add significant overhead. - when an idle observer has been notified of 'idle', it won't be notified again until Firefox receives events. Before the patch, if the user used other applications while Firefox was in the background, we would keep sending active and idle notifications to our idle observers. This behavior was probably initially intended when the nsUserIdleService was introduced to support the use case of instant messaging clients, but doesn't seem to match the expectations of the existing consumers of the service. Differential Revision: https://phabricator.services.mozilla.com/D166306
43 lines
1.3 KiB
C++
43 lines
1.3 KiB
C++
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
|
/* vim:expandtab:shiftwidth=4:tabstop=4:
|
|
*/
|
|
/* 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 nsUserIdleServiceWin_h__
|
|
#define nsUserIdleServiceWin_h__
|
|
|
|
#include "nsUserIdleService.h"
|
|
|
|
/* NOTE: Compare of GetTickCount() could overflow. This corrects for
|
|
* overflow situations.
|
|
***/
|
|
#ifndef SAFE_COMPARE_EVEN_WITH_WRAPPING
|
|
# define SAFE_COMPARE_EVEN_WITH_WRAPPING(A, B) \
|
|
(((int)((long)A - (long)B) & 0xFFFFFFFF))
|
|
#endif
|
|
|
|
class nsUserIdleServiceWin : public nsUserIdleService {
|
|
public:
|
|
NS_INLINE_DECL_REFCOUNTING_INHERITED(nsUserIdleServiceWin, nsUserIdleService)
|
|
|
|
bool PollIdleTime(uint32_t* aIdleTime) override;
|
|
|
|
static already_AddRefed<nsUserIdleServiceWin> GetInstance() {
|
|
RefPtr<nsUserIdleServiceWin> idleService =
|
|
nsUserIdleService::GetInstance().downcast<nsUserIdleServiceWin>();
|
|
if (!idleService) {
|
|
idleService = new nsUserIdleServiceWin();
|
|
}
|
|
|
|
return idleService.forget();
|
|
}
|
|
|
|
protected:
|
|
nsUserIdleServiceWin() {}
|
|
virtual ~nsUserIdleServiceWin() {}
|
|
};
|
|
|
|
#endif // nsUserIdleServiceWin_h__
|