15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/* 25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2011 Google Inc. All rights reserved. 35c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 45c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Redistribution and use in source and binary forms, with or without 55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * modification, are permitted provided that the following conditions are 65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * met: 75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 1. Redistributions of source code must retain the above copyright 95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * notice, this list of conditions and the following disclaimer. 105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 2. Redistributions in binary form must reproduce the above 125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * copyright notice, this list of conditions and the following disclaimer 135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * in the documentation and/or other materials provided with the 145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * distribution. 155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THIS SOFTWARE IS PROVIDED BY GOOGLE INC. AND ITS CONTRIBUTORS 175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GOOGLE INC. 205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "config.h" 3053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/inspector/NetworkResourcesData.h" 315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/dom/DOMImplementation.h" 33e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)#include "core/fetch/Resource.h" 341e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)#include "platform/SharedBuffer.h" 35bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)#include "platform/network/ResourceResponse.h" 365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)namespace { 385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// 100MB 395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)static size_t maximumResourcesContentSize = 100 * 1000 * 1000; 405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// 10MB 425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)static size_t maximumSingleResourceContentSize = 10 * 1000 * 1000; 435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)namespace WebCore { 465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 48a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)PassRefPtr<XHRReplayData> XHRReplayData::create(const AtomicString& method, const KURL& url, bool async, PassRefPtr<FormData> formData, bool includeCredentials) 495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return adoptRef(new XHRReplayData(method, url, async, formData, includeCredentials)); 515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 53a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)void XHRReplayData::addHeader(const AtomicString& key, const AtomicString& value) 545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_headers.set(key, value); 565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 58a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)XHRReplayData::XHRReplayData(const AtomicString& method, const KURL& url, bool async, PassRefPtr<FormData> formData, bool includeCredentials) 595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) : m_method(method) 605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_url(url) 615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_async(async) 625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_formData(formData) 635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_includeCredentials(includeCredentials) 645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// ResourceData 685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)NetworkResourcesData::ResourceData::ResourceData(const String& requestId, const String& loaderId) 695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) : m_requestId(requestId) 705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_loaderId(loaderId) 715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_base64Encoded(false) 725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_isContentEvicted(false) 735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_type(InspectorPageAgent::OtherResource) 745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_cachedResource(0) 755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void NetworkResourcesData::ResourceData::setContent(const String& content, bool base64Encoded) 795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT(!hasData()); 815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT(!hasContent()); 825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_content = content; 835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_base64Encoded = base64Encoded; 845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)static size_t contentSizeInBytes(const String& content) 875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return content.isNull() ? 0 : content.impl()->sizeInBytes(); 895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)unsigned NetworkResourcesData::ResourceData::removeContent() 925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) unsigned result = 0; 945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (hasData()) { 955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT(!hasContent()); 965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) result = m_dataBuffer->size(); 975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_dataBuffer = nullptr; 985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (hasContent()) { 1015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT(!hasData()); 1025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) result = contentSizeInBytes(m_content); 1035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_content = String(); 1045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 1055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return result; 1065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)unsigned NetworkResourcesData::ResourceData::evictContent() 1095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_isContentEvicted = true; 1115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return removeContent(); 1125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)size_t NetworkResourcesData::ResourceData::dataLength() const 1155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_dataBuffer ? m_dataBuffer->size() : 0; 1175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void NetworkResourcesData::ResourceData::appendData(const char* data, size_t dataLength) 1205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT(!hasContent()); 1225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!m_dataBuffer) 1235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_dataBuffer = SharedBuffer::create(data, dataLength); 1245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else 1255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_dataBuffer->append(data, dataLength); 1265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)size_t NetworkResourcesData::ResourceData::decodeDataToContent() 1295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT(!hasContent()); 1315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) size_t dataLength = m_dataBuffer->size(); 1325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_content = m_decoder->decode(m_dataBuffer->data(), m_dataBuffer->size()); 1335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_content.append(m_decoder->flush()); 1345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_dataBuffer = nullptr; 1355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return contentSizeInBytes(m_content) - dataLength; 1365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// NetworkResourcesData 1395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)NetworkResourcesData::NetworkResourcesData() 1405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) : m_contentSize(0) 1415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_maximumResourcesContentSize(maximumResourcesContentSize) 1425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_maximumSingleResourceContentSize(maximumSingleResourceContentSize) 1435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)NetworkResourcesData::~NetworkResourcesData() 1475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) clear(); 1495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void NetworkResourcesData::resourceCreated(const String& requestId, const String& loaderId) 1525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ensureNoDataForRequestId(requestId); 1545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_requestIdToResourceDataMap.set(requestId, new ResourceData(requestId, loaderId)); 1555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 15751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)static PassOwnPtr<TextResourceDecoder> createOtherResourceTextDecoder(const String& mimeType, const String& textEncodingName) 1585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 15951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) OwnPtr<TextResourceDecoder> decoder; 1605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!textEncodingName.isEmpty()) 1615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) decoder = TextResourceDecoder::create("text/plain", textEncodingName); 1625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else if (DOMImplementation::isXMLMIMEType(mimeType.lower())) { 1635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) decoder = TextResourceDecoder::create("application/xml"); 1645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) decoder->useLenientXMLDecoding(); 1655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } else if (equalIgnoringCase(mimeType, "text/html")) 1665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) decoder = TextResourceDecoder::create("text/html", "UTF-8"); 1675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else if (mimeType == "text/plain") 1685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) decoder = TextResourceDecoder::create("text/plain", "ISO-8859-1"); 16951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) return decoder.release(); 1705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void NetworkResourcesData::responseReceived(const String& requestId, const String& frameId, const ResourceResponse& response) 1735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 174926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) ResourceData* resourceData = resourceDataForRequestId(requestId); 1755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!resourceData) 1765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 1775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) resourceData->setFrameId(frameId); 1785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) resourceData->setUrl(response.url()); 1795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) resourceData->setDecoder(createOtherResourceTextDecoder(response.mimeType(), response.textEncodingName())); 1805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) resourceData->setHTTPStatusCode(response.httpStatusCode()); 1815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void NetworkResourcesData::setResourceType(const String& requestId, InspectorPageAgent::ResourceType type) 1845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 185926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) ResourceData* resourceData = resourceDataForRequestId(requestId); 1865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!resourceData) 1875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 1885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) resourceData->setType(type); 1895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)InspectorPageAgent::ResourceType NetworkResourcesData::resourceType(const String& requestId) 1925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 193926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) ResourceData* resourceData = resourceDataForRequestId(requestId); 1945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!resourceData) 1955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return InspectorPageAgent::OtherResource; 1965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return resourceData->type(); 1975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void NetworkResourcesData::setResourceContent(const String& requestId, const String& content, bool base64Encoded) 2005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 201926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) ResourceData* resourceData = resourceDataForRequestId(requestId); 2025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!resourceData) 2035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 2045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) size_t dataLength = contentSizeInBytes(content); 2055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (dataLength > m_maximumSingleResourceContentSize) 2065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 2075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (resourceData->isContentEvicted()) 2085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 2095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (ensureFreeSpace(dataLength) && !resourceData->isContentEvicted()) { 2105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // We can not be sure that we didn't try to save this request data while it was loading, so remove it, if any. 2115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (resourceData->hasContent()) 2125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_contentSize -= resourceData->removeContent(); 2135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_requestIdsDeque.append(requestId); 2145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) resourceData->setContent(content, base64Encoded); 2155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_contentSize += dataLength; 2165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 2175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void NetworkResourcesData::maybeAddResourceData(const String& requestId, const char* data, size_t dataLength) 2205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 221926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) ResourceData* resourceData = resourceDataForRequestId(requestId); 2225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!resourceData) 2235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 2245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!resourceData->decoder()) 2255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 2265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (resourceData->dataLength() + dataLength > m_maximumSingleResourceContentSize) 2275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_contentSize -= resourceData->evictContent(); 2285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (resourceData->isContentEvicted()) 2295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 2305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (ensureFreeSpace(dataLength) && !resourceData->isContentEvicted()) { 2315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_requestIdsDeque.append(requestId); 2325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) resourceData->appendData(data, dataLength); 2335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_contentSize += dataLength; 2345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 2355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void NetworkResourcesData::maybeDecodeDataToContent(const String& requestId) 2385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 239926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) ResourceData* resourceData = resourceDataForRequestId(requestId); 2405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!resourceData) 2415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 2425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!resourceData->hasData()) 2435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 2445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_contentSize += resourceData->decodeDataToContent(); 2455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) size_t dataLength = contentSizeInBytes(resourceData->content()); 2465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (dataLength > m_maximumSingleResourceContentSize) 2475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_contentSize -= resourceData->evictContent(); 2485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 250fff8884795cb540f87cf6e6d67b629519b00eb8bBen Murdochvoid NetworkResourcesData::addResource(const String& requestId, Resource* cachedResource) 2515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 252926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) ResourceData* resourceData = resourceDataForRequestId(requestId); 253926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (!resourceData) 2545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 255fff8884795cb540f87cf6e6d67b629519b00eb8bBen Murdoch resourceData->setResource(cachedResource); 2565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void NetworkResourcesData::addResourceSharedBuffer(const String& requestId, PassRefPtr<SharedBuffer> buffer, const String& textEncodingName) 2595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 260926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) ResourceData* resourceData = resourceDataForRequestId(requestId); 2615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!resourceData) 2625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 2635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) resourceData->setBuffer(buffer); 2645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) resourceData->setTextEncodingName(textEncodingName); 2655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)NetworkResourcesData::ResourceData const* NetworkResourcesData::data(const String& requestId) 2685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 269926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return resourceDataForRequestId(requestId); 2705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)XHRReplayData* NetworkResourcesData::xhrReplayData(const String& requestId) 2735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_reusedXHRReplayDataRequestIds.contains(requestId)) 2755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return xhrReplayData(m_reusedXHRReplayDataRequestIds.get(requestId)); 2765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 277926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) ResourceData* resourceData = resourceDataForRequestId(requestId); 2785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!resourceData) 2795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return 0; 2805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return resourceData->xhrReplayData(); 2815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void NetworkResourcesData::setXHRReplayData(const String& requestId, XHRReplayData* xhrReplayData) 2845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 285926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) ResourceData* resourceData = resourceDataForRequestId(requestId); 2865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!resourceData) { 2875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) Vector<String> result; 2885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ReusedRequestIds::iterator it; 2895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ReusedRequestIds::iterator end = m_reusedXHRReplayDataRequestIds.end(); 2905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) for (it = m_reusedXHRReplayDataRequestIds.begin(); it != end; ++it) { 2915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (it->value == requestId) 2925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) setXHRReplayData(it->key, xhrReplayData); 2935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 2945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 2955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 2965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) resourceData->setXHRReplayData(xhrReplayData); 2985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void NetworkResourcesData::reuseXHRReplayData(const String& requestId, const String& reusedRequestId) 3015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 302926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) ResourceData* reusedResourceData = resourceDataForRequestId(reusedRequestId); 303926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) ResourceData* resourceData = resourceDataForRequestId(requestId); 3045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!reusedResourceData || !resourceData) { 3055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_reusedXHRReplayDataRequestIds.set(requestId, reusedRequestId); 3065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 3075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 3085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) resourceData->setXHRReplayData(reusedResourceData->xhrReplayData()); 3105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 31206f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)Vector<NetworkResourcesData::ResourceData*> NetworkResourcesData::resources() 31306f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles){ 31406f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles) Vector<ResourceData*> result; 31506f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles) for (ResourceDataMap::iterator it = m_requestIdToResourceDataMap.begin(); it != m_requestIdToResourceDataMap.end(); ++it) 31606f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles) result.append(it->value); 31706f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles) return result; 31806f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)} 31906f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles) 320fff8884795cb540f87cf6e6d67b629519b00eb8bBen MurdochVector<String> NetworkResourcesData::removeResource(Resource* cachedResource) 3215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 3225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) Vector<String> result; 3235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ResourceDataMap::iterator it; 3245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ResourceDataMap::iterator end = m_requestIdToResourceDataMap.end(); 3255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) for (it = m_requestIdToResourceDataMap.begin(); it != end; ++it) { 3265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ResourceData* resourceData = it->value; 3275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (resourceData->cachedResource() == cachedResource) { 328fff8884795cb540f87cf6e6d67b629519b00eb8bBen Murdoch resourceData->setResource(0); 3295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) result.append(it->key); 3305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 3315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 3325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return result; 3345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void NetworkResourcesData::clear(const String& preservedLoaderId) 3375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 3385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_requestIdsDeque.clear(); 3395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_contentSize = 0; 3405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ResourceDataMap preservedMap; 3425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ResourceDataMap::iterator it; 3445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ResourceDataMap::iterator end = m_requestIdToResourceDataMap.end(); 3455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) for (it = m_requestIdToResourceDataMap.begin(); it != end; ++it) { 3465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ResourceData* resourceData = it->value; 3475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!preservedLoaderId.isNull() && resourceData->loaderId() == preservedLoaderId) 3485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) preservedMap.set(it->key, it->value); 3495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else 3505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) delete resourceData; 3515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 3525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_requestIdToResourceDataMap.swap(preservedMap); 3535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_reusedXHRReplayDataRequestIds.clear(); 3555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void NetworkResourcesData::setResourcesDataSizeLimits(size_t maximumResourcesContentSize, size_t maximumSingleResourceContentSize) 3585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 3595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) clear(); 3605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_maximumResourcesContentSize = maximumResourcesContentSize; 3615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_maximumSingleResourceContentSize = maximumSingleResourceContentSize; 3625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 364926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)NetworkResourcesData::ResourceData* NetworkResourcesData::resourceDataForRequestId(const String& requestId) 365926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){ 366926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (requestId.isNull()) 367926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return 0; 368926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return m_requestIdToResourceDataMap.get(requestId); 369926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)} 3705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void NetworkResourcesData::ensureNoDataForRequestId(const String& requestId) 3725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 373926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) ResourceData* resourceData = resourceDataForRequestId(requestId); 374926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (!resourceData) 375926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return; 376926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (resourceData->hasContent() || resourceData->hasData()) 377926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) m_contentSize -= resourceData->evictContent(); 378926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) delete resourceData; 379926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) m_requestIdToResourceDataMap.remove(requestId); 3805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool NetworkResourcesData::ensureFreeSpace(size_t size) 3835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 3845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (size > m_maximumResourcesContentSize) 3855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 3865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) while (size > m_maximumResourcesContentSize - m_contentSize) { 3885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) String requestId = m_requestIdsDeque.takeFirst(); 389926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) ResourceData* resourceData = resourceDataForRequestId(requestId); 3905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (resourceData) 3915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_contentSize -= resourceData->evictContent(); 3925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 3935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return true; 3945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} // namespace WebCore 3975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 398