Compare commits
5
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
9edf1b7bea | ||
|
|
930ddd693b | ||
|
|
4cdd532738 | ||
|
|
6f8d063b18 | ||
|
|
b1957eb7c9 |
No files matched your search
@@ -160,7 +160,7 @@ nsChromeProtocolHandler::NewChannel2(nsIURI* aURI,
|
||||
file->Exists(&exists);
|
||||
if (!exists) {
|
||||
nsAutoCString path;
|
||||
file->GetNativePath(path);
|
||||
file->GetPersistentDescriptor(path);
|
||||
printf("Chrome file doesn't exist: %s\n", path.get());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -25,6 +25,7 @@
|
||||
#include "nsIDocument.h"
|
||||
#include "mozilla/dom/Animation.h"
|
||||
#include "nsIAnimationObserver.h"
|
||||
#include "nsGlobalWindow.h"
|
||||
|
||||
class nsDOMMutationObserver;
|
||||
using mozilla::dom::MutationObservingInfo;
|
||||
@@ -599,11 +600,7 @@ protected:
|
||||
|
||||
bool Suppressed()
|
||||
{
|
||||
if (mOwner) {
|
||||
nsCOMPtr<nsIDocument> d = mOwner->GetExtantDoc();
|
||||
return d && d->IsInSyncOperation();
|
||||
}
|
||||
return false;
|
||||
return mOwner && nsGlobalWindow::Cast(mOwner)->IsInSyncOperation();
|
||||
}
|
||||
|
||||
static void HandleMutationsInternal(mozilla::AutoSlowOperation& aAso);
|
||||
|
||||
@@ -1224,6 +1224,12 @@ public:
|
||||
already_AddRefed<nsWindowRoot> GetWindowRoot(mozilla::ErrorResult& aError);
|
||||
|
||||
mozilla::dom::Performance* GetPerformance();
|
||||
|
||||
virtual bool IsInSyncOperation() override
|
||||
{
|
||||
return GetExtantDoc() && GetExtantDoc()->IsInSyncOperation();
|
||||
}
|
||||
|
||||
protected:
|
||||
// Web IDL helpers
|
||||
|
||||
|
||||
@@ -4,10 +4,20 @@
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
|
||||
#include "nsIGlobalObject.h"
|
||||
|
||||
#include "mozilla/CycleCollectedJSContext.h"
|
||||
#include "mozilla/dom/FunctionBinding.h"
|
||||
#include "nsContentUtils.h"
|
||||
#include "nsThreadUtils.h"
|
||||
#include "nsHostObjectProtocolHandler.h"
|
||||
|
||||
using mozilla::AutoSlowOperation;
|
||||
using mozilla::CycleCollectedJSContext;
|
||||
using mozilla::ErrorResult;
|
||||
using mozilla::IgnoredErrorResult;
|
||||
using mozilla::MicroTaskRunnable;
|
||||
using mozilla::dom::VoidFunction;
|
||||
|
||||
nsIGlobalObject::~nsIGlobalObject()
|
||||
{
|
||||
UnlinkHostObjectURIs();
|
||||
@@ -110,3 +120,31 @@ nsIGlobalObject::TraverseHostObjectURIs(nsCycleCollectionTraversalCallback &aCb)
|
||||
nsHostObjectProtocolHandler::Traverse(mHostObjectURIs[index], aCb);
|
||||
}
|
||||
}
|
||||
|
||||
class QueuedMicrotask : public MicroTaskRunnable {
|
||||
public:
|
||||
QueuedMicrotask(nsIGlobalObject* aGlobal, VoidFunction& aCallback)
|
||||
: mGlobal(aGlobal)
|
||||
, mCallback(&aCallback)
|
||||
{}
|
||||
|
||||
/* unsafe */
|
||||
void Run(AutoSlowOperation& aAso) final {
|
||||
IgnoredErrorResult rv;
|
||||
mCallback->Call(static_cast<ErrorResult&>(rv));
|
||||
}
|
||||
|
||||
bool Suppressed() final { return mGlobal->IsInSyncOperation(); }
|
||||
|
||||
private:
|
||||
nsCOMPtr<nsIGlobalObject> mGlobal;
|
||||
RefPtr<VoidFunction> mCallback;
|
||||
};
|
||||
|
||||
void nsIGlobalObject::QueueMicrotask(VoidFunction& aCallback) {
|
||||
CycleCollectedJSContext* context = CycleCollectedJSContext::Get();
|
||||
if (context) {
|
||||
RefPtr<MicroTaskRunnable> mt = new QueuedMicrotask(this, aCallback);
|
||||
context->DispatchMicroTaskRunnable(mt.forget());
|
||||
}
|
||||
}
|
||||
@@ -19,6 +19,13 @@ class nsCString;
|
||||
class nsCycleCollectionTraversalCallback;
|
||||
class nsIPrincipal;
|
||||
|
||||
namespace mozilla{
|
||||
namespace dom{
|
||||
class VoidFunction;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
class nsIGlobalObject : public nsISupports
|
||||
{
|
||||
nsTArray<nsCString> mHostObjectURIs;
|
||||
@@ -72,6 +79,10 @@ public:
|
||||
void UnlinkHostObjectURIs();
|
||||
void TraverseHostObjectURIs(nsCycleCollectionTraversalCallback &aCb);
|
||||
|
||||
virtual bool IsInSyncOperation() { return false; }
|
||||
|
||||
void QueueMicrotask(mozilla::dom::VoidFunction& aCallback);
|
||||
|
||||
protected:
|
||||
virtual ~nsIGlobalObject();
|
||||
|
||||
|
||||
@@ -1018,12 +1018,11 @@ GeckoMediaPluginServiceParent::PluginTerminated(const RefPtr<GMPParent>& aPlugin
|
||||
MOZ_ASSERT(NS_GetCurrentThread() == mGMPThread);
|
||||
|
||||
if (aPlugin->IsMarkedForDeletion()) {
|
||||
nsCString path8;
|
||||
nsString path;
|
||||
RefPtr<nsIFile> dir = aPlugin->GetDirectory();
|
||||
nsresult rv = dir->GetNativePath(path8);
|
||||
nsresult rv = dir->GetPath(path);
|
||||
NS_ENSURE_SUCCESS_VOID(rv);
|
||||
|
||||
nsString path = NS_ConvertUTF8toUTF16(path8);
|
||||
if (mPluginsWaitingForDeletion.Contains(path)) {
|
||||
RemoveOnGMPThread(path, true /* delete */, true /* can defer */);
|
||||
}
|
||||
|
||||
@@ -2037,10 +2037,14 @@ nsresult nsPluginHost::ScanPluginsDirectory(nsIFile *pluginsDir,
|
||||
|
||||
#ifdef PLUGIN_LOGGING
|
||||
nsAutoCString dirPath;
|
||||
#ifdef XP_WIN
|
||||
pluginsDir->GetPersistentDescriptor(dirPath);
|
||||
#else
|
||||
pluginsDir->GetNativePath(dirPath);
|
||||
#endif
|
||||
PLUGIN_LOG(PLUGIN_LOG_BASIC,
|
||||
("nsPluginHost::ScanPluginsDirectory dir=%s\n", dirPath.get()));
|
||||
#endif
|
||||
#endif // PLUGIN_LOGGING
|
||||
|
||||
nsCOMPtr<nsISimpleEnumerator> iter;
|
||||
rv = pluginsDir->GetDirectoryEntries(getter_AddRefs(iter));
|
||||
@@ -3615,7 +3619,11 @@ nsPluginHost::CreateTempFileToPost(const char *aPostDataURL, nsIFile **aTmpFile)
|
||||
}
|
||||
rv = inFile->GetFileSize(&fileSize);
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
#ifdef XP_WIN
|
||||
rv = inFile->GetPersistentDescriptor(filename);
|
||||
#else
|
||||
rv = inFile->GetNativePath(filename);
|
||||
#endif
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
|
||||
if (fileSize != 0) {
|
||||
|
||||
@@ -1265,7 +1265,11 @@ nsPluginStreamListenerPeer::OnFileAvailable(nsIFile* aFile)
|
||||
return NS_ERROR_FAILURE;
|
||||
|
||||
nsAutoCString path;
|
||||
#ifdef XP_WIN
|
||||
rv = aFile->GetPersistentDescriptor(path);
|
||||
#else
|
||||
rv = aFile->GetNativePath(path);
|
||||
#endif
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
|
||||
if (path.IsEmpty()) {
|
||||
|
||||
@@ -239,7 +239,7 @@ static bool CanLoadPlugin(char16ptr_t aBinaryPath)
|
||||
bool nsPluginsDir::IsPluginFile(nsIFile* file)
|
||||
{
|
||||
nsAutoCString path;
|
||||
if (NS_FAILED(file->GetNativePath(path)))
|
||||
if (NS_FAILED(file->GetPersistentDescriptor(path)))
|
||||
return false;
|
||||
|
||||
const char *cPath = path.get();
|
||||
|
||||
@@ -6,9 +6,11 @@
|
||||
* The origin of this IDL file is
|
||||
* http://www.whatwg.org/specs/web-apps/current-work/#functiocn
|
||||
*
|
||||
* © Copyright 2004-2011 Apple Computer, Inc., Mozilla Foundation, and
|
||||
* Opera Software ASA. You are granted a license to use, reproduce
|
||||
* and create derivative works of this document.
|
||||
* © Copyright 2004-2022 Apple Computer, Inc., Mozilla Foundation,
|
||||
* Opera Software ASA and Moonchild Productions. You are granted a license to use,
|
||||
* reproduce and create derivative works of this document.
|
||||
*/
|
||||
|
||||
callback Function = any(any... arguments);
|
||||
|
||||
callback VoidFunction = void ();
|
||||
@@ -36,6 +36,9 @@ interface WindowOrWorkerGlobalScope {
|
||||
long setInterval(DOMString handler, optional long timeout, any... unused);
|
||||
void clearInterval(optional long handle = 0);
|
||||
|
||||
// microtask queuing
|
||||
void queueMicrotask(VoidFunction callback);
|
||||
|
||||
// ImageBitmap
|
||||
[Throws]
|
||||
Promise<ImageBitmap> createImageBitmap(ImageBitmapSource aImage);
|
||||
|
||||
@@ -466,7 +466,11 @@ nsXULPrototypeCache::BeginCaching(nsIURI* aURI)
|
||||
if (NS_FAILED(rv))
|
||||
return rv;
|
||||
nsAutoCString chromePath;
|
||||
#ifdef XP_WIN
|
||||
rv = chromeDir->GetPersistentDescriptor(chromePath);
|
||||
#else
|
||||
rv = chromeDir->GetNativePath(chromePath);
|
||||
#endif
|
||||
if (NS_FAILED(rv))
|
||||
return rv;
|
||||
|
||||
|
||||
@@ -169,13 +169,20 @@ NS_IMETHODIMP mozHunspell::SetDictionary(const char16_t *aDictionary)
|
||||
|
||||
nsAutoCString dictFileName, affFileName;
|
||||
|
||||
// XXX This isn't really good. nsIFile->NativePath isn't safe for all
|
||||
// character sets on Windows.
|
||||
// A better way would be to QI to nsIFile, and get a filehandle
|
||||
// from there. Only problem is that hunspell wants a path
|
||||
|
||||
#ifdef XP_WIN
|
||||
// nsIFile->NativePath isn't safe for all character sets on Windows.
|
||||
// Use GetPath and pass it as a UTF-8 to the hunspell lib instead.
|
||||
// Hunspell 1.5+ supports UTF-8 file paths on Windows
|
||||
// by prefixing "\\\\?\\".
|
||||
nsAutoString affFileNameU;
|
||||
nsresult rv = affFile->GetPath(affFileNameU);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
affFileName.AssignLiteral("\\\\?\\");
|
||||
AppendUTF16toUTF8(affFileNameU, affFileName);
|
||||
#else
|
||||
nsresult rv = affFile->GetNativePath(affFileName);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
#endif
|
||||
|
||||
if (mAffixFileName.Equals(affFileName.get()))
|
||||
return NS_OK;
|
||||
|
||||
@@ -364,7 +364,11 @@ FPSCounter::WriteFrameTimeStamps()
|
||||
PR_Close(fd);
|
||||
|
||||
nsAutoCString path;
|
||||
#ifdef XP_WIN
|
||||
rv = resultFile->GetPersistentDescriptor(path);
|
||||
#else
|
||||
rv = resultFile->GetNativePath(path);
|
||||
#endif
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
printf_stderr("Wrote FPS data to file: %s\n", path.get());
|
||||
|
||||
@@ -490,7 +490,7 @@ void RecordingPrefChanged(const char *aPrefName, void *aClosure)
|
||||
nsAdoptingString prefFileName = Preferences::GetString("gfx.2d.recordingfile");
|
||||
|
||||
if (prefFileName) {
|
||||
fileName.Append(NS_ConvertUTF16toUTF8(prefFileName));
|
||||
CopyUTF16toUTF8(prefFileName, fileName);
|
||||
} else {
|
||||
nsCOMPtr<nsIFile> tmpFile;
|
||||
if (NS_FAILED(NS_GetSpecialDirectory(NS_OS_TEMP_DIR, getter_AddRefs(tmpFile)))) {
|
||||
@@ -502,7 +502,12 @@ void RecordingPrefChanged(const char *aPrefName, void *aClosure)
|
||||
if (NS_FAILED(rv))
|
||||
return;
|
||||
|
||||
#ifdef XP_WIN
|
||||
rv = tmpFile->GetPath(prefFileName);
|
||||
CopyUTF16toUTF8(prefFileName, fileName);
|
||||
#else
|
||||
rv = tmpFile->GetNativePath(fileName);
|
||||
#endif
|
||||
if (NS_FAILED(rv))
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -666,8 +666,23 @@ GeckoChildProcessHost::PerformAsyncLaunchInternal(std::vector<std::string>& aExt
|
||||
// Make sure that child processes can find the omnijar
|
||||
// See XRE_InitCommandLine in nsAppRunner.cpp
|
||||
newEnvVars["UXP_CUSTOM_OMNI"] = 1;
|
||||
nsAutoCString path;
|
||||
nsCOMPtr<nsIFile> file = Omnijar::GetPath(Omnijar::GRE);
|
||||
#ifdef XP_WIN
|
||||
nsString path;
|
||||
nsAutoCString childPath;
|
||||
if (file && NS_SUCCEEDED(file->GetPath(path))) {
|
||||
CopyUTF16toUTF8(path, childPath);
|
||||
childArgv.push_back("-greomni");
|
||||
childArgv.push_back(childPath.get());
|
||||
}
|
||||
file = Omnijar::GetPath(Omnijar::APP);
|
||||
if (file && NS_SUCCEEDED(file->GetPath(path))) {
|
||||
CopyUTF16toUTF8(path, childPath);
|
||||
childArgv.push_back("-appomni");
|
||||
childArgv.push_back(childPath.get());
|
||||
}
|
||||
#else
|
||||
nsAutoCString path;
|
||||
if (file && NS_SUCCEEDED(file->GetNativePath(path))) {
|
||||
childArgv.push_back("-greomni");
|
||||
childArgv.push_back(path.get());
|
||||
@@ -677,6 +692,7 @@ GeckoChildProcessHost::PerformAsyncLaunchInternal(std::vector<std::string>& aExt
|
||||
childArgv.push_back("-appomni");
|
||||
childArgv.push_back(path.get());
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
// Add the application directory path (-appdir path)
|
||||
|
||||
@@ -117,7 +117,11 @@ RemotePrintJobParent::PrintPage(const nsCString& aPageFileName)
|
||||
}
|
||||
|
||||
nsAutoCString recordingPath;
|
||||
#ifdef XP_WIN
|
||||
rv = recordingFile->GetPersistentDescriptor(recordingPath);
|
||||
#else
|
||||
rv = recordingFile->GetNativePath(recordingPath);
|
||||
#endif
|
||||
if (NS_WARN_IF(NS_FAILED(rv))) {
|
||||
return rv;
|
||||
}
|
||||
|
||||
@@ -482,7 +482,11 @@ NS_IMETHODIMP nsAddrDatabase::OpenMDB(nsIFile *dbName, bool create)
|
||||
nsIMdbThumb *thumb = nullptr;
|
||||
nsAutoCString filePath;
|
||||
|
||||
#ifdef XP_WIN
|
||||
ret = dbName->GetPersistentDescriptor(filePath);
|
||||
#else
|
||||
ret = dbName->GetNativePath(filePath);
|
||||
#endif
|
||||
NS_ENSURE_SUCCESS(ret, ret);
|
||||
|
||||
nsIMdbHeap* dbHeap = nullptr;
|
||||
|
||||
@@ -598,7 +598,11 @@ nsMessenger::DetachAttachmentsWOPrompts(nsIFile* aDestFolder,
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
nsAutoCString path;
|
||||
#ifdef XP_WIN
|
||||
rv = attachmentDestination->GetPersistentDescriptor(path);
|
||||
#else
|
||||
rv = attachmentDestination->GetNativePath(path);
|
||||
#endif
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
nsAutoString unescapedFileName;
|
||||
@@ -860,7 +864,11 @@ nsMessenger::SaveOneAttachment(const char * aContentType, const char * aURL,
|
||||
SetLastSaveDirectory(localFile);
|
||||
|
||||
nsCString dirName;
|
||||
#ifdef XP_WIN
|
||||
rv = localFile->GetPersistentDescriptor(dirName);
|
||||
#else
|
||||
rv = localFile->GetNativePath(dirName);
|
||||
#endif
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
nsSaveAllAttachmentsState *saveState =
|
||||
@@ -927,7 +935,11 @@ nsMessenger::SaveAllAttachments(uint32_t count,
|
||||
|
||||
nsCString dirName;
|
||||
nsSaveAllAttachmentsState *saveState = nullptr;
|
||||
#ifdef XP_WIN
|
||||
rv = localFile->GetPersistentDescriptor(dirName);
|
||||
#else
|
||||
rv = localFile->GetNativePath(dirName);
|
||||
#endif
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
saveState = new nsSaveAllAttachmentsState(count,
|
||||
|
||||
@@ -236,7 +236,11 @@ NS_IMETHODIMP nsMsgFolderCache::Init(nsIFile *aFile)
|
||||
aFile->Exists(&exists);
|
||||
|
||||
nsAutoCString dbPath;
|
||||
#ifdef XP_WIN
|
||||
aFile->GetPersistentDescriptor(dbPath);
|
||||
#else
|
||||
aFile->GetNativePath(dbPath);
|
||||
#endif
|
||||
// ### evil cast until MDB supports file streams.
|
||||
nsresult rv = OpenMDB(dbPath, exists);
|
||||
// if this fails and panacea.dat exists, try blowing away the db and recreating it
|
||||
|
||||
@@ -118,7 +118,11 @@ nsMsgCreateTempFileName(const char *tFileName)
|
||||
return nullptr;
|
||||
|
||||
nsCString tempString;
|
||||
#ifdef XP_WIN
|
||||
rv = tmpFile->GetPersistentDescriptor(tempString);
|
||||
#else
|
||||
rv = tmpFile->GetNativePath(tempString);
|
||||
#endif
|
||||
if (NS_FAILED(rv))
|
||||
return nullptr;
|
||||
|
||||
|
||||
@@ -4518,7 +4518,11 @@ nsMsgCompose::ProcessSignature(nsIMsgIdentity *identity, bool aQuoted, nsString
|
||||
{
|
||||
rv = identity->GetSignature(getter_AddRefs(sigFile));
|
||||
if (NS_SUCCEEDED(rv) && sigFile) {
|
||||
#ifdef XP_WIN
|
||||
rv = sigFile->GetPersistentDescriptor(sigNativePath);
|
||||
#else
|
||||
rv = sigFile->GetNativePath(sigNativePath);
|
||||
#endif
|
||||
if (NS_SUCCEEDED(rv) && !sigNativePath.IsEmpty()) {
|
||||
bool exists = false;
|
||||
sigFile->Exists(&exists);
|
||||
|
||||
@@ -939,7 +939,11 @@ NS_IMETHODIMP nsMsgDatabase::NotifyAnnouncerGoingAway(void)
|
||||
bool nsMsgDatabase::MatchDbName(nsIFile *dbName) // returns true if they match
|
||||
{
|
||||
nsCString dbPath;
|
||||
#ifdef XP_WIN
|
||||
dbName->GetPersistentDescriptor(dbPath);
|
||||
#else
|
||||
dbName->GetNativePath(dbPath);
|
||||
#endif
|
||||
return dbPath.Equals(m_dbName);
|
||||
}
|
||||
|
||||
@@ -1197,7 +1201,11 @@ nsresult nsMsgDatabase::OpenInternal(nsMsgDBService *aDBService,
|
||||
bool aLeaveInvalidDB, bool sync)
|
||||
{
|
||||
nsAutoCString summaryFilePath;
|
||||
#ifdef XP_WIN
|
||||
summaryFile->GetPersistentDescriptor(summaryFilePath);
|
||||
#else
|
||||
summaryFile->GetNativePath(summaryFilePath);
|
||||
#endif
|
||||
|
||||
MOZ_LOG(DBLog, LogLevel::Info, ("nsMsgDatabase::Open(%s, %s, %p, %s)\n",
|
||||
(const char*)summaryFilePath.get(), aCreate ? "TRUE":"FALSE",
|
||||
|
||||
@@ -3203,7 +3203,11 @@ NS_IMETHODIMP nsImapMailFolder::BeginCopy(nsIMsgDBHdr *message)
|
||||
if (NS_FAILED(rv))
|
||||
{
|
||||
nsCString nativePath;
|
||||
#ifdef XP_WIN
|
||||
m_copyState->m_tmpFile->GetPersistentDescriptor(nativePath);
|
||||
#else
|
||||
m_copyState->m_tmpFile->GetNativePath(nativePath);
|
||||
#endif
|
||||
MOZ_LOG(IMAP, mozilla::LogLevel::Info, ("couldn't remove prev temp file %s: %lx\n", nativePath.get(), rv));
|
||||
}
|
||||
m_copyState->m_tmpFile = nullptr;
|
||||
@@ -8883,7 +8887,11 @@ NS_IMETHODIMP nsImapMailFolder::RenameSubFolders(nsIMsgWindow *msgWindow, nsIMsg
|
||||
newParentPathFile->AppendNative(oldLeafName);
|
||||
|
||||
nsCString newPathStr;
|
||||
#ifdef XP_WIN
|
||||
newParentPathFile->GetPersistentDescriptor(newPathStr);
|
||||
#else
|
||||
newParentPathFile->GetNativePath(newPathStr);
|
||||
#endif
|
||||
|
||||
nsCOMPtr<nsIFile> newPathFile = do_CreateInstance(NS_LOCAL_FILE_CONTRACTID, &rv);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
@@ -887,7 +887,11 @@ bool CMapiMessage::CopyBinAttachToFile(LPATTACH lpAttach,
|
||||
NS_ENSURE_SUCCESS(rv, false);
|
||||
|
||||
nsCString tmpPath;
|
||||
#ifdef XP_WIN
|
||||
_tmp_file->GetPersistentDescriptor(tmpPath);
|
||||
#else
|
||||
_tmp_file->GetNativePath(tmpPath);
|
||||
#endif
|
||||
LPSTREAM lpStreamFile;
|
||||
HRESULT hr = CMapiApi::OpenStreamOnFile(gpMapiAllocateBuffer, gpMapiFreeBuffer, STGM_READWRITE | STGM_CREATE,
|
||||
const_cast<char*>(tmpPath.get()), NULL, &lpStreamFile);
|
||||
|
||||
@@ -150,7 +150,11 @@ nsLocalURI2Path(const char* rootURI, const char* uriStr,
|
||||
|
||||
nsCString localNativePath;
|
||||
|
||||
#ifdef XP_WIN
|
||||
localPath->GetPersistentDescriptor(localNativePath);
|
||||
#else
|
||||
localPath->GetNativePath(localNativePath);
|
||||
#endif
|
||||
nsEscapeNativePath(localNativePath);
|
||||
pathResult = localNativePath.get();
|
||||
const char *curPos = uriStr + PL_strlen(rootURI);
|
||||
|
||||
@@ -52,7 +52,11 @@ nsresult nsMailboxService::ParseMailbox(nsIMsgWindow *aMsgWindow, nsIFile *aMail
|
||||
// okay now generate the url string
|
||||
nsCString mailboxPath;
|
||||
|
||||
#ifdef XP_WIN
|
||||
aMailboxPath->GetPersistentDescriptor(mailboxPath);
|
||||
#else
|
||||
aMailboxPath->GetNativePath(mailboxPath);
|
||||
#endif
|
||||
nsAutoCString buf;
|
||||
MsgEscapeURL(mailboxPath,
|
||||
nsINetUtil::ESCAPE_URL_MINIMAL | nsINetUtil::ESCAPE_URL_FORCED, buf);
|
||||
|
||||
@@ -271,11 +271,7 @@ nsJAR::Extract(const nsACString &aEntryName, nsIFile* outFile)
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
|
||||
// ExtractFile also closes the fd handle and resolves the symlink if needed
|
||||
nsAutoCString path;
|
||||
rv = outFile->GetNativePath(path);
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
|
||||
rv = mZip->ExtractFile(item, path.get(), fd);
|
||||
rv = mZip->ExtractFile(item, outFile, fd);
|
||||
}
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
|
||||
@@ -422,7 +418,11 @@ nsJAR::GetJarPath(nsACString& aResult)
|
||||
{
|
||||
NS_ENSURE_ARG_POINTER(mZipFile);
|
||||
|
||||
#ifdef XP_WIN
|
||||
return mZipFile->GetPersistentDescriptor(aResult);
|
||||
#else
|
||||
return mZipFile->GetNativePath(aResult);
|
||||
#endif
|
||||
}
|
||||
|
||||
nsresult
|
||||
@@ -1124,7 +1124,11 @@ nsZipReaderCache::IsCached(nsIFile* zipFile, bool* aResult)
|
||||
MutexAutoLock lock(mLock);
|
||||
|
||||
nsAutoCString uri;
|
||||
#ifdef XP_WIN
|
||||
rv = zipFile->GetPersistentDescriptor(uri);
|
||||
#else
|
||||
rv = zipFile->GetNativePath(uri);
|
||||
#endif
|
||||
if (NS_FAILED(rv))
|
||||
return rv;
|
||||
|
||||
@@ -1146,8 +1150,14 @@ nsZipReaderCache::GetZip(nsIFile* zipFile, nsIZipReader* *result)
|
||||
#endif
|
||||
|
||||
nsAutoCString uri;
|
||||
#ifdef XP_WIN
|
||||
rv = zipFile->GetPersistentDescriptor(uri);
|
||||
#else
|
||||
rv = zipFile->GetNativePath(uri);
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
#endif
|
||||
if (NS_FAILED(rv)) {
|
||||
return rv;
|
||||
}
|
||||
|
||||
uri.Insert(NS_LITERAL_CSTRING("file:"), 0);
|
||||
|
||||
@@ -1190,8 +1200,14 @@ nsZipReaderCache::GetInnerZip(nsIFile* zipFile, const nsACString &entry,
|
||||
#endif
|
||||
|
||||
nsAutoCString uri;
|
||||
#ifdef XP_WIN
|
||||
rv = zipFile->GetPersistentDescriptor(uri);
|
||||
#else
|
||||
rv = zipFile->GetNativePath(uri);
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
#endif
|
||||
if (NS_FAILED(rv)) {
|
||||
return rv;
|
||||
}
|
||||
|
||||
uri.Insert(NS_LITERAL_CSTRING("jar:"), 0);
|
||||
uri.AppendLiteral("!/");
|
||||
@@ -1233,7 +1249,11 @@ nsZipReaderCache::GetFd(nsIFile* zipFile, PRFileDesc** aRetVal)
|
||||
|
||||
nsresult rv;
|
||||
nsAutoCString uri;
|
||||
#ifdef XP_WIN
|
||||
rv = zipFile->GetPersistentDescriptor(uri);
|
||||
#else
|
||||
rv = zipFile->GetNativePath(uri);
|
||||
#endif
|
||||
if (NS_FAILED(rv)) {
|
||||
return rv;
|
||||
}
|
||||
@@ -1374,8 +1394,13 @@ nsZipReaderCache::Observe(nsISupports *aSubject,
|
||||
return NS_OK;
|
||||
|
||||
nsAutoCString uri;
|
||||
#ifdef XP_WIN
|
||||
if (NS_FAILED(file->GetPersistentDescriptor(uri)))
|
||||
return NS_OK;
|
||||
#else
|
||||
if (NS_FAILED(file->GetNativePath(uri)))
|
||||
return NS_OK;
|
||||
#endif
|
||||
|
||||
uri.Insert(NS_LITERAL_CSTRING("file:"), 0);
|
||||
|
||||
|
||||
@@ -486,7 +486,7 @@ MOZ_WIN_MEM_TRY_CATCH(return nullptr)
|
||||
// On extraction error(s) it removes the file.
|
||||
// When needed, it also resolves the symlink.
|
||||
//---------------------------------------------
|
||||
nsresult nsZipArchive::ExtractFile(nsZipItem *item, const char *outname,
|
||||
nsresult nsZipArchive::ExtractFile(nsZipItem *item, nsIFile* outFile,
|
||||
PRFileDesc* aFd)
|
||||
{
|
||||
if (!item)
|
||||
@@ -524,11 +524,16 @@ nsresult nsZipArchive::ExtractFile(nsZipItem *item, const char *outname,
|
||||
//-- delete the file on errors, or resolve symlink if needed
|
||||
if (aFd) {
|
||||
PR_Close(aFd);
|
||||
if (rv != NS_OK)
|
||||
PR_Delete(outname);
|
||||
if (NS_FAILED(rv) && outFile) {
|
||||
outFile->Remove(false);
|
||||
}
|
||||
#ifdef XP_UNIX
|
||||
else if (item->IsSymlink())
|
||||
rv = ResolveSymlink(outname);
|
||||
else if (item->IsSymlink()) {
|
||||
nsAutoCString path;
|
||||
rv = outFile->GetNativePath(path);
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
rv = ResolveSymlink(path.get());
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
@@ -159,10 +159,10 @@ public:
|
||||
*
|
||||
* @param zipEntry Name of file in archive to extract
|
||||
* @param outFD Filedescriptor to write contents to
|
||||
* @param outname Name of file to write to
|
||||
* @param outFile Handle of file to write to
|
||||
* @return status code
|
||||
*/
|
||||
nsresult ExtractFile(nsZipItem * zipEntry, const char *outname, PRFileDesc * outFD);
|
||||
nsresult ExtractFile(nsZipItem * zipEntry, nsIFile* outFile, PRFileDesc * outFD);
|
||||
|
||||
/**
|
||||
* FindInit
|
||||
|
||||
@@ -1,17 +1,13 @@
|
||||
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
||||
/* vim:set sw=4 sts=4 et cin: */
|
||||
/* 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/. */
|
||||
|
||||
|
||||
/*
|
||||
|
||||
The converts a filesystem directory into an "HTTP index" stream per
|
||||
This converts a filesystem directory into an "HTTP index" stream per
|
||||
Lou Montulli's original spec:
|
||||
|
||||
http://www.mozilla.org/projects/netlib/dirindexformat.html
|
||||
|
||||
*/
|
||||
|
||||
#include "nsEscape.h"
|
||||
@@ -92,7 +88,11 @@ nsDirectoryIndexStream::Init(nsIFile* aDir)
|
||||
|
||||
if (MOZ_LOG_TEST(gLog, LogLevel::Debug)) {
|
||||
nsAutoCString path;
|
||||
#ifdef XP_WIN
|
||||
aDir->GetPersistentDescriptor(path);
|
||||
#else
|
||||
aDir->GetNativePath(path);
|
||||
#endif
|
||||
MOZ_LOG(gLog, LogLevel::Debug,
|
||||
("nsDirectoryIndexStream[%p]: initialized on %s",
|
||||
this, path.get()));
|
||||
@@ -239,7 +239,11 @@ nsDirectoryIndexStream::Read(char* aBuf, uint32_t aCount, uint32_t* aReadCount)
|
||||
|
||||
if (MOZ_LOG_TEST(gLog, LogLevel::Debug)) {
|
||||
nsAutoCString path;
|
||||
#ifdef XP_WIN
|
||||
current->GetPersistentDescriptor(path);
|
||||
#else
|
||||
current->GetNativePath(path);
|
||||
#endif
|
||||
MOZ_LOG(gLog, LogLevel::Debug,
|
||||
("nsDirectoryIndexStream[%p]: iterated %s",
|
||||
this, path.get()));
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
||||
/* vim:set ts=4 sw=4 sts=4 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/. */
|
||||
@@ -3159,7 +3158,11 @@ nsStandardURL::GetFile(nsIFile **result)
|
||||
|
||||
if (LOG_ENABLED()) {
|
||||
nsAutoCString path;
|
||||
#ifdef XP_WIN
|
||||
mFile->GetPersistentDescriptor(path);
|
||||
#else
|
||||
mFile->GetNativePath(path);
|
||||
#endif
|
||||
LOG(("nsStandardURL::GetFile [this=%p spec=%s resulting_path=%s]\n",
|
||||
this, mSpec.get(), path.get()));
|
||||
}
|
||||
|
||||
Vendored
+8
@@ -20,11 +20,19 @@ void
|
||||
CacheLogPrintPath(mozilla::LogLevel level, const char * format, nsIFile * item)
|
||||
{
|
||||
nsAutoCString path;
|
||||
#ifdef XP_WIN
|
||||
nsresult rv = item->GetPersistentDescriptor(path);
|
||||
#else
|
||||
nsresult rv = item->GetNativePath(path);
|
||||
#endif
|
||||
if (NS_SUCCEEDED(rv)) {
|
||||
MOZ_LOG(gCacheLog, level, (format, path.get()));
|
||||
} else {
|
||||
#ifdef XP_WIN
|
||||
MOZ_LOG(gCacheLog, level, ("GetPersistentDescriptor failed: %x", rv));
|
||||
#else
|
||||
MOZ_LOG(gCacheLog, level, ("GetNativePath failed: %x", rv));
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Vendored
+12
@@ -1739,7 +1739,11 @@ nsCacheService::CreateCustomOfflineDevice(nsIFile *aProfileDir,
|
||||
|
||||
if (MOZ_LOG_TEST(gCacheLog, LogLevel::Info)) {
|
||||
nsAutoCString profilePath;
|
||||
#ifdef XP_WIN
|
||||
aProfileDir->GetPersistentDescriptor(profilePath);
|
||||
#else
|
||||
aProfileDir->GetNativePath(profilePath);
|
||||
#endif
|
||||
CACHE_LOG_INFO(("Creating custom offline device, %s, %d",
|
||||
profilePath.BeginReading(), aQuota));
|
||||
}
|
||||
@@ -3093,7 +3097,11 @@ nsCacheService::MoveOrRemoveDiskCache(nsIFile *aOldCacheDir,
|
||||
return;
|
||||
|
||||
nsAutoCString newPath;
|
||||
#ifdef XP_WIN
|
||||
rv = aNewCacheSubdir->GetPersistentDescriptor(newPath);
|
||||
#else
|
||||
rv = aNewCacheSubdir->GetNativePath(newPath);
|
||||
#endif
|
||||
if (NS_FAILED(rv))
|
||||
return;
|
||||
|
||||
@@ -3105,7 +3113,11 @@ nsCacheService::MoveOrRemoveDiskCache(nsIFile *aOldCacheDir,
|
||||
rv = aNewCacheDir->Create(nsIFile::DIRECTORY_TYPE, 0777);
|
||||
if (NS_SUCCEEDED(rv) || NS_ERROR_FILE_ALREADY_EXISTS == rv) {
|
||||
nsAutoCString oldPath;
|
||||
#ifdef XP_WIN
|
||||
rv = aOldCacheSubdir->GetPersistentDescriptor(oldPath);
|
||||
#else
|
||||
rv = aOldCacheSubdir->GetNativePath(oldPath);
|
||||
#endif
|
||||
if (NS_FAILED(rv))
|
||||
return;
|
||||
if (rename(oldPath.get(), newPath.get()) == 0)
|
||||
|
||||
+4
@@ -287,7 +287,11 @@ nsOfflineCacheEvictionFunction::Apply()
|
||||
for (int32_t i = 0; i < items.Count(); i++) {
|
||||
if (MOZ_LOG_TEST(gCacheLog, LogLevel::Debug)) {
|
||||
nsAutoCString path;
|
||||
#ifdef XP_WIN
|
||||
items[i]->GetPersistentDescriptor(path);
|
||||
#else
|
||||
items[i]->GetNativePath(path);
|
||||
#endif
|
||||
LOG((" removing %s\n", path.get()));
|
||||
}
|
||||
|
||||
|
||||
@@ -269,7 +269,11 @@ CacheFileContextEvictor::PersistEvictionInfoToDisk(
|
||||
}
|
||||
|
||||
nsAutoCString path;
|
||||
#ifdef XP_WIN
|
||||
file->GetPersistentDescriptor(path);
|
||||
#else
|
||||
file->GetNativePath(path);
|
||||
#endif
|
||||
|
||||
PRFileDesc *fd;
|
||||
rv = file->OpenNSPRFileDesc(PR_RDWR | PR_CREATE_FILE | PR_TRUNCATE, 0600,
|
||||
@@ -306,7 +310,11 @@ CacheFileContextEvictor::RemoveEvictInfoFromDisk(
|
||||
}
|
||||
|
||||
nsAutoCString path;
|
||||
#ifdef XP_WIN
|
||||
file->GetPersistentDescriptor(path);
|
||||
#else
|
||||
file->GetNativePath(path);
|
||||
#endif
|
||||
|
||||
rv = file->Remove(false);
|
||||
if (NS_WARN_IF(NS_FAILED(rv))) {
|
||||
|
||||
@@ -3096,7 +3096,11 @@ nsresult
|
||||
CacheFileIOManager::TrashDirectory(nsIFile *aFile)
|
||||
{
|
||||
nsAutoCString path;
|
||||
#ifdef XP_WIN
|
||||
aFile->GetPersistentDescriptor(path);
|
||||
#else
|
||||
aFile->GetNativePath(path);
|
||||
#endif
|
||||
LOG(("CacheFileIOManager::TrashDirectory() [file=%s]", path.get()));
|
||||
|
||||
nsresult rv;
|
||||
@@ -3340,7 +3344,11 @@ CacheFileIOManager::RemoveTrashInternal()
|
||||
"recursively, but this can block IO thread for a while!");
|
||||
if (LOG_ENABLED()) {
|
||||
nsAutoCString path;
|
||||
#ifdef XP_WIN
|
||||
file->GetPersistentDescriptor(path);
|
||||
#else
|
||||
file->GetNativePath(path);
|
||||
#endif
|
||||
LOG(("CacheFileIOManager::RemoveTrashInternal() - Found a directory in a trash "
|
||||
"directory! It will be removed recursively, but this can block IO "
|
||||
"thread for a while! [file=%s]", path.get()));
|
||||
@@ -3873,7 +3881,11 @@ CacheFileIOManager::SyncRemoveDir(nsIFile *aFile, const char *aDir)
|
||||
|
||||
if (LOG_ENABLED()) {
|
||||
nsAutoCString path;
|
||||
#ifdef XP_WIN
|
||||
file->GetPersistentDescriptor(path);
|
||||
#else
|
||||
file->GetNativePath(path);
|
||||
#endif
|
||||
LOG(("CacheFileIOManager::SyncRemoveDir() - Removing directory %s",
|
||||
path.get()));
|
||||
}
|
||||
|
||||
@@ -323,8 +323,8 @@ Test(CreateFun create, uint32_t count,
|
||||
|
||||
nsAutoCString inDir;
|
||||
nsAutoCString outDir;
|
||||
(void)inDirSpec->GetNativePath(inDir);
|
||||
(void)outDirSpec->GetNativePath(outDir);
|
||||
(void)inDirSpec->GetPersistentDescriptor(inDir);
|
||||
(void)outDirSpec->GetPersistentDescriptor(outDir);
|
||||
printf("###########\nTest: from %s to %s, bufSize = %d\n",
|
||||
inDir.get(), outDir.get(), bufSize);
|
||||
gTimeSampler.Reset();
|
||||
|
||||
@@ -186,7 +186,7 @@ FileSystemDataSource::Init()
|
||||
NS_NewFileURI(getter_AddRefs(furi), file);
|
||||
NS_ENSURE_TRUE(furi, NS_ERROR_FAILURE);
|
||||
|
||||
file->GetNativePath(ieFavoritesDir);
|
||||
file->GetPersistentDescriptor(ieFavoritesDir);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
@@ -193,7 +193,11 @@ CertBlocklist::Init()
|
||||
return rv;
|
||||
}
|
||||
nsAutoCString path;
|
||||
#ifdef XP_WIN
|
||||
rv = mBackingFile->GetPersistentDescriptor(path);
|
||||
#else
|
||||
rv = mBackingFile->GetNativePath(path);
|
||||
#endif
|
||||
if (NS_FAILED(rv)) {
|
||||
return rv;
|
||||
}
|
||||
|
||||
@@ -197,7 +197,11 @@ nsresult nsProfileLock::LockWithFcntl(nsIFile *aLockFile)
|
||||
nsresult rv = NS_OK;
|
||||
|
||||
nsAutoCString lockFilePath;
|
||||
#ifdef XP_WIN
|
||||
rv = aLockFile->GetPersistentDescriptor(lockFilePath);
|
||||
#else
|
||||
rv = aLockFile->GetNativePath(lockFilePath);
|
||||
#endif
|
||||
if (NS_FAILED(rv)) {
|
||||
NS_ERROR("Could not get native path");
|
||||
return rv;
|
||||
@@ -303,7 +307,11 @@ nsresult nsProfileLock::LockWithSymlink(nsIFile *aLockFile, bool aHaveFcntlLock)
|
||||
{
|
||||
nsresult rv;
|
||||
nsAutoCString lockFilePath;
|
||||
#ifdef XP_WIN
|
||||
rv = aLockFile->GetPersistentDescriptor(lockFilePath);
|
||||
#else
|
||||
rv = aLockFile->GetNativePath(lockFilePath);
|
||||
#endif
|
||||
if (NS_FAILED(rv)) {
|
||||
NS_ERROR("Could not get native path");
|
||||
return rv;
|
||||
|
||||
@@ -244,6 +244,9 @@ label[disabled="true"] {
|
||||
|
||||
.tooltip-label {
|
||||
margin: 0;
|
||||
word-wrap: break-word;
|
||||
/* We must specify a min-width, otherwise word-wrap:break-word doesn't work. Bug 630864. */
|
||||
min-width: 1px;
|
||||
}
|
||||
|
||||
.header {
|
||||
|
||||
@@ -254,6 +254,9 @@ label[disabled="true"]:-moz-system-metric(windows-classic) {
|
||||
|
||||
.tooltip-label {
|
||||
margin: 0;
|
||||
word-wrap: break-word;
|
||||
/* We must specify a min-width, otherwise word-wrap:break-word doesn't work. Bug 630864. */
|
||||
min-width: 1px;
|
||||
}
|
||||
|
||||
.header {
|
||||
|
||||
@@ -2031,8 +2031,13 @@ SelectProfile(nsIProfileLock* *aResult, nsIToolkitProfileService* aProfileSvc, n
|
||||
profile->GetRootDir(getter_AddRefs(prefsJSFile));
|
||||
prefsJSFile->AppendNative(NS_LITERAL_CSTRING("prefs.js"));
|
||||
nsAutoCString pathStr;
|
||||
#ifdef XP_WIN
|
||||
prefsJSFile->GetPersistentDescriptor(pathStr);
|
||||
#else
|
||||
prefsJSFile->GetNativePath(pathStr);
|
||||
#endif
|
||||
PR_fprintf(PR_STDERR, "Success: created profile '%s' at '%s'\n", arg, pathStr.get());
|
||||
|
||||
bool exists;
|
||||
prefsJSFile->Exists(&exists);
|
||||
if (!exists) {
|
||||
@@ -2271,11 +2276,15 @@ CheckCompatibility(nsIFile* aProfileDir, const nsCString& aVersion,
|
||||
return false;
|
||||
|
||||
nsCOMPtr<nsIFile> lf;
|
||||
rv = NS_NewNativeLocalFile(buf, false,
|
||||
rv = NS_NewNativeLocalFile(EmptyCString(), false,
|
||||
getter_AddRefs(lf));
|
||||
if (NS_FAILED(rv))
|
||||
return false;
|
||||
|
||||
rv = lf->SetPersistentDescriptor(buf);
|
||||
if (NS_FAILED(rv))
|
||||
return false;
|
||||
|
||||
bool eq;
|
||||
rv = lf->Equals(aXULRunnerDir, &eq);
|
||||
if (NS_FAILED(rv) || !eq)
|
||||
@@ -2286,11 +2295,15 @@ CheckCompatibility(nsIFile* aProfileDir, const nsCString& aVersion,
|
||||
if (NS_FAILED(rv))
|
||||
return false;
|
||||
|
||||
rv = NS_NewNativeLocalFile(buf, false,
|
||||
rv = NS_NewNativeLocalFile(EmptyCString(), false,
|
||||
getter_AddRefs(lf));
|
||||
if (NS_FAILED(rv))
|
||||
return false;
|
||||
|
||||
rv = lf->SetPersistentDescriptor(buf);
|
||||
if (NS_FAILED(rv))
|
||||
return false;
|
||||
|
||||
rv = lf->Equals(aAppDir, &eq);
|
||||
if (NS_FAILED(rv) || !eq)
|
||||
return false;
|
||||
@@ -2330,11 +2343,11 @@ WriteVersion(nsIFile* aProfileDir, const nsCString& aVersion,
|
||||
file->AppendNative(FILE_COMPATIBILITY_INFO);
|
||||
|
||||
nsAutoCString platformDir;
|
||||
aXULRunnerDir->GetNativePath(platformDir);
|
||||
Unused << aXULRunnerDir->GetPersistentDescriptor(platformDir);
|
||||
|
||||
nsAutoCString appDir;
|
||||
if (aAppDir)
|
||||
aAppDir->GetNativePath(appDir);
|
||||
Unused << aAppDir->GetPersistentDescriptor(appDir);
|
||||
|
||||
PRFileDesc *fd;
|
||||
nsresult rv =
|
||||
@@ -3673,6 +3686,16 @@ XREMain::XRE_mainRun()
|
||||
}
|
||||
}
|
||||
|
||||
#ifndef XP_WIN
|
||||
nsCOMPtr<nsIFile> profileDir;
|
||||
nsAutoCString path;
|
||||
rv = mDirProvider.GetProfileStartupDir(getter_AddRefs(profileDir));
|
||||
if (NS_SUCCEEDED(rv) && NS_SUCCEEDED(profileDir->GetNativePath(path)) && !IsUTF8(path)) {
|
||||
PR_fprintf(PR_STDERR, "Error: The profile path is not valid UTF-8. Unable to continue.\n");
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
#endif
|
||||
|
||||
mDirProvider.DoStartup();
|
||||
|
||||
// As FilePreferences need the profile directory, we must initialize right here.
|
||||
|
||||
@@ -1075,7 +1075,13 @@ nsUpdateProcessor::ProcessUpdate(nsIUpdate* aUpdate)
|
||||
rv = ds->Get(XRE_EXECUTABLE_FILE, NS_GET_IID(nsIFile),
|
||||
getter_AddRefs(binary));
|
||||
NS_ASSERTION(NS_SUCCEEDED(rv), "Can't get the binary path");
|
||||
#ifdef XP_WIN
|
||||
nsAutoString binPathW;
|
||||
binary->GetPath(binPathW);
|
||||
NS_ConvertUTF16toUTF8 binPath(binPathW);
|
||||
#else
|
||||
binary->GetNativePath(binPath);
|
||||
#endif
|
||||
}
|
||||
|
||||
// Copy the parameters to the StagedUpdateInfo structure shared with the
|
||||
|
||||
@@ -305,7 +305,11 @@ nsMIMEInfoBase::LaunchWithFile(nsIFile* aFile)
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
nsAutoCString path;
|
||||
#ifdef XP_WIN
|
||||
aFile->GetPersistentDescriptor(path);
|
||||
#else
|
||||
aFile->GetNativePath(path);
|
||||
#endif
|
||||
return LaunchWithIProcess(executable, path);
|
||||
}
|
||||
|
||||
@@ -423,7 +427,11 @@ nsMIMEInfoImpl::LaunchDefaultWithFile(nsIFile* aFile)
|
||||
return NS_ERROR_FILE_NOT_FOUND;
|
||||
|
||||
nsAutoCString nativePath;
|
||||
#ifdef XP_WIN
|
||||
aFile->GetPersistentDescriptor(nativePath);
|
||||
#else
|
||||
aFile->GetNativePath(nativePath);
|
||||
#endif
|
||||
|
||||
return LaunchWithIProcess(mDefaultApplication, nativePath);
|
||||
}
|
||||
|
||||
@@ -169,7 +169,11 @@ nsDeviceContextSpecProxy::CreateUniqueTempPath(nsACString& aFilePath)
|
||||
return rv;
|
||||
}
|
||||
|
||||
#ifdef XP_WIN
|
||||
return recordingFile->GetPersistentDescriptor(aFilePath);
|
||||
#else
|
||||
return recordingFile->GetNativePath(aFilePath);
|
||||
#endif
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
/* vim: se cin sw=2 ts=2 et : */
|
||||
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
|
||||
*
|
||||
* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
@@ -246,7 +245,7 @@ WinTaskbar::GetAppUserModelID(nsAString & aDefaultGroupId) {
|
||||
bool exists = false;
|
||||
if (profileDir && NS_SUCCEEDED(profileDir->Exists(&exists)) && exists) {
|
||||
nsAutoCString path;
|
||||
if (NS_SUCCEEDED(profileDir->GetNativePath(path))) {
|
||||
if (NS_SUCCEEDED(profileDir->GetPersistentDescriptor(path))) {
|
||||
nsAutoString id;
|
||||
id.AppendInt(HashString(path));
|
||||
if (!id.IsEmpty()) {
|
||||
|
||||
@@ -1294,7 +1294,7 @@ nsDataObj :: GetFileContentsInternetShortcut ( FORMATETC& aFE, STGMEDIUM& aSTG )
|
||||
|
||||
rv = mozilla::widget::FaviconHelper::GetOutputIconPath(aUri, icoFile, true);
|
||||
NS_ENSURE_SUCCESS(rv, E_FAIL);
|
||||
rv = icoFile->GetNativePath(path);
|
||||
rv = icoFile->GetPersistentDescriptor(path);
|
||||
NS_ENSURE_SUCCESS(rv, E_FAIL);
|
||||
|
||||
shortcutFormatStr = "[InternetShortcut]\r\nURL=%s\r\n"
|
||||
|
||||
@@ -137,7 +137,7 @@ struct CycleCollectorResults
|
||||
class MicroTaskRunnable
|
||||
{
|
||||
public:
|
||||
MicroTaskRunnable() {}
|
||||
MicroTaskRunnable() = default;
|
||||
NS_INLINE_DECL_REFCOUNTING(MicroTaskRunnable)
|
||||
virtual void Run(AutoSlowOperation& aAso) = 0;
|
||||
virtual bool Suppressed() { return false; }
|
||||
|
||||
@@ -324,7 +324,11 @@ FifoWatcher::OpenFd()
|
||||
}
|
||||
|
||||
nsAutoCString path;
|
||||
#ifdef XP_WIN
|
||||
rv = file->GetPersistentDescriptor(path);
|
||||
#else
|
||||
rv = file->GetNativePath(path);
|
||||
#endif
|
||||
if (NS_WARN_IF(NS_FAILED(rv))) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
@@ -122,10 +122,17 @@ InitLateWriteChecks()
|
||||
nsCOMPtr<nsIFile> mozFile;
|
||||
NS_GetSpecialDirectory(NS_APP_USER_PROFILE_50_DIR, getter_AddRefs(mozFile));
|
||||
if (mozFile) {
|
||||
nsAutoCString nativePath;
|
||||
nsresult rv = mozFile->GetNativePath(nativePath);
|
||||
if (NS_SUCCEEDED(rv) && nativePath.get()) {
|
||||
sLateWriteObserver = new LateWriteObserver(nativePath.get());
|
||||
nsAutoCString writeObserverPath;
|
||||
#ifdef XP_WIN
|
||||
nsAutoString U16Path;
|
||||
nsresult rv = mozFile->GetPath(U16Path);
|
||||
CopyUTF16toUTF8(U16Path, writeObserverPath);
|
||||
#else
|
||||
// On non-Windows just get the native path.
|
||||
nsresult rv = mozFile->GetNativePath(writeObserverPath);
|
||||
#endif
|
||||
if (NS_SUCCEEDED(rv) && writeObserverPath.get()) {
|
||||
sLateWriteObserver = new LateWriteObserver(writeObserverPath.get());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -688,9 +688,13 @@ NS_InitXPCOM2(nsIServiceManager** aResult,
|
||||
getter_AddRefs(greDir));
|
||||
MOZ_ASSERT(greDir);
|
||||
nsAutoCString nativeGREPath;
|
||||
#ifdef XP_WIN
|
||||
greDir->GetPersistentDescriptor(nativeGREPath);
|
||||
#else
|
||||
greDir->GetNativePath(nativeGREPath);
|
||||
u_setDataDirectory(nativeGREPath.get());
|
||||
#endif
|
||||
u_setDataDirectory(nativeGREPath.get());
|
||||
#endif // MOZ_ICU_DATA_ARCHIVE
|
||||
|
||||
// Initialize the JS engine.
|
||||
const char* jsInitFailureReason = JS_InitWithFailureDiagnostic();
|
||||
|
||||
@@ -104,7 +104,13 @@ nsNativeModuleLoader::LoadModule(FileLocation& aFile)
|
||||
}
|
||||
|
||||
nsAutoCString filePath;
|
||||
#ifdef XP_WIN
|
||||
nsAutoString filePathW;
|
||||
file->GetPath(filePathW);
|
||||
CopyUTF16toUTF8(filePathW, filePath);
|
||||
#else
|
||||
file->GetNativePath(filePath);
|
||||
#endif
|
||||
|
||||
NativeLoadData data;
|
||||
|
||||
|
||||
@@ -3564,7 +3564,7 @@ nsLocalFile::SetNativeLeafName(const nsACString& aLeafName)
|
||||
NS_IMETHODIMP
|
||||
nsLocalFile::GetNativePath(nsACString& aResult)
|
||||
{
|
||||
//NS_WARNING("This API is lossy. Use GetPath !");
|
||||
NS_WARNING("The GetNativePath API is lossy. Use GetPath!");
|
||||
nsAutoString tmp;
|
||||
nsresult rv = GetPath(tmp);
|
||||
if (NS_SUCCEEDED(rv)) {
|
||||
@@ -3578,7 +3578,7 @@ nsLocalFile::GetNativePath(nsACString& aResult)
|
||||
NS_IMETHODIMP
|
||||
nsLocalFile::GetNativeCanonicalPath(nsACString& aResult)
|
||||
{
|
||||
NS_WARNING("This method is lossy. Use GetCanonicalPath !");
|
||||
NS_WARNING("This method is lossy. Use GetCanonicalPath!");
|
||||
EnsureShortPath();
|
||||
NS_CopyUnicodeToNative(mShortWorkingPath, aResult);
|
||||
return NS_OK;
|
||||
@@ -3646,7 +3646,7 @@ nsLocalFile::GetNativeTarget(nsACString& aResult)
|
||||
// Check we are correctly initialized.
|
||||
CHECK_mWorkingPath();
|
||||
|
||||
NS_WARNING("This API is lossy. Use GetTarget !");
|
||||
NS_WARNING("This API is lossy. Use GetTarget!");
|
||||
nsAutoString tmp;
|
||||
nsresult rv = GetTarget(tmp);
|
||||
if (NS_SUCCEEDED(rv)) {
|
||||
|
||||
@@ -13,6 +13,10 @@ if CONFIG['OS_ARCH'] == 'Darwin':
|
||||
'!xptcstubs_asm_ppc_darwin.s',
|
||||
'xptcinvoke_asm_ppc_rhapsody.s',
|
||||
]
|
||||
if CONFIG['OS_TEST'] == 'x86_64':
|
||||
SOURCES += [
|
||||
'xptcinvoke_asm_x86_64_unix.S',
|
||||
]
|
||||
if '86' in CONFIG['OS_TEST'] and CONFIG['OS_TEST'] != 'x86_64':
|
||||
DEFINES['MOZ_NEED_LEADING_UNDERSCORE'] = True
|
||||
|
||||
@@ -23,10 +27,11 @@ if CONFIG['OS_ARCH'] == 'GNU':
|
||||
'xptcstubs_gcc_x86_unix.cpp'
|
||||
]
|
||||
|
||||
if CONFIG['OS_ARCH'] in ('Linux', 'Bitrig', 'DragonFly', 'FreeBSD', 'NetBSD', 'OpenBSD') or \
|
||||
if CONFIG['OS_ARCH'] in ('Linux', 'Bitrig', 'DragonFly', 'FreeBSD', 'NetBSD', 'OpenBSD', 'SunOS') or \
|
||||
CONFIG['OS_ARCH'].startswith('GNU_'):
|
||||
if CONFIG['OS_TEST'] == 'x86_64':
|
||||
SOURCES += [
|
||||
'xptcinvoke_asm_x86_64_unix.S',
|
||||
'xptcinvoke_x86_64_unix.cpp',
|
||||
'xptcstubs_x86_64_linux.cpp',
|
||||
]
|
||||
@@ -45,22 +50,6 @@ if CONFIG['OS_ARCH'] in ('Linux', 'FreeBSD'):
|
||||
'xptcstubs_ipf64.cpp'
|
||||
]
|
||||
|
||||
# Without the need to accomodate the Sun compiler, Solaris/GCC support is pretty
|
||||
# standard, actually. Not all that different from Linux.
|
||||
|
||||
if CONFIG['OS_ARCH'] == 'SunOS':
|
||||
if CONFIG['OS_TEST'] == 'x86_64':
|
||||
SOURCES += [
|
||||
'xptcinvoke_asm_x86_64_unix.S',
|
||||
'xptcinvoke_x86_64_solaris.cpp',
|
||||
'xptcstubs_x86_64_linux.cpp'
|
||||
]
|
||||
elif '86' in CONFIG['OS_TEST']:
|
||||
SOURCES += [
|
||||
'xptcinvoke_gcc_x86_unix.cpp',
|
||||
'xptcstubs_gcc_x86_unix.cpp'
|
||||
]
|
||||
|
||||
if CONFIG['OS_TEST'] == 'alpha':
|
||||
if CONFIG['OS_ARCH'] in ('Linux', 'FreeBSD', 'NetBSD'):
|
||||
SOURCES += [
|
||||
|
||||
@@ -11,6 +11,8 @@
|
||||
#include "xptcinvoke_ppc_rhapsody.cpp"
|
||||
#elif defined(__arm__)
|
||||
#include "xptcinvoke_arm.cpp"
|
||||
#elif defined(__aarch64__)
|
||||
#include "xptcinvoke_aarch64.cpp"
|
||||
#else
|
||||
#error unknown cpu architecture
|
||||
#endif
|
||||
@@ -1,75 +0,0 @@
|
||||
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
|
||||
*
|
||||
* 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/. */
|
||||
|
||||
// Platform specific code to invoke XPCOM methods on native objects
|
||||
|
||||
#include "xptcprivate.h"
|
||||
|
||||
// 6 integral parameters are passed in registers, but 1 is |this| which isn't
|
||||
// considered here.
|
||||
const uint32_t GPR_COUNT = 5;
|
||||
|
||||
// 8 floating point parameters are passed in SSE registers
|
||||
const uint32_t FPR_COUNT = 8;
|
||||
|
||||
extern "C" void
|
||||
InvokeCopyToStack(uint64_t * gpregs, double * fpregs,
|
||||
uint32_t paramCount, nsXPTCVariant * s,
|
||||
uint64_t* d)
|
||||
{
|
||||
uint32_t nr_gpr = 0u; // skip one GP register for 'that'
|
||||
uint32_t nr_fpr = 0u;
|
||||
uint64_t value = 0u;
|
||||
|
||||
for (uint32_t i = 0; i < paramCount; i++, s++) {
|
||||
if (s->IsPtrData())
|
||||
value = (uint64_t) s->ptr;
|
||||
else {
|
||||
switch (s->type) {
|
||||
case nsXPTType::T_FLOAT: break;
|
||||
case nsXPTType::T_DOUBLE: break;
|
||||
case nsXPTType::T_I8: value = s->val.i8; break;
|
||||
case nsXPTType::T_I16: value = s->val.i16; break;
|
||||
case nsXPTType::T_I32: value = s->val.i32; break;
|
||||
case nsXPTType::T_I64: value = s->val.i64; break;
|
||||
case nsXPTType::T_U8: value = s->val.u8; break;
|
||||
case nsXPTType::T_U16: value = s->val.u16; break;
|
||||
case nsXPTType::T_U32: value = s->val.u32; break;
|
||||
case nsXPTType::T_U64: value = s->val.u64; break;
|
||||
case nsXPTType::T_BOOL: value = s->val.b; break;
|
||||
case nsXPTType::T_CHAR: value = s->val.c; break;
|
||||
case nsXPTType::T_WCHAR: value = s->val.wc; break;
|
||||
default: value = (uint64_t) s->val.p; break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!s->IsPtrData() && s->type == nsXPTType::T_DOUBLE) {
|
||||
if (nr_fpr < FPR_COUNT)
|
||||
fpregs[nr_fpr++] = s->val.d;
|
||||
else {
|
||||
*((double *)d) = s->val.d;
|
||||
d++;
|
||||
}
|
||||
}
|
||||
else if (!s->IsPtrData() && s->type == nsXPTType::T_FLOAT) {
|
||||
if (nr_fpr < FPR_COUNT)
|
||||
// The value in %xmm register is already prepared to
|
||||
// be retrieved as a float. Therefore, we pass the
|
||||
// value verbatim, as a double without conversion.
|
||||
fpregs[nr_fpr++] = s->val.d;
|
||||
else {
|
||||
*((float *)d) = s->val.f;
|
||||
d++;
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (nr_gpr < GPR_COUNT)
|
||||
gpregs[nr_gpr++] = value;
|
||||
else
|
||||
*d++ = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -8,46 +8,19 @@
|
||||
|
||||
#include "xptcprivate.h"
|
||||
|
||||
// 6 integral parameters are passed in registers
|
||||
const uint32_t GPR_COUNT = 6;
|
||||
// 6 integral parameters are passed in registers, but 1 is |this| which isn't
|
||||
// considered here.
|
||||
const uint32_t GPR_COUNT = 5;
|
||||
|
||||
// 8 floating point parameters are passed in SSE registers
|
||||
const uint32_t FPR_COUNT = 8;
|
||||
|
||||
// Remember that these 'words' are 64-bit long
|
||||
static inline void
|
||||
invoke_count_words(uint32_t paramCount, nsXPTCVariant * s,
|
||||
uint32_t & nr_stack)
|
||||
extern "C" void
|
||||
InvokeCopyToStack(uint64_t * gpregs, double * fpregs,
|
||||
uint32_t paramCount, nsXPTCVariant * s,
|
||||
uint64_t* d)
|
||||
{
|
||||
uint32_t nr_gpr;
|
||||
uint32_t nr_fpr;
|
||||
nr_gpr = 1; // skip one GP register for 'that'
|
||||
nr_fpr = 0;
|
||||
nr_stack = 0;
|
||||
|
||||
/* Compute number of eightbytes of class MEMORY. */
|
||||
for (uint32_t i = 0; i < paramCount; i++, s++) {
|
||||
if (!s->IsPtrData()
|
||||
&& (s->type == nsXPTType::T_FLOAT || s->type == nsXPTType::T_DOUBLE)) {
|
||||
if (nr_fpr < FPR_COUNT)
|
||||
nr_fpr++;
|
||||
else
|
||||
nr_stack++;
|
||||
}
|
||||
else {
|
||||
if (nr_gpr < GPR_COUNT)
|
||||
nr_gpr++;
|
||||
else
|
||||
nr_stack++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
invoke_copy_to_stack(uint64_t * d, uint32_t paramCount, nsXPTCVariant * s,
|
||||
uint64_t * gpregs, double * fpregs)
|
||||
{
|
||||
uint32_t nr_gpr = 1u; // skip one GP register for 'that'
|
||||
uint32_t nr_gpr = 0u;
|
||||
uint32_t nr_fpr = 0u;
|
||||
uint64_t value = 0u;
|
||||
|
||||
@@ -100,89 +73,3 @@ invoke_copy_to_stack(uint64_t * d, uint32_t paramCount, nsXPTCVariant * s,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Disable avx for the next function to allow compilation with
|
||||
// -march=native on new machines, or similar hardcoded -march options.
|
||||
// Having avx enabled appears to change the alignment behavior of alloca
|
||||
// (apparently adding an extra 16 bytes) of padding/alignment (and using
|
||||
// 32-byte alignment instead of 16-byte). This seems to be the best
|
||||
// available workaround, given that this code, which should perhaps
|
||||
// better be written in assembly, is written in C++.
|
||||
#ifndef __clang__
|
||||
#pragma GCC push_options
|
||||
#pragma GCC target ("no-avx")
|
||||
#endif
|
||||
|
||||
// Avoid AddressSanitizer instrumentation for the next function because it
|
||||
// depends on __builtin_alloca behavior and alignment that cannot be relied on
|
||||
// once the function is compiled with a version of ASan that has dynamic-alloca
|
||||
// instrumentation enabled.
|
||||
|
||||
MOZ_ASAN_BLACKLIST
|
||||
EXPORT_XPCOM_API(nsresult)
|
||||
NS_InvokeByIndex(nsISupports * that, uint32_t methodIndex,
|
||||
uint32_t paramCount, nsXPTCVariant * params)
|
||||
{
|
||||
uint32_t nr_stack;
|
||||
invoke_count_words(paramCount, params, nr_stack);
|
||||
|
||||
// Stack, if used, must be 16-bytes aligned
|
||||
if (nr_stack)
|
||||
nr_stack = (nr_stack + 1) & ~1;
|
||||
|
||||
// Load parameters to stack, if necessary
|
||||
uint64_t *stack = (uint64_t *) __builtin_alloca(nr_stack * 8);
|
||||
uint64_t gpregs[GPR_COUNT];
|
||||
double fpregs[FPR_COUNT];
|
||||
invoke_copy_to_stack(stack, paramCount, params, gpregs, fpregs);
|
||||
|
||||
// We used to have switches to make sure we would only load the registers
|
||||
// that are needed for this call. That produced larger code that was
|
||||
// not faster in practice. It also caused compiler warnings about the
|
||||
// variables being used uninitialized.
|
||||
// We now just load every every register. There could still be a warning
|
||||
// from a memory analysis tools that we are loading uninitialized stack
|
||||
// positions.
|
||||
|
||||
// FIXME: this function depends on the above __builtin_alloca placing
|
||||
// the array in the correct spot for the ABI.
|
||||
|
||||
// Load FPR registers from fpregs[]
|
||||
double d0, d1, d2, d3, d4, d5, d6, d7;
|
||||
|
||||
d7 = fpregs[7];
|
||||
d6 = fpregs[6];
|
||||
d5 = fpregs[5];
|
||||
d4 = fpregs[4];
|
||||
d3 = fpregs[3];
|
||||
d2 = fpregs[2];
|
||||
d1 = fpregs[1];
|
||||
d0 = fpregs[0];
|
||||
|
||||
// Load GPR registers from gpregs[]
|
||||
uint64_t a0, a1, a2, a3, a4, a5;
|
||||
|
||||
a5 = gpregs[5];
|
||||
a4 = gpregs[4];
|
||||
a3 = gpregs[3];
|
||||
a2 = gpregs[2];
|
||||
a1 = gpregs[1];
|
||||
a0 = (uint64_t) that;
|
||||
|
||||
// Get pointer to method
|
||||
uint64_t methodAddress = *((uint64_t *)that);
|
||||
methodAddress += 8 * methodIndex;
|
||||
methodAddress = *((uint64_t *)methodAddress);
|
||||
|
||||
typedef nsresult (*Method)(uint64_t, uint64_t, uint64_t, uint64_t,
|
||||
uint64_t, uint64_t, double, double, double,
|
||||
double, double, double, double, double);
|
||||
nsresult result = ((Method)methodAddress)(a0, a1, a2, a3, a4, a5,
|
||||
d0, d1, d2, d3, d4, d5,
|
||||
d6, d7);
|
||||
return result;
|
||||
}
|
||||
|
||||
#ifndef __clang__
|
||||
#pragma GCC pop_options
|
||||
#endif
|
||||
Reference in new issue
Block a user