[WPE][GTK] Sleep disabler code should inhibit idle when a "System" sleep disabler...
authormcatanzaro@igalia.com <mcatanzaro@igalia.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 12 Feb 2019 09:29:46 +0000 (09:29 +0000)
committermcatanzaro@igalia.com <mcatanzaro@igalia.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 12 Feb 2019 09:29:46 +0000 (09:29 +0000)
https://bugs.webkit.org/show_bug.cgi?id=194500

Reviewed by Carlos Garcia Campos.

There are three things wrong with the comment at the top of SleepDisablerGLib's constructor:

(1) Nowadays, GNOME suspends the computer automatically on inactivity, and we actually do
    want to prevent that.

(2) Inhibiting idle does affect the autosuspend countdown. So the current code should
    prevent automatic suspend, just not manual suspend. (I think I stand by my comment that
    we do not want to inhibit normal suspend, since that would just be annoying.)

(3) I don't know why I thought HTMLMediaElement::shouldDisableSleep was suspicious.

Anyway, the behavior we want is to ignore the Type argument and just always inhibit idle.
That is, treat type=System the same way we current treat type=Display.

* pal/system/glib/SleepDisablerGLib.cpp:
(PAL::SleepDisablerGLib::SleepDisablerGLib):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@241290 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/WebCore/PAL/ChangeLog
Source/WebCore/PAL/pal/system/glib/SleepDisablerGLib.cpp

index 9d9abaa..fc45920 100644 (file)
@@ -1,3 +1,27 @@
+2019-02-12  Michael Catanzaro  <mcatanzaro@igalia.com>
+
+        [WPE][GTK] Sleep disabler code should inhibit idle when a "System" sleep disabler is requested
+        https://bugs.webkit.org/show_bug.cgi?id=194500
+
+        Reviewed by Carlos Garcia Campos.
+
+        There are three things wrong with the comment at the top of SleepDisablerGLib's constructor:
+
+        (1) Nowadays, GNOME suspends the computer automatically on inactivity, and we actually do
+            want to prevent that.
+
+        (2) Inhibiting idle does affect the autosuspend countdown. So the current code should
+            prevent automatic suspend, just not manual suspend. (I think I stand by my comment that
+            we do not want to inhibit normal suspend, since that would just be annoying.)
+
+        (3) I don't know why I thought HTMLMediaElement::shouldDisableSleep was suspicious.
+
+        Anyway, the behavior we want is to ignore the Type argument and just always inhibit idle.
+        That is, treat type=System the same way we current treat type=Display.
+
+        * pal/system/glib/SleepDisablerGLib.cpp:
+        (PAL::SleepDisablerGLib::SleepDisablerGLib):
+
 2019-02-11  Myles C. Maxfield  <mmaxfield@apple.com>
 
         [Cocoa] Ask platform for generic font family mappings
index 1e872ff..6f922e1 100644 (file)
@@ -41,15 +41,13 @@ SleepDisablerGLib::SleepDisablerGLib(const char* reason, Type type)
     , m_cancellable(adoptGRef(g_cancellable_new()))
     , m_reason(reason)
 {
-    // We don't support suspend ("System") inhibitors, only idle inhibitors.
-    // To get suspend inhibitors, we'd need to use the fancy GNOME
-    // SessionManager API, which requires registering as a client application,
-    // which is not practical from the web process. Secondly, because the only
-    // current use of a suspend inhibitor in WebKit,
-    // HTMLMediaElement::shouldDisableSleep, is suspicious. There's really no
-    // valid reason for WebKit to ever block suspend, only idle.
-    if (type != SleepDisabler::Type::Display)
-        return;
+    // We ignore Type because we always want to inhibit both screen lock and
+    // suspend, but only when idle. There is no reason for WebKit to ever block
+    // a user from manually suspending the computer, so inhibiting idle
+    // suffices. There's also probably no good reason for code taking a sleep
+    // disabler to differentiate between lock and suspend on our platform. If we
+    // ever need this distinction, which seems unlikely, then we'll need to
+    // audit all use of SleepDisabler.
 
     // First, try to use the ScreenSaver API.
     g_dbus_proxy_new_for_bus(G_BUS_TYPE_SESSION, static_cast<GDBusProxyFlags>(G_DBUS_PROXY_FLAGS_DO_NOT_LOAD_PROPERTIES | G_DBUS_PROXY_FLAGS_DO_NOT_CONNECT_SIGNALS),