author Carsten "Tomcat" Book <>
Thu, 27 Mar 2014 11:40:32 +0100
changeset 175624 11b3e19f4eb825df8922045ad0860023e8e9946c
parent 162354 9fc62be406070e684a80f27976c4e1a9bfab3de4
child 222759 238eeecce596d5158217b64a5ddda4a96918a66b
permissions -rw-r--r--
Backed out changeset 71568f10952a (bug 988326) for assertions

/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* 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 */
#ifndef mozilla_dom_power_PowerManagerService_h
#define mozilla_dom_power_PowerManagerService_h

#include "nsCOMPtr.h"
#include "nsDataHashtable.h"
#include "nsHashKeys.h"
#include "nsTArray.h"
#include "nsIPowerManagerService.h"
#include "mozilla/Observer.h"
#include "Types.h"
#include "mozilla/StaticPtr.h"
#include "mozilla/dom/WakeLock.h"

namespace mozilla {
namespace dom {

class ContentParent;

namespace power {

class PowerManagerService
  : public nsIPowerManagerService
  , public WakeLockObserver

  static already_AddRefed<PowerManagerService> GetInstance();

  void Init();

  // Implement WakeLockObserver
  void Notify(const hal::WakeLockInformation& aWakeLockInfo);

   * Acquire a wake lock on behalf of a given process (aContentParent).
   * This method stands in contrast to nsIPowerManagerService::NewWakeLock,
   * which acquires a wake lock on behalf of the /current/ process.
   * NewWakeLockOnBehalfOfProcess is different from NewWakeLock in that
   *  - The wake lock unlocks itself if the /given/ process dies, and
   *  - The /given/ process shows up in WakeLockInfo::lockingProcesses.
  NewWakeLockOnBehalfOfProcess(const nsAString& aTopic,
                               ContentParent* aContentParent);

  NewWakeLock(const nsAString& aTopic, nsIDOMWindow* aWindow,
              mozilla::ErrorResult& aRv);



  void ComputeWakeLockState(const hal::WakeLockInformation& aWakeLockInfo,
                            nsAString &aState);

  void SyncProfile();

  static StaticRefPtr<PowerManagerService> sSingleton;

  nsTArray<nsCOMPtr<nsIDOMMozWakeLockListener> > mWakeLockListeners;
  int32_t mWatchdogTimeoutSecs;

} // namespace power
} // namespace dom
} // namespace mozilla

#endif // mozilla_dom_power_PowerManagerService_h