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