Changeset 151586 in webkit
- Timestamp:
- Jun 14, 2013 3:59:11 AM (11 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 24 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r151582 r151586 1 2013-06-13 Carlos Garcia Campos <cgarcia@igalia.com> 2 3 Avoid unnecessary data copies when loading subresources with DoNotBufferData option 4 https://bugs.webkit.org/show_bug.cgi?id=115804 5 6 Reviewed by Darin Adler. 7 8 When DoNotBufferData option is used to load a resource its data 9 is always copied before sending it to the CachedResource. Most 10 of the cached resources ignore the incremental data and wait 11 until all data has been received to save the ResourceBuffer, 12 that will be NULL anyway when DoNotBufferData is used. 13 CachedRawResource notifies its clients about the incremental 14 data, but it doesn't save the data when DoNotBufferData option 15 is present. In those cases we are unnecessary copying the data. 16 17 CachedResource::data has been split into 18 CachedResource::addDataBuffer() used for incremental data chunks 19 when buffering data, CachedResource::addData() used for 20 incremental data chunks when not buffering and 21 CachedResource::finishLoading() used to finish the loading. This 22 way we get rid of the allDataReceived boolean parameter and cached 23 resources not interested in incremenetal data chunks only have to 24 implement finishLoading() without having to check if all data have 25 been received or not. 26 27 SubresourceLoader::sendDataToResource was always called after 28 checking if loading multipart content, and then it was checked 29 again to decided whether to copy the data or not. It has been 30 removed in favor of calling directly the resource methods, 31 finishLoading for multipart content, addDataBuffer for data chunks 32 when buffering and addData for data chunks when not buffering. 33 34 No new functionality, covered by existing tests. 35 36 * html/ImageDocument.cpp: 37 (WebCore::ImageDocumentParser::appendBytes): Update to API changes. 38 (WebCore::ImageDocumentParser::finish): Ditto. 39 * loader/SubresourceLoader.cpp: 40 (WebCore::SubresourceLoader::didReceiveResponse): Call 41 finishLoading() for multipart content. 42 (WebCore::SubresourceLoader::didReceiveDataOrBuffer): Add data to 43 the resource using addDataBuffer or addData depending on whether 44 we are buffering or not. 45 (WebCore::SubresourceLoader::didFinishLoading): Call 46 finishLoading() for the cached resource instead of data. 47 * loader/SubresourceLoader.h: 48 * loader/cache/CachedCSSStyleSheet.cpp: 49 (WebCore::CachedCSSStyleSheet::finishLoading): 50 * loader/cache/CachedCSSStyleSheet.h: 51 * loader/cache/CachedFont.cpp: 52 (WebCore::CachedFont::finishLoading): 53 * loader/cache/CachedFont.h: 54 * loader/cache/CachedImage.cpp: 55 (WebCore::CachedImage::isValidDecodedImageSize): Helper function 56 to check if the image size is valid. 57 (WebCore::CachedImage::addIncrementalDataBuffer): Helper function 58 to add incremental data buffer. 59 (WebCore::CachedImage::addDataBuffer): Call 60 addIncrementalDataBuffer(). 61 (WebCore::CachedImage::addData): Create a ResourceBuffer and call 62 addIncrementalDataBuffer(). 63 (WebCore::CachedImage::finishLoading): 64 * loader/cache/CachedImage.h: 65 * loader/cache/CachedRawResource.cpp: 66 (WebCore::CachedRawResource::calculateIncrementalDataChunk): 67 Returns a pointer to the data corresponding to the current chunk 68 and its length. 69 (WebCore::CachedRawResource::addDataBuffer): Assert to make sure 70 this is only called when BufferData option is present. Use 71 calculateIncrementalDataChunk(). 72 (WebCore::CachedRawResource::addData): Assert to make sure this is 73 only called when DoNotBufferData option is present. 74 (WebCore::CachedRawResource::finishLoading): 75 (WebCore::CachedRawResource::notifyClientsDataWasReceived): Helper 76 private function to notify the clients about data received. 77 * loader/cache/CachedRawResource.h: 78 * loader/cache/CachedResource.cpp: 79 (WebCore::CachedResource::addDataBuffer): 80 (WebCore::CachedResource::addData): 81 (WebCore::CachedResource::finishLoading): 82 * loader/cache/CachedResource.h: 83 * loader/cache/CachedSVGDocument.cpp: 84 (WebCore::CachedSVGDocument::finishLoading): 85 * loader/cache/CachedSVGDocument.h: 86 * loader/cache/CachedScript.cpp: 87 (WebCore::CachedScript::finishLoading): 88 * loader/cache/CachedScript.h: 89 * loader/cache/CachedShader.cpp: 90 (WebCore::CachedShader::finishLoading): 91 * loader/cache/CachedShader.h: 92 * loader/cache/CachedTextTrack.cpp: 93 (WebCore::CachedTextTrack::addDataBuffer): 94 (WebCore::CachedTextTrack::finishLoading): 95 * loader/cache/CachedTextTrack.h: 96 * loader/cache/CachedXSLStyleSheet.cpp: 97 (WebCore::CachedXSLStyleSheet::finishLoading): 98 * loader/cache/CachedXSLStyleSheet.h: 99 1 100 2013-06-14 Michał Pakuła vel Rutka <m.pakula@samsung.com> 2 101 -
trunk/Source/WebCore/html/ImageDocument.cpp
r151277 r151586 137 137 CachedImage* cachedImage = document()->cachedImage(); 138 138 RefPtr<ResourceBuffer> resourceData = frame->loader()->documentLoader()->mainResourceData(); 139 cachedImage-> data(resourceData.get(), false);139 cachedImage->addDataBuffer(resourceData.get()); 140 140 141 141 document()->imageUpdated(); … … 153 153 data = data->copy(); 154 154 155 cachedImage-> data(data.get(), true);155 cachedImage->finishLoading(data.get()); 156 156 cachedImage->finish(); 157 157 -
trunk/Source/WebCore/loader/SubresourceLoader.cpp
r151277 r151586 206 206 RefPtr<ResourceBuffer> buffer = resourceData(); 207 207 if (m_loadingMultipartContent && buffer && buffer->size()) { 208 sendDataToResource(buffer->data(), buffer->size());208 m_resource->finishLoading(buffer.get()); 209 209 clearResourceData(); 210 210 // Since a subresource loader does not load multipart sections progressively, data was delivered to the loader all at once. … … 241 241 ResourceLoader::didReceiveDataOrBuffer(data, length, buffer, encodedDataLength, dataPayloadType); 242 242 243 if (!m_loadingMultipartContent) 244 sendDataToResource(buffer ? buffer->data() : data, buffer ? buffer->size() : length); 243 if (!m_loadingMultipartContent) { 244 if (ResourceBuffer* resourceData = this->resourceData()) 245 m_resource->addDataBuffer(resourceData); 246 else 247 m_resource->addData(buffer ? buffer->data() : data, buffer ? buffer->size() : length); 248 } 245 249 } 246 250 … … 257 261 } 258 262 259 void SubresourceLoader::sendDataToResource(const char* data, int length)260 {261 // There are two cases where we might need to create our own SharedBuffer instead of copying the one in ResourceLoader.262 // (1) Multipart content: The loader delivers the data in a multipart section all at once, then sends eof.263 // The resource data will change as the next part is loaded, so we need to make a copy.264 // (2) Our client requested that the data not be buffered at the ResourceLoader level via ResourceLoaderOptions. In this case,265 // ResourceLoader::resourceData() will be null. However, unlike the multipart case, we don't want to tell the CachedResource266 // that all data has been received yet.267 if (m_loadingMultipartContent || !resourceData()) {268 RefPtr<ResourceBuffer> copiedData = ResourceBuffer::create(data, length);269 m_resource->data(copiedData.get(), m_loadingMultipartContent);270 } else271 m_resource->data(resourceData(), false);272 }273 274 263 void SubresourceLoader::didFinishLoading(double finishTime) 275 264 { … … 286 275 m_activityAssertion.clear(); 287 276 m_resource->setLoadFinishTime(finishTime); 288 m_resource-> data(resourceData(), true);277 m_resource->finishLoading(resourceData()); 289 278 290 279 if (wasCancelled()) -
trunk/Source/WebCore/loader/SubresourceLoader.h
r151193 r151586 75 75 76 76 bool checkForHTTPStatusCodeError(); 77 void sendDataToResource(const char*, int);78 77 79 78 void didReceiveDataOrBuffer(const char*, int, PassRefPtr<SharedBuffer>, long long encodedDataLength, DataPayloadType); -
trunk/Source/WebCore/loader/cache/CachedCSSStyleSheet.cpp
r151277 r151586 94 94 } 95 95 96 void CachedCSSStyleSheet:: data(ResourceBuffer* data, bool allDataReceived)96 void CachedCSSStyleSheet::finishLoading(ResourceBuffer* data) 97 97 { 98 if (!allDataReceived)99 return;100 101 98 m_data = data; 102 99 setEncodedSize(m_data.get() ? m_data->size() : 0); -
trunk/Source/WebCore/loader/cache/CachedCSSStyleSheet.h
r151310 r151586 56 56 virtual void setEncoding(const String&) OVERRIDE; 57 57 virtual String encoding() const OVERRIDE; 58 virtual void data(ResourceBuffer*, bool allDataReceived) OVERRIDE;58 virtual void finishLoading(ResourceBuffer*) OVERRIDE; 59 59 virtual void destroyDecodedData() OVERRIDE; 60 60 -
trunk/Source/WebCore/loader/cache/CachedFont.cpp
r151277 r151586 76 76 } 77 77 78 void CachedFont:: data(ResourceBuffer* data, bool allDataReceived)78 void CachedFont::finishLoading(ResourceBuffer* data) 79 79 { 80 if (!allDataReceived)81 return;82 83 80 m_data = data; 84 81 setEncodedSize(m_data.get() ? m_data->size() : 0); -
trunk/Source/WebCore/loader/cache/CachedFont.h
r151310 r151586 64 64 65 65 virtual void didAddClient(CachedResourceClient*) OVERRIDE; 66 virtual void data(ResourceBuffer*, bool allDataReceived) OVERRIDE;66 virtual void finishLoading(ResourceBuffer*) OVERRIDE; 67 67 68 68 virtual void allClientsRemoved() OVERRIDE; -
trunk/Source/WebCore/loader/cache/CachedImage.cpp
r151277 r151586 345 345 } 346 346 347 size_t CachedImage::maximumDecodedImageSize() 348 { 347 bool CachedImage::canBeDrawn() const 348 { 349 if (!m_image || m_image->isNull()) 350 return false; 351 349 352 if (!m_loader || m_loader->reachedTerminalState()) 350 return 0; 353 return true; 354 351 355 Settings* settings = m_loader->frameLoader()->frame()->settings(); 352 return settings ? settings->maximumDecodedImageSize() : 0; 353 } 354 355 void CachedImage::data(ResourceBuffer* data, bool allDataReceived) 356 if (!settings) 357 return true; 358 359 size_t estimatedDecodedImageSize = m_image->width() * m_image->height() * 4; // no overflow check 360 return estimatedDecodedImageSize <= settings->maximumDecodedImageSize(); 361 } 362 363 void CachedImage::addIncrementalDataBuffer(ResourceBuffer* data) 356 364 { 357 365 m_data = data; 358 359 if (m_data) 366 if (!data) 367 return; 368 369 createImage(); 370 371 // Have the image update its data from its internal buffer. 372 // It will not do anything now, but will delay decoding until 373 // queried for info (like size or specific image frames). 374 bool sizeAvailable = m_image->setData(m_data->sharedBuffer(), false); 375 if (!sizeAvailable) 376 return; 377 378 if (!canBeDrawn()) { 379 // There's no image to draw or its decoded size is bigger than the maximum allowed. 380 error(errorOccurred() ? status() : DecodeError); 381 if (inCache()) 382 memoryCache()->remove(this); 383 return; 384 } 385 386 // Go ahead and tell our observers to try to draw. 387 // Each chunk from the network causes observers to repaint, which will 388 // force that chunk to decode. 389 // It would be nice to only redraw the decoded band of the image, but with the current design 390 // (decoding delayed until painting) that seems hard. 391 notifyObservers(); 392 393 setEncodedSize(m_image->data() ? m_image->data()->size() : 0); 394 } 395 396 void CachedImage::addDataBuffer(ResourceBuffer* data) 397 { 398 ASSERT(m_options.dataBufferingPolicy == BufferData); 399 addIncrementalDataBuffer(data); 400 } 401 402 void CachedImage::addData(const char* data, unsigned length) 403 { 404 ASSERT(m_options.dataBufferingPolicy == DoNotBufferData); 405 addIncrementalDataBuffer(ResourceBuffer::create(data, length).get()); 406 } 407 408 void CachedImage::finishLoading(ResourceBuffer* data) 409 { 410 m_data = data; 411 if (!m_image && data) 360 412 createImage(); 361 413 362 bool sizeAvailable = false; 363 364 // Have the image update its data from its internal buffer. 365 // It will not do anything now, but will delay decoding until 366 // queried for info (like size or specific image frames). 367 if (m_image) 368 sizeAvailable = m_image->setData(m_data ? m_data->sharedBuffer() : 0, allDataReceived); 369 370 // Go ahead and tell our observers to try to draw if we have either 371 // received all the data or the size is known. Each chunk from the 372 // network causes observers to repaint, which will force that chunk 373 // to decode. 374 if (sizeAvailable || allDataReceived) { 375 size_t maxDecodedImageSize = maximumDecodedImageSize(); 376 IntSize s = m_image ? m_image->size() : IntSize(); 377 size_t estimatedDecodedImageSize = s.width() * s.height() * 4; // no overflow check 378 if (!m_image || m_image->isNull() || (maxDecodedImageSize > 0 && estimatedDecodedImageSize > maxDecodedImageSize)) { 379 error(errorOccurred() ? status() : DecodeError); 380 if (inCache()) 381 memoryCache()->remove(this); 382 return; 383 } 384 385 // It would be nice to only redraw the decoded band of the image, but with the current design 386 // (decoding delayed until painting) that seems hard. 387 notifyObservers(); 388 389 if (m_image) 390 setEncodedSize(m_image->data() ? m_image->data()->size() : 0); 391 } 392 393 if (allDataReceived) { 394 setLoading(false); 395 checkNotify(); 396 } 414 if (m_image) 415 m_image->setData(m_data->sharedBuffer(), true); 416 417 if (!canBeDrawn()) { 418 // There's no image to draw or its decoded size is bigger than the maximum allowed. 419 error(errorOccurred() ? status() : DecodeError); 420 if (inCache()) 421 memoryCache()->remove(this); 422 return; 423 } 424 425 notifyObservers(); 426 if (m_image) 427 setEncodedSize(m_image->data() ? m_image->data()->size() : 0); 428 CachedResource::finishLoading(data); 397 429 } 398 430 -
trunk/Source/WebCore/loader/cache/CachedImage.h
r151310 r151586 65 65 bool imageHasRelativeHeight() const; 66 66 67 virtual void data(ResourceBuffer*, bool allDataReceived) OVERRIDE; 67 virtual void addDataBuffer(ResourceBuffer*) OVERRIDE; 68 virtual void finishLoading(ResourceBuffer*) OVERRIDE; 68 69 69 70 // This method takes a zoom multiplier that can be used to increase the natural size of the image by the zoom. … … 80 81 void createImage(); 81 82 void clearImage(); 82 size_t maximumDecodedImageSize();83 bool canBeDrawn() const; 83 84 // If not null, changeRect is the changed part of the image. 84 85 void notifyObservers(const IntRect* changeRect = 0); … … 95 96 virtual void destroyDecodedData() OVERRIDE; 96 97 98 virtual void addData(const char* data, unsigned length) OVERRIDE; 97 99 virtual void error(CachedResource::Status) OVERRIDE; 98 100 virtual void responseReceived(const ResourceResponse&) OVERRIDE; … … 112 114 virtual void changedInRect(const Image*, const IntRect&) OVERRIDE; 113 115 116 void addIncrementalDataBuffer(ResourceBuffer*); 117 114 118 typedef pair<IntSize, float> SizeAndZoom; 115 119 typedef HashMap<const CachedImageClient*, SizeAndZoom> ContainerSizeRequests; -
trunk/Source/WebCore/loader/cache/CachedRawResource.cpp
r151277 r151586 42 42 } 43 43 44 void CachedRawResource::data(ResourceBuffer* data, bool allDataReceived) 45 { 46 CachedResourceHandle<CachedRawResource> protect(this); 47 const char* incrementalData = 0; 48 size_t incrementalDataLength = 0; 49 if (data) { 50 // If we are buffering data, then we are saving the buffer in m_data and need to manually 51 // calculate the incremental data. If we are not buffering, then m_data will be null and 52 // the buffer contains only the incremental data. 53 size_t previousDataLength = (m_options.dataBufferingPolicy == BufferData) ? encodedSize() : 0; 54 ASSERT(data->size() >= previousDataLength); 55 incrementalData = data->data() + previousDataLength; 56 incrementalDataLength = data->size() - previousDataLength; 57 } 58 59 if (m_options.dataBufferingPolicy == BufferData) { 44 const char* CachedRawResource::calculateIncrementalDataChunk(ResourceBuffer* data, unsigned& incrementalDataLength) 45 { 46 incrementalDataLength = 0; 47 if (!data) 48 return 0; 49 50 unsigned previousDataLength = encodedSize(); 51 ASSERT(data->size() >= previousDataLength); 52 incrementalDataLength = data->size() - previousDataLength; 53 return data->data() + previousDataLength; 54 } 55 56 void CachedRawResource::addDataBuffer(ResourceBuffer* data) 57 { 58 CachedResourceHandle<CachedRawResource> protect(this); 59 ASSERT(m_options.dataBufferingPolicy == BufferData); 60 m_data = data; 61 62 unsigned incrementalDataLength; 63 const char* incrementalData = calculateIncrementalDataChunk(data, incrementalDataLength); 64 if (data) 65 setEncodedSize(data->size()); 66 notifyClientsDataWasReceived(incrementalData, incrementalDataLength); 67 if (m_options.dataBufferingPolicy == DoNotBufferData) { 68 if (m_loader) 69 m_loader->setDataBufferingPolicy(DoNotBufferData); 70 clear(); 71 } 72 } 73 74 void CachedRawResource::addData(const char* data, unsigned length) 75 { 76 ASSERT(m_options.dataBufferingPolicy == DoNotBufferData); 77 notifyClientsDataWasReceived(data, length); 78 } 79 80 void CachedRawResource::finishLoading(ResourceBuffer* data) 81 { 82 CachedResourceHandle<CachedRawResource> protect(this); 83 DataBufferingPolicy dataBufferingPolicy = m_options.dataBufferingPolicy; 84 if (dataBufferingPolicy == BufferData) { 85 m_data = data; 86 87 unsigned incrementalDataLength; 88 const char* incrementalData = calculateIncrementalDataChunk(data, incrementalDataLength); 60 89 if (data) 61 90 setEncodedSize(data->size()); 62 m_data = data; 63 } 64 65 DataBufferingPolicy dataBufferingPolicy = m_options.dataBufferingPolicy; 66 if (incrementalDataLength) { 67 CachedResourceClientWalker<CachedRawResourceClient> w(m_clients); 68 while (CachedRawResourceClient* c = w.next()) 69 c->dataReceived(this, incrementalData, incrementalDataLength); 70 } 71 CachedResource::data(data, allDataReceived); 72 91 notifyClientsDataWasReceived(incrementalData, incrementalDataLength); 92 } 93 94 CachedResource::finishLoading(data); 73 95 if (dataBufferingPolicy == BufferData && m_options.dataBufferingPolicy == DoNotBufferData) { 74 96 if (m_loader) … … 76 98 clear(); 77 99 } 100 } 101 102 void CachedRawResource::notifyClientsDataWasReceived(const char* data, unsigned length) 103 { 104 if (!length) 105 return; 106 107 CachedResourceHandle<CachedRawResource> protect(this); 108 CachedResourceClientWalker<CachedRawResourceClient> w(m_clients); 109 while (CachedRawResourceClient* c = w.next()) 110 c->dataReceived(this, data, length); 78 111 } 79 112 -
trunk/Source/WebCore/loader/cache/CachedRawResource.h
r151310 r151586 49 49 private: 50 50 virtual void didAddClient(CachedResourceClient*) OVERRIDE; 51 virtual void data(ResourceBuffer*, bool allDataReceived) OVERRIDE; 51 virtual void addDataBuffer(ResourceBuffer*) OVERRIDE; 52 virtual void addData(const char* data, unsigned length) OVERRIDE; 53 virtual void finishLoading(ResourceBuffer*) OVERRIDE; 52 54 53 55 virtual bool shouldIgnoreHTTPStatusCodeErrors() const OVERRIDE { return true; } … … 62 64 63 65 virtual bool canReuse(const ResourceRequest&) const OVERRIDE; 66 67 const char* calculateIncrementalDataChunk(ResourceBuffer*, unsigned& incrementalDataLength); 68 void notifyClientsDataWasReceived(const char* data, unsigned length); 64 69 65 70 unsigned long m_identifier; -
trunk/Source/WebCore/loader/cache/CachedResource.cpp
r151277 r151586 363 363 } 364 364 365 void CachedResource::data(ResourceBuffer*, bool allDataReceived) 366 { 367 if (!allDataReceived) 368 return; 369 365 void CachedResource::addDataBuffer(ResourceBuffer*) 366 { 367 ASSERT(m_options.dataBufferingPolicy == BufferData); 368 } 369 370 void CachedResource::addData(const char*, unsigned) 371 { 372 ASSERT(m_options.dataBufferingPolicy == DoNotBufferData); 373 } 374 375 void CachedResource::finishLoading(ResourceBuffer*) 376 { 370 377 setLoading(false); 371 378 checkNotify(); -
trunk/Source/WebCore/loader/cache/CachedResource.h
r151277 r151586 102 102 virtual void setEncoding(const String&) { } 103 103 virtual String encoding() const { return String(); } 104 virtual void data(ResourceBuffer*, bool allDataReceived); 104 virtual void addDataBuffer(ResourceBuffer*); 105 virtual void addData(const char* data, unsigned length); 106 virtual void finishLoading(ResourceBuffer*); 105 107 virtual void error(CachedResource::Status); 106 108 -
trunk/Source/WebCore/loader/cache/CachedSVGDocument.cpp
r151277 r151586 54 54 } 55 55 56 void CachedSVGDocument:: data(ResourceBuffer* data, bool allDataReceived)56 void CachedSVGDocument::finishLoading(ResourceBuffer* data) 57 57 { 58 if (!allDataReceived)59 return;60 61 58 if (data) { 62 59 StringBuilder decodedText; … … 67 64 m_document->setContent(decodedText.toString()); 68 65 } 69 70 setLoading(false); 71 checkNotify(); 66 CachedResource::finishLoading(data); 72 67 } 73 68 -
trunk/Source/WebCore/loader/cache/CachedSVGDocument.h
r151310 r151586 47 47 virtual void setEncoding(const String&) OVERRIDE; 48 48 virtual String encoding() const OVERRIDE; 49 virtual void data(ResourceBuffer*, bool allDataReceived) OVERRIDE;49 virtual void finishLoading(ResourceBuffer*) OVERRIDE; 50 50 }; 51 51 -
trunk/Source/WebCore/loader/cache/CachedScript.cpp
r151277 r151586 83 83 } 84 84 85 void CachedScript:: data(ResourceBuffer* data, bool allDataReceived)85 void CachedScript::finishLoading(ResourceBuffer* data) 86 86 { 87 if (!allDataReceived)88 return;89 90 87 m_data = data; 91 88 setEncodedSize(m_data.get() ? m_data->size() : 0); 92 setLoading(false); 93 checkNotify(); 89 CachedResource::finishLoading(data); 94 90 } 95 91 -
trunk/Source/WebCore/loader/cache/CachedScript.h
r151310 r151586 55 55 virtual void setEncoding(const String&) OVERRIDE; 56 56 virtual String encoding() const OVERRIDE; 57 virtual void data(ResourceBuffer*, bool allDataReceived) OVERRIDE;57 virtual void finishLoading(ResourceBuffer*) OVERRIDE; 58 58 59 59 virtual void destroyDecodedData() OVERRIDE; -
trunk/Source/WebCore/loader/cache/CachedShader.cpp
r151277 r151586 61 61 } 62 62 63 void CachedShader:: data(ResourceBuffer* data, bool allDataReceived)63 void CachedShader::finishLoading(ResourceBuffer* data) 64 64 { 65 if (allDataReceived) 66 m_data = data; 67 CachedResource::data(data, allDataReceived); 65 m_data = data; 66 CachedResource::finishLoading(0); 68 67 } 69 68 -
trunk/Source/WebCore/loader/cache/CachedShader.h
r151310 r151586 48 48 private: 49 49 virtual bool mayTryReplaceEncodedData() const OVERRIDE { return true; } 50 virtual void data(ResourceBuffer*, bool allDataReceived) OVERRIDE;50 virtual void finishLoading(ResourceBuffer*) OVERRIDE; 51 51 52 52 RefPtr<TextResourceDecoder> m_decoder; -
trunk/Source/WebCore/loader/cache/CachedTextTrack.cpp
r151277 r151586 49 49 } 50 50 51 void CachedTextTrack:: data(ResourceBuffer* data, bool allDataReceived)51 void CachedTextTrack::addDataBuffer(ResourceBuffer* data) 52 52 { 53 ASSERT(m_options.dataBufferingPolicy == BufferData); 53 54 m_data = data; 54 55 setEncodedSize(m_data.get() ? m_data->size() : 0); … … 57 58 while (CachedResourceClient *client = walker.next()) 58 59 client->deprecatedDidReceiveCachedResource(this); 60 } 59 61 60 if (!allDataReceived) 61 return; 62 63 setLoading(false); 64 checkNotify(); 62 void CachedTextTrack::finishLoading(ResourceBuffer* data) 63 { 64 addDataBuffer(data); 65 CachedResource::finishLoading(data); 65 66 } 66 67 -
trunk/Source/WebCore/loader/cache/CachedTextTrack.h
r151310 r151586 41 41 private: 42 42 virtual bool mayTryReplaceEncodedData() const OVERRIDE { return true; } 43 virtual void data(ResourceBuffer*, bool allDataReceived) OVERRIDE; 43 virtual void addDataBuffer(ResourceBuffer*) OVERRIDE; 44 virtual void finishLoading(ResourceBuffer*) OVERRIDE; 44 45 }; 45 46 -
trunk/Source/WebCore/loader/cache/CachedXSLStyleSheet.cpp
r151277 r151586 64 64 } 65 65 66 void CachedXSLStyleSheet:: data(ResourceBuffer* data, bool allDataReceived)66 void CachedXSLStyleSheet::finishLoading(ResourceBuffer* data) 67 67 { 68 if (!allDataReceived)69 return;70 71 68 m_data = data; 72 69 setEncodedSize(m_data.get() ? m_data->size() : 0); -
trunk/Source/WebCore/loader/cache/CachedXSLStyleSheet.h
r151310 r151586 55 55 virtual void setEncoding(const String&) OVERRIDE; 56 56 virtual String encoding() const OVERRIDE; 57 virtual void data(ResourceBuffer*, bool allDataReceived) OVERRIDE;57 virtual void finishLoading(ResourceBuffer*) OVERRIDE; 58 58 }; 59 59
Note: See TracChangeset
for help on using the changeset viewer.