diff options
author | Brian Smith <brian@dbsoft.org> | 2022-04-26 10:13:11 -0500 |
---|---|---|
committer | Brian Smith <brian@dbsoft.org> | 2022-04-26 10:19:04 -0500 |
commit | 3daf711085889bad1bd68651bc4e8790412ae105 (patch) | |
tree | f5b0e4c1befb320cdf158e1839ac5e273373087f /uriloader | |
parent | 7fe702603066e7f122d5dd66a3a1892ac7e06215 (diff) | |
download | uxp-3daf711085889bad1bd68651bc4e8790412ae105.tar.gz |
Issue #1829 - Revert “Issue #1751 -- Remove XP_MACOSX conditionals from the rest of the tree.”
This also removes some PP abuse and takes file entries out of PP when no longer
needed without XP_MACOSX conditionals.
This reverts commit 6f707bde95dab6998ac204f9ee6c925ee230c740.
Diffstat (limited to 'uriloader')
-rw-r--r-- | uriloader/exthandler/nsExternalHelperAppService.cpp | 58 | ||||
-rw-r--r-- | uriloader/exthandler/nsLocalHandlerApp.h | 9 |
2 files changed, 65 insertions, 2 deletions
diff --git a/uriloader/exthandler/nsExternalHelperAppService.cpp b/uriloader/exthandler/nsExternalHelperAppService.cpp index dc7d200041..7d5592f948 100644 --- a/uriloader/exthandler/nsExternalHelperAppService.cpp +++ b/uriloader/exthandler/nsExternalHelperAppService.cpp @@ -63,6 +63,10 @@ #include "nsIObserverService.h" // so we can be a profile change observer #include "nsIPropertyBag2.h" // for the 64-bit content length +#ifdef XP_MACOSX +#include "nsILocalFileMac.h" +#endif + #include "nsIPluginHost.h" // XXX needed for ext->type mapping (bug 233289) #include "nsPluginHost.h" #include "nsEscape.h" @@ -271,7 +275,50 @@ static nsresult GetDownloadDirectory(nsIFile **_directory, bool aSkipChecks = false) { nsCOMPtr<nsIFile> dir; - // On all supported platforms, we default to the system's temporary directory. +#ifdef XP_MACOSX + // On OS X, we first try to get the users download location, if it's set. + switch (Preferences::GetInt(NS_PREF_DOWNLOAD_FOLDERLIST, -1)) { + case NS_FOLDER_VALUE_DESKTOP: + (void) NS_GetSpecialDirectory(NS_OS_DESKTOP_DIR, getter_AddRefs(dir)); + break; + case NS_FOLDER_VALUE_CUSTOM: + { + Preferences::GetComplex(NS_PREF_DOWNLOAD_DIR, + NS_GET_IID(nsIFile), + getter_AddRefs(dir)); + if (!dir) break; + + // If we're not checking for availability we're done. + if (aSkipChecks) { + dir.forget(_directory); + return NS_OK; + } + + // We have the directory, and now we need to make sure it exists + bool dirExists = false; + (void) dir->Exists(&dirExists); + if (dirExists) break; + + nsresult rv = dir->Create(nsIFile::DIRECTORY_TYPE, 0755); + if (NS_FAILED(rv)) { + dir = nullptr; + break; + } + } + break; + case NS_FOLDER_VALUE_DOWNLOADS: + // This is just the OS default location, so fall out + break; + } + + if (!dir) { + // If not, we default to the OS X default download location. + nsresult rv = NS_GetSpecialDirectory(NS_OSX_DEFAULT_DOWNLOAD_DIR, + getter_AddRefs(dir)); + NS_ENSURE_SUCCESS(rv, rv); + } +#else + // On all other platforms, we default to the systems temporary directory. nsresult rv = NS_GetSpecialDirectory(NS_OS_TEMP_DIR, getter_AddRefs(dir)); NS_ENSURE_SUCCESS(rv, rv); @@ -345,6 +392,7 @@ static nsresult GetDownloadDirectory(nsIFile **_directory, } #endif +#endif NS_ASSERTION(dir, "Somehow we didn't get a download directory!"); dir.forget(_directory); @@ -416,7 +464,11 @@ struct nsExtraMimeTypeEntry { const char* mDescription; }; +#ifdef XP_MACOSX +#define MAC_TYPE(x) x +#else #define MAC_TYPE(x) 0 +#endif /** * This table lists all of the 'extra' content types that we can deduce from particular @@ -427,7 +479,11 @@ struct nsExtraMimeTypeEntry { */ static const nsExtraMimeTypeEntry extraMimeEntries[] = { +#if defined(XP_MACOSX) // don't define .bin on the mac...use internet config to look that up... + { APPLICATION_OCTET_STREAM, "exe,com", "Binary File" }, +#else { APPLICATION_OCTET_STREAM, "exe,com,bin", "Binary File" }, +#endif { APPLICATION_GZIP2, "gz", "gzip" }, { "application/x-arj", "arj", "ARJ file" }, { "application/rtf", "rtf", "Rich Text Format File" }, diff --git a/uriloader/exthandler/nsLocalHandlerApp.h b/uriloader/exthandler/nsLocalHandlerApp.h index 2e6ba6d8c3..30b410ce32 100644 --- a/uriloader/exthandler/nsLocalHandlerApp.h +++ b/uriloader/exthandler/nsLocalHandlerApp.h @@ -46,8 +46,15 @@ protected: nsresult LaunchWithIProcess(const nsCString &aArg); }; -// Any platforms that need a platform-specific class instead of just +// any platforms that need a platform-specific class instead of just // using nsLocalHandlerApp need to add an include and a typedef here. +#ifdef XP_MACOSX +# ifndef NSLOCALHANDLERAPPMAC_H_ +# include "mac/nsLocalHandlerAppMac.h" +typedef nsLocalHandlerAppMac PlatformLocalHandlerApp_t; +# endif +#else typedef nsLocalHandlerApp PlatformLocalHandlerApp_t; +#endif #endif // __nsLocalHandlerAppImpl_h__ |