[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]

[tor-commits] [tor-messenger-build/master] Add patch to change the default Firefox profile directory



commit 81814b90685b98a6c8d08894a1437c72ff5b4838
Author: Nicolas Vigier <boklm@xxxxxxxxxxxxxx>
Date:   Mon Jun 29 15:40:49 2015 +0200

    Add patch to change the default Firefox profile directory
---
 ...e-the-default-Firefox-profile-director.mozpatch |  446 ++++++++++++++++++++
 projects/instantbird/config                        |    1 +
 2 files changed, 447 insertions(+)

diff --git a/projects/instantbird/Bug-9173-Change-the-default-Firefox-profile-director.mozpatch b/projects/instantbird/Bug-9173-Change-the-default-Firefox-profile-director.mozpatch
new file mode 100644
index 0000000..3ec76d7
--- /dev/null
+++ b/projects/instantbird/Bug-9173-Change-the-default-Firefox-profile-director.mozpatch
@@ -0,0 +1,446 @@
+From e40c55e5d4c8ea9e354f00277478accae84970de Mon Sep 17 00:00:00 2001
+From: Kathy Brade <brade@xxxxxxxxxxxxxxxxx>
+Date: Fri, 18 Oct 2013 15:20:06 -0400
+Subject: [PATCH] Bug #9173: Change the default Firefox profile directory to be
+ TBB-relative.
+
+This should eliminate our need to rely on a wrapper script that sets $HOME and
+launches Firefox with -profile.
+---
+ toolkit/xre/nsXREDirProvider.cpp       | 153 ++++++++-------------------------
+ toolkit/xre/nsXREDirProvider.h         |  10 +--
+ xpcom/io/moz.build                     |   4 +
+ xpcom/io/nsAppFileLocationProvider.cpp |  96 ++++++++-------------
+ 4 files changed, 79 insertions(+), 184 deletions(-)
+
+diff --git a/toolkit/xre/nsXREDirProvider.cpp b/toolkit/xre/nsXREDirProvider.cpp
+index c496a14ce84a..689cb0f8ecb1 100644
+--- a/toolkit/xre/nsXREDirProvider.cpp
++++ b/toolkit/xre/nsXREDirProvider.cpp
+@@ -33,6 +33,7 @@
+ #include "nsArrayEnumerator.h"
+ #include "nsEnumeratorUtils.h"
+ #include "nsReadableUtils.h"
++#include "nsXPCOMPrivate.h"  // for XPCOM_FILE_PATH_SEPARATOR
+ #include "mozilla/Services.h"
+ #include "mozilla/Omnijar.h"
+ #include "mozilla/Preferences.h"
+@@ -195,9 +196,6 @@ nsXREDirProvider::GetUserProfilesRootDir(nsIFile** aResult,
+                                      aProfileName, aAppName, aVendorName);
+ 
+   if (NS_SUCCEEDED(rv)) {
+-#if !defined(XP_UNIX) || defined(XP_MACOSX)
+-    rv = file->AppendNative(NS_LITERAL_CSTRING("Profiles"));
+-#endif
+     // We must create the profile directory here if it does not exist.
+     nsresult tmp = EnsureDirectoryExists(file);
+     if (NS_FAILED(tmp)) {
+@@ -220,9 +218,6 @@ nsXREDirProvider::GetUserProfilesLocalDir(nsIFile** aResult,
+                                      aProfileName, aAppName, aVendorName);
+ 
+   if (NS_SUCCEEDED(rv)) {
+-#if !defined(XP_UNIX) || defined(XP_MACOSX)
+-    rv = file->AppendNative(NS_LITERAL_CSTRING("Profiles"));
+-#endif
+     // We must create the profile directory here if it does not exist.
+     nsresult tmp = EnsureDirectoryExists(file);
+     if (NS_FAILED(tmp)) {
+@@ -1212,82 +1207,45 @@ nsresult
+ nsXREDirProvider::GetUserDataDirectoryHome(nsIFile** aFile, bool aLocal)
+ {
+   // Copied from nsAppFileLocationProvider (more or less)
+-  nsresult rv;
++  NS_ENSURE_ARG_POINTER(aFile);
+   nsCOMPtr<nsIFile> localDir;
+ 
+-#if defined(XP_MACOSX)
+-  FSRef fsRef;
+-  OSType folderType;
+-  if (aLocal) {
+-    folderType = kCachedDataFolderType;
+-  } else {
+-#ifdef MOZ_THUNDERBIRD
+-    folderType = kDomainLibraryFolderType;
+-#else
+-    folderType = kApplicationSupportFolderType;
+-#endif
+-  }
+-  OSErr err = ::FSFindFolder(kUserDomain, folderType, kCreateFolder, &fsRef);
+-  NS_ENSURE_FALSE(err, NS_ERROR_FAILURE);
+-
+-  rv = NS_NewNativeLocalFile(EmptyCString(), true, getter_AddRefs(localDir));
++  nsresult rv = GetAppDir()->Clone(getter_AddRefs(localDir));
+   NS_ENSURE_SUCCESS(rv, rv);
+ 
+-  nsCOMPtr<nsILocalFileMac> dirFileMac = do_QueryInterface(localDir);
+-  NS_ENSURE_TRUE(dirFileMac, NS_ERROR_UNEXPECTED);
++  int levelsToRemove = 1; // In FF21+, appDir points to browser subdirectory.
++#if defined(XP_MACOSX)
++  levelsToRemove += 2;
++#endif
++  while (localDir && (levelsToRemove > 0)) {
++    // When crawling up the hierarchy, components named "." do not count.
++    nsAutoCString removedName;
++    rv = localDir->GetNativeLeafName(removedName);
++    NS_ENSURE_SUCCESS(rv, rv);
++    bool didRemove = !removedName.Equals(".");
+ 
+-  rv = dirFileMac->InitWithFSRef(&fsRef);
+-  NS_ENSURE_SUCCESS(rv, rv);
++    // Remove a directory component.
++    nsCOMPtr<nsIFile> parentDir;
++    rv = localDir->GetParent(getter_AddRefs(parentDir));
++    NS_ENSURE_SUCCESS(rv, rv);
++    localDir = parentDir;
+ 
+-  localDir = do_QueryInterface(dirFileMac, &rv);
+-#elif defined(XP_WIN)
+-  nsString path;
+-  if (aLocal) {
+-    rv = GetShellFolderPath(CSIDL_LOCAL_APPDATA, path);
+-    if (NS_FAILED(rv))
+-      rv = GetRegWindowsAppDataFolder(aLocal, path);
++    if (didRemove)
++      --levelsToRemove;
+   }
+-  if (!aLocal || NS_FAILED(rv)) {
+-    rv = GetShellFolderPath(CSIDL_APPDATA, path);
+-    if (NS_FAILED(rv)) {
+-      if (!aLocal)
+-        rv = GetRegWindowsAppDataFolder(aLocal, path);
+-    }
+-  }
+-  NS_ENSURE_SUCCESS(rv, rv);
+ 
+-  rv = NS_NewLocalFile(path, true, getter_AddRefs(localDir));
+-#elif defined(MOZ_WIDGET_GONK)
+-  rv = NS_NewNativeLocalFile(NS_LITERAL_CSTRING("/data/b2g"), true,
+-                             getter_AddRefs(localDir));
+-#elif defined(XP_UNIX)
+-  const char* homeDir = getenv("HOME");
+-  if (!homeDir || !*homeDir)
++  if (!localDir)
+     return NS_ERROR_FAILURE;
+ 
+-#ifdef ANDROID /* We want (ProfD == ProfLD) on Android. */
+-  aLocal = false;
+-#endif
++  rv = localDir->AppendRelativeNativePath(NS_LITERAL_CSTRING("TorBrowser"
++                                     XPCOM_FILE_PATH_SEPARATOR "Data"
++                                     XPCOM_FILE_PATH_SEPARATOR "Browser"));
++  NS_ENSURE_SUCCESS(rv, rv);
+ 
+   if (aLocal) {
+-    // If $XDG_CACHE_HOME is defined use it, otherwise use $HOME/.cache.
+-    const char* cacheHome = getenv("XDG_CACHE_HOME");
+-    if (cacheHome && *cacheHome) {
+-      rv = NS_NewNativeLocalFile(nsDependentCString(cacheHome), true,
+-                                 getter_AddRefs(localDir));
+-    } else {
+-      rv = NS_NewNativeLocalFile(nsDependentCString(homeDir), true,
+-                                 getter_AddRefs(localDir));
+-      if (NS_SUCCEEDED(rv))
+-        rv = localDir->AppendNative(NS_LITERAL_CSTRING(".cache"));
+-    }
+-  } else {
+-    rv = NS_NewNativeLocalFile(nsDependentCString(homeDir), true,
+-                               getter_AddRefs(localDir));
++    rv = localDir->AppendNative(NS_LITERAL_CSTRING("Caches"));
++    NS_ENSURE_SUCCESS(rv, rv);
+   }
+-#else
+-#error "Don't know how to get product dir on your platform"
+-#endif
+ 
+   NS_IF_ADDREF(*aFile = localDir);
+   return rv;
+@@ -1500,48 +1458,25 @@ nsXREDirProvider::AppendProfilePath(nsIFile* aFile,
+   }
+ 
+   nsAutoCString profile;
+-  nsAutoCString appName;
+-  nsAutoCString vendor;
+   if (aProfileName && !aProfileName->IsEmpty()) {
+     profile = *aProfileName;
+-  } else if (aAppName) {
+-    appName = *aAppName;
+-    if (aVendorName) {
+-      vendor = *aVendorName;
+-    }
+   } else if (gAppData->profile) {
+     profile = gAppData->profile;
+-  } else {
+-    appName = gAppData->name;
+-    vendor = gAppData->vendor;
+   }
+ 
+-  nsresult rv;
++  nsresult rv = NS_ERROR_FAILURE;
+ 
+ #if defined (XP_MACOSX)
+   if (!profile.IsEmpty()) {
+     rv = AppendProfileString(aFile, profile.get());
++    NS_ENSURE_SUCCESS(rv, rv);
+   }
+-  else {
+-    // Note that MacOS ignores the vendor when creating the profile hierarchy -
+-    // all application preferences directories live alongside one another in
+-    // ~/Library/Application Support/
+-    rv = aFile->AppendNative(appName);
+-  }
+-  NS_ENSURE_SUCCESS(rv, rv);
+ 
+ #elif defined(XP_WIN)
+   if (!profile.IsEmpty()) {
+     rv = AppendProfileString(aFile, profile.get());
++    NS_ENSURE_SUCCESS(rv, rv);
+   }
+-  else {
+-    if (!vendor.IsEmpty()) {
+-      rv = aFile->AppendNative(vendor);
+-      NS_ENSURE_SUCCESS(rv, rv);
+-    }
+-    rv = aFile->AppendNative(appName);
+-  }
+-  NS_ENSURE_SUCCESS(rv, rv);
+ 
+ #elif defined(ANDROID)
+   // The directory used for storing profiles
+@@ -1553,12 +1488,6 @@ nsXREDirProvider::AppendProfilePath(nsIFile* aFile,
+   rv = aFile->AppendNative(nsDependentCString("mozilla"));
+   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
+     const char* profileStart = profile.get();
+@@ -1567,31 +1496,17 @@ nsXREDirProvider::AppendProfilePath(nsIFile* aFile,
+ 
+     // On the off chance that someone wanted their folder to be hidden don't
+     // let it become ".."
+-    if (*profileStart == '.' && !aLocal)
++    if (*profileStart == '.')
+       profileStart++;
+ 
++    // Make it hidden (by starting with ".").
++    nsAutoCString folder(".");
+     folder.Append(profileStart);
+     ToLowerCase(folder);
+ 
+     rv = AppendProfileString(aFile, folder.BeginReading());
++    NS_ENSURE_SUCCESS(rv, rv);
+   }
+-  else {
+-    if (!vendor.IsEmpty()) {
+-      folder.Append(vendor);
+-      ToLowerCase(folder);
+-
+-      rv = aFile->AppendNative(folder);
+-      NS_ENSURE_SUCCESS(rv, rv);
+-
+-      folder.Truncate();
+-    }
+-
+-    folder.Append(appName);
+-    ToLowerCase(folder);
+-
+-    rv = aFile->AppendNative(folder);
+-  }
+-  NS_ENSURE_SUCCESS(rv, rv);
+ 
+ #else
+ #error "Don't know how to get profile path on your platform"
+diff --git a/toolkit/xre/nsXREDirProvider.h b/toolkit/xre/nsXREDirProvider.h
+index 3944c90a401b..c984933f047e 100644
+--- a/toolkit/xre/nsXREDirProvider.h
++++ b/toolkit/xre/nsXREDirProvider.h
+@@ -56,16 +56,16 @@ public:
+ 
+   nsresult GetProfileDefaultsDir(nsIFile* *aResult);
+ 
+-  static nsresult GetUserAppDataDirectory(nsIFile* *aFile) {
++  nsresult GetUserAppDataDirectory(nsIFile* *aFile) {
+     return GetUserDataDirectory(aFile, false, nullptr, nullptr, nullptr);
+   }
+-  static nsresult GetUserLocalDataDirectory(nsIFile* *aFile) {
++  nsresult GetUserLocalDataDirectory(nsIFile* *aFile) {
+     return GetUserDataDirectory(aFile, true, nullptr, nullptr, nullptr);
+   }
+ 
+   // By default GetUserDataDirectory gets profile path from gAppData,
+   // but that can be overridden by using aProfileName/aAppName/aVendorName.
+-  static nsresult GetUserDataDirectory(nsIFile** aFile, bool aLocal,
++  nsresult GetUserDataDirectory(nsIFile** aFile, bool aLocal,
+                                        const nsACString* aProfileName,
+                                        const nsACString* aAppName,
+                                        const nsACString* aVendorName);
+@@ -102,8 +102,8 @@ public:
+ 
+ protected:
+   nsresult GetFilesInternal(const char* aProperty, nsISimpleEnumerator** aResult);
+-  static nsresult GetUserDataDirectoryHome(nsIFile* *aFile, bool aLocal);
+-  static nsresult GetSysUserExtensionsDirectory(nsIFile* *aFile);
++  nsresult GetUserDataDirectoryHome(nsIFile* *aFile, bool aLocal);
++  nsresult GetSysUserExtensionsDirectory(nsIFile* *aFile);
+ #if defined(XP_UNIX) || defined(XP_MACOSX)
+   static nsresult GetSystemExtensionsDirectory(nsIFile** aFile);
+ #endif
+diff --git a/xpcom/io/moz.build b/xpcom/io/moz.build
+index b4dfc03b4683..6e1936fe8666 100644
+--- a/xpcom/io/moz.build
++++ b/xpcom/io/moz.build
+@@ -134,4 +134,8 @@ FINAL_LIBRARY = 'xul'
+ if CONFIG['OS_ARCH'] == 'Linux' and 'lib64' in CONFIG['libdir']:
+     DEFINES['HAVE_USR_LIB64_DIR'] = True
+ 
++LOCAL_INCLUDES += [
++    '../build'
++]
++
+ GENERATED_INCLUDES += ['..']
+diff --git a/xpcom/io/nsAppFileLocationProvider.cpp b/xpcom/io/nsAppFileLocationProvider.cpp
+index a5c71e723907..f93e7f430996 100644
+--- a/xpcom/io/nsAppFileLocationProvider.cpp
++++ b/xpcom/io/nsAppFileLocationProvider.cpp
+@@ -14,6 +14,7 @@
+ #include "nsISimpleEnumerator.h"
+ #include "prenv.h"
+ #include "nsCRT.h"
++#include "nsXPCOMPrivate.h"  // for XPCOM_FILE_PATH_SEPARATOR
+ 
+ #if defined(MOZ_WIDGET_COCOA)
+ #include <Carbon/Carbon.h>
+@@ -279,9 +280,8 @@ nsAppFileLocationProvider::CloneMozBinDirectory(nsIFile** aLocalFile)
+ //----------------------------------------------------------------------------------------
+ // GetProductDirectory - Gets the directory which contains the application data folder
+ //
+-// UNIX   : ~/.mozilla/
+-// WIN    : <Application Data folder on user's machine>\Mozilla
+-// Mac    : :Documents:Mozilla:
++// UNIX and WIN   : <App Folder>/TorBrowser/Data/Browser
++// Mac            : <App Folder>/../../TorBrowser/Data/Browser
+ //----------------------------------------------------------------------------------------
+ NS_METHOD
+ nsAppFileLocationProvider::GetProductDirectory(nsIFile** aLocalFile,
+@@ -295,48 +295,45 @@ nsAppFileLocationProvider::GetProductDirectory(nsIFile** aLocalFile,
+   bool exists;
+   nsCOMPtr<nsIFile> localDir;
+ 
+-#if defined(MOZ_WIDGET_COCOA)
+-  FSRef fsRef;
+-  OSType folderType = aLocal ? (OSType)kCachedDataFolderType :
+-                               (OSType)kDomainLibraryFolderType;
+-  OSErr err = ::FSFindFolder(kUserDomain, folderType, kCreateFolder, &fsRef);
+-  if (err) {
+-    return NS_ERROR_FAILURE;
++  rv = CloneMozBinDirectory(getter_AddRefs(localDir));
++  NS_ENSURE_SUCCESS(rv, rv);
++
++  int levelsToRemove = 1; // In FF21+, bin dir points to browser subdirectory.
++#if defined(XP_MACOSX)
++  levelsToRemove += 2;
++#endif
++  while (localDir && (levelsToRemove > 0)) {
++    // When crawling up the hierarchy, components named "." do not count.
++    nsAutoCString removedName;
++    rv = localDir->GetNativeLeafName(removedName);
++    NS_ENSURE_SUCCESS(rv, rv);
++    bool didRemove = !removedName.Equals(".");
++
++    // Remove a directory component.
++    nsCOMPtr<nsIFile> parentDir;
++    rv = localDir->GetParent(getter_AddRefs(parentDir));
++    NS_ENSURE_SUCCESS(rv, rv);
++    localDir = parentDir;
++
++    if (didRemove) {
++      --levelsToRemove;
++    }
+   }
+-  NS_NewLocalFile(EmptyString(), true, getter_AddRefs(localDir));
++
+   if (!localDir) {
+     return NS_ERROR_FAILURE;
+   }
+-  nsCOMPtr<nsILocalFileMac> localDirMac(do_QueryInterface(localDir));
+-  rv = localDirMac->InitWithFSRef(&fsRef);
+-  if (NS_FAILED(rv)) {
+-    return rv;
+-  }
+-#elif defined(XP_WIN)
+-  nsCOMPtr<nsIProperties> directoryService =
+-    do_GetService(NS_DIRECTORY_SERVICE_CONTRACTID, &rv);
+-  if (NS_FAILED(rv)) {
+-    return rv;
+-  }
+-  const char* prop = aLocal ? NS_WIN_LOCAL_APPDATA_DIR : NS_WIN_APPDATA_DIR;
+-  rv = directoryService->Get(prop, NS_GET_IID(nsIFile), getter_AddRefs(localDir));
+-  if (NS_FAILED(rv)) {
+-    return rv;
+-  }
+-#elif defined(XP_UNIX)
+-  rv = NS_NewNativeLocalFile(nsDependentCString(PR_GetEnv("HOME")), true,
+-                             getter_AddRefs(localDir));
+-  if (NS_FAILED(rv)) {
+-    return rv;
+-  }
+-#else
+-#error dont_know_how_to_get_product_dir_on_your_platform
+-#endif
+ 
+-  rv = localDir->AppendRelativeNativePath(DEFAULT_PRODUCT_DIR);
+-  if (NS_FAILED(rv)) {
+-    return rv;
++  rv = localDir->AppendRelativeNativePath(NS_LITERAL_CSTRING("TorBrowser"
++                                        XPCOM_FILE_PATH_SEPARATOR "Data"
++                                        XPCOM_FILE_PATH_SEPARATOR "Browser"));
++  NS_ENSURE_SUCCESS(rv, rv);
++
++  if (aLocal) {
++    rv = localDir->AppendNative(NS_LITERAL_CSTRING("Caches"));
++    NS_ENSURE_SUCCESS(rv, rv);
+   }
++
+   rv = localDir->Exists(&exists);
+ 
+   if (NS_SUCCEEDED(rv) && !exists) {
+@@ -356,10 +353,6 @@ nsAppFileLocationProvider::GetProductDirectory(nsIFile** aLocalFile,
+ 
+ //----------------------------------------------------------------------------------------
+ // GetDefaultUserProfileRoot - Gets the directory which contains each user profile dir
+-//
+-// UNIX   : ~/.mozilla/
+-// WIN    : <Application Data folder on user's machine>\Mozilla\Profiles
+-// Mac    : :Documents:Mozilla:Profiles:
+ //----------------------------------------------------------------------------------------
+ NS_METHOD
+ nsAppFileLocationProvider::GetDefaultUserProfileRoot(nsIFile** aLocalFile,
+@@ -377,23 +370,6 @@ nsAppFileLocationProvider::GetDefaultUserProfileRoot(nsIFile** aLocalFile,
+     return rv;
+   }
+ 
+-#if defined(MOZ_WIDGET_COCOA) || defined(XP_WIN)
+-  // These 3 platforms share this part of the path - do them as one
+-  rv = localDir->AppendRelativeNativePath(NS_LITERAL_CSTRING("Profiles"));
+-  if (NS_FAILED(rv)) {
+-    return rv;
+-  }
+-
+-  bool exists;
+-  rv = localDir->Exists(&exists);
+-  if (NS_SUCCEEDED(rv) && !exists) {
+-    rv = localDir->Create(nsIFile::DIRECTORY_TYPE, 0775);
+-  }
+-  if (NS_FAILED(rv)) {
+-    return rv;
+-  }
+-#endif
+-
+   *aLocalFile = localDir;
+   NS_ADDREF(*aLocalFile);
+ 
diff --git a/projects/instantbird/config b/projects/instantbird/config
index 0565840..656cdb4 100644
--- a/projects/instantbird/config
+++ b/projects/instantbird/config
@@ -108,6 +108,7 @@ input_files:
     enable: '[% c("var/windows") %]'
   - filename: f2e7cea9bc6a-bug-1150967.patch
     enable: '[% c("var/windows") %]'
+  - filename: Bug-9173-Change-the-default-Firefox-profile-director.mozpatch
   - filename: 824009fbc42f.mozpatch
     enable: '[% c("var/windows") %]'
   - filename: Bug-1133689-backport-Make-D3DVsyncDisplay-destructor.mozpatch



_______________________________________________
tor-commits mailing list
tor-commits@xxxxxxxxxxxxxxxxxxxx
https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits