tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

nsZipWriter.h (2165B)


      1 /* This Source Code Form is subject to the terms of the Mozilla Public
      2 * License, v. 2.0. If a copy of the MPL was not distributed with this
      3 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
      4 */
      5 
      6 #ifndef _nsZipWriter_h_
      7 #define _nsZipWriter_h_
      8 
      9 #include "nsIZipWriter.h"
     10 #include "nsIRequestObserver.h"
     11 #include "nsZipHeader.h"
     12 #include "nsCOMPtr.h"
     13 #include "nsCOMArray.h"
     14 #include "nsTArray.h"
     15 #include "nsTHashMap.h"
     16 
     17 #define ZIPWRITER_CONTRACTID "@mozilla.org/zipwriter;1"
     18 #define ZIPWRITER_CID \
     19  {0x430d416c, 0xa722, 0x4ad1, {0xbe, 0x98, 0xd9, 0xa4, 0x45, 0xf8, 0x5e, 0x3f}}
     20 
     21 #define OPERATION_ADD 0
     22 #define OPERATION_REMOVE 1
     23 struct nsZipQueueItem {
     24 public:
     25  uint32_t mOperation;
     26  nsCString mZipEntry;
     27  nsCOMPtr<nsIFile> mFile;
     28  nsCOMPtr<nsIChannel> mChannel;
     29  nsCOMPtr<nsIInputStream> mStream;
     30  PRTime mModTime;
     31  int32_t mCompression;
     32  uint32_t mPermissions;
     33 };
     34 
     35 class nsZipWriter final : public nsIZipWriter, public nsIRequestObserver {
     36 public:
     37  NS_DECL_ISUPPORTS
     38  NS_DECL_NSIZIPWRITER
     39  NS_DECL_NSIREQUESTOBSERVER
     40 
     41  nsZipWriter();
     42  nsresult EntryCompleteCallback(nsZipHeader* aHeader, nsresult aStatus);
     43 
     44 private:
     45  ~nsZipWriter();
     46 
     47  uint32_t mCDSOffset;
     48  bool mCDSDirty;
     49  bool mInQueue;
     50 
     51  nsCOMPtr<nsIFile> mFile;
     52  nsCOMPtr<nsIRequestObserver> mProcessObserver;
     53  nsCOMPtr<nsISupports> mProcessContext;
     54  nsCOMPtr<nsIOutputStream> mStream;
     55  nsCOMArray<nsZipHeader> mHeaders;
     56  nsTArray<nsZipQueueItem> mQueue;
     57  nsTHashMap<nsCStringHashKey, int32_t> mEntryHash;
     58  nsCString mComment;
     59 
     60  nsresult SeekCDS();
     61  void Cleanup();
     62  nsresult ReadFile(nsIFile* aFile);
     63  nsresult InternalAddEntryDirectory(const nsACString& aZipEntry,
     64                                     PRTime aModTime, uint32_t aPermissions);
     65  nsresult BeginProcessingAddition(nsZipQueueItem* aItem, bool* complete);
     66  nsresult BeginProcessingRemoval(int32_t aPos);
     67  nsresult AddEntryStream(const nsACString& aZipEntry, PRTime aModTime,
     68                          int32_t aCompression, nsIInputStream* aStream,
     69                          bool aQueue, uint32_t aPermissions);
     70  void BeginProcessingNextItem();
     71  void FinishQueue(nsresult aStatus);
     72 };
     73 
     74 #endif