e8035fe
diff --git a/extensions/pref/autoconfig/test/unit/test_autoconfig_custom_path.js b/extensions/pref/autoconfig/test/unit/test_autoconfig_custom_path.js
e8035fe
--- a/extensions/pref/autoconfig/test/unit/test_autoconfig_custom_path.js
e8035fe
+++ b/extensions/pref/autoconfig/test/unit/test_autoconfig_custom_path.js
e8035fe
@@ -9,10 +9,13 @@
e8035fe
   let testDirName = do_get_cwd().clone();
e8035fe
   Services.env.set("MOZ_SYSTEM_CONFIG_DIR", testDirName.path);
e8035fe
 
e8035fe
   updateAppInfo();
e8035fe
 
e8035fe
+  try {
e8035fe
+    Services.dirsvc.undefine("SysConfD");
e8035fe
+  } catch (e) {}
e8035fe
   let customSysConfD = Services.dirsvc.get("SysConfD", Ci.nsIFile);
e8035fe
   let parent = customSysConfD.parent;
e8035fe
   let child = customSysConfD.leafName;
e8035fe
   notEqual("/etc", parent.path, "SysConfD is not in /etc");
e8035fe
   equal("xpcshell", child, "SysConfD is xpcshell");
e8035fe
diff --git a/extensions/pref/autoconfig/test/unit/test_autoconfig_default_path.js b/extensions/pref/autoconfig/test/unit/test_autoconfig_default_path.js
e8035fe
--- a/extensions/pref/autoconfig/test/unit/test_autoconfig_default_path.js
e8035fe
+++ b/extensions/pref/autoconfig/test/unit/test_autoconfig_default_path.js
e8035fe
@@ -6,8 +6,11 @@
e8035fe
 );
e8035fe
 
e8035fe
 function run_test() {
e8035fe
   updateAppInfo();
e8035fe
 
e8035fe
+  try {
e8035fe
+    Services.dirsvc.undefine("SysConfD");
e8035fe
+  } catch (e) {}
e8035fe
   let defaultSysConfD = Services.dirsvc.get("SysConfD", Ci.nsIFile);
e8035fe
   equal("/etc/xpcshell", defaultSysConfD.path, "SysConfD is in /etc");
e8035fe
 }
e8035fe
diff --git a/modules/libpref/Preferences.cpp b/modules/libpref/Preferences.cpp
e8035fe
--- a/modules/libpref/Preferences.cpp
e8035fe
+++ b/modules/libpref/Preferences.cpp
e8035fe
@@ -4917,27 +4917,10 @@
e8035fe
                            ArrayLength(specialFiles));
e8035fe
   if (NS_FAILED(rv)) {
e8035fe
     NS_WARNING("Error parsing application default preferences.");
e8035fe
   }
e8035fe
 
e8035fe
-#if defined(MOZ_WIDGET_GTK)
e8035fe
-  // Under Flatpak/Snap package, load /etc/firefox/defaults/pref/*.js.
e8035fe
-  if (mozilla::widget::IsRunningUnderFlatpakOrSnap()) {
e8035fe
-    nsCOMPtr<nsIFile> defaultSnapPrefDir;
e8035fe
-    rv = NS_GetSpecialDirectory(NS_OS_SYSTEM_CONFIG_DIR,
e8035fe
-                                getter_AddRefs(defaultSnapPrefDir));
e8035fe
-    NS_ENSURE_SUCCESS(rv, rv);
e8035fe
-    defaultSnapPrefDir->AppendNative("defaults"_ns);
e8035fe
-    defaultSnapPrefDir->AppendNative("pref"_ns);
e8035fe
-
e8035fe
-    rv = pref_LoadPrefsInDir(defaultSnapPrefDir, nullptr, 0);
e8035fe
-    if (NS_FAILED(rv)) {
e8035fe
-      NS_WARNING("Error parsing application default preferences under Snap.");
e8035fe
-    }
e8035fe
-  }
e8035fe
-#endif
e8035fe
-
e8035fe
   // Load jar:$app/omni.jar!/defaults/preferences/*.js
e8035fe
   // or jar:$gre/omni.jar!/defaults/preferences/*.js.
e8035fe
   RefPtr<nsZipArchive> appJarReader = Omnijar::GetReader(Omnijar::APP);
e8035fe
 
e8035fe
   // GetReader(Omnijar::APP) returns null when `$app == $gre`, in
e8035fe
@@ -5006,10 +4989,28 @@
e8035fe
       // Do we care if a file provided by this process fails to load?
e8035fe
       pref_LoadPrefsInDir(path, nullptr, 0);
e8035fe
     }
e8035fe
   }
e8035fe
 
e8035fe
+#if defined(MOZ_WIDGET_GTK)
e8035fe
+  // To ensure the system-wide preferences are not overwritten by
e8035fe
+  // firefox/browser/defauts/preferences/*.js we need to load
e8035fe
+  // the /etc/firefox/defaults/pref/*.js settings as last.
e8035fe
+  // Under Flatpak, the NS_OS_SYSTEM_CONFIG_DIR points to /app/etc/firefox
e8035fe
+  nsCOMPtr<nsIFile> defaultSystemPrefDir;
e8035fe
+  rv = NS_GetSpecialDirectory(NS_OS_SYSTEM_CONFIG_DIR,
e8035fe
+                              getter_AddRefs(defaultSystemPrefDir));
e8035fe
+  NS_ENSURE_SUCCESS(rv, rv);
e8035fe
+  defaultSystemPrefDir->AppendNative("defaults"_ns);
e8035fe
+  defaultSystemPrefDir->AppendNative("pref"_ns);
e8035fe
+
e8035fe
+  rv = pref_LoadPrefsInDir(defaultSystemPrefDir, nullptr, 0);
e8035fe
+  if (NS_FAILED(rv)) {
e8035fe
+    NS_WARNING("Error parsing application default preferences.");
e8035fe
+  }
e8035fe
+#endif
e8035fe
+
e8035fe
   if (XRE_IsParentProcess()) {
e8035fe
     SetupTelemetryPref();
e8035fe
   }
e8035fe
 
e8035fe
   if (aIsStartup) {
e8035fe