void NetworkResourcesData::ensureNoDataForRequestId(const String& requestId) { ResourceData* resourceData = resourceDataForRequestId(requestId); if (!resourceData) return; if (resourceData->hasContent() || resourceData->hasData()) m_contentSize -= resourceData->evictContent(); delete resourceData; m_requestIdToResourceDataMap.remove(requestId); }
void NetworkResourcesData::maybeDecodeDataToContent(const String& requestId) { ResourceData* resourceData = resourceDataForRequestId(requestId); if (!resourceData) return; if (!resourceData->hasData()) return; m_contentSize += resourceData->decodeDataToContent(); size_t dataLength = contentSizeInBytes(resourceData->content()); if (dataLength > m_maximumSingleResourceContentSize) m_contentSize -= resourceData->evictContent(); }
bool NetworkResourcesData::ensureFreeSpace(size_t size) { if (size > m_maximumResourcesContentSize) return false; while (size > m_maximumResourcesContentSize - m_contentSize) { String requestId = m_requestIdsDeque.takeFirst(); ResourceData* resourceData = resourceDataForRequestId(requestId); if (resourceData) m_contentSize -= resourceData->evictContent(); } return true; }
void NetworkResourcesData::maybeAddResourceData(const String& requestId, const char* data, size_t dataLength) { ResourceData* resourceData = resourceDataForRequestId(requestId); if (!resourceData) return; if (!resourceData->decoder()) return; if (resourceData->dataLength() + dataLength > m_maximumSingleResourceContentSize) m_contentSize -= resourceData->evictContent(); if (resourceData->isContentEvicted()) return; if (ensureFreeSpace(dataLength) && !resourceData->isContentEvicted()) { m_requestIdsDeque.append(requestId); resourceData->appendData(data, dataLength); m_contentSize += dataLength; } }