зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1584319 - refactor the way of requesting wakelock on Windows. r=jmathies
Current implementation would fail to request a non-display wakelock on Windows when we ask for a background audio lock. The check for `audio-playing` with `locked-background` is incorrect. Therefore, adding new a variable to tell if we should request a non-display lock. Differential Revision: https://phabricator.services.mozilla.com/D60201 --HG-- extra : moz-landing-system : lando
This commit is contained in:
Родитель
f4658e4672
Коммит
d2a99667f0
|
@ -53,40 +53,40 @@ class WinWakeLockListener final : public nsIDOMMozWakeLockListener {
|
|||
|
||||
NS_IMETHOD Callback(const nsAString& aTopic,
|
||||
const nsAString& aState) override {
|
||||
WAKE_LOCK_LOG("WinWakeLock: topic=%s, state=%s",
|
||||
NS_ConvertUTF16toUTF8(aTopic).get(),
|
||||
NS_ConvertUTF16toUTF8(aState).get());
|
||||
if (!aTopic.EqualsASCII("screen") && !aTopic.EqualsASCII("audio-playing") &&
|
||||
!aTopic.EqualsASCII("video-playing")) {
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
// we should still hold the lock for background audio.
|
||||
if (aTopic.EqualsASCII("audio-playing") &&
|
||||
aState.EqualsASCII("locked-background")) {
|
||||
return NS_OK;
|
||||
// Check what kind of lock we will require, if both display lock and non
|
||||
// display lock are needed, we would require display lock because it has
|
||||
// higher priority.
|
||||
if (aTopic.EqualsASCII("audio-playing")) {
|
||||
mRequireForNonDisplayLock = aState.EqualsASCII("locked-foreground") ||
|
||||
aState.EqualsASCII("locked-background");
|
||||
} else if (aTopic.EqualsASCII("screen") ||
|
||||
aTopic.EqualsASCII("video-playing")) {
|
||||
mRequireForDisplayLock = aState.EqualsASCII("locked-foreground");
|
||||
}
|
||||
|
||||
if (aTopic.EqualsASCII("screen") || aTopic.EqualsASCII("video-playing")) {
|
||||
mRequireForDisplay = aState.EqualsASCII("locked-foreground");
|
||||
}
|
||||
|
||||
// Note the wake lock code ensures that we're not sent duplicate
|
||||
// "locked-foreground" notifications when multiple wake locks are held.
|
||||
if (aState.EqualsASCII("locked-foreground")) {
|
||||
WAKE_LOCK_LOG("WinWakeLock: Blocking screen saver");
|
||||
if (mRequireForDisplay) {
|
||||
// Prevent the display turning off and block the screen saver.
|
||||
SetThreadExecutionState(ES_DISPLAY_REQUIRED | ES_CONTINUOUS);
|
||||
} else {
|
||||
SetThreadExecutionState(ES_SYSTEM_REQUIRED | ES_CONTINUOUS);
|
||||
}
|
||||
if (mRequireForDisplayLock) {
|
||||
WAKE_LOCK_LOG("WinWakeLock: Request display lock");
|
||||
SetThreadExecutionState(ES_DISPLAY_REQUIRED | ES_CONTINUOUS);
|
||||
} else if (mRequireForNonDisplayLock) {
|
||||
WAKE_LOCK_LOG("WinWakeLock: Request non-display lock");
|
||||
SetThreadExecutionState(ES_SYSTEM_REQUIRED | ES_CONTINUOUS);
|
||||
} else {
|
||||
WAKE_LOCK_LOG("WinWakeLock: Unblocking screen saver");
|
||||
// Unblock display/screen saver turning off.
|
||||
WAKE_LOCK_LOG("WinWakeLock: reset lock");
|
||||
SetThreadExecutionState(ES_CONTINUOUS);
|
||||
}
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
bool mRequireForDisplay = false;
|
||||
bool mRequireForDisplayLock = false;
|
||||
bool mRequireForNonDisplayLock = false;
|
||||
};
|
||||
|
||||
NS_IMPL_ISUPPORTS(WinWakeLockListener, nsIDOMMozWakeLockListener)
|
||||
|
|
Загрузка…
Ссылка в новой задаче