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