diff --git a/toolkit/moz.build b/toolkit/moz.build index 109fb2c..0b871d9 100644 --- a/toolkit/moz.build +++ b/toolkit/moz.build @@ -72,3 +72,5 @@ with Files('mozapps/preferences/**'): with Files('pluginproblem/**'): BUG_COMPONENT = ('Core', 'Plug-ins') +if CONFIG['ENABLE_TESTS']: + DIRS += ['tests/gtest'] diff --git a/toolkit/xre/nsXREDirProvider.cpp b/toolkit/xre/nsXREDirProvider.cpp index aafe82e..2d850fe 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); } } @@ -1238,7 +1231,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; } @@ -1367,6 +1361,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)) { @@ -1390,6 +1387,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; @@ -1411,8 +1411,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" @@ -1523,20 +1566,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); @@ -1554,20 +1589,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); @@ -1625,9 +1652,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 @@ -1647,8 +1671,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 90e4ec9..8b838ec 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: //----------------------------------------------------------------------------------------