Force the single-process mode in Evolution and Geary
authorAlberto Garcia <berto@igalia.com>
Thu, 14 Jul 2022 12:14:12 +0000 (13:14 +0100)
committerAlberto Garcia <berto@igalia.com>
Thu, 14 Jul 2022 12:14:12 +0000 (13:14 +0100)
Bug: https://bugs.webkit.org/show_bug.cgi?id=201033
Origin: https://mail.gnome.org/archives/distributor-list/2019-October/msg00000.html

Since WebKitGTK 2.26 the single-process mode is considered a security
risk and the process limiting APIs have been completely disabled.
This change is transparent for most applications, but Geary and
particularly Evolution (see upstream bug #587) are known to have
problems in multi-process mode. This has already been fixed in Geary
3.33.91 and in Evolution 3.34.1.

Although the API to set the single-process model is no longer
available, it is still possible to do it internally. This patch does
that for Evolution and Geary.

This is a temporary workaround and it is especially meant for stable
distributions and security updates, where patching or updating the
affected apps is not an option.
===================================================================

Gbp-Pq: Name force-single-process.patch

Source/WebKit/UIProcess/API/glib/WebKitWebContext.cpp

index 1b128a4c6825de9f93550725c5195f4ab0443548..822cc02083915229ab63278475e676879098ae8b 100644 (file)
@@ -405,6 +405,20 @@ static void webkitWebContextConstructed(GObject* object)
     configuration.setUsesWebProcessCache(true);
 #if PLATFORM(GTK)
     configuration.setProcessSwapsOnNavigation(priv->psonEnabled);
+    if (!priv->psonEnabled) {
+        const char* useSingleWebProcess = getenv("WEBKIT_USE_SINGLE_WEB_PROCESS");
+        if (useSingleWebProcess) {
+            if (strcmp(useSingleWebProcess, "0")) {
+                configuration.setUsesSingleWebProcess(true);
+            }
+        } else {
+            const char* prgname = g_get_prgname();
+            if (!g_strcmp0(prgname, "evolution") || !g_strcmp0(prgname, "geary")) {
+                configuration.setUsesSingleWebProcess(true);
+            }
+        }
+     }
+
 #if !USE(GTK4)
     configuration.setUseSystemAppearanceForScrollbars(priv->useSystemAppearanceForScrollbars);
 #endif