mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-22 09:45:41 +00:00
a10b8df4d2
DevTools wants to use wake lock to keep screen. But since MozWakeLock is removed by bug 1369194, there is no way to unlock wake lock from script. So this issue adds nsIWakeLock to unlock wake lock. Differential Revision: https://phabricator.services.mozilla.com/D7158 --HG-- extra : rebase_source : 4d6069fce27a7d85ce484a1418a8a17de83166f1
89 lines
2.4 KiB
C++
89 lines
2.4 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 mozilla_dom_power_WakeLock_h
|
|
#define mozilla_dom_power_WakeLock_h
|
|
|
|
#include "nsCOMPtr.h"
|
|
#include "nsIDOMEventListener.h"
|
|
#include "nsIObserver.h"
|
|
#include "nsIWakeLock.h"
|
|
#include "nsString.h"
|
|
#include "nsWeakReference.h"
|
|
#include "nsWrapperCache.h"
|
|
#include "mozilla/ErrorResult.h"
|
|
|
|
class nsPIDOMWindowInner;
|
|
|
|
namespace mozilla {
|
|
namespace dom {
|
|
|
|
class ContentParent;
|
|
|
|
class WakeLock final
|
|
: public nsIDOMEventListener
|
|
, public nsIObserver
|
|
, public nsSupportsWeakReference
|
|
, public nsIWakeLock
|
|
{
|
|
public:
|
|
NS_DECL_NSIDOMEVENTLISTENER
|
|
NS_DECL_NSIOBSERVER
|
|
NS_DECL_NSIWAKELOCK
|
|
|
|
NS_DECL_ISUPPORTS
|
|
|
|
// Note: WakeLock lives for the lifetime of the document in order to avoid
|
|
// exposing GC behavior to pages. This means that
|
|
// |var foo = navigator.requestWakeLock('cpu'); foo = null;|
|
|
// doesn't unlock the 'cpu' resource.
|
|
|
|
WakeLock();
|
|
|
|
// Initialize this wake lock on behalf of the given window. Null windows are
|
|
// allowed; a lock without an associated window is always considered
|
|
// invisible.
|
|
nsresult Init(const nsAString &aTopic, nsPIDOMWindowInner* aWindow);
|
|
|
|
// Initialize this wake lock on behalf of the given process. If the process
|
|
// dies, the lock is released. A wake lock initialized via this method is
|
|
// always considered visible.
|
|
nsresult Init(const nsAString &aTopic, ContentParent* aContentParent);
|
|
|
|
// WebIDL methods
|
|
|
|
nsPIDOMWindowInner* GetParentObject() const;
|
|
|
|
void GetTopic(nsAString& aTopic);
|
|
|
|
void Unlock(ErrorResult& aRv);
|
|
|
|
private:
|
|
virtual ~WakeLock();
|
|
|
|
void DoUnlock();
|
|
void DoLock();
|
|
void AttachEventListener();
|
|
void DetachEventListener();
|
|
|
|
bool mLocked;
|
|
bool mHidden;
|
|
|
|
// The ID of the ContentParent on behalf of whom we acquired this lock, or
|
|
// CONTENT_PROCESS_UNKNOWN_ID if this lock was acquired on behalf of the
|
|
// current process.
|
|
uint64_t mContentParentID;
|
|
nsString mTopic;
|
|
|
|
// window that this was created for. Weak reference.
|
|
nsWeakPtr mWindow;
|
|
};
|
|
|
|
} // namespace dom
|
|
} // namespace mozilla
|
|
|
|
#endif // mozilla_dom_power_WakeLock_h
|