1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/modules/libjar/zipwriter/src/nsZipWriter.h Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,80 @@ 1.4 +/* This Source Code Form is subject to the terms of the Mozilla Public 1.5 + * License, v. 2.0. If a copy of the MPL was not distributed with this 1.6 + * file, You can obtain one at http://mozilla.org/MPL/2.0/. 1.7 + */ 1.8 + 1.9 +#ifndef _nsZipWriter_h_ 1.10 +#define _nsZipWriter_h_ 1.11 + 1.12 +#include "nsIZipWriter.h" 1.13 +#include "nsIFileStreams.h" 1.14 +#include "nsIBufferedStreams.h" 1.15 +#include "nsIRequestObserver.h" 1.16 +#include "nsZipHeader.h" 1.17 +#include "nsCOMPtr.h" 1.18 +#include "nsCOMArray.h" 1.19 +#include "nsTArray.h" 1.20 +#include "nsDataHashtable.h" 1.21 +#include "mozilla/Attributes.h" 1.22 + 1.23 +#define ZIPWRITER_CONTRACTID "@mozilla.org/zipwriter;1" 1.24 +#define ZIPWRITER_CID { 0x430d416c, 0xa722, 0x4ad1, \ 1.25 + { 0xbe, 0x98, 0xd9, 0xa4, 0x45, 0xf8, 0x5e, 0x3f } } 1.26 + 1.27 +#define OPERATION_ADD 0 1.28 +#define OPERATION_REMOVE 1 1.29 +struct nsZipQueueItem 1.30 +{ 1.31 +public: 1.32 + uint32_t mOperation; 1.33 + nsCString mZipEntry; 1.34 + nsCOMPtr<nsIFile> mFile; 1.35 + nsCOMPtr<nsIChannel> mChannel; 1.36 + nsCOMPtr<nsIInputStream> mStream; 1.37 + PRTime mModTime; 1.38 + int32_t mCompression; 1.39 + uint32_t mPermissions; 1.40 +}; 1.41 + 1.42 +class nsZipWriter MOZ_FINAL : public nsIZipWriter, 1.43 + public nsIRequestObserver 1.44 +{ 1.45 +public: 1.46 + NS_DECL_ISUPPORTS 1.47 + NS_DECL_NSIZIPWRITER 1.48 + NS_DECL_NSIREQUESTOBSERVER 1.49 + 1.50 + nsZipWriter(); 1.51 + nsresult EntryCompleteCallback(nsZipHeader *aHeader, nsresult aStatus); 1.52 + 1.53 +private: 1.54 + ~nsZipWriter(); 1.55 + 1.56 + uint32_t mCDSOffset; 1.57 + bool mCDSDirty; 1.58 + bool mInQueue; 1.59 + 1.60 + nsCOMPtr<nsIFile> mFile; 1.61 + nsCOMPtr<nsIRequestObserver> mProcessObserver; 1.62 + nsCOMPtr<nsISupports> mProcessContext; 1.63 + nsCOMPtr<nsIOutputStream> mStream; 1.64 + nsCOMArray<nsZipHeader> mHeaders; 1.65 + nsTArray<nsZipQueueItem> mQueue; 1.66 + nsDataHashtable<nsCStringHashKey, int32_t> mEntryHash; 1.67 + nsCString mComment; 1.68 + 1.69 + nsresult SeekCDS(); 1.70 + void Cleanup(); 1.71 + nsresult ReadFile(nsIFile *aFile); 1.72 + nsresult InternalAddEntryDirectory(const nsACString & aZipEntry, 1.73 + PRTime aModTime, uint32_t aPermissions); 1.74 + nsresult BeginProcessingAddition(nsZipQueueItem* aItem, bool* complete); 1.75 + nsresult BeginProcessingRemoval(int32_t aPos); 1.76 + nsresult AddEntryStream(const nsACString & aZipEntry, PRTime aModTime, 1.77 + int32_t aCompression, nsIInputStream *aStream, 1.78 + bool aQueue, uint32_t aPermissions); 1.79 + void BeginProcessingNextItem(); 1.80 + void FinishQueue(nsresult aStatus); 1.81 +}; 1.82 + 1.83 +#endif