commit 98cb1d5411935ac5a629b7691558925d6ea78e05
parent 90bbcf290109367c1c85ecf8a456c8e7b5b95ca4
Author: Alexandre Lissy <lissyx+mozillians@lissyx.dyndns.org>
Date: Wed, 19 Nov 2025 17:46:17 +0000
Bug 259356 - Add gtests on nsXREDirProvider directories prior XDG handling r=xpcom-reviewers,nika
Differential Revision: https://phabricator.services.mozilla.com/D214376
Diffstat:
6 files changed, 2149 insertions(+), 0 deletions(-)
diff --git a/toolkit/moz.build b/toolkit/moz.build
@@ -76,6 +76,9 @@ TEST_HARNESS_FILES.testing.mochitest.browser.toolkit.crashreporter.test.browser
"crashreporter/test/browser/crashreport.sjs",
]
+if CONFIG["ENABLE_TESTS"]:
+ DIRS += ["tests/gtest"]
+
with Files("docs/**"):
BUG_COMPONENT = ("Toolkit", "General")
diff --git a/toolkit/tests/gtest/TestXREAppDir.cpp b/toolkit/tests/gtest/TestXREAppDir.cpp
@@ -0,0 +1,2091 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* vim:set ts=2 sw=2 sts=2 et cindent: */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+#include "gtest/gtest.h"
+#include "mozilla/gtest/MozAssertions.h"
+
+#include "nsXREDirProvider.h"
+#include "nsAppRunner.h"
+
+#include "nsDirectoryService.h"
+#include "nsIDirectoryService.h"
+#include "nsTHashMap.h"
+
+#include "nsAppDirectoryServiceDefs.h"
+#include "prenv.h"
+#include "nsIFile.h"
+#include "SpecialSystemDirectory.h"
+#include "nsPrintfCString.h"
+
+#if defined(XP_UNIX)
+# include <stdlib.h>
+# include <unistd.h>
+# include <sys/stat.h>
+#endif // XP_UNIX
+
+using namespace mozilla;
+
+#if defined(XP_WIN)
+# include <windows.h>
+# include <Shlobj.h>
+# include <KnownFolders.h> // FOLDERID_Documents
+#endif
+
+#include "mozilla/XREAppData.h"
+
+class BaseXREAppDir : public ::testing::Test {
+ protected:
+ void SetUp() override {
+// There is no need to mock on macOS because nsXREDirProvider relies on macOS
+// level APIs, see below
+#if defined(XP_UNIX) && !defined(XP_MACOSX)
+ mMockedHomeDir = GetNewHome();
+#endif
+
+ mFakeAppData = XREAppData();
+ mFakeAppData.profile = "fooprofile";
+#if defined(ANDROID)
+ mFakeAppData.name = "Fennec";
+#else
+ mFakeAppData.name = "Firefox";
+#endif
+ mFakeAppData.vendor = "Mozilla";
+
+#if defined(XP_WIN)
+ nsresult rv = GetShellFolderPath(FOLDERID_RoamingAppData, mRoamingHome);
+ EXPECT_NS_SUCCEEDED(rv);
+ rv = GetShellFolderPath(FOLDERID_LocalAppData, mLocalHome);
+ EXPECT_NS_SUCCEEDED(rv);
+#endif
+
+#if defined(XP_MACOSX)
+ nsresult rv = FindFolder(kApplicationSupportFolderType, mAppSupport);
+ EXPECT_NS_SUCCEEDED(rv);
+ rv = FindFolder(kCachedDataFolderType, mAppCache);
+ EXPECT_NS_SUCCEEDED(rv);
+ rv = FindFolder(kDomainLibraryFolderType, mLibrary);
+ EXPECT_NS_SUCCEEDED(rv);
+ rv = FindFolder(kCurrentUserFolderType, mHomeRoot);
+ EXPECT_NS_SUCCEEDED(rv);
+#endif
+ }
+
+#if defined(XP_WIN)
+ nsresult GetShellFolderPath(KNOWNFOLDERID folder, nsACString& _retval) {
+ DWORD flags =
+ KF_FLAG_SIMPLE_IDLIST | KF_FLAG_DONT_VERIFY | KF_FLAG_NO_ALIAS;
+ PWSTR path = nullptr;
+
+ if (!SUCCEEDED(SHGetKnownFolderPath(folder, flags, NULL, &path))) {
+ return NS_ERROR_NOT_AVAILABLE;
+ }
+
+ CopyUTF16toUTF8(MakeStringSpan(reinterpret_cast<char16_t*>(path)), _retval);
+ CoTaskMemFree(path);
+ return NS_OK;
+ }
+#endif
+
+#if defined(XP_MACOSX)
+ nsresult FindFolder(OSType folderType, nsACString& retval) {
+ FSRef fsRef;
+ nsCOMPtr<nsILocalFileMac> dirFileMac;
+ OSErr err =
+ ::FSFindFolder(kUserDomain, folderType, kDontCreateFolder, &fsRef);
+ if (err != noErr) {
+ return NS_ERROR_FAILURE;
+ }
+
+ nsresult rv = NS_NewLocalFileWithFSRef(&fsRef, getter_AddRefs(dirFileMac));
+ EXPECT_NS_SUCCEEDED(rv);
+ retval = dirFileMac->NativePath().get();
+
+ return NS_OK;
+ }
+#endif
+
+ void TearDown() override {
+#if defined(XP_UNIX) && !defined(XP_MACOSX)
+ nsresult rv = nsXREDirProvider::RestoreUserDataProfileDirectoryFromGTest(
+ mDataDirProfileLocal, mDataDirProfile);
+ EXPECT_NS_SUCCEEDED(rv);
+
+ for (auto& entry : mRestoreEnv) {
+ PR_SetEnv(ToNewCString(entry.GetKey() + "="_ns + entry.GetData()));
+ }
+
+ rv = mMockedHome->Remove(true);
+#endif
+
+ if (mOriginalAppData) {
+ SwitchFakeAppDataOff();
+ }
+
+ EXPECT_STREQ(gAppData->profile, nullptr);
+#if defined(ANDROID)
+ EXPECT_STREQ(gAppData->name, "Fennec");
+#else
+ EXPECT_STREQ(gAppData->name, "Firefox");
+#endif
+ EXPECT_STREQ(gAppData->vendor, "Mozilla");
+ }
+
+ nsCString GetPath(nsCOMPtr<nsIFile> aFile) {
+#if defined(XP_WIN)
+ return NS_ConvertUTF16toUTF8(aFile->NativePath());
+#else
+ return aFile->NativePath();
+#endif
+ }
+
+ void SwitchFakeAppDataOn() {
+ EXPECT_EQ(mOriginalAppData, nullptr);
+ mOriginalAppData = gAppData;
+ gAppData = &mFakeAppData;
+ EXPECT_STREQ(gAppData->profile, "fooprofile");
+ }
+
+ void SwitchFakeAppDataOff() {
+ EXPECT_NE(mOriginalAppData, nullptr);
+ gAppData = mOriginalAppData;
+ mOriginalAppData = nullptr;
+ EXPECT_STREQ(gAppData->profile, nullptr);
+ }
+
+ // Used by
+ // - XRE_USER_APP_DATA_DIR
+ // - NS_APP_APPLICATION_REGISTRY_DIR
+ // - NS_APP_APPLICATION_REGISTRY_FILE
+ nsCString GetUserAppDataDirectory() {
+ nsCOMPtr<nsIFile> localDir;
+ nsresult rv = NS_OK;
+ nsXREDirProvider::GetUserAppDataDirectory(getter_AddRefs(localDir));
+ EXPECT_NS_SUCCEEDED(rv);
+ return GetPath(localDir);
+ }
+
+ nsCString GetUserProfilesRootDir() {
+ RefPtr<nsXREDirProvider> ds = nsXREDirProvider::GetSingleton();
+
+ nsCOMPtr<nsIFile> localDir;
+ nsresult rv = ds->GetUserProfilesRootDir(getter_AddRefs(localDir));
+ EXPECT_NS_SUCCEEDED(rv);
+ return GetPath(localDir);
+ }
+
+ nsCString GetUserProfilesLocalDir() {
+ RefPtr<nsXREDirProvider> ds = nsXREDirProvider::GetSingleton();
+
+ nsCOMPtr<nsIFile> localDir;
+ nsresult rv = ds->GetUserProfilesLocalDir(getter_AddRefs(localDir));
+ EXPECT_NS_SUCCEEDED(rv);
+ return GetPath(localDir);
+ }
+
+ nsCString GetUserLocalDataDirectory() {
+ nsCOMPtr<nsIFile> localDir;
+ nsresult rv =
+ nsXREDirProvider::GetUserLocalDataDirectory(getter_AddRefs(localDir));
+ EXPECT_NS_SUCCEEDED(rv);
+ return GetPath(localDir);
+ }
+
+ nsCString GetFromXREDirProvider(const char* aName) {
+ RefPtr<nsXREDirProvider> ds = nsXREDirProvider::GetSingleton();
+
+ bool dummy;
+ nsCOMPtr<nsIFile> localDir;
+ nsresult rv = ds->GetFile(aName, &dummy, getter_AddRefs(localDir));
+ EXPECT_NS_SUCCEEDED(rv);
+ return GetPath(localDir);
+ }
+
+ nsCString GetFromDirectoryService(const char* aName) {
+ nsCOMPtr<nsIFile> localDir;
+ nsDirectoryService::gService->Undefine(aName);
+ nsresult rv = nsDirectoryService::gService->Get(aName, NS_GET_IID(nsIFile),
+ getter_AddRefs(localDir));
+ EXPECT_NS_SUCCEEDED(rv);
+ return GetPath(localDir);
+ }
+
+ // Create a temp dir and set HOME to it. Upon successful completion, return
+ // the string with the path of the homedir.
+#if defined(XP_UNIX) && !defined(XP_MACOSX)
+ nsCString GetNewHome() {
+ nsresult rv = GetSpecialSystemDirectory(
+ SystemDirectories::OS_TemporaryDirectory, getter_AddRefs(mMockedHome));
+ EXPECT_NS_SUCCEEDED(rv);
+
+ rv = mMockedHome->AppendNative(
+ nsPrintfCString("xreappdir-gtest-%d", getpid()));
+ EXPECT_NS_SUCCEEDED(rv);
+
+ rv = mMockedHome->CreateUnique(nsIFile::DIRECTORY_TYPE, 0700);
+ EXPECT_NS_SUCCEEDED(rv);
+
+ // Get a Clone() of gDataDirProfileLocal / gDataDirProfile
+ // They will get restored in TearDown()
+ rv = nsXREDirProvider::ClearUserDataProfileDirectoryFromGTest(
+ getter_AddRefs(mDataDirProfileLocal), getter_AddRefs(mDataDirProfile));
+ EXPECT_NS_SUCCEEDED(rv);
+
+ nsCString homedir = mMockedHome->NativePath();
+ SetEnv("HOME", homedir.get());
+ return homedir;
+ }
+#endif
+
+#if defined(XP_UNIX)
+ nsTHashMap<nsCString, nsCString> mRestoreEnv;
+
+ static const char* GetEnv(const char* aName) { return PR_GetEnv(aName); }
+
+ void SaveEnv(const char* aName) {
+ mRestoreEnv.LookupOrInsertWith(nsDependentCString(aName), [aName] {
+ const char* value = GetEnv(aName);
+ return value ? nsCString(value) : ""_ns;
+ });
+ }
+
+ void SetEnv(const char* aName, const char* aValue) {
+ SaveEnv(aName);
+ auto envValue = Smprintf("%s=%s", aName, aValue);
+ ASSERT_EQ(0, PR_SetEnv(envValue.release()));
+ ASSERT_STREQ(aValue, GetEnv(aName));
+ }
+
+ void UnsetEnv(const char* aName) { SetEnv(aName, ""); }
+#endif
+
+ void MkHomeSubdir(const char* aSubdir, nsCString& subdir) {
+#if defined(XP_UNIX) && !defined(XP_MACOSX)
+ subdir = mMockedHomeDir;
+ if (aSubdir[0] != '/') {
+ subdir += "/";
+ }
+ subdir += aSubdir;
+ ASSERT_EQ(0, mkdir(subdir.get(), S_IRWXU));
+#endif
+ }
+
+#if defined(XP_UNIX) && !defined(XP_MACOSX)
+ nsCOMPtr<nsIFile> mMockedHome;
+ nsCOMPtr<nsIFile> mDataDirProfileLocal;
+ nsCOMPtr<nsIFile> mDataDirProfile;
+
+ nsCString mMockedHomeDir;
+#endif
+
+#if defined(XP_MACOSX)
+ nsCString mAppSupport;
+ nsCString mAppCache;
+ nsCString mLibrary;
+ nsCString mHomeRoot;
+#endif
+
+#if defined(XP_WIN)
+ nsCString mLocalHome;
+ nsCString mRoamingHome;
+#endif
+
+ const XREAppData* mOriginalAppData = nullptr;
+ XREAppData mFakeAppData{};
+};
+
+class ExistentLegacyXREAppDir_Generic : public BaseXREAppDir {
+ protected:
+ void SetUp() override {
+ BaseXREAppDir::SetUp();
+ MkHomeSubdir(".mozilla", mMozDir);
+ }
+ nsCString mMozDir;
+};
+
+class ExistentLegacyXREAppDir_Generic_AppDataProfile
+ : public ExistentLegacyXREAppDir_Generic {
+ protected:
+ void SetUp() override {
+ ExistentLegacyXREAppDir_Generic::SetUp();
+ SwitchFakeAppDataOn();
+ }
+};
+
+class NonExistentLegacyXREAppDir_Generic : public BaseXREAppDir {};
+
+class NonExistentLegacyXREAppDir_Generic_AppDataProfile : public BaseXREAppDir {
+ protected:
+ void SetUp() override {
+ BaseXREAppDir::SetUp();
+ SwitchFakeAppDataOn();
+ }
+};
+
+/*
+ * Tests the legacy behavior when there is
+ * - no MOZ_LEGACY_HOME
+ * - existing $HOME/.mozilla
+ */
+class ExistentLegacyXREAppDir_NoEnv : public ExistentLegacyXREAppDir_Generic {};
+
+class ExistentLegacyXREAppDir_NoEnv_AppDataProfile
+ : public ExistentLegacyXREAppDir_Generic_AppDataProfile {};
+
+class NonExistentLegacyXREAppDir_NoEnv
+ : public NonExistentLegacyXREAppDir_Generic {};
+
+class NonExistentLegacyXREAppDir_NoEnv_AppDataProfile
+ : public NonExistentLegacyXREAppDir_Generic_AppDataProfile {};
+
+/*
+ * Tests the legacy behavior when there is
+ * - MOZ_LEGACY_HOME = 0
+ * - existing $HOME/.mozilla
+ */
+class ExistentLegacyXREAppDir_BadEnv : public ExistentLegacyXREAppDir_Generic {
+ protected:
+ void SetUp() override {
+ ExistentLegacyXREAppDir_Generic::SetUp();
+#if defined(XP_UNIX)
+ SetEnv("MOZ_LEGACY_HOME", "0");
+#endif
+ }
+};
+
+class ExistentLegacyXREAppDir_BadEnv_AppDataProfile
+ : public ExistentLegacyXREAppDir_Generic_AppDataProfile {
+ protected:
+ void SetUp() override {
+ ExistentLegacyXREAppDir_Generic_AppDataProfile::SetUp();
+#if defined(XP_UNIX)
+ SetEnv("MOZ_LEGACY_HOME", "0");
+#endif
+ }
+};
+
+class NonExistentLegacyXREAppDir_BadEnv
+ : public NonExistentLegacyXREAppDir_Generic {
+ protected:
+ void SetUp() override {
+ NonExistentLegacyXREAppDir_Generic::SetUp();
+#if defined(XP_UNIX)
+ SetEnv("MOZ_LEGACY_HOME", "0");
+#endif
+ }
+};
+
+class NonExistentLegacyXREAppDir_BadEnv_AppDataProfile
+ : public NonExistentLegacyXREAppDir_Generic_AppDataProfile {
+ protected:
+ void SetUp() override {
+ NonExistentLegacyXREAppDir_Generic_AppDataProfile::SetUp();
+#if defined(XP_UNIX)
+ SetEnv("MOZ_LEGACY_HOME", "0");
+#endif
+ }
+};
+
+/*
+ * Tests the legacy behavior when there is
+ * - MOZ_LEGACY_HOME = 1
+ * - existing $HOME/.mozilla
+ */
+class ExistentLegacyXREAppDir_GoodEnv : public ExistentLegacyXREAppDir_Generic {
+ protected:
+ void SetUp() override {
+ ExistentLegacyXREAppDir_Generic::SetUp();
+#if defined(XP_UNIX)
+ SetEnv("MOZ_LEGACY_HOME", "1");
+#endif
+ }
+};
+
+class ExistentLegacyXREAppDir_GoodEnv_AppDataProfile
+ : public ExistentLegacyXREAppDir_Generic_AppDataProfile {
+ protected:
+ void SetUp() override {
+ ExistentLegacyXREAppDir_Generic_AppDataProfile::SetUp();
+#if defined(XP_UNIX)
+ SetEnv("MOZ_LEGACY_HOME", "1");
+#endif
+ }
+};
+
+class NonExistentLegacyXREAppDir_GoodEnv
+ : public NonExistentLegacyXREAppDir_Generic {
+ protected:
+ void SetUp() override {
+ NonExistentLegacyXREAppDir_Generic::SetUp();
+#if defined(XP_UNIX)
+ SetEnv("MOZ_LEGACY_HOME", "1");
+#endif
+ }
+};
+
+class NonExistentLegacyXREAppDir_GoodEnv_AppDataProfile
+ : public NonExistentLegacyXREAppDir_Generic_AppDataProfile {
+ protected:
+ void SetUp() override {
+ NonExistentLegacyXREAppDir_Generic_AppDataProfile::SetUp();
+#if defined(XP_UNIX)
+ SetEnv("MOZ_LEGACY_HOME", "1");
+#endif
+ }
+};
+
+class XDGXREAppDir_Generic : public BaseXREAppDir {};
+
+class XDGXREAppDir_Generic_AppDataProfile : public XDGXREAppDir_Generic {
+ protected:
+ void SetUp() override {
+ XDGXREAppDir_Generic::SetUp();
+ SwitchFakeAppDataOn();
+ }
+};
+
+/*
+ * Tests the new default behavior when there is:
+ * - no MOZ_LEGACY_HOME
+ * - no XDG_CONFIG_HOME
+ * - no existing $HOME/.mozilla
+ * => $HOME/.config/mozilla/
+ */
+class XDGXREAppDir_NoEnv : public XDGXREAppDir_Generic {
+ protected:
+ void SetUp() override {
+ XDGXREAppDir_Generic::SetUp();
+#if defined(XP_UNIX)
+ UnsetEnv("MOZ_LEGACY_HOME");
+ UnsetEnv("XDG_CONFIG_HOME");
+#endif
+ }
+};
+
+class XDGXREAppDir_NoEnv_AppDataProfile
+ : public XDGXREAppDir_Generic_AppDataProfile {
+ protected:
+ void SetUp() override {
+ XDGXREAppDir_Generic_AppDataProfile::SetUp();
+#if defined(XP_UNIX)
+ UnsetEnv("MOZ_LEGACY_HOME");
+ UnsetEnv("XDG_CONFIG_HOME");
+#endif
+ }
+};
+
+/*
+ * Tests the new default behavior when there is:
+ * - no MOZ_LEGACY_HOME
+ * - XDG_CONFIG_HOME
+ * - no existing $HOME/.mozilla
+ * => $XDG_CONFIG_HOME/mozilla
+ */
+class XDGXREAppDir_Env : public XDGXREAppDir_Generic {
+ protected:
+ void SetUp() override {
+ XDGXREAppDir_Generic::SetUp();
+ // mXdgDir will be cleaned when we clean the temp home we created
+ MkHomeSubdir(".xdgConfigDir", mXdgDir);
+#if defined(XP_UNIX)
+ SetEnv("XDG_CONFIG_HOME", mXdgDir.get());
+#endif
+ }
+
+ nsCString mXdgDir;
+};
+
+class XDGXREAppDir_Env_AppDataProfile
+ : public XDGXREAppDir_Generic_AppDataProfile {
+ protected:
+ void SetUp() override {
+ XDGXREAppDir_Generic_AppDataProfile::SetUp();
+ // mXdgDir will be cleaned when we clean the temp home we created
+ MkHomeSubdir(".xdgConfigDir", mXdgDir);
+#if defined(XP_UNIX)
+ SetEnv("XDG_CONFIG_HOME", mXdgDir.get());
+#endif
+ }
+
+ nsCString mXdgDir;
+};
+
+/*
+ * Tests the new default behavior when there is:
+ * - invalid XDG_CONFIG_HOME
+ * => $HOME/.config/mozilla
+ */
+class XDGXREAppDir_InvalidEnv : public XDGXREAppDir_Generic {
+ protected:
+ void SetUp() override {
+ XDGXREAppDir_Generic::SetUp();
+ mXdgDir += "$HOME/invalid-xdg-dir/";
+#if defined(XP_UNIX)
+ SetEnv("XDG_CONFIG_HOME", mXdgDir.get());
+#endif
+ }
+
+ nsCString mXdgDir;
+};
+
+class XDGXREAppDir_InvalidEnv_AppDataProfile
+ : public XDGXREAppDir_Generic_AppDataProfile {
+ protected:
+ void SetUp() override {
+ XDGXREAppDir_Generic_AppDataProfile::SetUp();
+ mXdgDir += "$HOME/invalid-xdg-dir/";
+#if defined(XP_UNIX)
+ SetEnv("XDG_CONFIG_HOME", mXdgDir.get());
+#endif
+ }
+
+ nsCString mXdgDir;
+};
+
+class CacheXREAppDir_Env : public BaseXREAppDir {
+ protected:
+ void SetUp() override {
+ BaseXREAppDir::SetUp();
+ // mXdgCache will be cleaned when we clean the temp home we created
+ MkHomeSubdir(".xdgCacheDir", mXdgCache);
+#if defined(XP_UNIX)
+ SetEnv("XDG_CACHE_HOME", mXdgCache.get());
+#endif
+ }
+
+ nsCString mXdgCache;
+};
+
+class CacheXREAppDir_NoEnv : public BaseXREAppDir {
+ protected:
+ void SetUp() override {
+ BaseXREAppDir::SetUp();
+#if defined(XP_UNIX)
+ UnsetEnv("XDG_CACHE_HOME");
+#endif
+ }
+};
+
+// GetUserAppDataDirectory
+
+// Check if '$HOME/.mozilla' is used when it exists.
+TEST_F(ExistentLegacyXREAppDir_NoEnv, GetUserAppDataDirectory) {
+ ASSERT_EQ(
+#if defined(ANDROID)
+ nsCString(mMockedHomeDir + "/mozilla"_ns)
+#elif defined(XP_MACOSX)
+ nsCString(mAppSupport + "/Firefox"_ns)
+#elif defined(XP_UNIX)
+ nsCString(mMockedHomeDir + "/.mozilla/firefox"_ns)
+#elif defined(XP_WIN)
+ nsCString(mRoamingHome + "\\Mozilla\\Firefox"_ns)
+#endif
+ ,
+ GetUserAppDataDirectory());
+}
+
+// Check if '$HOME/.mozilla' is used when it exists and MOZ_LEGACY_HOME != 1
+TEST_F(ExistentLegacyXREAppDir_BadEnv, GetUserAppDataDirectory) {
+ ASSERT_EQ(
+#if defined(ANDROID)
+ nsCString(mMockedHomeDir + "/mozilla"_ns)
+#elif defined(XP_MACOSX)
+ nsCString(mAppSupport + "/Firefox"_ns)
+#elif defined(XP_UNIX)
+ nsCString(mMockedHomeDir + "/.mozilla/firefox"_ns)
+#elif defined(XP_WIN)
+ nsCString(mRoamingHome + "\\Mozilla\\Firefox"_ns)
+#endif
+ ,
+ GetUserAppDataDirectory());
+}
+
+TEST_F(ExistentLegacyXREAppDir_GoodEnv, GetUserAppDataDirectory) {
+ ASSERT_EQ(
+#if defined(ANDROID)
+ nsCString(mMockedHomeDir + "/mozilla"_ns)
+#elif defined(XP_MACOSX)
+ nsCString(mAppSupport + "/Firefox"_ns)
+#elif defined(XP_UNIX)
+ nsCString(mMockedHomeDir + "/.mozilla/firefox"_ns)
+#elif defined(XP_WIN)
+ nsCString(mRoamingHome + "\\Mozilla\\Firefox"_ns)
+#endif
+ ,
+ GetUserAppDataDirectory());
+}
+
+TEST_F(NonExistentLegacyXREAppDir_NoEnv, GetUserAppDataDirectory) {
+ ASSERT_EQ(
+#if defined(ANDROID)
+ nsCString(mMockedHomeDir + "/mozilla"_ns)
+#elif defined(XP_MACOSX)
+ nsCString(mAppSupport + "/Firefox"_ns)
+#elif defined(XP_UNIX)
+ nsCString(mMockedHomeDir + "/.mozilla/firefox"_ns)
+#elif defined(XP_WIN)
+ nsCString(mRoamingHome + "\\Mozilla\\Firefox"_ns)
+#endif
+ ,
+ GetUserAppDataDirectory());
+}
+
+// Check if '$HOME/.mozilla' is not used when the env variable MOZ_LEGACY_HOME
+// is set to 0.
+TEST_F(NonExistentLegacyXREAppDir_BadEnv, GetUserAppDataDirectory) {
+ ASSERT_EQ(
+#if defined(ANDROID)
+ nsCString(mMockedHomeDir + "/mozilla"_ns)
+#elif defined(XP_MACOSX)
+ nsCString(mAppSupport + "/Firefox"_ns)
+#elif defined(XP_UNIX)
+ nsCString(mMockedHomeDir + "/.mozilla/firefox"_ns)
+#elif defined(XP_WIN)
+ nsCString(mRoamingHome + "\\Mozilla\\Firefox"_ns)
+#endif
+ ,
+ GetUserAppDataDirectory());
+}
+
+// Check if '$HOME/.mozilla' is used when it does not exists and MOZ_LEGACY_HOME
+// = 1
+TEST_F(NonExistentLegacyXREAppDir_GoodEnv, GetUserAppDataDirectory) {
+ ASSERT_EQ(
+#if defined(ANDROID)
+ nsCString(mMockedHomeDir + "/mozilla"_ns)
+#elif defined(XP_MACOSX)
+ nsCString(mAppSupport + "/Firefox"_ns)
+#elif defined(XP_UNIX)
+ nsCString(mMockedHomeDir + "/.mozilla/firefox"_ns)
+#elif defined(XP_WIN)
+ nsCString(mRoamingHome + "\\Mozilla\\Firefox"_ns)
+#endif
+ ,
+ GetUserAppDataDirectory());
+}
+
+// Check if '$HOME/.config/mozilla' is used if $HOME/.mozilla does not exist
+// and the env variable XDG_CONFIG_HOME is not set.
+TEST_F(XDGXREAppDir_NoEnv, GetUserAppDataDirectory) {
+ ASSERT_EQ(
+#if defined(ANDROID)
+ nsCString(mMockedHomeDir + "/mozilla"_ns)
+#elif defined(XP_MACOSX)
+ nsCString(mAppSupport + "/Firefox"_ns)
+#elif defined(XP_UNIX)
+ nsCString(mMockedHomeDir + "/.mozilla/firefox"_ns)
+#elif defined(XP_WIN)
+ nsCString(mRoamingHome + "\\Mozilla\\Firefox"_ns)
+#endif
+ ,
+ GetUserAppDataDirectory());
+}
+
+// Check if '$HOME/.config/mozilla' is used if $HOME/.mozilla does not exist
+// and the env variable XDG_CONFIG_HOME is invalid.
+TEST_F(XDGXREAppDir_InvalidEnv, GetUserAppDataDirectory) {
+ ASSERT_EQ(
+#if defined(ANDROID)
+ nsCString(mMockedHomeDir + "/mozilla"_ns)
+#elif defined(XP_MACOSX)
+ nsCString(mAppSupport + "/Firefox"_ns)
+#elif defined(XP_UNIX)
+ nsCString(mMockedHomeDir + "/.mozilla/firefox"_ns)
+#elif defined(XP_WIN)
+ nsCString(mRoamingHome + "\\Mozilla\\Firefox"_ns)
+#endif
+ ,
+ GetUserAppDataDirectory());
+}
+
+TEST_F(XDGXREAppDir_Env, GetUserAppDataDirectory) {
+ ASSERT_EQ(
+#if defined(ANDROID)
+ nsCString(mMockedHomeDir + "/mozilla"_ns)
+#elif defined(XP_MACOSX)
+ nsCString(mAppSupport + "/Firefox"_ns)
+#elif defined(XP_UNIX)
+ nsCString(mMockedHomeDir + "/.mozilla/firefox"_ns)
+#elif defined(XP_WIN)
+ nsCString(mRoamingHome + "\\Mozilla\\Firefox"_ns)
+#endif
+ ,
+ GetUserAppDataDirectory());
+}
+
+// XREUserNativeManifests
+
+#if defined(XP_UNIX)
+TEST_F(ExistentLegacyXREAppDir_NoEnv, XREUserNativeManifests) {
+ ASSERT_EQ(
+# if defined(ANDROID)
+ nsCString(mMockedHomeDir + "/.mozilla"_ns)
+# elif defined(XP_MACOSX)
+ nsCString(mAppSupport + "/Mozilla"_ns)
+# elif defined(XP_UNIX)
+ nsCString(mMockedHomeDir + "/.mozilla"_ns)
+# endif
+ ,
+ GetFromXREDirProvider(XRE_USER_NATIVE_MANIFESTS));
+}
+
+TEST_F(ExistentLegacyXREAppDir_BadEnv, XREUserNativeManifests) {
+ ASSERT_EQ(
+# if defined(ANDROID)
+ nsCString(mMockedHomeDir + "/.mozilla"_ns)
+# elif defined(XP_MACOSX)
+ nsCString(mAppSupport + "/Mozilla"_ns)
+# elif defined(XP_UNIX)
+ nsCString(mMockedHomeDir + "/.mozilla"_ns)
+# endif
+ ,
+ GetFromXREDirProvider(XRE_USER_NATIVE_MANIFESTS));
+}
+
+TEST_F(ExistentLegacyXREAppDir_GoodEnv, XREUserNativeManifests) {
+ ASSERT_EQ(
+# if defined(ANDROID)
+ nsCString(mMockedHomeDir + "/.mozilla"_ns)
+# elif defined(XP_MACOSX)
+ nsCString(mAppSupport + "/Mozilla"_ns)
+# elif defined(XP_UNIX)
+ nsCString(mMockedHomeDir + "/.mozilla"_ns)
+# endif
+ ,
+ GetFromXREDirProvider(XRE_USER_NATIVE_MANIFESTS));
+}
+
+TEST_F(NonExistentLegacyXREAppDir_NoEnv, XREUserNativeManifests) {
+ ASSERT_EQ(
+# if defined(ANDROID)
+ nsCString(mMockedHomeDir + "/.mozilla"_ns)
+# elif defined(XP_MACOSX)
+ nsCString(mAppSupport + "/Mozilla"_ns)
+# elif defined(XP_UNIX)
+ nsCString(mMockedHomeDir + "/.mozilla"_ns)
+# endif
+ ,
+ GetFromXREDirProvider(XRE_USER_NATIVE_MANIFESTS));
+}
+
+TEST_F(NonExistentLegacyXREAppDir_BadEnv, XREUserNativeManifests) {
+ ASSERT_EQ(
+# if defined(ANDROID)
+ nsCString(mMockedHomeDir + "/.mozilla"_ns)
+# elif defined(XP_MACOSX)
+ nsCString(mAppSupport + "/Mozilla"_ns)
+# elif defined(XP_UNIX)
+ nsCString(mMockedHomeDir + "/.mozilla"_ns)
+# endif
+ ,
+ GetFromXREDirProvider(XRE_USER_NATIVE_MANIFESTS));
+}
+
+TEST_F(NonExistentLegacyXREAppDir_GoodEnv, XREUserNativeManifests) {
+ ASSERT_EQ(
+# if defined(ANDROID)
+ nsCString(mMockedHomeDir + "/.mozilla"_ns)
+# elif defined(XP_MACOSX)
+ nsCString(mAppSupport + "/Mozilla"_ns)
+# elif defined(XP_UNIX)
+ nsCString(mMockedHomeDir + "/.mozilla"_ns)
+# endif
+ ,
+ GetFromXREDirProvider(XRE_USER_NATIVE_MANIFESTS));
+}
+
+TEST_F(XDGXREAppDir_NoEnv, XREUserNativeManifests) {
+ ASSERT_EQ(
+# if defined(ANDROID)
+ nsCString(mMockedHomeDir + "/.mozilla"_ns)
+# elif defined(XP_MACOSX)
+ nsCString(mAppSupport + "/Mozilla"_ns)
+# elif defined(XP_UNIX)
+ nsCString(mMockedHomeDir + "/.mozilla"_ns)
+# endif
+ ,
+ GetFromXREDirProvider(XRE_USER_NATIVE_MANIFESTS));
+}
+
+TEST_F(XDGXREAppDir_InvalidEnv, XREUserNativeManifests) {
+ ASSERT_EQ(
+# if defined(ANDROID)
+ nsCString(mMockedHomeDir + "/.mozilla"_ns)
+# elif defined(XP_MACOSX)
+ nsCString(mAppSupport + "/Mozilla"_ns)
+# elif defined(XP_UNIX)
+ nsCString(mMockedHomeDir + "/.mozilla"_ns)
+# endif
+ ,
+ GetFromXREDirProvider(XRE_USER_NATIVE_MANIFESTS));
+}
+
+TEST_F(XDGXREAppDir_Env, XREUserNativeManifests) {
+ ASSERT_EQ(
+# if defined(ANDROID)
+ nsCString(mMockedHomeDir + "/.mozilla"_ns)
+# elif defined(XP_MACOSX)
+ nsCString(mAppSupport + "/Mozilla"_ns)
+# elif defined(XP_UNIX)
+ nsCString(mMockedHomeDir + "/.mozilla"_ns)
+# endif
+ ,
+ GetFromXREDirProvider(XRE_USER_NATIVE_MANIFESTS));
+}
+#endif // defined(XP_UNIX)
+
+// XREUserSysExtensionDir
+
+#if defined(XP_UNIX)
+TEST_F(ExistentLegacyXREAppDir_NoEnv, XREUserSysExtensionDir) {
+ ASSERT_EQ(
+# if defined(ANDROID)
+ nsCString(mMockedHomeDir + "/.mozilla/extensions"_ns)
+# elif defined(XP_MACOSX)
+ nsCString(mAppSupport + "/Mozilla/Extensions"_ns)
+# elif defined(XP_UNIX)
+ nsCString(mMockedHomeDir + "/.mozilla/extensions"_ns)
+# endif
+ ,
+ GetFromXREDirProvider(XRE_USER_SYS_EXTENSION_DIR));
+}
+
+TEST_F(ExistentLegacyXREAppDir_BadEnv, XREUserSysExtensionDir) {
+ ASSERT_EQ(
+# if defined(ANDROID)
+ nsCString(mMockedHomeDir + "/.mozilla/extensions"_ns)
+# elif defined(XP_MACOSX)
+ nsCString(mAppSupport + "/Mozilla/Extensions"_ns)
+# elif defined(XP_UNIX)
+ nsCString(mMockedHomeDir + "/.mozilla/extensions"_ns)
+# endif
+ ,
+ GetFromXREDirProvider(XRE_USER_SYS_EXTENSION_DIR));
+}
+
+TEST_F(ExistentLegacyXREAppDir_GoodEnv, XREUserSysExtensionDir) {
+ ASSERT_EQ(
+# if defined(ANDROID)
+ nsCString(mMockedHomeDir + "/.mozilla/extensions"_ns)
+# elif defined(XP_MACOSX)
+ nsCString(mAppSupport + "/Mozilla/Extensions"_ns)
+# elif defined(XP_UNIX)
+ nsCString(mMockedHomeDir + "/.mozilla/extensions"_ns)
+# endif
+ ,
+ GetFromXREDirProvider(XRE_USER_SYS_EXTENSION_DIR));
+}
+
+TEST_F(NonExistentLegacyXREAppDir_NoEnv, XREUserSysExtensionDir) {
+ ASSERT_EQ(
+# if defined(ANDROID)
+ nsCString(mMockedHomeDir + "/.mozilla/extensions"_ns)
+# elif defined(XP_MACOSX)
+ nsCString(mAppSupport + "/Mozilla/Extensions"_ns)
+# elif defined(XP_UNIX)
+ nsCString(mMockedHomeDir + "/.mozilla/extensions"_ns)
+# endif
+ ,
+ GetFromXREDirProvider(XRE_USER_SYS_EXTENSION_DIR));
+}
+
+TEST_F(NonExistentLegacyXREAppDir_BadEnv, XREUserSysExtensionDir) {
+ ASSERT_EQ(
+# if defined(ANDROID)
+ nsCString(mMockedHomeDir + "/.mozilla/extensions"_ns)
+# elif defined(XP_MACOSX)
+ nsCString(mAppSupport + "/Mozilla/Extensions"_ns)
+# elif defined(XP_UNIX)
+ nsCString(mMockedHomeDir + "/.mozilla/extensions"_ns)
+# endif
+ ,
+ GetFromXREDirProvider(XRE_USER_SYS_EXTENSION_DIR));
+}
+
+TEST_F(NonExistentLegacyXREAppDir_GoodEnv, XREUserSysExtensionDir) {
+ ASSERT_EQ(
+# if defined(ANDROID)
+ nsCString(mMockedHomeDir + "/.mozilla/extensions"_ns)
+# elif defined(XP_MACOSX)
+ nsCString(mAppSupport + "/Mozilla/Extensions"_ns)
+# elif defined(XP_UNIX)
+ nsCString(mMockedHomeDir + "/.mozilla/extensions"_ns)
+# endif
+ ,
+ GetFromXREDirProvider(XRE_USER_SYS_EXTENSION_DIR));
+}
+
+TEST_F(XDGXREAppDir_NoEnv, XREUserSysExtensionDir) {
+ ASSERT_EQ(
+# if defined(ANDROID)
+ nsCString(mMockedHomeDir + "/.mozilla/extensions"_ns)
+# elif defined(XP_MACOSX)
+ nsCString(mAppSupport + "/Mozilla/Extensions"_ns)
+# elif defined(XP_UNIX)
+ nsCString(mMockedHomeDir + "/.mozilla/extensions"_ns)
+# endif
+ ,
+ GetFromXREDirProvider(XRE_USER_SYS_EXTENSION_DIR));
+}
+
+TEST_F(XDGXREAppDir_InvalidEnv, XREUserSysExtensionDir) {
+ ASSERT_EQ(
+# if defined(ANDROID)
+ nsCString(mMockedHomeDir + "/.mozilla/extensions"_ns)
+# elif defined(XP_MACOSX)
+ nsCString(mAppSupport + "/Mozilla/Extensions"_ns)
+# elif defined(XP_UNIX)
+ nsCString(mMockedHomeDir + "/.mozilla/extensions"_ns)
+# endif
+ ,
+ GetFromXREDirProvider(XRE_USER_SYS_EXTENSION_DIR));
+}
+
+TEST_F(XDGXREAppDir_Env, XREUserSysExtensionDir) {
+ ASSERT_EQ(
+# if defined(ANDROID)
+ nsCString(mMockedHomeDir + "/.mozilla/extensions"_ns)
+# elif defined(XP_MACOSX)
+ nsCString(mAppSupport + "/Mozilla/Extensions"_ns)
+# elif defined(XP_UNIX)
+ nsCString(mMockedHomeDir + "/.mozilla/extensions"_ns)
+# endif
+ ,
+ GetFromXREDirProvider(XRE_USER_SYS_EXTENSION_DIR));
+}
+#endif // defined(XP_UNIX)
+
+// GetUserProfilesRootDir
+
+TEST_F(XDGXREAppDir_NoEnv, GetUserProfilesRootDir) {
+ ASSERT_EQ(
+#if defined(ANDROID)
+ nsCString(mMockedHomeDir + "/mozilla"_ns)
+#elif defined(XP_MACOSX)
+ nsCString(mAppSupport + "/Firefox/Profiles"_ns)
+#elif defined(XP_UNIX)
+ nsCString(mMockedHomeDir + "/.mozilla/firefox"_ns)
+#elif defined(XP_WIN)
+ nsCString(mRoamingHome + "\\Mozilla\\Firefox\\Profiles"_ns)
+#endif
+ ,
+ GetUserProfilesRootDir());
+}
+
+TEST_F(XDGXREAppDir_InvalidEnv, GetUserProfilesRootDir) {
+ ASSERT_EQ(
+#if defined(ANDROID)
+ nsCString(mMockedHomeDir + "/mozilla"_ns)
+#elif defined(XP_MACOSX)
+ nsCString(mAppSupport + "/Firefox/Profiles"_ns)
+#elif defined(XP_UNIX)
+ nsCString(mMockedHomeDir + "/.mozilla/firefox"_ns)
+#elif defined(XP_WIN)
+ nsCString(mRoamingHome + "\\Mozilla\\Firefox\\Profiles"_ns)
+#endif
+ ,
+ GetUserProfilesRootDir());
+}
+
+TEST_F(XDGXREAppDir_Env, GetUserProfilesRootDir) {
+ ASSERT_EQ(
+#if defined(ANDROID)
+ nsCString(mMockedHomeDir + "/mozilla"_ns)
+#elif defined(XP_MACOSX)
+ nsCString(mAppSupport + "/Firefox/Profiles"_ns)
+#elif defined(XP_UNIX)
+ nsCString(mMockedHomeDir + "/.mozilla/firefox"_ns)
+#elif defined(XP_WIN)
+ nsCString(mRoamingHome + "\\Mozilla\\Firefox\\Profiles"_ns)
+#endif
+ ,
+ GetUserProfilesRootDir());
+}
+
+// GetDefaultUserProfileRoot
+
+// Check if '$HOME/.mozilla' is used when it exists.
+TEST_F(ExistentLegacyXREAppDir_NoEnv, GetDefaultUserProfileRoot) {
+ ASSERT_EQ(
+#if defined(ANDROID)
+ nsCString(mMockedHomeDir + "/.mozilla"_ns)
+#elif defined(XP_MACOSX)
+ nsCString(mLibrary + "/Mozilla/Profiles"_ns)
+#elif defined(XP_UNIX)
+ nsCString(mMockedHomeDir + "/.mozilla"_ns)
+#elif defined(XP_WIN)
+ nsCString(mRoamingHome + "\\Mozilla\\Profiles"_ns)
+#endif
+ ,
+ GetFromDirectoryService(NS_APP_USER_PROFILES_ROOT_DIR));
+}
+
+// Check if '$HOME/.mozilla' is used when it exists and MOZ_LEGACY_HOME != 1
+TEST_F(ExistentLegacyXREAppDir_BadEnv, GetDefaultUserProfileRoot) {
+ ASSERT_EQ(
+#if defined(ANDROID)
+ nsCString(mMockedHomeDir + "/.mozilla"_ns)
+#elif defined(XP_MACOSX)
+ nsCString(mLibrary + "/Mozilla/Profiles"_ns)
+#elif defined(XP_UNIX)
+ nsCString(mMockedHomeDir + "/.mozilla"_ns)
+#elif defined(XP_WIN)
+ nsCString(mRoamingHome + "\\Mozilla\\Profiles"_ns)
+#endif
+ ,
+ GetFromDirectoryService(NS_APP_USER_PROFILES_ROOT_DIR));
+}
+
+TEST_F(ExistentLegacyXREAppDir_GoodEnv, GetDefaultUserProfileRoot) {
+ ASSERT_EQ(
+#if defined(ANDROID)
+ nsCString(mMockedHomeDir + "/.mozilla"_ns)
+#elif defined(XP_MACOSX)
+ nsCString(mLibrary + "/Mozilla/Profiles"_ns)
+#elif defined(XP_UNIX)
+ nsCString(mMockedHomeDir + "/.mozilla"_ns)
+#elif defined(XP_WIN)
+ nsCString(mRoamingHome + "\\Mozilla\\Profiles"_ns)
+#endif
+ ,
+ GetFromDirectoryService(NS_APP_USER_PROFILES_ROOT_DIR));
+}
+
+TEST_F(NonExistentLegacyXREAppDir_NoEnv, GetDefaultUserProfileRoot) {
+ ASSERT_EQ(
+#if defined(ANDROID)
+ nsCString(mMockedHomeDir + "/.mozilla"_ns)
+#elif defined(XP_MACOSX)
+ nsCString(mLibrary + "/Mozilla/Profiles"_ns)
+#elif defined(XP_UNIX)
+ nsCString(mMockedHomeDir + "/.mozilla"_ns)
+#elif defined(XP_WIN)
+ nsCString(mRoamingHome + "\\Mozilla\\Profiles"_ns)
+#endif
+ ,
+ GetFromDirectoryService(NS_APP_USER_PROFILES_ROOT_DIR));
+}
+
+// Check if '$HOME/.mozilla' is not used when the env variable MOZ_LEGACY_HOME
+// is set to 0.
+TEST_F(NonExistentLegacyXREAppDir_BadEnv, GetDefaultUserProfileRoot) {
+ ASSERT_EQ(
+#if defined(ANDROID)
+ nsCString(mMockedHomeDir + "/.mozilla"_ns)
+#elif defined(XP_MACOSX)
+ nsCString(mLibrary + "/Mozilla/Profiles"_ns)
+#elif defined(XP_UNIX)
+ nsCString(mMockedHomeDir + "/.mozilla"_ns)
+#elif defined(XP_WIN)
+ nsCString(mRoamingHome + "\\Mozilla\\Profiles"_ns)
+#endif
+ ,
+ GetFromDirectoryService(NS_APP_USER_PROFILES_ROOT_DIR));
+}
+
+// Check if '$HOME/.mozilla' is used when it does not exists and MOZ_LEGACY_HOME
+// = 1
+TEST_F(NonExistentLegacyXREAppDir_GoodEnv, GetDefaultUserProfileRoot) {
+ ASSERT_EQ(
+#if defined(ANDROID)
+ nsCString(mMockedHomeDir + "/.mozilla"_ns)
+#elif defined(XP_MACOSX)
+ nsCString(mLibrary + "/Mozilla/Profiles"_ns)
+#elif defined(XP_UNIX)
+ nsCString(mMockedHomeDir + "/.mozilla"_ns)
+#elif defined(XP_WIN)
+ nsCString(mRoamingHome + "\\Mozilla\\Profiles"_ns)
+#endif
+ ,
+ GetFromDirectoryService(NS_APP_USER_PROFILES_ROOT_DIR));
+}
+
+// Check if '$HOME/.config/mozilla' is used if $HOME/.mozilla does not exist
+// and the env variable XDG_CONFIG_HOME is not set.
+TEST_F(XDGXREAppDir_NoEnv, GetDefaultUserProfileRoot) {
+ ASSERT_EQ(
+#if defined(ANDROID)
+ nsCString(mMockedHomeDir + "/.mozilla"_ns)
+#elif defined(XP_MACOSX)
+ nsCString(mLibrary + "/Mozilla/Profiles"_ns)
+#elif defined(XP_UNIX)
+ nsCString(mMockedHomeDir + "/.mozilla"_ns)
+#elif defined(XP_WIN)
+ nsCString(mRoamingHome + "\\Mozilla\\Profiles"_ns)
+#endif
+ ,
+ GetFromDirectoryService(NS_APP_USER_PROFILES_ROOT_DIR));
+}
+
+// Check if '$HOME/.config/mozilla' is used if $HOME/.mozilla does not exist
+// and the env variable XDG_CONFIG_HOME is invalid.
+TEST_F(XDGXREAppDir_InvalidEnv, GetDefaultUserProfileRoot) {
+ ASSERT_EQ(
+#if defined(ANDROID)
+ nsCString(mMockedHomeDir + "/.mozilla"_ns)
+#elif defined(XP_MACOSX)
+ nsCString(mLibrary + "/Mozilla/Profiles"_ns)
+#elif defined(XP_UNIX)
+ nsCString(mMockedHomeDir + "/.mozilla"_ns)
+#elif defined(XP_WIN)
+ nsCString(mRoamingHome + "\\Mozilla\\Profiles"_ns)
+#endif
+ ,
+ GetFromDirectoryService(NS_APP_USER_PROFILES_ROOT_DIR));
+}
+
+TEST_F(XDGXREAppDir_Env, GetDefaultUserProfileRoot) {
+ ASSERT_EQ(
+#if defined(ANDROID)
+ nsCString(mMockedHomeDir + "/.mozilla"_ns)
+#elif defined(XP_MACOSX)
+ nsCString(mLibrary + "/Mozilla/Profiles"_ns)
+#elif defined(XP_UNIX)
+ nsCString(mMockedHomeDir + "/.mozilla"_ns)
+#elif defined(XP_WIN)
+ nsCString(mRoamingHome + "\\Mozilla\\Profiles"_ns)
+#endif
+ ,
+ GetFromDirectoryService(NS_APP_USER_PROFILES_ROOT_DIR));
+}
+
+// GetTempDefaultUserProfileRoot
+
+// Check if '$HOME/.mozilla' is used when it exists.
+TEST_F(ExistentLegacyXREAppDir_NoEnv, GetTempDefaultUserProfileRoot) {
+ ASSERT_EQ(
+#if defined(ANDROID)
+ nsCString(mMockedHomeDir + "/.mozilla"_ns)
+#elif defined(XP_MACOSX)
+ nsCString(mAppCache + "/Mozilla/Profiles"_ns)
+#elif defined(XP_UNIX)
+ nsCString(mMockedHomeDir + "/.mozilla"_ns)
+#elif defined(XP_WIN)
+ nsCString(mLocalHome + "\\Mozilla\\Profiles"_ns)
+#endif
+ ,
+ GetFromDirectoryService(NS_APP_USER_PROFILES_LOCAL_ROOT_DIR));
+}
+
+// Check if '$HOME/.mozilla' is used when it exists and MOZ_LEGACY_HOME != 1
+TEST_F(ExistentLegacyXREAppDir_BadEnv, GetTempDefaultUserProfileRoot) {
+ ASSERT_EQ(
+#if defined(ANDROID)
+ nsCString(mMockedHomeDir + "/.mozilla"_ns)
+#elif defined(XP_MACOSX)
+ nsCString(mAppCache + "/Mozilla/Profiles"_ns)
+#elif defined(XP_UNIX)
+ nsCString(mMockedHomeDir + "/.mozilla"_ns)
+#elif defined(XP_WIN)
+ nsCString(mLocalHome + "\\Mozilla\\Profiles"_ns)
+#endif
+ ,
+ GetFromDirectoryService(NS_APP_USER_PROFILES_LOCAL_ROOT_DIR));
+}
+
+TEST_F(ExistentLegacyXREAppDir_GoodEnv, GetTempDefaultUserProfileRoot) {
+ ASSERT_EQ(
+#if defined(ANDROID)
+ nsCString(mMockedHomeDir + "/.mozilla"_ns)
+#elif defined(XP_MACOSX)
+ nsCString(mAppCache + "/Mozilla/Profiles"_ns)
+#elif defined(XP_UNIX)
+ nsCString(mMockedHomeDir + "/.mozilla"_ns)
+#elif defined(XP_WIN)
+ nsCString(mLocalHome + "\\Mozilla\\Profiles"_ns)
+#endif
+ ,
+ GetFromDirectoryService(NS_APP_USER_PROFILES_LOCAL_ROOT_DIR));
+}
+
+TEST_F(NonExistentLegacyXREAppDir_NoEnv, GetTempDefaultUserProfileRoot) {
+ ASSERT_EQ(
+#if defined(ANDROID)
+ nsCString(mMockedHomeDir + "/.mozilla"_ns)
+#elif defined(XP_MACOSX)
+ nsCString(mAppCache + "/Mozilla/Profiles"_ns)
+#elif defined(XP_UNIX)
+ nsCString(mMockedHomeDir + "/.mozilla"_ns)
+#elif defined(XP_WIN)
+ nsCString(mLocalHome + "\\Mozilla\\Profiles"_ns)
+#endif
+ ,
+ GetFromDirectoryService(NS_APP_USER_PROFILES_LOCAL_ROOT_DIR));
+}
+
+// Check if '$HOME/.mozilla' is not used when the env variable MOZ_LEGACY_HOME
+// is set to 0.
+TEST_F(NonExistentLegacyXREAppDir_BadEnv, GetTempDefaultUserProfileRoot) {
+ ASSERT_EQ(
+#if defined(ANDROID)
+ nsCString(mMockedHomeDir + "/.mozilla"_ns)
+#elif defined(XP_MACOSX)
+ nsCString(mAppCache + "/Mozilla/Profiles"_ns)
+#elif defined(XP_UNIX)
+ nsCString(mMockedHomeDir + "/.mozilla"_ns)
+#elif defined(XP_WIN)
+ nsCString(mLocalHome + "\\Mozilla\\Profiles"_ns)
+#endif
+ ,
+ GetFromDirectoryService(NS_APP_USER_PROFILES_LOCAL_ROOT_DIR));
+}
+
+// Check if '$HOME/.mozilla' is used when it does not exists and MOZ_LEGACY_HOME
+// = 1
+TEST_F(NonExistentLegacyXREAppDir_GoodEnv, GetTempDefaultUserProfileRoot) {
+ ASSERT_EQ(
+#if defined(ANDROID)
+ nsCString(mMockedHomeDir + "/.mozilla"_ns)
+#elif defined(XP_MACOSX)
+ nsCString(mAppCache + "/Mozilla/Profiles"_ns)
+#elif defined(XP_UNIX)
+ nsCString(mMockedHomeDir + "/.mozilla"_ns)
+#elif defined(XP_WIN)
+ nsCString(mLocalHome + "\\Mozilla\\Profiles"_ns)
+#endif
+ ,
+ GetFromDirectoryService(NS_APP_USER_PROFILES_LOCAL_ROOT_DIR));
+}
+
+// Check if '$HOME/.config/mozilla' is used if $HOME/.mozilla does not exist
+// and the env variable XDG_CONFIG_HOME is not set.
+TEST_F(XDGXREAppDir_NoEnv, GetTempDefaultUserProfileRoot) {
+ ASSERT_EQ(
+#if defined(ANDROID)
+ nsCString(mMockedHomeDir + "/.mozilla"_ns)
+#elif defined(XP_MACOSX)
+ nsCString(mAppCache + "/Mozilla/Profiles"_ns)
+#elif defined(XP_UNIX)
+ nsCString(mMockedHomeDir + "/.mozilla"_ns)
+#elif defined(XP_WIN)
+ nsCString(mLocalHome + "\\Mozilla\\Profiles"_ns)
+#endif
+ ,
+ GetFromDirectoryService(NS_APP_USER_PROFILES_LOCAL_ROOT_DIR));
+}
+
+// Check if '$HOME/.config/mozilla' is used if $HOME/.mozilla does not exist
+// and the env variable XDG_CONFIG_HOME is invalid.
+TEST_F(XDGXREAppDir_InvalidEnv, GetTempDefaultUserProfileRoot) {
+ ASSERT_EQ(
+#if defined(ANDROID)
+ nsCString(mMockedHomeDir + "/.mozilla"_ns)
+#elif defined(XP_MACOSX)
+ nsCString(mAppCache + "/Mozilla/Profiles"_ns)
+#elif defined(XP_UNIX)
+ nsCString(mMockedHomeDir + "/.mozilla"_ns)
+#elif defined(XP_WIN)
+ nsCString(mLocalHome + "\\Mozilla\\Profiles"_ns)
+#endif
+ ,
+ GetFromDirectoryService(NS_APP_USER_PROFILES_LOCAL_ROOT_DIR));
+}
+
+TEST_F(XDGXREAppDir_Env, GetTempDefaultUserProfileRoot) {
+ ASSERT_EQ(
+#if defined(ANDROID)
+ nsCString(mMockedHomeDir + "/.mozilla"_ns)
+#elif defined(XP_MACOSX)
+ nsCString(mAppCache + "/Mozilla/Profiles"_ns)
+#elif defined(XP_UNIX)
+ nsCString(mMockedHomeDir + "/.mozilla"_ns)
+#elif defined(XP_WIN)
+ nsCString(mLocalHome + "\\Mozilla\\Profiles"_ns)
+#endif
+ ,
+ GetFromDirectoryService(NS_APP_USER_PROFILES_LOCAL_ROOT_DIR));
+}
+
+/// AppDataProfile variants
+
+TEST_F(ExistentLegacyXREAppDir_NoEnv_AppDataProfile, GetUserAppDataDirectory) {
+ ASSERT_EQ(
+#if defined(ANDROID)
+ nsCString(mMockedHomeDir + "/mozilla"_ns)
+#elif defined(XP_MACOSX)
+ nsCString(mAppSupport + "/Firefox"_ns)
+#elif defined(XP_UNIX)
+ nsCString(mMockedHomeDir + "/.fooprofile"_ns)
+#elif defined(XP_WIN)
+ nsCString(mRoamingHome + "\\Mozilla\\Firefox"_ns)
+#endif
+ ,
+ GetUserAppDataDirectory());
+}
+
+TEST_F(ExistentLegacyXREAppDir_BadEnv_AppDataProfile, GetUserAppDataDirectory) {
+ ASSERT_EQ(
+#if defined(ANDROID)
+ nsCString(mMockedHomeDir + "/mozilla"_ns)
+#elif defined(XP_MACOSX)
+ nsCString(mAppSupport + "/Firefox"_ns)
+#elif defined(XP_UNIX)
+ nsCString(mMockedHomeDir + "/.fooprofile"_ns)
+#elif defined(XP_WIN)
+ nsCString(mRoamingHome + "\\Mozilla\\Firefox"_ns)
+#endif
+ ,
+ GetUserAppDataDirectory());
+}
+
+TEST_F(ExistentLegacyXREAppDir_GoodEnv_AppDataProfile,
+ GetUserAppDataDirectory) {
+ ASSERT_EQ(
+#if defined(ANDROID)
+ nsCString(mMockedHomeDir + "/mozilla"_ns)
+#elif defined(XP_MACOSX)
+ nsCString(mAppSupport + "/Firefox"_ns)
+#elif defined(XP_UNIX)
+ nsCString(mMockedHomeDir + "/.fooprofile"_ns)
+#elif defined(XP_WIN)
+ nsCString(mRoamingHome + "\\Mozilla\\Firefox"_ns)
+#endif
+ ,
+ GetUserAppDataDirectory());
+}
+
+TEST_F(NonExistentLegacyXREAppDir_NoEnv_AppDataProfile,
+ GetUserAppDataDirectory) {
+ ASSERT_EQ(
+#if defined(ANDROID)
+ nsCString(mMockedHomeDir + "/mozilla"_ns)
+#elif defined(XP_MACOSX)
+ nsCString(mAppSupport + "/Firefox"_ns)
+#elif defined(XP_UNIX)
+ nsCString(mMockedHomeDir + "/.fooprofile"_ns)
+#elif defined(XP_WIN)
+ nsCString(mRoamingHome + "\\Mozilla\\Firefox"_ns)
+#endif
+ ,
+ GetUserAppDataDirectory());
+}
+
+TEST_F(NonExistentLegacyXREAppDir_BadEnv_AppDataProfile,
+ GetUserAppDataDirectory) {
+ ASSERT_EQ(
+#if defined(ANDROID)
+ nsCString(mMockedHomeDir + "/mozilla"_ns)
+#elif defined(XP_MACOSX)
+ nsCString(mAppSupport + "/Firefox"_ns)
+#elif defined(XP_UNIX)
+ nsCString(mMockedHomeDir + "/.fooprofile"_ns)
+#elif defined(XP_WIN)
+ nsCString(mRoamingHome + "\\Mozilla\\Firefox"_ns)
+#endif
+ ,
+ GetUserAppDataDirectory());
+}
+
+TEST_F(NonExistentLegacyXREAppDir_GoodEnv_AppDataProfile,
+ GetUserAppDataDirectory) {
+ ASSERT_EQ(
+#if defined(ANDROID)
+ nsCString(mMockedHomeDir + "/mozilla"_ns)
+#elif defined(XP_MACOSX)
+ nsCString(mAppSupport + "/Firefox"_ns)
+#elif defined(XP_UNIX)
+ nsCString(mMockedHomeDir + "/.fooprofile"_ns)
+#elif defined(XP_WIN)
+ nsCString(mRoamingHome + "\\Mozilla\\Firefox"_ns)
+#endif
+ ,
+ GetUserAppDataDirectory());
+}
+
+TEST_F(XDGXREAppDir_NoEnv_AppDataProfile, GetUserAppDataDirectory) {
+ ASSERT_EQ(
+#if defined(ANDROID)
+ nsCString(mMockedHomeDir + "/mozilla"_ns)
+#elif defined(XP_MACOSX)
+ nsCString(mAppSupport + "/Firefox"_ns)
+#elif defined(XP_UNIX)
+ nsCString(mMockedHomeDir + "/.fooprofile"_ns)
+#elif defined(XP_WIN)
+ nsCString(mRoamingHome + "\\Mozilla\\Firefox"_ns)
+#endif
+ ,
+ GetUserAppDataDirectory());
+}
+
+TEST_F(XDGXREAppDir_InvalidEnv_AppDataProfile, GetUserAppDataDirectory) {
+ ASSERT_EQ(
+#if defined(ANDROID)
+ nsCString(mMockedHomeDir + "/mozilla"_ns)
+#elif defined(XP_MACOSX)
+ nsCString(mAppSupport + "/Firefox"_ns)
+#elif defined(XP_UNIX)
+ nsCString(mMockedHomeDir + "/.fooprofile"_ns)
+#elif defined(XP_WIN)
+ nsCString(mRoamingHome + "\\Mozilla\\Firefox"_ns)
+#endif
+ ,
+ GetUserAppDataDirectory());
+}
+
+TEST_F(XDGXREAppDir_Env_AppDataProfile, GetUserAppDataDirectory) {
+ ASSERT_EQ(
+#if defined(ANDROID)
+ nsCString(mMockedHomeDir + "/mozilla"_ns)
+#elif defined(XP_MACOSX)
+ nsCString(mAppSupport + "/Firefox"_ns)
+#elif defined(XP_UNIX)
+ nsCString(mMockedHomeDir + "/.fooprofile"_ns)
+#elif defined(XP_WIN)
+ nsCString(mRoamingHome + "\\Mozilla\\Firefox"_ns)
+#endif
+ ,
+ GetUserAppDataDirectory());
+}
+
+// XREUserNativeManifests
+
+#if defined(XP_UNIX)
+TEST_F(ExistentLegacyXREAppDir_NoEnv_AppDataProfile, XREUserNativeManifests) {
+ ASSERT_EQ(
+# if defined(ANDROID)
+ nsCString(mMockedHomeDir + "/.mozilla"_ns)
+# elif defined(XP_MACOSX)
+ nsCString(mAppSupport + "/Mozilla"_ns)
+# elif defined(XP_UNIX)
+ nsCString(mMockedHomeDir + "/.mozilla"_ns)
+# endif
+ ,
+ GetFromXREDirProvider(XRE_USER_NATIVE_MANIFESTS));
+}
+
+TEST_F(ExistentLegacyXREAppDir_BadEnv_AppDataProfile, XREUserNativeManifests) {
+ ASSERT_EQ(
+# if defined(ANDROID)
+ nsCString(mMockedHomeDir + "/.mozilla"_ns)
+# elif defined(XP_MACOSX)
+ nsCString(mAppSupport + "/Mozilla"_ns)
+# elif defined(XP_UNIX)
+ nsCString(mMockedHomeDir + "/.mozilla"_ns)
+# endif
+ ,
+ GetFromXREDirProvider(XRE_USER_NATIVE_MANIFESTS));
+}
+
+TEST_F(ExistentLegacyXREAppDir_GoodEnv_AppDataProfile, XREUserNativeManifests) {
+ ASSERT_EQ(
+# if defined(ANDROID)
+ nsCString(mMockedHomeDir + "/.mozilla"_ns)
+# elif defined(XP_MACOSX)
+ nsCString(mAppSupport + "/Mozilla"_ns)
+# elif defined(XP_UNIX)
+ nsCString(mMockedHomeDir + "/.mozilla"_ns)
+# endif
+ ,
+ GetFromXREDirProvider(XRE_USER_NATIVE_MANIFESTS));
+}
+
+TEST_F(NonExistentLegacyXREAppDir_NoEnv_AppDataProfile,
+ XREUserNativeManifests) {
+ ASSERT_EQ(
+# if defined(ANDROID)
+ nsCString(mMockedHomeDir + "/.mozilla"_ns)
+# elif defined(XP_MACOSX)
+ nsCString(mAppSupport + "/Mozilla"_ns)
+# elif defined(XP_UNIX)
+ nsCString(mMockedHomeDir + "/.mozilla"_ns)
+# endif
+ ,
+ GetFromXREDirProvider(XRE_USER_NATIVE_MANIFESTS));
+}
+
+TEST_F(NonExistentLegacyXREAppDir_BadEnv_AppDataProfile,
+ XREUserNativeManifests) {
+ ASSERT_EQ(
+# if defined(ANDROID)
+ nsCString(mMockedHomeDir + "/.mozilla"_ns)
+# elif defined(XP_MACOSX)
+ nsCString(mAppSupport + "/Mozilla"_ns)
+# elif defined(XP_UNIX)
+ nsCString(mMockedHomeDir + "/.mozilla"_ns)
+# endif
+ ,
+ GetFromXREDirProvider(XRE_USER_NATIVE_MANIFESTS));
+}
+
+TEST_F(NonExistentLegacyXREAppDir_GoodEnv_AppDataProfile,
+ XREUserNativeManifests) {
+ ASSERT_EQ(
+# if defined(ANDROID)
+ nsCString(mMockedHomeDir + "/.mozilla"_ns)
+# elif defined(XP_MACOSX)
+ nsCString(mAppSupport + "/Mozilla"_ns)
+# elif defined(XP_UNIX)
+ nsCString(mMockedHomeDir + "/.mozilla"_ns)
+# endif
+ ,
+ GetFromXREDirProvider(XRE_USER_NATIVE_MANIFESTS));
+}
+
+TEST_F(XDGXREAppDir_NoEnv_AppDataProfile, XREUserNativeManifests) {
+ ASSERT_EQ(
+# if defined(ANDROID)
+ nsCString(mMockedHomeDir + "/.mozilla"_ns)
+# elif defined(XP_MACOSX)
+ nsCString(mAppSupport + "/Mozilla"_ns)
+# elif defined(XP_UNIX)
+ nsCString(mMockedHomeDir + "/.mozilla"_ns)
+# endif
+ ,
+ GetFromXREDirProvider(XRE_USER_NATIVE_MANIFESTS));
+}
+
+TEST_F(XDGXREAppDir_InvalidEnv_AppDataProfile, XREUserNativeManifests) {
+ ASSERT_EQ(
+# if defined(ANDROID)
+ nsCString(mMockedHomeDir + "/.mozilla"_ns)
+# elif defined(XP_MACOSX)
+ nsCString(mAppSupport + "/Mozilla"_ns)
+# elif defined(XP_UNIX)
+ nsCString(mMockedHomeDir + "/.mozilla"_ns)
+# endif
+ ,
+ GetFromXREDirProvider(XRE_USER_NATIVE_MANIFESTS));
+}
+
+TEST_F(XDGXREAppDir_Env_AppDataProfile, XREUserNativeManifests) {
+ ASSERT_EQ(
+# if defined(ANDROID)
+ nsCString(mMockedHomeDir + "/.mozilla"_ns)
+# elif defined(XP_MACOSX)
+ nsCString(mAppSupport + "/Mozilla"_ns)
+# elif defined(XP_UNIX)
+ nsCString(mMockedHomeDir + "/.mozilla"_ns)
+# endif
+ ,
+ GetFromXREDirProvider(XRE_USER_NATIVE_MANIFESTS));
+}
+#endif // defined(XP_UNIX)
+
+// XREUserSysExtensionDir
+
+#if defined(XP_UNIX)
+TEST_F(ExistentLegacyXREAppDir_NoEnv_AppDataProfile, XREUserSysExtensionDir) {
+ ASSERT_EQ(
+# if defined(ANDROID)
+ nsCString(mMockedHomeDir + "/.mozilla/extensions"_ns)
+# elif defined(XP_MACOSX)
+ nsCString(mAppSupport + "/Mozilla/Extensions"_ns)
+# elif defined(XP_UNIX)
+ nsCString(mMockedHomeDir + "/.mozilla/extensions"_ns)
+# endif
+ ,
+ GetFromXREDirProvider(XRE_USER_SYS_EXTENSION_DIR));
+}
+
+TEST_F(ExistentLegacyXREAppDir_BadEnv_AppDataProfile, XREUserSysExtensionDir) {
+ ASSERT_EQ(
+# if defined(ANDROID)
+ nsCString(mMockedHomeDir + "/.mozilla/extensions"_ns)
+# elif defined(XP_MACOSX)
+ nsCString(mAppSupport + "/Mozilla/Extensions"_ns)
+# elif defined(XP_UNIX)
+ nsCString(mMockedHomeDir + "/.mozilla/extensions"_ns)
+# endif
+ ,
+ GetFromXREDirProvider(XRE_USER_SYS_EXTENSION_DIR));
+}
+
+TEST_F(ExistentLegacyXREAppDir_GoodEnv_AppDataProfile, XREUserSysExtensionDir) {
+ ASSERT_EQ(
+# if defined(ANDROID)
+ nsCString(mMockedHomeDir + "/.mozilla/extensions"_ns)
+# elif defined(XP_MACOSX)
+ nsCString(mAppSupport + "/Mozilla/Extensions"_ns)
+# elif defined(XP_UNIX)
+ nsCString(mMockedHomeDir + "/.mozilla/extensions"_ns)
+# endif
+ ,
+ GetFromXREDirProvider(XRE_USER_SYS_EXTENSION_DIR));
+}
+
+TEST_F(NonExistentLegacyXREAppDir_NoEnv_AppDataProfile,
+ XREUserSysExtensionDir) {
+ ASSERT_EQ(
+# if defined(ANDROID)
+ nsCString(mMockedHomeDir + "/.mozilla/extensions"_ns)
+# elif defined(XP_MACOSX)
+ nsCString(mAppSupport + "/Mozilla/Extensions"_ns)
+# elif defined(XP_UNIX)
+ nsCString(mMockedHomeDir + "/.mozilla/extensions"_ns)
+# endif
+ ,
+ GetFromXREDirProvider(XRE_USER_SYS_EXTENSION_DIR));
+}
+
+TEST_F(NonExistentLegacyXREAppDir_BadEnv_AppDataProfile,
+ XREUserSysExtensionDir) {
+ ASSERT_EQ(
+# if defined(ANDROID)
+ nsCString(mMockedHomeDir + "/.mozilla/extensions"_ns)
+# elif defined(XP_MACOSX)
+ nsCString(mAppSupport + "/Mozilla/Extensions"_ns)
+# elif defined(XP_UNIX)
+ nsCString(mMockedHomeDir + "/.mozilla/extensions"_ns)
+# endif
+ ,
+ GetFromXREDirProvider(XRE_USER_SYS_EXTENSION_DIR));
+}
+
+TEST_F(NonExistentLegacyXREAppDir_GoodEnv_AppDataProfile,
+ XREUserSysExtensionDir) {
+ ASSERT_EQ(
+# if defined(ANDROID)
+ nsCString(mMockedHomeDir + "/.mozilla/extensions"_ns)
+# elif defined(XP_MACOSX)
+ nsCString(mAppSupport + "/Mozilla/Extensions"_ns)
+# elif defined(XP_UNIX)
+ nsCString(mMockedHomeDir + "/.mozilla/extensions"_ns)
+# endif
+ ,
+ GetFromXREDirProvider(XRE_USER_SYS_EXTENSION_DIR));
+}
+
+TEST_F(XDGXREAppDir_NoEnv_AppDataProfile, XREUserSysExtensionDir) {
+ ASSERT_EQ(
+# if defined(ANDROID)
+ nsCString(mMockedHomeDir + "/.mozilla/extensions"_ns)
+# elif defined(XP_MACOSX)
+ nsCString(mAppSupport + "/Mozilla/Extensions"_ns)
+# elif defined(XP_UNIX)
+ nsCString(mMockedHomeDir + "/.mozilla/extensions"_ns)
+# endif
+ ,
+ GetFromXREDirProvider(XRE_USER_SYS_EXTENSION_DIR));
+}
+
+TEST_F(XDGXREAppDir_InvalidEnv_AppDataProfile, XREUserSysExtensionDir) {
+ ASSERT_EQ(
+# if defined(ANDROID)
+ nsCString(mMockedHomeDir + "/.mozilla/extensions"_ns)
+# elif defined(XP_MACOSX)
+ nsCString(mAppSupport + "/Mozilla/Extensions"_ns)
+# elif defined(XP_UNIX)
+ nsCString(mMockedHomeDir + "/.mozilla/extensions"_ns)
+# endif
+ ,
+ GetFromXREDirProvider(XRE_USER_SYS_EXTENSION_DIR));
+}
+
+TEST_F(XDGXREAppDir_Env_AppDataProfile, XREUserSysExtensionDir) {
+ ASSERT_EQ(
+# if defined(ANDROID)
+ nsCString(mMockedHomeDir + "/.mozilla/extensions"_ns)
+# elif defined(XP_MACOSX)
+ nsCString(mAppSupport + "/Mozilla/Extensions"_ns)
+# elif defined(XP_UNIX)
+ nsCString(mMockedHomeDir + "/.mozilla/extensions"_ns)
+# endif
+ ,
+ GetFromXREDirProvider(XRE_USER_SYS_EXTENSION_DIR));
+}
+#endif // defined(XP_UNIX)
+
+// GetUserProfilesRootDir
+
+TEST_F(XDGXREAppDir_NoEnv_AppDataProfile, GetUserProfilesRootDir) {
+ ASSERT_EQ(
+#if defined(ANDROID)
+ nsCString(mMockedHomeDir + "/mozilla"_ns)
+#elif defined(XP_MACOSX)
+ nsCString(mAppSupport + "/Firefox/Profiles"_ns)
+#elif defined(XP_UNIX)
+ nsCString(mMockedHomeDir + "/.fooprofile"_ns)
+#elif defined(XP_WIN)
+ nsCString(mRoamingHome + "\\Mozilla\\Firefox\\Profiles"_ns)
+#endif
+ ,
+ GetUserProfilesRootDir());
+}
+
+TEST_F(XDGXREAppDir_InvalidEnv_AppDataProfile, GetUserProfilesRootDir) {
+ ASSERT_EQ(
+#if defined(ANDROID)
+ nsCString(mMockedHomeDir + "/mozilla"_ns)
+#elif defined(XP_MACOSX)
+ nsCString(mAppSupport + "/Firefox/Profiles"_ns)
+#elif defined(XP_UNIX)
+ nsCString(mMockedHomeDir + "/.fooprofile"_ns)
+#elif defined(XP_WIN)
+ nsCString(mRoamingHome + "\\Mozilla\\Firefox\\Profiles"_ns)
+#endif
+ ,
+ GetUserProfilesRootDir());
+}
+
+TEST_F(XDGXREAppDir_Env_AppDataProfile, GetUserProfilesRootDir) {
+ ASSERT_EQ(
+#if defined(ANDROID)
+ nsCString(mMockedHomeDir + "/mozilla"_ns)
+#elif defined(XP_MACOSX)
+ nsCString(mAppSupport + "/Firefox/Profiles"_ns)
+#elif defined(XP_UNIX)
+ nsCString(mMockedHomeDir + "/.fooprofile"_ns)
+#elif defined(XP_WIN)
+ nsCString(mRoamingHome + "\\Mozilla\\Firefox\\Profiles"_ns)
+#endif
+ ,
+ GetUserProfilesRootDir());
+}
+
+// GetDefaultUserProfileRoot
+
+TEST_F(ExistentLegacyXREAppDir_NoEnv_AppDataProfile,
+ GetDefaultUserProfileRoot) {
+ ASSERT_EQ(
+#if defined(ANDROID)
+ nsCString(mMockedHomeDir + "/.mozilla"_ns)
+#elif defined(XP_MACOSX)
+ nsCString(mLibrary + "/Mozilla/Profiles"_ns)
+#elif defined(XP_UNIX)
+ nsCString(mMockedHomeDir + "/.mozilla"_ns)
+#elif defined(XP_WIN)
+ nsCString(mRoamingHome + "\\Mozilla\\Profiles"_ns)
+#endif
+ ,
+ GetFromDirectoryService(NS_APP_USER_PROFILES_ROOT_DIR));
+}
+
+TEST_F(ExistentLegacyXREAppDir_BadEnv_AppDataProfile,
+ GetDefaultUserProfileRoot) {
+ ASSERT_EQ(
+#if defined(ANDROID)
+ nsCString(mMockedHomeDir + "/.mozilla"_ns)
+#elif defined(XP_MACOSX)
+ nsCString(mLibrary + "/Mozilla/Profiles"_ns)
+#elif defined(XP_UNIX)
+ nsCString(mMockedHomeDir + "/.mozilla"_ns)
+#elif defined(XP_WIN)
+ nsCString(mRoamingHome + "\\Mozilla\\Profiles"_ns)
+#endif
+ ,
+ GetFromDirectoryService(NS_APP_USER_PROFILES_ROOT_DIR));
+}
+
+TEST_F(ExistentLegacyXREAppDir_GoodEnv_AppDataProfile,
+ GetDefaultUserProfileRoot) {
+ ASSERT_EQ(
+#if defined(ANDROID)
+ nsCString(mMockedHomeDir + "/.mozilla"_ns)
+#elif defined(XP_MACOSX)
+ nsCString(mLibrary + "/Mozilla/Profiles"_ns)
+#elif defined(XP_UNIX)
+ nsCString(mMockedHomeDir + "/.mozilla"_ns)
+#elif defined(XP_WIN)
+ nsCString(mRoamingHome + "\\Mozilla\\Profiles"_ns)
+#endif
+ ,
+ GetFromDirectoryService(NS_APP_USER_PROFILES_ROOT_DIR));
+}
+
+TEST_F(NonExistentLegacyXREAppDir_NoEnv_AppDataProfile,
+ GetDefaultUserProfileRoot) {
+ ASSERT_EQ(
+#if defined(ANDROID)
+ nsCString(mMockedHomeDir + "/.mozilla"_ns)
+#elif defined(XP_MACOSX)
+ nsCString(mLibrary + "/Mozilla/Profiles"_ns)
+#elif defined(XP_UNIX)
+ nsCString(mMockedHomeDir + "/.mozilla"_ns)
+#elif defined(XP_WIN)
+ nsCString(mRoamingHome + "\\Mozilla\\Profiles"_ns)
+#endif
+ ,
+ GetFromDirectoryService(NS_APP_USER_PROFILES_ROOT_DIR));
+}
+
+TEST_F(NonExistentLegacyXREAppDir_BadEnv_AppDataProfile,
+ GetDefaultUserProfileRoot) {
+ ASSERT_EQ(
+#if defined(ANDROID)
+ nsCString(mMockedHomeDir + "/.mozilla"_ns)
+#elif defined(XP_MACOSX)
+ nsCString(mLibrary + "/Mozilla/Profiles"_ns)
+#elif defined(XP_UNIX)
+ nsCString(mMockedHomeDir + "/.mozilla"_ns)
+#elif defined(XP_WIN)
+ nsCString(mRoamingHome + "\\Mozilla\\Profiles"_ns)
+#endif
+ ,
+ GetFromDirectoryService(NS_APP_USER_PROFILES_ROOT_DIR));
+}
+
+TEST_F(NonExistentLegacyXREAppDir_GoodEnv_AppDataProfile,
+ GetDefaultUserProfileRoot) {
+ ASSERT_EQ(
+#if defined(ANDROID)
+ nsCString(mMockedHomeDir + "/.mozilla"_ns)
+#elif defined(XP_MACOSX)
+ nsCString(mLibrary + "/Mozilla/Profiles"_ns)
+#elif defined(XP_UNIX)
+ nsCString(mMockedHomeDir + "/.mozilla"_ns)
+#elif defined(XP_WIN)
+ nsCString(mRoamingHome + "\\Mozilla\\Profiles"_ns)
+#endif
+ ,
+ GetFromDirectoryService(NS_APP_USER_PROFILES_ROOT_DIR));
+}
+
+TEST_F(XDGXREAppDir_NoEnv_AppDataProfile, GetDefaultUserProfileRoot) {
+ ASSERT_EQ(
+#if defined(ANDROID)
+ nsCString(mMockedHomeDir + "/.mozilla"_ns)
+#elif defined(XP_MACOSX)
+ nsCString(mLibrary + "/Mozilla/Profiles"_ns)
+#elif defined(XP_UNIX)
+ nsCString(mMockedHomeDir + "/.mozilla"_ns)
+#elif defined(XP_WIN)
+ nsCString(mRoamingHome + "\\Mozilla\\Profiles"_ns)
+#endif
+ ,
+ GetFromDirectoryService(NS_APP_USER_PROFILES_ROOT_DIR));
+}
+
+TEST_F(XDGXREAppDir_InvalidEnv_AppDataProfile, GetDefaultUserProfileRoot) {
+ ASSERT_EQ(
+#if defined(ANDROID)
+ nsCString(mMockedHomeDir + "/.mozilla"_ns)
+#elif defined(XP_MACOSX)
+ nsCString(mLibrary + "/Mozilla/Profiles"_ns)
+#elif defined(XP_UNIX)
+ nsCString(mMockedHomeDir + "/.mozilla"_ns)
+#elif defined(XP_WIN)
+ nsCString(mRoamingHome + "\\Mozilla\\Profiles"_ns)
+#endif
+ ,
+ GetFromDirectoryService(NS_APP_USER_PROFILES_ROOT_DIR));
+}
+
+TEST_F(XDGXREAppDir_Env_AppDataProfile, GetDefaultUserProfileRoot) {
+ ASSERT_EQ(
+#if defined(ANDROID)
+ nsCString(mMockedHomeDir + "/.mozilla"_ns)
+#elif defined(XP_MACOSX)
+ nsCString(mLibrary + "/Mozilla/Profiles"_ns)
+#elif defined(XP_UNIX)
+ nsCString(mMockedHomeDir + "/.mozilla"_ns)
+#elif defined(XP_WIN)
+ nsCString(mRoamingHome + "\\Mozilla\\Profiles"_ns)
+#endif
+ ,
+ GetFromDirectoryService(NS_APP_USER_PROFILES_ROOT_DIR));
+}
+
+// GetTempDefaultUserProfileRoot
+
+TEST_F(ExistentLegacyXREAppDir_NoEnv_AppDataProfile,
+ GetTempDefaultUserProfileRoot) {
+ ASSERT_EQ(
+#if defined(ANDROID)
+ nsCString(mMockedHomeDir + "/.mozilla"_ns)
+#elif defined(XP_MACOSX)
+ nsCString(mAppCache + "/Mozilla/Profiles"_ns)
+#elif defined(XP_UNIX)
+ nsCString(mMockedHomeDir + "/.mozilla"_ns)
+#elif defined(XP_WIN)
+ nsCString(mLocalHome + "\\Mozilla\\Profiles"_ns)
+#endif
+ ,
+ GetFromDirectoryService(NS_APP_USER_PROFILES_LOCAL_ROOT_DIR));
+}
+
+TEST_F(ExistentLegacyXREAppDir_BadEnv_AppDataProfile,
+ GetTempDefaultUserProfileRoot) {
+ ASSERT_EQ(
+#if defined(ANDROID)
+ nsCString(mMockedHomeDir + "/.mozilla"_ns)
+#elif defined(XP_MACOSX)
+ nsCString(mAppCache + "/Mozilla/Profiles"_ns)
+#elif defined(XP_UNIX)
+ nsCString(mMockedHomeDir + "/.mozilla"_ns)
+#elif defined(XP_WIN)
+ nsCString(mLocalHome + "\\Mozilla\\Profiles"_ns)
+#endif
+ ,
+ GetFromDirectoryService(NS_APP_USER_PROFILES_LOCAL_ROOT_DIR));
+}
+
+TEST_F(ExistentLegacyXREAppDir_GoodEnv_AppDataProfile,
+ GetTempDefaultUserProfileRoot) {
+ ASSERT_EQ(
+#if defined(ANDROID)
+ nsCString(mMockedHomeDir + "/.mozilla"_ns)
+#elif defined(XP_MACOSX)
+ nsCString(mAppCache + "/Mozilla/Profiles"_ns)
+#elif defined(XP_UNIX)
+ nsCString(mMockedHomeDir + "/.mozilla"_ns)
+#elif defined(XP_WIN)
+ nsCString(mLocalHome + "\\Mozilla\\Profiles"_ns)
+#endif
+ ,
+ GetFromDirectoryService(NS_APP_USER_PROFILES_LOCAL_ROOT_DIR));
+}
+
+TEST_F(NonExistentLegacyXREAppDir_NoEnv_AppDataProfile,
+ GetTempDefaultUserProfileRoot) {
+ ASSERT_EQ(
+#if defined(ANDROID)
+ nsCString(mMockedHomeDir + "/.mozilla"_ns)
+#elif defined(XP_MACOSX)
+ nsCString(mAppCache + "/Mozilla/Profiles"_ns)
+#elif defined(XP_UNIX)
+ nsCString(mMockedHomeDir + "/.mozilla"_ns)
+#elif defined(XP_WIN)
+ nsCString(mLocalHome + "\\Mozilla\\Profiles"_ns)
+#endif
+ ,
+ GetFromDirectoryService(NS_APP_USER_PROFILES_LOCAL_ROOT_DIR));
+}
+
+TEST_F(NonExistentLegacyXREAppDir_BadEnv_AppDataProfile,
+ GetTempDefaultUserProfileRoot) {
+ ASSERT_EQ(
+#if defined(ANDROID)
+ nsCString(mMockedHomeDir + "/.mozilla"_ns)
+#elif defined(XP_MACOSX)
+ nsCString(mAppCache + "/Mozilla/Profiles"_ns)
+#elif defined(XP_UNIX)
+ nsCString(mMockedHomeDir + "/.mozilla"_ns)
+#elif defined(XP_WIN)
+ nsCString(mLocalHome + "\\Mozilla\\Profiles"_ns)
+#endif
+ ,
+ GetFromDirectoryService(NS_APP_USER_PROFILES_LOCAL_ROOT_DIR));
+}
+
+TEST_F(NonExistentLegacyXREAppDir_GoodEnv_AppDataProfile,
+ GetTempDefaultUserProfileRoot) {
+ ASSERT_EQ(
+#if defined(ANDROID)
+ nsCString(mMockedHomeDir + "/.mozilla"_ns)
+#elif defined(XP_MACOSX)
+ nsCString(mAppCache + "/Mozilla/Profiles"_ns)
+#elif defined(XP_UNIX)
+ nsCString(mMockedHomeDir + "/.mozilla"_ns)
+#elif defined(XP_WIN)
+ nsCString(mLocalHome + "\\Mozilla\\Profiles"_ns)
+#endif
+ ,
+ GetFromDirectoryService(NS_APP_USER_PROFILES_LOCAL_ROOT_DIR));
+}
+
+TEST_F(XDGXREAppDir_NoEnv_AppDataProfile, GetTempDefaultUserProfileRoot) {
+ ASSERT_EQ(
+#if defined(ANDROID)
+ nsCString(mMockedHomeDir + "/.mozilla"_ns)
+#elif defined(XP_MACOSX)
+ nsCString(mAppCache + "/Mozilla/Profiles"_ns)
+#elif defined(XP_UNIX)
+ nsCString(mMockedHomeDir + "/.mozilla"_ns)
+#elif defined(XP_WIN)
+ nsCString(mLocalHome + "\\Mozilla\\Profiles"_ns)
+#endif
+ ,
+ GetFromDirectoryService(NS_APP_USER_PROFILES_LOCAL_ROOT_DIR));
+}
+
+TEST_F(XDGXREAppDir_InvalidEnv_AppDataProfile, GetTempDefaultUserProfileRoot) {
+ ASSERT_EQ(
+#if defined(ANDROID)
+ nsCString(mMockedHomeDir + "/.mozilla"_ns)
+#elif defined(XP_MACOSX)
+ nsCString(mAppCache + "/Mozilla/Profiles"_ns)
+#elif defined(XP_UNIX)
+ nsCString(mMockedHomeDir + "/.mozilla"_ns)
+#elif defined(XP_WIN)
+ nsCString(mLocalHome + "\\Mozilla\\Profiles"_ns)
+#endif
+ ,
+ GetFromDirectoryService(NS_APP_USER_PROFILES_LOCAL_ROOT_DIR));
+}
+
+TEST_F(XDGXREAppDir_Env_AppDataProfile, GetTempDefaultUserProfileRoot) {
+ ASSERT_EQ(
+#if defined(ANDROID)
+ nsCString(mMockedHomeDir + "/.mozilla"_ns)
+#elif defined(XP_MACOSX)
+ nsCString(mAppCache + "/Mozilla/Profiles"_ns)
+#elif defined(XP_UNIX)
+ nsCString(mMockedHomeDir + "/.mozilla"_ns)
+#elif defined(XP_WIN)
+ nsCString(mLocalHome + "\\Mozilla\\Profiles"_ns)
+#endif
+ ,
+ GetFromDirectoryService(NS_APP_USER_PROFILES_LOCAL_ROOT_DIR));
+}
+
+/// END AppDataProfile variants
+
+/// Tests for XDG_CACHE_HOME
+
+// GetUserLocalDataDirectory
+
+// Check if '$HOME/.cache/mozilla' is used when '$XDG_CACHE_HOME' is not set.
+TEST_F(CacheXREAppDir_NoEnv, GetUserLocalDataDirectory) {
+ ASSERT_EQ(
+#if defined(ANDROID)
+ nsCString(mMockedHomeDir + "/mozilla"_ns)
+#elif defined(XP_MACOSX)
+ nsCString(mAppCache + "/Firefox"_ns)
+#elif defined(XP_UNIX)
+ nsCString(mMockedHomeDir + "/.cache/mozilla/firefox"_ns)
+#elif defined(XP_WIN)
+ nsCString(mLocalHome + "\\Mozilla\\Firefox"_ns)
+#endif
+ ,
+ GetUserLocalDataDirectory());
+}
+
+// Check if '$XDG_CACHE_HOME/mozilla' is used when '$XDG_CACHE_HOME' is set.
+TEST_F(CacheXREAppDir_Env, GetUserLocalDataDirectory) {
+ ASSERT_EQ(
+#if defined(ANDROID)
+ nsCString(mMockedHomeDir + "/mozilla"_ns)
+#elif defined(XP_MACOSX)
+ nsCString(mAppCache + "/Firefox"_ns)
+#elif defined(XP_UNIX)
+ nsCString(mMockedHomeDir + "/.xdgCacheDir/mozilla/firefox"_ns)
+#elif defined(XP_WIN)
+ nsCString(mLocalHome + "\\Mozilla\\Firefox"_ns)
+#endif
+ ,
+ GetUserLocalDataDirectory());
+}
+
+// GetUserProfilesLocalDir
+
+TEST_F(CacheXREAppDir_NoEnv, GetUserProfilesLocalDir) {
+ ASSERT_EQ(
+#if defined(ANDROID)
+ nsCString(mMockedHomeDir + "/mozilla"_ns)
+#elif defined(XP_MACOSX)
+ nsCString(mAppCache + "/Firefox/Profiles"_ns)
+#elif defined(XP_UNIX)
+ nsCString(mMockedHomeDir + "/.cache/mozilla/firefox"_ns)
+#elif defined(XP_WIN)
+ nsCString(mLocalHome + "\\Mozilla\\Firefox\\Profiles"_ns)
+#endif
+ ,
+ GetUserProfilesLocalDir());
+}
+
+TEST_F(CacheXREAppDir_Env, GetUserProfilesLocalDir) {
+ ASSERT_EQ(
+#if defined(ANDROID)
+ nsCString(mMockedHomeDir + "/mozilla"_ns)
+#elif defined(XP_MACOSX)
+ nsCString(mAppCache + "/Firefox/Profiles"_ns)
+#elif defined(XP_UNIX)
+ nsCString(mMockedHomeDir + "/.xdgCacheDir/mozilla/firefox"_ns)
+#elif defined(XP_WIN)
+ nsCString(mLocalHome + "\\Mozilla\\Firefox\\Profiles"_ns)
+#endif
+ ,
+ GetUserProfilesLocalDir());
+}
diff --git a/toolkit/tests/gtest/moz.build b/toolkit/tests/gtest/moz.build
@@ -0,0 +1,18 @@
+# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# vim: set filetype=python:
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, you can obtain one at http://mozilla.org/MPL/2.0/.
+
+Library("toolkit")
+
+with Files("**"):
+ BUG_COMPONENT = ("Toolkit", "Startup and Profile System")
+
+UNIFIED_SOURCES = [
+ "TestXREAppDir.cpp",
+]
+
+LOCAL_INCLUDES += ["/toolkit/xre", "/xpcom/io"]
+
+FINAL_LIBRARY = "xul-gtest"
diff --git a/toolkit/xre/nsXREDirProvider.cpp b/toolkit/xre/nsXREDirProvider.cpp
@@ -1028,6 +1028,32 @@ nsresult nsXREDirProvider::SetUserDataProfileDirectory(nsCOMPtr<nsIFile>& aFile,
return NS_OK;
}
+/* static */
+nsresult nsXREDirProvider::ClearUserDataProfileDirectoryFromGTest(
+ nsIFile** aLocal, nsIFile** aGlobal) {
+ if (gDataDirProfileLocal) {
+ gDataDirProfileLocal->Clone(aLocal);
+ gDataDirProfileLocal = nullptr;
+ }
+
+ if (gDataDirProfile) {
+ gDataDirProfile->Clone(aGlobal);
+ gDataDirProfile = nullptr;
+ }
+
+ return NS_OK;
+}
+
+/* static */
+nsresult nsXREDirProvider::RestoreUserDataProfileDirectoryFromGTest(
+ nsCOMPtr<nsIFile>& aLocal, nsCOMPtr<nsIFile>& aGlobal) {
+ gDataDirProfileLocal = aLocal;
+ gDataDirProfile = aGlobal;
+
+ return NS_OK;
+}
+
+// Return the home directory that will contain user data
nsresult nsXREDirProvider::GetUserDataDirectoryHome(nsIFile** aFile,
bool aLocal) {
// Copied from nsAppFileLocationProvider (more or less)
diff --git a/toolkit/xre/nsXREDirProvider.h b/toolkit/xre/nsXREDirProvider.h
@@ -104,6 +104,16 @@ class nsXREDirProvider final : public nsIDirectoryServiceProvider2,
*/
nsresult GetProfileDir(nsIFile** aResult);
+ /**
+ * Test only methods used by XREAppDir gtests to reset the values of
+ * gDataDirProfileLocal and gDataDirProfile
+ */
+ static nsresult ClearUserDataProfileDirectoryFromGTest(nsIFile** aLocal,
+ nsIFile** aGlobal);
+
+ static nsresult RestoreUserDataProfileDirectoryFromGTest(
+ nsCOMPtr<nsIFile>& aLocal, nsCOMPtr<nsIFile>& aGlobal);
+
private:
nsresult GetFilesInternal(const char* aProperty,
nsISimpleEnumerator** aResult);
diff --git a/tools/lint/dot-mozilla-reference.yml b/tools/lint/dot-mozilla-reference.yml
@@ -39,3 +39,4 @@ avoid-dot-mozilla-without-xdg:
- toolkit/crashreporter/crash_helper_server/src/logging/env.rs
- toolkit/moz.configure
- toolkit/xre/nsXREDirProvider.cpp
+ - toolkit/tests/gtest/TestXREAppDir.cpp