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"
3409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)#include "platform/MIMETypeRegistry.h"
351e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)#include "platform/SharedBuffer.h"
36bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)#include "platform/network/ResourceResponse.h"
375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)namespace {
395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// 100MB
405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)static size_t maximumResourcesContentSize = 100 * 1000 * 1000;
415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// 10MB
435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)static size_t maximumSingleResourceContentSize = 10 * 1000 * 1000;
445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
46c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)namespace blink {
475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
49c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)PassRefPtrWillBeRawPtr<XHRReplayData> XHRReplayData::create(ExecutionContext* executionContext, const AtomicString& method, const KURL& url, bool async, PassRefPtr<FormData> formData, bool includeCredentials)
505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
51c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    return adoptRefWillBeNoop(new XHRReplayData(executionContext, method, url, async, formData, includeCredentials));
525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
54a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)void XHRReplayData::addHeader(const AtomicString& key, const AtomicString& value)
555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    m_headers.set(key, value);
575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
5909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)XHRReplayData::XHRReplayData(ExecutionContext* executionContext, const AtomicString& method, const KURL& url, bool async, PassRefPtr<FormData> formData, bool includeCredentials)
6009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    : ContextLifecycleObserver(executionContext)
6109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    , m_method(method)
625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    , m_url(url)
635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    , m_async(async)
645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    , m_formData(formData)
655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    , m_includeCredentials(includeCredentials)
665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// ResourceData
705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)NetworkResourcesData::ResourceData::ResourceData(const String& requestId, const String& loaderId)
715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    : m_requestId(requestId)
725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    , m_loaderId(loaderId)
735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    , m_base64Encoded(false)
745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    , m_isContentEvicted(false)
755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    , m_type(InspectorPageAgent::OtherResource)
765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    , m_cachedResource(0)
775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void NetworkResourcesData::ResourceData::setContent(const String& content, bool base64Encoded)
815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    ASSERT(!hasData());
835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    ASSERT(!hasContent());
845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    m_content = content;
855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    m_base64Encoded = base64Encoded;
865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)static size_t contentSizeInBytes(const String& content)
895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return content.isNull() ? 0 : content.impl()->sizeInBytes();
915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)unsigned NetworkResourcesData::ResourceData::removeContent()
945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    unsigned result = 0;
965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (hasData()) {
975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        ASSERT(!hasContent());
985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        result = m_dataBuffer->size();
995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        m_dataBuffer = nullptr;
1005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
1015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (hasContent()) {
1035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        ASSERT(!hasData());
1045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        result = contentSizeInBytes(m_content);
1055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        m_content = String();
1065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
1075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return result;
1085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
1095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)unsigned NetworkResourcesData::ResourceData::evictContent()
1115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
1125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    m_isContentEvicted = true;
1135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return removeContent();
1145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
1155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)size_t NetworkResourcesData::ResourceData::dataLength() const
1175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
1185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return m_dataBuffer ? m_dataBuffer->size() : 0;
1195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
1205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void NetworkResourcesData::ResourceData::appendData(const char* data, size_t dataLength)
1225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
1235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    ASSERT(!hasContent());
1245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (!m_dataBuffer)
1255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        m_dataBuffer = SharedBuffer::create(data, dataLength);
1265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    else
1275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        m_dataBuffer->append(data, dataLength);
1285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
1295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)size_t NetworkResourcesData::ResourceData::decodeDataToContent()
1315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
1325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    ASSERT(!hasContent());
1335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    size_t dataLength = m_dataBuffer->size();
1345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    m_content = m_decoder->decode(m_dataBuffer->data(), m_dataBuffer->size());
13509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    m_content = m_content + m_decoder->flush();
1365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    m_dataBuffer = nullptr;
1375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return contentSizeInBytes(m_content) - dataLength;
1385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
1395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// NetworkResourcesData
1415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)NetworkResourcesData::NetworkResourcesData()
1425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    : m_contentSize(0)
1435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    , m_maximumResourcesContentSize(maximumResourcesContentSize)
1445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    , m_maximumSingleResourceContentSize(maximumSingleResourceContentSize)
1455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
1465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
1475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)NetworkResourcesData::~NetworkResourcesData()
1495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
1505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    clear();
1515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
1525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void NetworkResourcesData::resourceCreated(const String& requestId, const String& loaderId)
1545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
1555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    ensureNoDataForRequestId(requestId);
1565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    m_requestIdToResourceDataMap.set(requestId, new ResourceData(requestId, loaderId));
1575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
1585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
15951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)static PassOwnPtr<TextResourceDecoder> createOtherResourceTextDecoder(const String& mimeType, const String& textEncodingName)
1605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
16151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)    OwnPtr<TextResourceDecoder> decoder;
16209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    if (!textEncodingName.isEmpty()) {
1635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        decoder = TextResourceDecoder::create("text/plain", textEncodingName);
16409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    } else if (DOMImplementation::isXMLMIMEType(mimeType)) {
1655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        decoder = TextResourceDecoder::create("application/xml");
1665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        decoder->useLenientXMLDecoding();
16709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    } else if (equalIgnoringCase(mimeType, "text/html")) {
1685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        decoder = TextResourceDecoder::create("text/html", "UTF-8");
16909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    } else if (MIMETypeRegistry::isSupportedJavaScriptMIMEType(mimeType) || DOMImplementation::isJSONMIMEType(mimeType)) {
17009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)        decoder = TextResourceDecoder::create("text/plain", "UTF-8");
17109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    } else if (DOMImplementation::isTextMIMEType(mimeType)) {
1725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        decoder = TextResourceDecoder::create("text/plain", "ISO-8859-1");
17309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    }
17451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)    return decoder.release();
1755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
1765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void NetworkResourcesData::responseReceived(const String& requestId, const String& frameId, const ResourceResponse& response)
1785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
179926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    ResourceData* resourceData = resourceDataForRequestId(requestId);
1805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (!resourceData)
1815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return;
1825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    resourceData->setFrameId(frameId);
1835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    resourceData->setUrl(response.url());
1845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    resourceData->setDecoder(createOtherResourceTextDecoder(response.mimeType(), response.textEncodingName()));
1855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    resourceData->setHTTPStatusCode(response.httpStatusCode());
1865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
1875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void NetworkResourcesData::setResourceType(const String& requestId, InspectorPageAgent::ResourceType type)
1895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
190926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    ResourceData* resourceData = resourceDataForRequestId(requestId);
1915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (!resourceData)
1925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return;
1935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    resourceData->setType(type);
1945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
1955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)InspectorPageAgent::ResourceType NetworkResourcesData::resourceType(const String& requestId)
1975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
198926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    ResourceData* resourceData = resourceDataForRequestId(requestId);
1995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (!resourceData)
2005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return InspectorPageAgent::OtherResource;
2015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return resourceData->type();
2025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
2035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void NetworkResourcesData::setResourceContent(const String& requestId, const String& content, bool base64Encoded)
2055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
206926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    ResourceData* resourceData = resourceDataForRequestId(requestId);
2075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (!resourceData)
2085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return;
2095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    size_t dataLength = contentSizeInBytes(content);
2105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (dataLength > m_maximumSingleResourceContentSize)
2115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return;
2125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (resourceData->isContentEvicted())
2135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return;
2145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (ensureFreeSpace(dataLength) && !resourceData->isContentEvicted()) {
2155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (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.
2165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (resourceData->hasContent())
2175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            m_contentSize -= resourceData->removeContent();
2185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        m_requestIdsDeque.append(requestId);
2195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        resourceData->setContent(content, base64Encoded);
2205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        m_contentSize += dataLength;
2215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
2225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
2235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void NetworkResourcesData::maybeAddResourceData(const String& requestId, const char* data, size_t dataLength)
2255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
226926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    ResourceData* resourceData = resourceDataForRequestId(requestId);
2275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (!resourceData)
2285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return;
2295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (!resourceData->decoder())
2305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return;
2315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (resourceData->dataLength() + dataLength > m_maximumSingleResourceContentSize)
2325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        m_contentSize -= resourceData->evictContent();
2335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (resourceData->isContentEvicted())
2345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return;
2355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (ensureFreeSpace(dataLength) && !resourceData->isContentEvicted()) {
2365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        m_requestIdsDeque.append(requestId);
2375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        resourceData->appendData(data, dataLength);
2385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        m_contentSize += dataLength;
2395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
2405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
2415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void NetworkResourcesData::maybeDecodeDataToContent(const String& requestId)
2435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
244926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    ResourceData* resourceData = resourceDataForRequestId(requestId);
2455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (!resourceData)
2465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return;
2475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (!resourceData->hasData())
2485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return;
2495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    m_contentSize += resourceData->decodeDataToContent();
2505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    size_t dataLength = contentSizeInBytes(resourceData->content());
2515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (dataLength > m_maximumSingleResourceContentSize)
2525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        m_contentSize -= resourceData->evictContent();
2535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
2545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
255fff8884795cb540f87cf6e6d67b629519b00eb8bBen Murdochvoid NetworkResourcesData::addResource(const String& requestId, Resource* cachedResource)
2565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
257926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    ResourceData* resourceData = resourceDataForRequestId(requestId);
258926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    if (!resourceData)
2595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return;
260fff8884795cb540f87cf6e6d67b629519b00eb8bBen Murdoch    resourceData->setResource(cachedResource);
2615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
2625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)NetworkResourcesData::ResourceData const* NetworkResourcesData::data(const String& requestId)
2645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
265926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    return resourceDataForRequestId(requestId);
2665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
2675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)XHRReplayData* NetworkResourcesData::xhrReplayData(const String& requestId)
2695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
2705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (m_reusedXHRReplayDataRequestIds.contains(requestId))
2715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return xhrReplayData(m_reusedXHRReplayDataRequestIds.get(requestId));
2725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
273926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    ResourceData* resourceData = resourceDataForRequestId(requestId);
2745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (!resourceData)
2755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return 0;
2765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return resourceData->xhrReplayData();
2775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
2785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void NetworkResourcesData::setXHRReplayData(const String& requestId, XHRReplayData* xhrReplayData)
2805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
281926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    ResourceData* resourceData = resourceDataForRequestId(requestId);
2825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (!resourceData) {
2835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        Vector<String> result;
2845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        ReusedRequestIds::iterator it;
2855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        ReusedRequestIds::iterator end = m_reusedXHRReplayDataRequestIds.end();
2865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        for (it = m_reusedXHRReplayDataRequestIds.begin(); it != end; ++it) {
2875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            if (it->value == requestId)
2885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                setXHRReplayData(it->key, xhrReplayData);
2895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
2905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return;
2915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
2925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    resourceData->setXHRReplayData(xhrReplayData);
2945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
2955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
29606f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)Vector<NetworkResourcesData::ResourceData*> NetworkResourcesData::resources()
29706f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles){
29806f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)    Vector<ResourceData*> result;
29906f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)    for (ResourceDataMap::iterator it = m_requestIdToResourceDataMap.begin(); it != m_requestIdToResourceDataMap.end(); ++it)
30006f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)        result.append(it->value);
30106f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)    return result;
30206f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)}
30306f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)
304fff8884795cb540f87cf6e6d67b629519b00eb8bBen MurdochVector<String> NetworkResourcesData::removeResource(Resource* cachedResource)
3055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
3065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    Vector<String> result;
3075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    ResourceDataMap::iterator it;
3085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    ResourceDataMap::iterator end = m_requestIdToResourceDataMap.end();
3095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    for (it = m_requestIdToResourceDataMap.begin(); it != end; ++it) {
3105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        ResourceData* resourceData = it->value;
3115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (resourceData->cachedResource() == cachedResource) {
312fff8884795cb540f87cf6e6d67b629519b00eb8bBen Murdoch            resourceData->setResource(0);
3135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            result.append(it->key);
3145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
3155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
3165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return result;
3185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
3195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void NetworkResourcesData::clear(const String& preservedLoaderId)
3215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
3225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    m_requestIdsDeque.clear();
3235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    m_contentSize = 0;
3245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    ResourceDataMap preservedMap;
3265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    ResourceDataMap::iterator it;
3285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    ResourceDataMap::iterator end = m_requestIdToResourceDataMap.end();
3295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    for (it = m_requestIdToResourceDataMap.begin(); it != end; ++it) {
3305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        ResourceData* resourceData = it->value;
3315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (!preservedLoaderId.isNull() && resourceData->loaderId() == preservedLoaderId)
3325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            preservedMap.set(it->key, it->value);
3335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        else
3345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            delete resourceData;
3355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
3365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    m_requestIdToResourceDataMap.swap(preservedMap);
3375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    m_reusedXHRReplayDataRequestIds.clear();
3395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
3405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void NetworkResourcesData::setResourcesDataSizeLimits(size_t maximumResourcesContentSize, size_t maximumSingleResourceContentSize)
3425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
3435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    clear();
3445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    m_maximumResourcesContentSize = maximumResourcesContentSize;
3455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    m_maximumSingleResourceContentSize = maximumSingleResourceContentSize;
3465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
3475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
348926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)NetworkResourcesData::ResourceData* NetworkResourcesData::resourceDataForRequestId(const String& requestId)
349926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){
350926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    if (requestId.isNull())
351926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        return 0;
352926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    return m_requestIdToResourceDataMap.get(requestId);
353926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)}
3545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void NetworkResourcesData::ensureNoDataForRequestId(const String& requestId)
3565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
357926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    ResourceData* resourceData = resourceDataForRequestId(requestId);
358926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    if (!resourceData)
359926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        return;
360926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    if (resourceData->hasContent() || resourceData->hasData())
361926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        m_contentSize -= resourceData->evictContent();
362926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    delete resourceData;
363926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    m_requestIdToResourceDataMap.remove(requestId);
3645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
3655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool NetworkResourcesData::ensureFreeSpace(size_t size)
3675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
3685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (size > m_maximumResourcesContentSize)
3695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return false;
3705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    while (size > m_maximumResourcesContentSize - m_contentSize) {
3725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        String requestId = m_requestIdsDeque.takeFirst();
373926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        ResourceData* resourceData = resourceDataForRequestId(requestId);
3745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (resourceData)
3755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            m_contentSize -= resourceData->evictContent();
3765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
3775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return true;
3785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
3795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
380c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)} // namespace blink
3815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
382