#!/bin/sh
# DPHMS payload v28: Firefox under proot. The content-process sandbox (seccomp, user namespaces) and
# the multi-process model crash every tab here ("Gah. Your tab just crashed"). Turn the sandbox off
# (the whole desktop is already inside a proot container) and keep one content process.
export MOZ_DISABLE_CONTENT_SANDBOX=1 MOZ_DISABLE_GMP_SANDBOX=1 MOZ_DISABLE_RDD_SANDBOX=1 \
       MOZ_DISABLE_SOCKET_PROCESS_SANDBOX=1 MOZ_DISABLE_UTILITY_SANDBOX=1 MOZ_SANDBOX_LOGGING=0 \
       MOZ_FORCE_DISABLE_E10S=0 MOZ_X11_EGL=0 MOZ_ACCELERATED=0 LIBGL_ALWAYS_SOFTWARE=1 \
       GTK_USE_PORTAL=0 NO_AT_BRIDGE=1 MOZ_CRASHREPORTER_DISABLE=1 MOZ_DBUS_REMOTE=0
# Firefox needs a real /dev/shm; proot often lacks one. Point it at a writable tmp dir instead.
[ -w /dev/shm ] || export TMPDIR=/tmp
# write prefs into every profile BEFORE it starts (user.js is read at launch)
for P in /root/.mozilla/firefox/*.default* /root/.mozilla/firefox/*.default-release; do
  [ -d "$P" ] || continue
  cat > "$P/user.js" <<'JS'
user_pref("security.sandbox.content.level", 0);
user_pref("security.sandbox.gpu.level", 0);
user_pref("security.sandbox.socket.process.level", 0);
user_pref("security.sandbox.rdd.level", 0);
user_pref("dom.ipc.processCount", 1);
user_pref("dom.ipc.processCount.webIsolated", 1);
user_pref("fission.autostart", false);
user_pref("gfx.webrender.software", true);
user_pref("layers.acceleration.disabled", true);
user_pref("media.hardware-video-decoding.enabled", false);
user_pref("browser.tabs.remote.autostart", true);
user_pref("network.dns.disableIPv6", true);
user_pref("toolkit.telemetry.enabled", false);
user_pref("browser.shell.checkDefaultBrowser", false);
JS
done
exec /usr/lib/firefox/firefox "$@"
