summaryrefslogtreecommitdiff
path: root/mozilla-1583466.patch
diff options
context:
space:
mode:
authorMartin Stransky <stransky@redhat.com>2019-09-30 10:04:35 +0200
committerMartin Stransky <stransky@redhat.com>2019-09-30 10:04:35 +0200
commita07515e07547ba9b67d3018cea155753f8068338 (patch)
tree733c98339af7cb089cf6e76c201d3f85aad42a13 /mozilla-1583466.patch
parentAdded fix for rhbz#1754460 (diff)
downloadlibrewolf-fedora-ff-a07515e07547ba9b67d3018cea155753f8068338.tar.gz
librewolf-fedora-ff-a07515e07547ba9b67d3018cea155753f8068338.tar.bz2
librewolf-fedora-ff-a07515e07547ba9b67d3018cea155753f8068338.zip
Updated rhbz#1754460/mzbz#1583466 - per user policy dir.
Diffstat (limited to 'mozilla-1583466.patch')
-rw-r--r--mozilla-1583466.patch156
1 files changed, 156 insertions, 0 deletions
diff --git a/mozilla-1583466.patch b/mozilla-1583466.patch
new file mode 100644
index 0000000..a4c05a9
--- /dev/null
+++ b/mozilla-1583466.patch
@@ -0,0 +1,156 @@
+changeset: 496943:24592798daf4
+tag: tip
+parent: 496931:ca257801d86f
+user: Martin Stransky <stransky@redhat.com>
+date: Tue Sep 24 12:54:11 2019 +0200
+files: toolkit/components/enterprisepolicies/EnterprisePolicies.js toolkit/xre/nsXREDirProvider.cpp xpcom/build/nsXULAppAPI.h
+description:
+Bug 1583466 - [Linux] Allow to Load policies per user from system on Linux/Gtk, r=mkaply
+
+When browser.policies.perUserPath is set, load browser policy per user
+from /run/user/$UID/appname/ directory instead of the default firefox/distribution
+dir.
+
+Differential Revision: https://phabricator.services.mozilla.com/D46921
+
+
+diff --git a/toolkit/components/enterprisepolicies/EnterprisePolicies.js b/toolkit/components/enterprisepolicies/EnterprisePolicies.js
+--- a/toolkit/components/enterprisepolicies/EnterprisePolicies.js
++++ b/toolkit/components/enterprisepolicies/EnterprisePolicies.js
+@@ -18,16 +18,19 @@ XPCOMUtils.defineLazyModuleGetters(this,
+ JsonSchemaValidator:
+ "resource://gre/modules/components-utils/JsonSchemaValidator.jsm",
+ });
+
+ // This is the file that will be searched for in the
+ // ${InstallDir}/distribution folder.
+ const POLICIES_FILENAME = "policies.json";
+
++// When true browser policy is loaded per-user from
++// /run/usr/$UID/appname
++const PREF_PER_USER_DIR = "browser.policies.perUserDir";
+ // For easy testing, modify the helpers/sample.json file,
+ // and set PREF_ALTERNATE_PATH in firefox.js as:
+ // /your/repo/browser/components/enterprisepolicies/helpers/sample.json
+ const PREF_ALTERNATE_PATH = "browser.policies.alternatePath";
+ // For testing, we may want to set PREF_ALTERNATE_PATH to point to a file
+ // relative to the test root directory. In order to enable this, the string
+ // below may be placed at the beginning of that preference value and it will
+ // be replaced with the path to the test root directory.
+@@ -450,17 +453,22 @@ class JSONPoliciesProvider {
+
+ get failed() {
+ return this._failed;
+ }
+
+ _getConfigurationFile() {
+ let configFile = null;
+ try {
+- configFile = Services.dirsvc.get("XREAppDist", Ci.nsIFile);
++ let perUserPath = Services.prefs.getBoolPref(PREF_PER_USER_DIR, false);
++ if (perUserPath) {
++ configFile = Services.dirsvc.get("XREAppDistUser", Ci.nsIFile);
++ } else {
++ configFile = Services.dirsvc.get("XREAppDist", Ci.nsIFile);
++ }
+ configFile.append(POLICIES_FILENAME);
+ } catch (ex) {
+ // Getting the correct directory will fail in xpcshell tests. This should
+ // be handled the same way as if the configFile simply does not exist.
+ }
+
+ let alternatePath = Services.prefs.getStringPref(PREF_ALTERNATE_PATH, "");
+
+diff --git a/toolkit/xre/nsXREDirProvider.cpp b/toolkit/xre/nsXREDirProvider.cpp
+--- a/toolkit/xre/nsXREDirProvider.cpp
++++ b/toolkit/xre/nsXREDirProvider.cpp
+@@ -40,16 +40,17 @@
+ #include "mozilla/dom/ScriptSettings.h"
+
+ #include "mozilla/AutoRestore.h"
+ #include "mozilla/Components.h"
+ #include "mozilla/Services.h"
+ #include "mozilla/Omnijar.h"
+ #include "mozilla/Preferences.h"
+ #include "mozilla/Telemetry.h"
++#include "nsPrintfCString.h"
+
+ #include <stdlib.h>
+
+ #ifdef XP_WIN
+ # include <windows.h>
+ # include <shlobj.h>
+ # include "WinUtils.h"
+ #endif
+@@ -98,17 +99,17 @@ static already_AddRefed<nsIFile> CreateP
+ nsXREDirProvider* gDirServiceProvider = nullptr;
+ nsIFile* gDataDirHomeLocal = nullptr;
+ nsIFile* gDataDirHome = nullptr;
+ nsCOMPtr<nsIFile> gDataDirProfileLocal = nullptr;
+ nsCOMPtr<nsIFile> gDataDirProfile = nullptr;
+
+ // These are required to allow nsXREDirProvider to be usable in xpcshell tests.
+ // where gAppData is null.
+-#if defined(XP_MACOSX) || defined(XP_WIN)
++#if defined(XP_MACOSX) || defined(XP_WIN) || defined(XP_UNIX)
+ static const char* GetAppName() {
+ if (gAppData) {
+ return gAppData->name;
+ }
+ return nullptr;
+ }
+ #endif
+
+@@ -456,16 +457,24 @@ nsXREDirProvider::GetFile(const char* aP
+ else if (!strcmp(aProperty, XRE_USER_SYS_EXTENSION_DIR)) {
+ #ifdef ENABLE_SYSTEM_EXTENSION_DIRS
+ return GetSysUserExtensionsDirectory(aFile);
+ #else
+ return NS_ERROR_FAILURE;
+ #endif
+ } else if (!strcmp(aProperty, XRE_USER_SYS_EXTENSION_DEV_DIR)) {
+ return GetSysUserExtensionsDevDirectory(aFile);
++ } else if (!strcmp(aProperty, XRE_APP_DISTRIBUTION_USER_DIR)) {
++#ifdef MOZ_WIDGET_GTK
++ nsPrintfCString path("/run/user/%d/%s/", getuid(), GetAppName());
++ ToLowerCase(path);
++ return NS_NewNativeLocalFile(path, false, aFile);
++#else
++ return NS_ERROR_FAILURE;
++#endif
+ } else if (!strcmp(aProperty, XRE_APP_DISTRIBUTION_DIR)) {
+ bool persistent = false;
+ rv = GetFile(NS_GRE_DIR, &persistent, getter_AddRefs(file));
+ if (NS_SUCCEEDED(rv))
+ rv = file->AppendNative(NS_LITERAL_CSTRING("distribution"));
+ } else if (!strcmp(aProperty, XRE_APP_FEATURES_DIR)) {
+ rv = GetAppDir()->Clone(getter_AddRefs(file));
+ if (NS_SUCCEEDED(rv))
+diff --git a/xpcom/build/nsXULAppAPI.h b/xpcom/build/nsXULAppAPI.h
+--- a/xpcom/build/nsXULAppAPI.h
++++ b/xpcom/build/nsXULAppAPI.h
+@@ -137,16 +137,23 @@
+
+ /**
+ * A directory service key which specifies the location for app dir add-ons.
+ * Should be a synonym for XCurProcD everywhere except in tests.
+ */
+ #define XRE_ADDON_APP_DIR "XREAddonAppDir"
+
+ /**
++ * A directory service key which specifies the distribution specific files for
++ * the application unique for each user.
++ * It's located at /run/user/$PID/<product name>/
++ */
++#define XRE_APP_DISTRIBUTION_USER_DIR "XREAppDistUser"
++
++/**
+ * A directory service key which provides the update directory. Callers should
+ * fall back to appDir.
+ * Windows: If vendor name exists:
+ * ProgramData\<vendor name>\updates\
+ * <hash of the path to XRE_EXECUTABLE_FILE's parent directory>
+ *
+ * If vendor name doesn't exist, but product name exists:
+ * ProgramData\<product name>\updates\
+
bgstack15