1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 /* vim:expandtab:shiftwidth=4:tabstop=4:
3  */
4 /* This Source Code Form is subject to the terms of the Mozilla Public
5  * License, v. 2.0. If a copy of the MPL was not distributed with this
6  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
7 
8 #ifndef nsIdleServiceWin_h__
9 #define nsIdleServiceWin_h__
10 
11 #include "nsIdleService.h"
12 
13 /* NOTE: Compare of GetTickCount() could overflow.  This corrects for
14  * overflow situations.
15  ***/
16 #ifndef SAFE_COMPARE_EVEN_WITH_WRAPPING
17 #define SAFE_COMPARE_EVEN_WITH_WRAPPING(A, B) \
18   (((int)((long)A - (long)B) & 0xFFFFFFFF))
19 #endif
20 
21 class nsIdleServiceWin : public nsIdleService {
22  public:
23   NS_INLINE_DECL_REFCOUNTING_INHERITED(nsIdleServiceWin, nsIdleService)
24 
25   bool PollIdleTime(uint32_t* aIdleTime) override;
26 
GetInstance()27   static already_AddRefed<nsIdleServiceWin> GetInstance() {
28     RefPtr<nsIdleServiceWin> idleService =
29         nsIdleService::GetInstance().downcast<nsIdleServiceWin>();
30     if (!idleService) {
31       idleService = new nsIdleServiceWin();
32     }
33 
34     return idleService.forget();
35   }
36 
37  protected:
nsIdleServiceWin()38   nsIdleServiceWin() {}
~nsIdleServiceWin()39   virtual ~nsIdleServiceWin() {}
40   bool UsePollMode() override;
41 };
42 
43 #endif  // nsIdleServiceWin_h__
44