WebKit Bugzilla
New
Browse
Search+
Log In
×
Sign in with GitHub
or
Remember my login
Create Account
·
Forgot Password
Forgotten password account recovery
[patch]
Patch rebased to apply on current git master
wcore-no-buffering.diff (text/plain), 27.41 KB, created by
Carlos Garcia Campos
on 2013-06-04 04:39:30 PDT
(
hide
)
Description:
Patch rebased to apply on current git master
Filename:
MIME Type:
Creator:
Carlos Garcia Campos
Created:
2013-06-04 04:39:30 PDT
Size:
27.41 KB
patch
obsolete
>diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog >index f4d8940..420adbe 100644 >--- a/Source/WebCore/ChangeLog >+++ b/Source/WebCore/ChangeLog >@@ -1,3 +1,101 @@ >+2013-05-23 Carlos Garcia Campos <cgarcia@igalia.com> >+ >+ Avoid unnecessary data copies when loading subresources with DoNotBufferData option >+ https://bugs.webkit.org/show_bug.cgi?id=115804 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ When DoNotBufferData option is used to load a resource its data >+ is always copied before sending it to the CachedResource. Most >+ of the cached resources ignore the incremental data and wait >+ until all data has been received to save the ResourceBuffer, >+ that will be NULL anyway when DoNotBufferData is used. >+ CachedRawResource notifies its clients about the incremental >+ data, but it doesn't save the data when DoNotBufferData option >+ is present. In those cases we are unnecessary copying the data. >+ >+ CachedResource::data has been split into >+ CachedResource::addDataBuffer() used for incremental data chunks >+ when buffering data, CachedResource::addData() used for >+ incremental data chunks when not beffering and >+ CachedResource::finishLoading() used to finish the loading. This >+ way we get rid of the allDataReceived boolean parameter and cached >+ resources not interested in incremenetal data chunks only have to >+ implement finishLoading() without having to check if all data have >+ been received or not. >+ >+ SubresourceLoader::sendDataToResource was always called after >+ checking if loading multipart content, and then it was checked >+ again to decided whether to copy the data or not. It has been >+ removed in favor of calling directly the resource methods, >+ finishLoading for multipart content, addDataBuffer for data chunks >+ when buffering and addData for data chunks when not buffering. >+ >+ No new functionality, covered by existing tests. >+ >+ * html/ImageDocument.cpp: >+ (WebCore::ImageDocumentParser::appendBytes): Update to API changes. >+ (WebCore::ImageDocumentParser::finish): Ditto. >+ * loader/SubresourceLoader.cpp: >+ (WebCore::SubresourceLoader::didReceiveResponse): Call >+ finishLoading() for multipart content. >+ (WebCore::SubresourceLoader::didReceiveDataOrBuffer): Add data to >+ the resource using addDataBuffer or addData depending on whether >+ we are buffering or not. >+ (WebCore::SubresourceLoader::didFinishLoading): Call >+ finishLoading() for the cached resource instead of data. >+ * loader/cache/CachedCSSStyleSheet.cpp: >+ (WebCore::CachedCSSStyleSheet::finishLoading): >+ * loader/cache/CachedCSSStyleSheet.h: >+ (CachedCSSStyleSheet): >+ * loader/cache/CachedFont.cpp: >+ (WebCore::CachedFont::finishLoading): >+ * loader/cache/CachedFont.h: >+ (CachedFont): >+ * loader/cache/CachedImage.cpp: >+ (WebCore::CachedImage::addDataBuffer): >+ (WebCore::CachedImage::addData): >+ (WebCore::CachedImage::finishLoading): >+ * loader/cache/CachedImage.h: >+ (CachedImage): >+ * loader/cache/CachedRawResource.cpp: >+ (WebCore::CachedRawResource::addDataBuffer): >+ (WebCore::CachedRawResource::addData): >+ (WebCore::CachedImage::finishLoading): >+ (WebCore::CachedRawResource::notifyDataReceived): Helper private >+ function to notify the clients about data received. >+ * loader/cache/CachedRawResource.h: >+ (CachedRawResource): >+ * loader/cache/CachedResource.cpp: >+ (WebCore::CachedResource::addDataBuffer): Assert to make sure this >+ is only called when BufferData option is present. >+ (WebCore::CachedResource::addData): Assert to make sure this is >+ only called when DoNotBufferData option is present. >+ (WebCore::CachedResource::finishLoading): >+ * loader/cache/CachedResource.h: >+ (CachedResource): >+ * loader/cache/CachedSVGDocument.cpp: >+ (WebCore::CachedSVGDocument::finishLoading): >+ * loader/cache/CachedSVGDocument.h: >+ (CachedSVGDocument): >+ * loader/cache/CachedScript.cpp: >+ (WebCore::CachedScript::finishLoading): >+ * loader/cache/CachedScript.h: >+ (CachedScript): >+ * loader/cache/CachedShader.cpp: >+ (WebCore::CachedShader::finishLoading): >+ * loader/cache/CachedShader.h: >+ (CachedShader): >+ * loader/cache/CachedTextTrack.cpp: >+ (WebCore::CachedTextTrack::addDataBuffer): >+ (WebCore::CachedTextTrack::finishLoading): >+ * loader/cache/CachedTextTrack.h: >+ (CachedTextTrack): >+ * loader/cache/CachedXSLStyleSheet.cpp: >+ (WebCore::CachedXSLStyleSheet::finishLoading): >+ * loader/cache/CachedXSLStyleSheet.h: >+ (CachedXSLStyleSheet): >+ > 2013-06-04 Kent Tamura <tkent@chromium.org> > > Fix an assertion failure in Range::textNodeSplit by Text::splitText >diff --git a/Source/WebCore/html/ImageDocument.cpp b/Source/WebCore/html/ImageDocument.cpp >index 8d70caf..6203c33 100644 >--- a/Source/WebCore/html/ImageDocument.cpp >+++ b/Source/WebCore/html/ImageDocument.cpp >@@ -135,7 +135,7 @@ void ImageDocumentParser::appendBytes(DocumentWriter*, const char*, size_t) > return; > > CachedImage* cachedImage = document()->cachedImage(); >- cachedImage->data(frame->loader()->documentLoader()->mainResourceData(), false); >+ cachedImage->addDataBuffer(frame->loader()->documentLoader()->mainResourceData()); > > document()->imageUpdated(); > } >@@ -151,7 +151,7 @@ void ImageDocumentParser::finish() > if (document()->frame()->loader()->documentLoader()->isLoadingMultipartContent()) > data = data->copy(); > >- cachedImage->data(data.release(), true); >+ cachedImage->finishLoading(data.release()); > cachedImage->finish(); > > cachedImage->setResponse(document()->frame()->loader()->documentLoader()->response()); >diff --git a/Source/WebCore/loader/SubresourceLoader.cpp b/Source/WebCore/loader/SubresourceLoader.cpp >index 24bc637..735df56 100644 >--- a/Source/WebCore/loader/SubresourceLoader.cpp >+++ b/Source/WebCore/loader/SubresourceLoader.cpp >@@ -201,7 +201,9 @@ void SubresourceLoader::didReceiveResponse(const ResourceResponse& response) > > RefPtr<ResourceBuffer> buffer = resourceData(); > if (m_loadingMultipartContent && buffer && buffer->size()) { >- sendDataToResource(buffer->data(), buffer->size()); >+ // The loader delivers the data in a multipart section all at once, then sends eof. >+ // The resource data will change as the next part is loaded, so we need to make a copy. >+ m_resource->finishLoading(ResourceBuffer::create(buffer->data(), buffer->size())); > clearResourceData(); > // Since a subresource loader does not load multipart sections progressively, data was delivered to the loader all at once. > // After the first multipart section is complete, signal to delegates that this load is "finished" >@@ -236,8 +238,12 @@ void SubresourceLoader::didReceiveDataOrBuffer(const char* data, int length, Pas > > ResourceLoader::didReceiveDataOrBuffer(data, length, buffer, encodedDataLength, dataPayloadType); > >- if (!m_loadingMultipartContent) >- sendDataToResource(buffer ? buffer->data() : data, buffer ? buffer->size() : length); >+ if (!m_loadingMultipartContent) { >+ if (resourceData()) >+ m_resource->addDataBuffer(resourceData()); >+ else >+ m_resource->addData(buffer ? buffer->data() : data, buffer ? buffer->size() : length); >+ } > } > > bool SubresourceLoader::checkForHTTPStatusCodeError() >@@ -251,21 +257,6 @@ bool SubresourceLoader::checkForHTTPStatusCodeError() > return true; > } > >-void SubresourceLoader::sendDataToResource(const char* data, int length) >-{ >- // There are two cases where we might need to create our own SharedBuffer instead of copying the one in ResourceLoader. >- // (1) Multipart content: The loader delivers the data in a multipart section all at once, then sends eof. >- // The resource data will change as the next part is loaded, so we need to make a copy. >- // (2) Our client requested that the data not be buffered at the ResourceLoader level via ResourceLoaderOptions. In this case, >- // ResourceLoader::resourceData() will be null. However, unlike the multipart case, we don't want to tell the CachedResource >- // that all data has been received yet. >- if (m_loadingMultipartContent || !resourceData()) { >- RefPtr<ResourceBuffer> copiedData = ResourceBuffer::create(data, length); >- m_resource->data(copiedData.release(), m_loadingMultipartContent); >- } else >- m_resource->data(resourceData(), false); >-} >- > void SubresourceLoader::didFinishLoading(double finishTime) > { > if (m_state != Initialized) >@@ -279,7 +270,7 @@ void SubresourceLoader::didFinishLoading(double finishTime) > CachedResourceHandle<CachedResource> protectResource(m_resource); > m_state = Finishing; > m_resource->setLoadFinishTime(finishTime); >- m_resource->data(resourceData(), true); >+ m_resource->finishLoading(resourceData()); > > if (wasCancelled()) > return; >diff --git a/Source/WebCore/loader/SubresourceLoader.h b/Source/WebCore/loader/SubresourceLoader.h >index 4e5ecdc..4d57fdd 100644 >--- a/Source/WebCore/loader/SubresourceLoader.h >+++ b/Source/WebCore/loader/SubresourceLoader.h >@@ -73,7 +73,6 @@ private: > virtual void releaseResources() OVERRIDE; > > bool checkForHTTPStatusCodeError(); >- void sendDataToResource(const char*, int); > > void didReceiveDataOrBuffer(const char*, int, PassRefPtr<SharedBuffer>, long long encodedDataLength, DataPayloadType); > >diff --git a/Source/WebCore/loader/cache/CachedCSSStyleSheet.cpp b/Source/WebCore/loader/cache/CachedCSSStyleSheet.cpp >index 184e904..7a746ea 100644 >--- a/Source/WebCore/loader/cache/CachedCSSStyleSheet.cpp >+++ b/Source/WebCore/loader/cache/CachedCSSStyleSheet.cpp >@@ -93,11 +93,8 @@ const String CachedCSSStyleSheet::sheetText(bool enforceMIMEType, bool* hasValid > return sheetText; > } > >-void CachedCSSStyleSheet::data(PassRefPtr<ResourceBuffer> data, bool allDataReceived) >+void CachedCSSStyleSheet::finishLoading(PassRefPtr<ResourceBuffer> data) > { >- if (!allDataReceived) >- return; >- > m_data = data; > setEncodedSize(m_data.get() ? m_data->size() : 0); > // Decode the data to find out the encoding and keep the sheet text around during checkNotify() >diff --git a/Source/WebCore/loader/cache/CachedCSSStyleSheet.h b/Source/WebCore/loader/cache/CachedCSSStyleSheet.h >index e4bb97e..e803583 100644 >--- a/Source/WebCore/loader/cache/CachedCSSStyleSheet.h >+++ b/Source/WebCore/loader/cache/CachedCSSStyleSheet.h >@@ -47,7 +47,7 @@ namespace WebCore { > > virtual void setEncoding(const String&); > virtual String encoding() const; >- virtual void data(PassRefPtr<ResourceBuffer> data, bool allDataReceived); >+ virtual void finishLoading(PassRefPtr<ResourceBuffer> data); > virtual void destroyDecodedData() OVERRIDE; > > PassRefPtr<StyleSheetContents> restoreParsedStyleSheet(const CSSParserContext&); >diff --git a/Source/WebCore/loader/cache/CachedFont.cpp b/Source/WebCore/loader/cache/CachedFont.cpp >index cca02f2..5bc0aea 100644 >--- a/Source/WebCore/loader/cache/CachedFont.cpp >+++ b/Source/WebCore/loader/cache/CachedFont.cpp >@@ -75,11 +75,8 @@ void CachedFont::didAddClient(CachedResourceClient* c) > static_cast<CachedFontClient*>(c)->fontLoaded(this); > } > >-void CachedFont::data(PassRefPtr<ResourceBuffer> data, bool allDataReceived) >+void CachedFont::finishLoading(PassRefPtr<ResourceBuffer> data) > { >- if (!allDataReceived) >- return; >- > m_data = data; > setEncodedSize(m_data.get() ? m_data->size() : 0); > setLoading(false); >diff --git a/Source/WebCore/loader/cache/CachedFont.h b/Source/WebCore/loader/cache/CachedFont.h >index d29521b..9c30967 100644 >--- a/Source/WebCore/loader/cache/CachedFont.h >+++ b/Source/WebCore/loader/cache/CachedFont.h >@@ -48,7 +48,7 @@ public: > virtual void load(CachedResourceLoader*, const ResourceLoaderOptions&); > > virtual void didAddClient(CachedResourceClient*); >- virtual void data(PassRefPtr<ResourceBuffer> data, bool allDataReceived); >+ virtual void finishLoading(PassRefPtr<ResourceBuffer> data); > > virtual void allClientsRemoved(); > void beginLoadIfNeeded(CachedResourceLoader* dl); >diff --git a/Source/WebCore/loader/cache/CachedImage.cpp b/Source/WebCore/loader/cache/CachedImage.cpp >index 2577b27..e69cadf 100644 >--- a/Source/WebCore/loader/cache/CachedImage.cpp >+++ b/Source/WebCore/loader/cache/CachedImage.cpp >@@ -352,7 +352,7 @@ size_t CachedImage::maximumDecodedImageSize() > return settings ? settings->maximumDecodedImageSize() : 0; > } > >-void CachedImage::data(PassRefPtr<ResourceBuffer> data, bool allDataReceived) >+void CachedImage::addDataBuffer(PassRefPtr<ResourceBuffer> data, bool allDataReceived) > { > m_data = data; > >@@ -389,11 +389,25 @@ void CachedImage::data(PassRefPtr<ResourceBuffer> data, bool allDataReceived) > if (m_image) > setEncodedSize(m_image->data() ? m_image->data()->size() : 0); > } >- >- if (allDataReceived) { >- setLoading(false); >- checkNotify(); >- } >+} >+ >+void CachedImage::addDataBuffer(PassRefPtr<ResourceBuffer> data) >+{ >+ ASSERT(m_options.dataBufferingPolicy == BufferData); >+ addDataBuffer(data, false); >+} >+ >+void CachedImage::addData(const char* data, int length) >+{ >+ ASSERT(m_options.dataBufferingPolicy == DoNotBufferData); >+ addDataBuffer(ResourceBuffer::create(data, length), false); >+} >+ >+void CachedImage::finishLoading(PassRefPtr<ResourceBuffer> data) >+{ >+ addDataBuffer(data, true); >+ if (!errorOccurred()) >+ CachedResource::finishLoading(data); > } > > void CachedImage::error(CachedResource::Status status) >diff --git a/Source/WebCore/loader/cache/CachedImage.h b/Source/WebCore/loader/cache/CachedImage.h >index 00f9067..3f11ef8 100644 >--- a/Source/WebCore/loader/cache/CachedImage.h >+++ b/Source/WebCore/loader/cache/CachedImage.h >@@ -76,7 +76,9 @@ public: > virtual void allClientsRemoved(); > virtual void destroyDecodedData(); > >- virtual void data(PassRefPtr<ResourceBuffer> data, bool allDataReceived); >+ virtual void addDataBuffer(PassRefPtr<ResourceBuffer>); >+ virtual void addData(const char* data, int length); >+ virtual void finishLoading(PassRefPtr<ResourceBuffer>); > virtual void error(CachedResource::Status); > virtual void responseReceived(const ResourceResponse&); > >@@ -110,6 +112,8 @@ private: > virtual void switchClientsToRevalidatedResource() OVERRIDE; > virtual bool mayTryReplaceEncodedData() const OVERRIDE { return true; } > >+ void addDataBuffer(PassRefPtr<ResourceBuffer>, bool allDataReceived); >+ > typedef pair<IntSize, float> SizeAndZoom; > typedef HashMap<const CachedImageClient*, SizeAndZoom> ContainerSizeRequests; > ContainerSizeRequests m_pendingContainerSizeRequests; >diff --git a/Source/WebCore/loader/cache/CachedRawResource.cpp b/Source/WebCore/loader/cache/CachedRawResource.cpp >index 0016de2..826d71b 100644 >--- a/Source/WebCore/loader/cache/CachedRawResource.cpp >+++ b/Source/WebCore/loader/cache/CachedRawResource.cpp >@@ -41,9 +41,10 @@ CachedRawResource::CachedRawResource(ResourceRequest& resourceRequest, Type type > { > } > >-void CachedRawResource::data(PassRefPtr<ResourceBuffer> data, bool allDataReceived) >+void CachedRawResource::addDataBuffer(PassRefPtr<ResourceBuffer> data) > { > CachedResourceHandle<CachedRawResource> protect(this); >+ ASSERT(m_options.dataBufferingPolicy == BufferData); > const char* incrementalData = 0; > size_t incrementalDataLength = 0; > if (data) { >@@ -54,22 +55,30 @@ void CachedRawResource::data(PassRefPtr<ResourceBuffer> data, bool allDataReceiv > ASSERT(data->size() >= previousDataLength); > incrementalData = data->data() + previousDataLength; > incrementalDataLength = data->size() - previousDataLength; >- } >- >- if (m_options.dataBufferingPolicy == BufferData) { >- if (data) >- setEncodedSize(data->size()); >+ setEncodedSize(data->size()); > m_data = data; > } > >- DataBufferingPolicy dataBufferingPolicy = m_options.dataBufferingPolicy; >- if (incrementalDataLength) { >- CachedResourceClientWalker<CachedRawResourceClient> w(m_clients); >- while (CachedRawResourceClient* c = w.next()) >- c->dataReceived(this, incrementalData, incrementalDataLength); >+ notifyDataReceived(incrementalData, incrementalDataLength); >+ if (m_options.dataBufferingPolicy == DoNotBufferData) { >+ if (m_loader) >+ m_loader->setDataBufferingPolicy(DoNotBufferData); >+ clear(); > } >- CachedResource::data(m_data, allDataReceived); >+} > >+void CachedRawResource::addData(const char* data, int length) >+{ >+ CachedResourceHandle<CachedRawResource> protect(this); >+ ASSERT(m_options.dataBufferingPolicy == DoNotBufferData); >+ notifyDataReceived(data, length); >+} >+ >+void CachedRawResource::finishLoading(PassRefPtr<ResourceBuffer> data) >+{ >+ CachedResourceHandle<CachedRawResource> protect(this); >+ DataBufferingPolicy dataBufferingPolicy = m_options.dataBufferingPolicy; >+ CachedResource::finishLoading(data); > if (dataBufferingPolicy == BufferData && m_options.dataBufferingPolicy == DoNotBufferData) { > if (m_loader) > m_loader->setDataBufferingPolicy(DoNotBufferData); >@@ -77,6 +86,16 @@ void CachedRawResource::data(PassRefPtr<ResourceBuffer> data, bool allDataReceiv > } > } > >+void CachedRawResource::notifyDataReceived(const char* data, int length) >+{ >+ if (!length) >+ return; >+ >+ CachedResourceClientWalker<CachedRawResourceClient> w(m_clients); >+ while (CachedRawResourceClient* c = w.next()) >+ c->dataReceived(this, data, length); >+} >+ > void CachedRawResource::didAddClient(CachedResourceClient* c) > { > if (!hasClient(c)) >diff --git a/Source/WebCore/loader/cache/CachedRawResource.h b/Source/WebCore/loader/cache/CachedRawResource.h >index 60139aa..7dcc110 100644 >--- a/Source/WebCore/loader/cache/CachedRawResource.h >+++ b/Source/WebCore/loader/cache/CachedRawResource.h >@@ -50,7 +50,9 @@ public: > > private: > virtual void didAddClient(CachedResourceClient*); >- virtual void data(PassRefPtr<ResourceBuffer> data, bool allDataReceived); >+ virtual void addDataBuffer(PassRefPtr<ResourceBuffer>); >+ virtual void addData(const char* data, int length); >+ virtual void finishLoading(PassRefPtr<ResourceBuffer>); > > virtual bool shouldIgnoreHTTPStatusCodeErrors() const { return true; } > virtual void allClientsRemoved(); >@@ -62,6 +64,8 @@ private: > virtual void switchClientsToRevalidatedResource() OVERRIDE; > virtual bool mayTryReplaceEncodedData() const OVERRIDE { return true; } > >+ void notifyDataReceived(const char* data, int length); >+ > unsigned long m_identifier; > > struct RedirectPair { >diff --git a/Source/WebCore/loader/cache/CachedResource.cpp b/Source/WebCore/loader/cache/CachedResource.cpp >index ed38da8..c0a2cf7 100644 >--- a/Source/WebCore/loader/cache/CachedResource.cpp >+++ b/Source/WebCore/loader/cache/CachedResource.cpp >@@ -362,11 +362,20 @@ void CachedResource::checkNotify() > c->notifyFinished(this); > } > >-void CachedResource::data(PassRefPtr<ResourceBuffer>, bool allDataReceived) >+void CachedResource::addDataBuffer(PassRefPtr<ResourceBuffer>) >+{ >+ ASSERT(m_options.dataBufferingPolicy == BufferData); >+} >+ >+void CachedResource::addData(const char* data, int length) >+{ >+ UNUSED_PARAM(data); >+ UNUSED_PARAM(length); >+ ASSERT(m_options.dataBufferingPolicy == DoNotBufferData); >+} >+ >+void CachedResource::finishLoading(PassRefPtr<ResourceBuffer>) > { >- if (!allDataReceived) >- return; >- > setLoading(false); > checkNotify(); > } >diff --git a/Source/WebCore/loader/cache/CachedResource.h b/Source/WebCore/loader/cache/CachedResource.h >index 32a588e..4ad2e96 100644 >--- a/Source/WebCore/loader/cache/CachedResource.h >+++ b/Source/WebCore/loader/cache/CachedResource.h >@@ -101,7 +101,9 @@ public: > > virtual void setEncoding(const String&) { } > virtual String encoding() const { return String(); } >- virtual void data(PassRefPtr<ResourceBuffer> data, bool allDataReceived); >+ virtual void addDataBuffer(PassRefPtr<ResourceBuffer> data); >+ virtual void addData(const char* data, int length); >+ virtual void finishLoading(PassRefPtr<ResourceBuffer> data); > virtual void error(CachedResource::Status); > > void setResourceError(const ResourceError& error) { m_error = error; } >diff --git a/Source/WebCore/loader/cache/CachedSVGDocument.cpp b/Source/WebCore/loader/cache/CachedSVGDocument.cpp >index f2b8e5a..059fad0 100644 >--- a/Source/WebCore/loader/cache/CachedSVGDocument.cpp >+++ b/Source/WebCore/loader/cache/CachedSVGDocument.cpp >@@ -53,11 +53,8 @@ String CachedSVGDocument::encoding() const > return m_decoder->encoding().name(); > } > >-void CachedSVGDocument::data(PassRefPtr<ResourceBuffer> data, bool allDataReceived) >+void CachedSVGDocument::finishLoading(PassRefPtr<ResourceBuffer> data) > { >- if (!allDataReceived) >- return; >- > if (data) { > StringBuilder decodedText; > decodedText.append(m_decoder->decode(data->data(), data->size())); >@@ -66,9 +63,7 @@ void CachedSVGDocument::data(PassRefPtr<ResourceBuffer> data, bool allDataReceiv > m_document = SVGDocument::create(0, response().url()); > m_document->setContent(decodedText.toString()); > } >- >- setLoading(false); >- checkNotify(); >+ CachedResource::finishLoading(data); > } > > } >diff --git a/Source/WebCore/loader/cache/CachedSVGDocument.h b/Source/WebCore/loader/cache/CachedSVGDocument.h >index 99fb8ca..93a990b 100644 >--- a/Source/WebCore/loader/cache/CachedSVGDocument.h >+++ b/Source/WebCore/loader/cache/CachedSVGDocument.h >@@ -40,7 +40,7 @@ public: > > virtual void setEncoding(const String&); > virtual String encoding() const; >- virtual void data(PassRefPtr<ResourceBuffer> data, bool allDataReceived); >+ virtual void finishLoading(PassRefPtr<ResourceBuffer> data); > > protected: > RefPtr<SVGDocument> m_document; >diff --git a/Source/WebCore/loader/cache/CachedScript.cpp b/Source/WebCore/loader/cache/CachedScript.cpp >index 198dd65..4b8b553 100644 >--- a/Source/WebCore/loader/cache/CachedScript.cpp >+++ b/Source/WebCore/loader/cache/CachedScript.cpp >@@ -82,15 +82,11 @@ const String& CachedScript::script() > return m_script; > } > >-void CachedScript::data(PassRefPtr<ResourceBuffer> data, bool allDataReceived) >+void CachedScript::finishLoading(PassRefPtr<ResourceBuffer> data) > { >- if (!allDataReceived) >- return; >- > m_data = data; > setEncodedSize(m_data.get() ? m_data->size() : 0); >- setLoading(false); >- checkNotify(); >+ CachedResource::finishLoading(data); > } > > void CachedScript::destroyDecodedData() >diff --git a/Source/WebCore/loader/cache/CachedScript.h b/Source/WebCore/loader/cache/CachedScript.h >index 5d8b27e..c27ee80 100644 >--- a/Source/WebCore/loader/cache/CachedScript.h >+++ b/Source/WebCore/loader/cache/CachedScript.h >@@ -42,7 +42,7 @@ namespace WebCore { > > virtual void setEncoding(const String&); > virtual String encoding() const; >- virtual void data(PassRefPtr<ResourceBuffer> data, bool allDataReceived); >+ virtual void finishLoading(PassRefPtr<ResourceBuffer> data); > String mimeType() const; > > virtual void destroyDecodedData(); >diff --git a/Source/WebCore/loader/cache/CachedShader.cpp b/Source/WebCore/loader/cache/CachedShader.cpp >index 2222c60..382a241 100644 >--- a/Source/WebCore/loader/cache/CachedShader.cpp >+++ b/Source/WebCore/loader/cache/CachedShader.cpp >@@ -60,11 +60,10 @@ const String& CachedShader::shaderString() > return m_shaderString; > } > >-void CachedShader::data(PassRefPtr<ResourceBuffer> data, bool allDataReceived) >+void CachedShader::finishLoading(PassRefPtr<ResourceBuffer> data) > { >- if (allDataReceived) >- m_data = data; >- CachedResource::data(data, allDataReceived); >+ m_data = data; >+ CachedResource::finishLoading(data); > } > > } // namespace WebCore >diff --git a/Source/WebCore/loader/cache/CachedShader.h b/Source/WebCore/loader/cache/CachedShader.h >index 11b9180..aa73dbc 100644 >--- a/Source/WebCore/loader/cache/CachedShader.h >+++ b/Source/WebCore/loader/cache/CachedShader.h >@@ -44,7 +44,7 @@ public: > virtual ~CachedShader(); > > const String& shaderString(); >- void data(PassRefPtr<ResourceBuffer>, bool allDataReceived); >+ void finishLoading(PassRefPtr<ResourceBuffer>); > > private: > virtual bool mayTryReplaceEncodedData() const OVERRIDE { return true; } >diff --git a/Source/WebCore/loader/cache/CachedTextTrack.cpp b/Source/WebCore/loader/cache/CachedTextTrack.cpp >index f6143dc..5335c09 100644 >--- a/Source/WebCore/loader/cache/CachedTextTrack.cpp >+++ b/Source/WebCore/loader/cache/CachedTextTrack.cpp >@@ -48,20 +48,21 @@ CachedTextTrack::~CachedTextTrack() > { > } > >-void CachedTextTrack::data(PassRefPtr<ResourceBuffer> data, bool allDataReceived) >+void CachedTextTrack::addDataBuffer(PassRefPtr<ResourceBuffer> data) > { >+ ASSERT(m_options.dataBufferingPolicy == BufferData); > m_data = data; > setEncodedSize(m_data.get() ? m_data->size() : 0); > > CachedResourceClientWalker<CachedResourceClient> walker(m_clients); > while (CachedResourceClient *client = walker.next()) > client->deprecatedDidReceiveCachedResource(this); >+} > >- if (!allDataReceived) >- return; >- >- setLoading(false); >- checkNotify(); >+void CachedTextTrack::finishLoading(PassRefPtr<ResourceBuffer> data) >+{ >+ addDataBuffer(data); >+ CachedResource::finishLoading(data); > } > > } >diff --git a/Source/WebCore/loader/cache/CachedTextTrack.h b/Source/WebCore/loader/cache/CachedTextTrack.h >index 78c6c92..f46ee93 100644 >--- a/Source/WebCore/loader/cache/CachedTextTrack.h >+++ b/Source/WebCore/loader/cache/CachedTextTrack.h >@@ -38,7 +38,8 @@ public: > CachedTextTrack(const ResourceRequest&); > virtual ~CachedTextTrack(); > >- virtual void data(PassRefPtr<ResourceBuffer> data, bool allDataReceived); >+ virtual void addDataBuffer(PassRefPtr<ResourceBuffer>); >+ virtual void finishLoading(PassRefPtr<ResourceBuffer>); > > private: > virtual bool mayTryReplaceEncodedData() const OVERRIDE { return true; } >diff --git a/Source/WebCore/loader/cache/CachedXSLStyleSheet.cpp b/Source/WebCore/loader/cache/CachedXSLStyleSheet.cpp >index 008cd568..57234db 100644 >--- a/Source/WebCore/loader/cache/CachedXSLStyleSheet.cpp >+++ b/Source/WebCore/loader/cache/CachedXSLStyleSheet.cpp >@@ -63,11 +63,8 @@ String CachedXSLStyleSheet::encoding() const > return m_decoder->encoding().name(); > } > >-void CachedXSLStyleSheet::data(PassRefPtr<ResourceBuffer> data, bool allDataReceived) >+void CachedXSLStyleSheet::finishLoading(PassRefPtr<ResourceBuffer> data) > { >- if (!allDataReceived) >- return; >- > m_data = data; > setEncodedSize(m_data.get() ? m_data->size() : 0); > if (m_data.get()) { >diff --git a/Source/WebCore/loader/cache/CachedXSLStyleSheet.h b/Source/WebCore/loader/cache/CachedXSLStyleSheet.h >index df6d90f..afb6958 100644 >--- a/Source/WebCore/loader/cache/CachedXSLStyleSheet.h >+++ b/Source/WebCore/loader/cache/CachedXSLStyleSheet.h >@@ -45,7 +45,7 @@ namespace WebCore { > > virtual void setEncoding(const String&); > virtual String encoding() const; >- virtual void data(PassRefPtr<ResourceBuffer> data, bool allDataReceived); >+ virtual void finishLoading(PassRefPtr<ResourceBuffer> data); > > protected: > virtual void checkNotify();
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Flags:
darin
:
review-
Actions:
View
|
Formatted Diff
|
Diff
Attachments on
bug 115804
:
201075
|
201079
|
201083
|
201088
|
201252
|
201262
|
201307
|
201576
|
201637
|
202722
|
203681
|
204059
|
204684