netwerk/cache2/CacheIndexIterator.cpp

Wed, 31 Dec 2014 06:09:35 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 06:09:35 +0100
changeset 0
6474c204b198
permissions
-rw-r--r--

Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.

     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/. */
     5 #include "CacheLog.h"
     6 #include "CacheIndexIterator.h"
     7 #include "CacheIndex.h"
     8 #include "nsString.h"
     9 #include "mozilla/DebugOnly.h"
    12 namespace mozilla {
    13 namespace net {
    15 CacheIndexIterator::CacheIndexIterator(CacheIndex *aIndex, bool aAddNew)
    16   : mStatus(NS_OK)
    17   , mIndex(aIndex)
    18   , mAddNew(aAddNew)
    19 {
    20   LOG(("CacheIndexIterator::CacheIndexIterator() [this=%p]", this));
    21 }
    23 CacheIndexIterator::~CacheIndexIterator()
    24 {
    25   LOG(("CacheIndexIterator::~CacheIndexIterator() [this=%p]", this));
    27   Close();
    28 }
    30 nsresult
    31 CacheIndexIterator::GetNextHash(SHA1Sum::Hash *aHash)
    32 {
    33   LOG(("CacheIndexIterator::GetNextHash() [this=%p]", this));
    35   CacheIndexAutoLock lock(mIndex);
    37   if (NS_FAILED(mStatus)) {
    38     return mStatus;
    39   }
    41   if (!mRecords.Length()) {
    42     CloseInternal(NS_ERROR_NOT_AVAILABLE);
    43     return mStatus;
    44   }
    46   memcpy(aHash, mRecords[mRecords.Length() - 1]->mHash, sizeof(SHA1Sum::Hash));
    47   mRecords.RemoveElementAt(mRecords.Length() - 1);
    49   return NS_OK;
    50 }
    52 nsresult
    53 CacheIndexIterator::Close()
    54 {
    55   LOG(("CacheIndexIterator::Close() [this=%p]", this));
    57   CacheIndexAutoLock lock(mIndex);
    59   return CloseInternal(NS_ERROR_NOT_AVAILABLE);
    60 }
    62 nsresult
    63 CacheIndexIterator::CloseInternal(nsresult aStatus)
    64 {
    65   LOG(("CacheIndexIterator::CloseInternal() [this=%p, status=0x%08x]", this,
    66        aStatus));
    68   // Make sure status will be a failure
    69   MOZ_ASSERT(NS_FAILED(aStatus));
    70   if (NS_SUCCEEDED(aStatus)) {
    71     aStatus = NS_ERROR_UNEXPECTED;
    72   }
    74   if (NS_FAILED(mStatus)) {
    75     return NS_ERROR_NOT_AVAILABLE;
    76   }
    78   DebugOnly<bool> removed = mIndex->mIterators.RemoveElement(this);
    79   MOZ_ASSERT(removed);
    80   mStatus = aStatus;
    82   return NS_OK;
    83 }
    85 void
    86 CacheIndexIterator::AddRecord(CacheIndexRecord *aRecord)
    87 {
    88   LOG(("CacheIndexIterator::AddRecord() [this=%p, record=%p]", this, aRecord));
    90   mRecords.AppendElement(aRecord);
    91 }
    93 void
    94 CacheIndexIterator::AddRecords(const nsTArray<CacheIndexRecord *> &aRecords)
    95 {
    96   LOG(("CacheIndexIterator::AddRecords() [this=%p]", this));
    98   mRecords.AppendElements(aRecords);
    99 }
   101 bool
   102 CacheIndexIterator::RemoveRecord(CacheIndexRecord *aRecord)
   103 {
   104   LOG(("CacheIndexIterator::RemoveRecord() [this=%p, record=%p]", this,
   105        aRecord));
   107   return mRecords.RemoveElement(aRecord);
   108 }
   110 bool
   111 CacheIndexIterator::ReplaceRecord(CacheIndexRecord *aOldRecord,
   112                                   CacheIndexRecord *aNewRecord)
   113 {
   114   LOG(("CacheIndexIterator::ReplaceRecord() [this=%p, oldRecord=%p, "
   115        "newRecord=%p]", this, aOldRecord, aNewRecord));
   117   if (RemoveRecord(aOldRecord)) {
   118     AddRecord(aNewRecord);
   119     return true;
   120   }
   122   return false;
   123 }
   125 } // net
   126 } // mozilla

mercurial