tor-browser

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

CacheIndexIterator.h (1853B)


      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 #ifndef CacheIndexIterator__h__
      6 #define CacheIndexIterator__h__
      7 
      8 #include "nsTArray.h"
      9 #include "nsCOMPtr.h"
     10 #include "mozilla/SHA1.h"
     11 #include "mozilla/StaticMutex.h"
     12 
     13 namespace mozilla {
     14 namespace net {
     15 
     16 class CacheIndex;
     17 class CacheIndexRecordWrapper;
     18 
     19 class CacheIndexIterator {
     20 public:
     21  NS_INLINE_DECL_THREADSAFE_REFCOUNTING(CacheIndexIterator)
     22 
     23  CacheIndexIterator(CacheIndex* aIndex, bool aAddNew);
     24 
     25 protected:
     26  virtual ~CacheIndexIterator();
     27 
     28 public:
     29  // Returns a hash of a next entry. If there is no entry NS_ERROR_NOT_AVAILABLE
     30  // is returned and the iterator is closed. Other error is returned when the
     31  // iterator is closed for other reason, e.g. shutdown.
     32  nsresult GetNextHash(SHA1Sum::Hash* aHash);
     33 
     34  // Closes the iterator. This means the iterator is removed from the list of
     35  // iterators in CacheIndex.
     36  nsresult Close();
     37 
     38 protected:
     39  friend class CacheIndex;
     40 
     41  nsresult CloseInternal(nsresult aStatus);
     42 
     43  bool ShouldBeNewAdded() { return mAddNew; }
     44  virtual void AddRecord(CacheIndexRecordWrapper* aRecord,
     45                         const StaticMutexAutoLock& aProofOfLock);
     46  bool RemoveRecord(CacheIndexRecordWrapper* aRecord,
     47                    const StaticMutexAutoLock& aProofOfLock);
     48  bool ReplaceRecord(CacheIndexRecordWrapper* aOldRecord,
     49                     CacheIndexRecordWrapper* aNewRecord,
     50                     const StaticMutexAutoLock& aProofOfLock);
     51  void ClearRecords(const StaticMutexAutoLock& aProofOfLock);
     52 
     53  nsresult mStatus;
     54  RefPtr<CacheIndex> mIndex;
     55  nsTArray<RefPtr<CacheIndexRecordWrapper>> mRecords;
     56  bool mAddNew;
     57 };
     58 
     59 }  // namespace net
     60 }  // namespace mozilla
     61 
     62 #endif