From 4454762c089932d3eb81456ceb99268a74fdf055 Mon Sep 17 00:00:00 2001 From: Alyssa Ross Date: Tue, 29 Sep 2020 10:57:08 +0000 Subject: patches/firefox: apply XDG patch to ESR too --- overlays/patches/firefox/esr/D6695.diff | 282 ++++++++++++++++++++++++++++++++ overlays/patches/firefox/packages.nix | 6 +- 2 files changed, 287 insertions(+), 1 deletion(-) create mode 100644 overlays/patches/firefox/esr/D6695.diff diff --git a/overlays/patches/firefox/esr/D6695.diff b/overlays/patches/firefox/esr/D6695.diff new file mode 100644 index 000000000000..e6425af02ca6 --- /dev/null +++ b/overlays/patches/firefox/esr/D6695.diff @@ -0,0 +1,282 @@ +diff --git a/toolkit/moz.build b/toolkit/moz.build +index f01b128b2493a..ae0e19ec9c509 100644 +--- a/toolkit/moz.build ++++ b/toolkit/moz.build +@@ -84,3 +84,6 @@ with Files('pluginproblem/**'): + + with Files('l10n-registry.manifest'): + BUG_COMPONENT = ('Core', 'Localization') ++ ++if CONFIG['ENABLE_TESTS']: ++ DIRS += ['tests/gtest'] +diff --git a/toolkit/xre/nsXREDirProvider.cpp b/toolkit/xre/nsXREDirProvider.cpp +index 1d6ffb748e4e4..8708279b964a2 100644 +--- a/toolkit/xre/nsXREDirProvider.cpp ++++ b/toolkit/xre/nsXREDirProvider.cpp +@@ -390,13 +390,6 @@ nsXREDirProvider::GetFile(const char* aProperty, bool* aPersistent, + nsCOMPtr localDir; + rv = GetUserDataDirectoryHome(getter_AddRefs(localDir), false); + if (NS_SUCCEEDED(rv)) { +-# if defined(XP_MACOSX) +- rv = localDir->AppendNative(NS_LITERAL_CSTRING("Mozilla")); +-# else +- rv = localDir->AppendNative(NS_LITERAL_CSTRING(".mozilla")); +-# endif +- } +- if (NS_SUCCEEDED(rv)) { + localDir.swap(file); + } + } +@@ -1302,7 +1295,8 @@ nsresult nsXREDirProvider::GetUpdateRootDir(nsIFile** aResult, + nsDependentCString(hasVendor ? GetAppVendor() : GetAppName())))) { + return NS_ERROR_FAILURE; + } +- } else if (NS_FAILED(localDir->AppendNative(NS_LITERAL_CSTRING("Mozilla")))) { ++ } ++ else if (NS_FAILED(localDir->AppendNative(NS_LITERAL_CSTRING("Mozilla")))) { + return NS_ERROR_FAILURE; + } + +@@ -1443,6 +1437,9 @@ nsresult nsXREDirProvider::GetUserDataDirectoryHome(nsIFile** aFile, + NS_ENSURE_SUCCESS(rv, rv); + + localDir = dirFileMac; ++ ++ rv = localDir->AppendRelativeNativePath(nsDependentCString("Mozilla")); ++ NS_ENSURE_SUCCESS(rv, rv); + #elif defined(XP_IOS) + nsAutoCString userDir; + if (GetUIKitDirectory(aLocal, userDir)) { +@@ -1466,6 +1463,9 @@ nsresult nsXREDirProvider::GetUserDataDirectoryHome(nsIFile** aFile, + NS_ENSURE_SUCCESS(rv, rv); + + rv = NS_NewLocalFile(path, true, getter_AddRefs(localDir)); ++ NS_ENSURE_SUCCESS(rv, rv); ++ rv = localDir->AppendRelativeNativePath(nsDependentCString("Mozilla")); ++ NS_ENSURE_SUCCESS(rv, rv); + #elif defined(XP_UNIX) + const char* homeDir = getenv("HOME"); + if (!homeDir || !*homeDir) return NS_ERROR_FAILURE; +@@ -1487,8 +1487,51 @@ nsresult nsXREDirProvider::GetUserDataDirectoryHome(nsIFile** aFile, + rv = localDir->AppendNative(NS_LITERAL_CSTRING(".cache")); + } + } else { ++ bool exists; ++ // check old config ~/.mozilla + rv = NS_NewNativeLocalFile(nsDependentCString(homeDir), true, + getter_AddRefs(localDir)); ++ NS_ENSURE_SUCCESS(rv, rv); ++ rv = localDir->AppendRelativeNativePath(nsDependentCString(".mozilla")); ++ NS_ENSURE_SUCCESS(rv, rv); ++ rv = localDir->Exists(&exists); ++ NS_ENSURE_SUCCESS(rv, rv); ++ // otherwise, use new config ++ if (!exists) { ++ const char* xdghomedir = getenv("XDG_DATA_HOME"); ++ if (!xdghomedir || !*xdghomedir) { ++ rv = NS_NewNativeLocalFile(nsDependentCString(homeDir), true, ++ getter_AddRefs(localDir)); ++ NS_ENSURE_SUCCESS(rv, rv); ++ rv = localDir->AppendRelativeNativePath(nsDependentCString(".local")); ++ NS_ENSURE_SUCCESS(rv, rv); ++ rv = localDir->Exists(&exists); ++ if (NS_SUCCEEDED(rv) && !exists) { ++ rv = localDir->Create(nsIFile::DIRECTORY_TYPE, 0755); ++ NS_ENSURE_SUCCESS(rv, rv); ++ } ++ rv = localDir->AppendRelativeNativePath(nsDependentCString("share")); ++ NS_ENSURE_SUCCESS(rv, rv); ++ rv = localDir->Exists(&exists); ++ if (NS_SUCCEEDED(rv) && !exists) { ++ rv = localDir->Create(nsIFile::DIRECTORY_TYPE, 0755); ++ } ++ } ++ else { ++ rv = NS_NewNativeLocalFile(nsDependentCString(xdghomedir), true, ++ getter_AddRefs(localDir)); ++ } ++ NS_ENSURE_SUCCESS(rv, rv); ++ ++ rv = localDir->AppendRelativeNativePath(nsDependentCString("mozilla")); ++ NS_ENSURE_SUCCESS(rv, rv); ++ rv = localDir->Exists(&exists); ++ NS_ENSURE_SUCCESS(rv, rv); ++ if (NS_SUCCEEDED(rv) && !exists) { ++ rv = localDir->Create(nsIFile::DIRECTORY_TYPE, 0700); ++ NS_ENSURE_SUCCESS(rv, rv); ++ } ++ } + } + #else + # error "Don't know how to get product dir on your platform" +@@ -1609,20 +1652,12 @@ nsresult nsXREDirProvider::AppendSysUserExtensionPath(nsIFile* aFile) { + + #if defined(XP_MACOSX) || defined(XP_WIN) + +- static const char* const sXR = "Mozilla"; +- rv = aFile->AppendNative(nsDependentCString(sXR)); +- NS_ENSURE_SUCCESS(rv, rv); +- + static const char* const sExtensions = "Extensions"; + rv = aFile->AppendNative(nsDependentCString(sExtensions)); + NS_ENSURE_SUCCESS(rv, rv); + + #elif defined(XP_UNIX) + +- static const char* const sXR = ".mozilla"; +- rv = aFile->AppendNative(nsDependentCString(sXR)); +- NS_ENSURE_SUCCESS(rv, rv); +- + static const char* const sExtensions = "extensions"; + rv = aFile->AppendNative(nsDependentCString(sExtensions)); + NS_ENSURE_SUCCESS(rv, rv); +@@ -1640,20 +1675,12 @@ nsresult nsXREDirProvider::AppendSysUserExtensionsDevPath(nsIFile* aFile) { + + #if defined(XP_MACOSX) || defined(XP_WIN) + +- static const char* const sXR = "Mozilla"; +- rv = aFile->AppendNative(nsDependentCString(sXR)); +- NS_ENSURE_SUCCESS(rv, rv); +- + static const char* const sExtensions = "SystemExtensionsDev"; + rv = aFile->AppendNative(nsDependentCString(sExtensions)); + NS_ENSURE_SUCCESS(rv, rv); + + #elif defined(XP_UNIX) + +- static const char* const sXR = ".mozilla"; +- rv = aFile->AppendNative(nsDependentCString(sXR)); +- NS_ENSURE_SUCCESS(rv, rv); +- + static const char* const sExtensions = "systemextensionsdev"; + rv = aFile->AppendNative(nsDependentCString(sExtensions)); + NS_ENSURE_SUCCESS(rv, rv); +@@ -1718,9 +1745,6 @@ nsresult nsXREDirProvider::AppendProfilePath(nsIFile* aFile, bool aLocal) { + NS_ENSURE_SUCCESS(rv, rv); + #elif defined(XP_UNIX) + nsAutoCString folder; +- // Make it hidden (by starting with "."), except when local (the +- // profile is already under ~/.cache or XDG_CACHE_HOME). +- if (!aLocal) folder.Assign('.'); + + if (!profile.IsEmpty()) { + // Skip any leading path characters +@@ -1740,8 +1764,12 @@ nsresult nsXREDirProvider::AppendProfilePath(nsIFile* aFile, bool aLocal) { + folder.Append(vendor); + ToLowerCase(folder); + +- rv = aFile->AppendNative(folder); +- NS_ENSURE_SUCCESS(rv, rv); ++ // Keep the 'mozilla' path for cache: ++ // Use ${XDG_DATA_HOME:-$HOME/.cache}/mozilla/firefox ++ if (aLocal) { ++ rv = aFile->AppendNative(folder); ++ NS_ENSURE_SUCCESS(rv, rv); ++ } + + folder.Truncate(); + } +diff --git a/xpcom/io/nsAppFileLocationProvider.cpp b/xpcom/io/nsAppFileLocationProvider.cpp +index e79c8303fe129..53c550db18c05 100644 +--- a/xpcom/io/nsAppFileLocationProvider.cpp ++++ b/xpcom/io/nsAppFileLocationProvider.cpp +@@ -247,7 +247,7 @@ nsresult nsAppFileLocationProvider::CloneMozBinDirectory(nsIFile** aLocalFile) { + // GetProductDirectory - Gets the directory which contains the application data + // folder + // +-// UNIX : ~/.mozilla/ ++// UNIX : ~/.mozilla/ or ${XDG_DATA_HOME:-~/.local/share}/mozilla + // WIN : \Mozilla + // Mac : :Documents:Mozilla: + //---------------------------------------------------------------------------------------- +@@ -291,19 +291,80 @@ nsresult nsAppFileLocationProvider::GetProductDirectory(nsIFile** aLocalFile, + return rv; + } + #elif defined(XP_UNIX) +- rv = NS_NewNativeLocalFile(nsDependentCString(PR_GetEnv("HOME")), true, ++ const char* homeDir = PR_GetEnv("HOME"); ++ /* check old config ~/.mozilla */ ++ rv = NS_NewNativeLocalFile(nsDependentCString(homeDir), true, + getter_AddRefs(localDir)); + if (NS_FAILED(rv)) { + return rv; + } ++ rv = localDir->AppendRelativeNativePath(nsDependentCString(".mozilla")); ++ if (NS_FAILED(rv)) { ++ return rv; ++ } ++ rv = localDir->Exists(&exists); ++ if (NS_FAILED(rv)) { ++ return rv; ++ } ++ /* otherwise, use new config */ ++ if (!exists) { ++ const char* xdghomedir = PR_GetEnv("XDG_DATA_HOME"); ++ if (!xdghomedir || !*xdghomedir) { ++ /* XDG_DATA_HOME=$HOME/.local/share */ ++ rv = NS_NewNativeLocalFile(nsDependentCString(homeDir), true, ++ getter_AddRefs(localDir)); ++ if (NS_FAILED(rv)) { ++ return rv; ++ } ++ rv = localDir->AppendRelativeNativePath(nsDependentCString(".local")); ++ if (NS_FAILED(rv)) { ++ return rv; ++ } ++ rv = localDir->Exists(&exists); ++ if (NS_SUCCEEDED(rv) && !exists) { ++ rv = localDir->Create(nsIFile::DIRECTORY_TYPE, 0755); ++ if (NS_FAILED(rv)) { ++ return rv; ++ } ++ } ++ rv = localDir->AppendRelativeNativePath(nsDependentCString("share")); ++ if (NS_FAILED(rv)) { ++ return rv; ++ } ++ rv = localDir->Exists(&exists); ++ if (NS_SUCCEEDED(rv) && !exists) { ++ rv = localDir->Create(nsIFile::DIRECTORY_TYPE, 0755); ++ } ++ } ++ else { ++ rv = NS_NewNativeLocalFile(nsDependentCString(xdghomedir), true, ++ getter_AddRefs(localDir)); ++ } ++ if (NS_FAILED(rv)) { ++ return rv; ++ } ++ rv = localDir->AppendRelativeNativePath(nsDependentCString("mozilla")); ++ if (NS_FAILED(rv)) { ++ return rv; ++ } ++ } + #else + # error dont_know_how_to_get_product_dir_on_your_platform + #endif + ++#if !defined(XP_UNIX) || defined(XP_MACOSX) ++ // Since we have to check for legacy configuration, we have ++ // the complete path for Linux already, so this is not ++ // needed. If we stop checking for legacy at some point, ++ // then we can change this to not be protected by ++ // this clause. + rv = localDir->AppendRelativeNativePath(DEFAULT_PRODUCT_DIR); ++ + if (NS_FAILED(rv)) { + return rv; + } ++#endif ++ + rv = localDir->Exists(&exists); + + if (NS_SUCCEEDED(rv) && !exists) { +@@ -323,7 +384,7 @@ nsresult nsAppFileLocationProvider::GetProductDirectory(nsIFile** aLocalFile, + // GetDefaultUserProfileRoot - Gets the directory which contains each user + // profile dir + // +-// UNIX : ~/.mozilla/ ++// UNIX : ~/.mozilla/ or ${XDG_DATA_HOME:-~/.local/share}/mozilla + // WIN : \Mozilla\Profiles + // Mac : :Documents:Mozilla:Profiles: + //---------------------------------------------------------------------------------------- diff --git a/overlays/patches/firefox/packages.nix b/overlays/patches/firefox/packages.nix index 9a5a0b347acb..ba06e5ead360 100644 --- a/overlays/patches/firefox/packages.nix +++ b/overlays/patches/firefox/packages.nix @@ -13,7 +13,11 @@ firefoxPackages // { patches = patches ++ [ release/D6695.diff ]; }); - firefox-esr-78 = firefox-esr-78.override { stdenv = clangStdenv; }; + firefox-esr-78 = (firefox-esr-78.override { + stdenv = clangStdenv; + }).overrideAttrs ({ patches ? [], ... }: { + patches = patches ++ [ esr/D6695.diff ]; + }); firefox-beta = (firefox-beta.override { stdenv = clangStdenv; -- cgit 1.4.1