diff options
Diffstat (limited to 'netwerk/cache/nsDiskCacheEntry.cpp')
-rw-r--r-- | netwerk/cache/nsDiskCacheEntry.cpp | 133 |
1 files changed, 133 insertions, 0 deletions
diff --git a/netwerk/cache/nsDiskCacheEntry.cpp b/netwerk/cache/nsDiskCacheEntry.cpp new file mode 100644 index 000000000..cd5a34977 --- /dev/null +++ b/netwerk/cache/nsDiskCacheEntry.cpp @@ -0,0 +1,133 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#include "nsCache.h" +#include "nsDiskCache.h" +#include "nsDiskCacheEntry.h" +#include "nsDiskCacheBinding.h" +#include "nsCRT.h" + +#include "nsISerializable.h" +#include "nsSerializationHelper.h" + +/****************************************************************************** + * nsDiskCacheEntry + *****************************************************************************/ + +/** + * CreateCacheEntry() + * + * Creates an nsCacheEntry and sets all fields except for the binding. + */ +nsCacheEntry * +nsDiskCacheEntry::CreateCacheEntry(nsCacheDevice * device) +{ + nsCacheEntry * entry = nullptr; + nsresult rv = nsCacheEntry::Create(Key(), + nsICache::STREAM_BASED, + nsICache::STORE_ON_DISK, + device, + &entry); + if (NS_FAILED(rv) || !entry) return nullptr; + + entry->SetFetchCount(mFetchCount); + entry->SetLastFetched(mLastFetched); + entry->SetLastModified(mLastModified); + entry->SetExpirationTime(mExpirationTime); + entry->SetCacheDevice(device); + // XXX why does nsCacheService have to fill out device in BindEntry()? + entry->SetDataSize(mDataSize); + + rv = entry->UnflattenMetaData(MetaData(), mMetaDataSize); + if (NS_FAILED(rv)) { + delete entry; + return nullptr; + } + + // Restore security info, if present + const char* info = entry->GetMetaDataElement("security-info"); + if (info) { + nsCOMPtr<nsISupports> infoObj; + rv = NS_DeserializeObject(nsDependentCString(info), + getter_AddRefs(infoObj)); + if (NS_FAILED(rv)) { + delete entry; + return nullptr; + } + entry->SetSecurityInfo(infoObj); + } + + return entry; +} + + +/****************************************************************************** + * nsDiskCacheEntryInfo + *****************************************************************************/ + +NS_IMPL_ISUPPORTS(nsDiskCacheEntryInfo, nsICacheEntryInfo) + +NS_IMETHODIMP nsDiskCacheEntryInfo::GetClientID(char ** clientID) +{ + NS_ENSURE_ARG_POINTER(clientID); + return ClientIDFromCacheKey(nsDependentCString(mDiskEntry->Key()), clientID); +} + +extern const char DISK_CACHE_DEVICE_ID[]; +NS_IMETHODIMP nsDiskCacheEntryInfo::GetDeviceID(char ** deviceID) +{ + NS_ENSURE_ARG_POINTER(deviceID); + *deviceID = NS_strdup(mDeviceID); + return *deviceID ? NS_OK : NS_ERROR_OUT_OF_MEMORY; +} + + +NS_IMETHODIMP nsDiskCacheEntryInfo::GetKey(nsACString &clientKey) +{ + return ClientKeyFromCacheKey(nsDependentCString(mDiskEntry->Key()), clientKey); +} + +NS_IMETHODIMP nsDiskCacheEntryInfo::GetFetchCount(int32_t *aFetchCount) +{ + NS_ENSURE_ARG_POINTER(aFetchCount); + *aFetchCount = mDiskEntry->mFetchCount; + return NS_OK; +} + +NS_IMETHODIMP nsDiskCacheEntryInfo::GetLastFetched(uint32_t *aLastFetched) +{ + NS_ENSURE_ARG_POINTER(aLastFetched); + *aLastFetched = mDiskEntry->mLastFetched; + return NS_OK; +} + +NS_IMETHODIMP nsDiskCacheEntryInfo::GetLastModified(uint32_t *aLastModified) +{ + NS_ENSURE_ARG_POINTER(aLastModified); + *aLastModified = mDiskEntry->mLastModified; + return NS_OK; +} + +NS_IMETHODIMP nsDiskCacheEntryInfo::GetExpirationTime(uint32_t *aExpirationTime) +{ + NS_ENSURE_ARG_POINTER(aExpirationTime); + *aExpirationTime = mDiskEntry->mExpirationTime; + return NS_OK; +} + +NS_IMETHODIMP nsDiskCacheEntryInfo::IsStreamBased(bool *aStreamBased) +{ + NS_ENSURE_ARG_POINTER(aStreamBased); + *aStreamBased = true; + return NS_OK; +} + +NS_IMETHODIMP nsDiskCacheEntryInfo::GetDataSize(uint32_t *aDataSize) +{ + NS_ENSURE_ARG_POINTER(aDataSize); + *aDataSize = mDiskEntry->mDataSize; + return NS_OK; +} |