/* void onStopRequest (in nsIRequest aRequest, in nsISupports aContext, * in nsresult aStatusCode); */ NS_IMETHODIMP nsZipWriter::OnStopRequest(nsIRequest *aRequest, nsISupports *aContext, nsresult aStatusCode) { if (NS_FAILED(aStatusCode)) { FinishQueue(aStatusCode); Cleanup(); } nsresult rv = mStream->Flush(); if (NS_FAILED(rv)) { FinishQueue(rv); Cleanup(); return rv; } rv = SeekCDS(); if (NS_FAILED(rv)) { FinishQueue(rv); return rv; } BeginProcessingNextItem(); return NS_OK; }
/* * Called when writing a file to the zip is complete. */ nsresult nsZipWriter::EntryCompleteCallback(nsZipHeader* aHeader, nsresult aStatus) { if (NS_SUCCEEDED(aStatus)) { if (!mEntryHash.Put(aHeader->mName, mHeaders.Count())) { SeekCDS(); return NS_ERROR_OUT_OF_MEMORY; } if (!mHeaders.AppendObject(aHeader)) { mEntryHash.Remove(aHeader->mName); SeekCDS(); return NS_ERROR_OUT_OF_MEMORY; } mCDSDirty = PR_TRUE; mCDSOffset += aHeader->mCSize + aHeader->GetFileHeaderLength(); if (mInQueue) BeginProcessingNextItem(); return NS_OK; } nsresult rv = SeekCDS(); if (mInQueue) FinishQueue(aStatus); return rv; }
/* void processQueue (in nsIRequestObserver aObserver, * in nsISupports aContext); */ NS_IMETHODIMP nsZipWriter::ProcessQueue(nsIRequestObserver *aObserver, nsISupports *aContext) { if (!mStream) return NS_ERROR_NOT_INITIALIZED; if (mInQueue) return NS_ERROR_IN_PROGRESS; mProcessObserver = aObserver; mProcessContext = aContext; mInQueue = true; if (mProcessObserver) mProcessObserver->OnStartRequest(nullptr, mProcessContext); BeginProcessingNextItem(); return NS_OK; }