Source/WebCore/ChangeLog

 12021-12-22 Jean-Yves Avenard <jya@apple.com>
 2
 3 Have CachedRawResourceClient and related networking actors use SharedBuffer.
 4 https://bugs.webkit.org/show_bug.cgi?id=232424
 5 rdar://84744687
 6
 7 Reviewed by NOBODY (OOPS!).
 8
 9 We modify all didReceiveData method so that they no longer use uint8_t/int
 10 and instead use SharedBuffer. We also do the same for any intermediaries
 11 used by the various didReceiveData implementations.
 12 This will facilitate moving networking off the main thread in the GPU
 13 process.
 14 This also allows to remove several memory allocations and copies.
 15 We can now also consider moving the underlying SharedMemory created in
 16 the content process all the way to the GPU process.
 17
 18 No change in observable behaviour. Covered by all existing tests.
 19
 20 * Modules/fetch/FetchBodyConsumer.cpp:
 21 (WebCore::FetchBodyConsumer::append):
 22 * Modules/fetch/FetchBodyConsumer.h:
 23 * Modules/fetch/FetchBodyOwner.cpp:
 24 (WebCore::FetchBodyOwner::blobChunk):
 25 * Modules/fetch/FetchBodyOwner.h:
 26 * Modules/fetch/FetchLoader.cpp:
 27 (WebCore::FetchLoader::didReceiveData):
 28 * Modules/fetch/FetchLoader.h:
 29 * Modules/fetch/FetchLoaderClient.h:
 30 (WebCore::FetchLoaderClient::didReceiveData):
 31 * Modules/fetch/FetchResponse.cpp:
 32 (WebCore::FetchResponse::BodyLoader::didReceiveData):
 33 (WebCore::FetchResponse::consumeChunk):
 34 * Modules/fetch/FetchResponse.h:
 35 * Modules/model-element/HTMLModelElement.cpp:
 36 (WebCore::HTMLModelElement::dataReceived):
 37 * Modules/model-element/HTMLModelElement.h:
 38 * Modules/streams/ReadableStreamSink.h:
 39 * fileapi/FileReaderLoader.cpp:
 40 (WebCore::FileReaderLoader::didReceiveData):
 41 * fileapi/FileReaderLoader.h:
 42 * inspector/InspectorInstrumentation.cpp:
 43 (WebCore::InspectorInstrumentation::didReceiveDataImpl):
 44 * inspector/InspectorInstrumentation.h:
 45 (WebCore::InspectorInstrumentation::didReceiveData):
 46 * inspector/NetworkResourcesData.cpp:
 47 (WebCore::NetworkResourcesData::ResourceData::appendData):
 48 (WebCore::NetworkResourcesData::maybeAddResourceData):
 49 * inspector/NetworkResourcesData.h:
 50 * inspector/agents/InspectorNetworkAgent.cpp:
 51 (WebCore::InspectorNetworkAgent::didReceiveResponse):
 52 (WebCore::InspectorNetworkAgent::didReceiveData):
 53 (WebCore::InspectorNetworkAgent::interceptRequestWithResponse):
 54 * inspector/agents/InspectorNetworkAgent.h:
 55 * loader/ContentFilter.cpp:
 56 (WebCore::ContentFilter::deliverResourceData):
 57 * loader/ContentFilterClient.h:
 58 * loader/DocumentLoader.cpp:
 59 (WebCore::DocumentLoader::finishedLoading):
 60 (WebCore::DocumentLoader::continueAfterContentPolicy):
 61 (WebCore::DocumentLoader::commitLoad):
 62 (WebCore::DocumentLoader::commitData):
 63 (WebCore::DocumentLoader::dataReceived):
 64 (WebCore::DocumentLoader::maybeCreateArchive):
 65 (WebCore::DocumentLoader::maybeFinishLoadingMultipartContent):
 66 (WebCore::DocumentLoader::dataReceivedThroughContentFilter):
 67 * loader/DocumentLoader.h:
 68 * loader/DocumentThreadableLoader.cpp:
 69 (WebCore::DocumentThreadableLoader::dataReceived):
 70 (WebCore::DocumentThreadableLoader::didReceiveData):
 71 (WebCore::DocumentThreadableLoader::didFinishLoading):
 72 (WebCore::DocumentThreadableLoader::loadRequest):
 73 * loader/DocumentThreadableLoader.h:
 74 * loader/DocumentWriter.cpp:
 75 (WebCore::DocumentWriter::addData):
 76 * loader/DocumentWriter.h:
 77 * loader/EmptyClients.cpp:
 78 (WebCore::EmptyFrameLoaderClient::committedLoad):
 79 * loader/EmptyFrameLoaderClient.h:
 80 * loader/FrameLoader.cpp:
 81 (WebCore::FrameLoader::willLoadMediaElementURL):
 82 (WebCore::FrameLoader::commitProvisionalLoad):
 83 (WebCore::FrameLoader::loadResourceSynchronously):
 84 (WebCore::FrameLoader::loadedResourceFromMemoryCache):
 85 * loader/FrameLoaderClient.h:
 86 * loader/MediaResourceLoader.cpp:
 87 (WebCore::MediaResource::dataReceived):
 88 * loader/MediaResourceLoader.h:
 89 * loader/NetscapePlugInStreamLoader.cpp:
 90 (WebCore::NetscapePlugInStreamLoader::didReceiveData):
 91 * loader/NetscapePlugInStreamLoader.h:
 92 * loader/ResourceLoadNotifier.cpp:
 93 (WebCore::ResourceLoadNotifier::didReceiveData):
 94 (WebCore::ResourceLoadNotifier::dispatchDidReceiveData):
 95 (WebCore::ResourceLoadNotifier::sendRemainingDelegateMessages):
 96 * loader/ResourceLoadNotifier.h:
 97 * loader/ResourceLoader.cpp:
 98 (WebCore::ResourceLoader::loadDataURL):
 99 (WebCore::ResourceLoader::addBuffer):
 100 (WebCore::ResourceLoader::didReceiveData):
 101 (WebCore::ResourceLoader::didReceiveBuffer):
 102 * loader/ResourceLoader.h:
 103 * loader/SubresourceLoader.cpp:
 104 (WebCore::SubresourceLoader::didReceiveBuffer):
 105 * loader/SubresourceLoader.h:
 106 * loader/SubstituteResource.h:
 107 (WebCore::SubstituteResource::append):
 108 * loader/ThreadableLoaderClient.h:
 109 (WebCore::ThreadableLoaderClient::didReceiveData):
 110 * loader/ThreadableLoaderClientWrapper.h:
 111 (WebCore::ThreadableLoaderClientWrapper::didReceiveData):
 112 * loader/WorkerThreadableLoader.cpp:
 113 (WebCore::WorkerThreadableLoader::MainThreadBridge::didReceiveData):
 114 * loader/WorkerThreadableLoader.h:
 115 * loader/appcache/ApplicationCacheHost.cpp:
 116 (WebCore::ApplicationCacheHost::mainResourceDataReceived):
 117 * loader/appcache/ApplicationCacheHost.h:
 118 * loader/appcache/ApplicationCacheResource.cpp:
 119 (WebCore::ApplicationCacheResource::deliver):
 120 * loader/appcache/ApplicationCacheResourceLoader.cpp:
 121 (WebCore::ApplicationCacheResourceLoader::dataReceived):
 122 * loader/appcache/ApplicationCacheResourceLoader.h:
 123 * loader/cache/CachedImage.cpp:
 124 (WebCore::CachedImage::updateBufferInternal):
 125 (WebCore::CachedImage::updateBuffer):
 126 (WebCore::CachedImage::updateData):
 127 * loader/cache/CachedImage.h:
 128 * loader/cache/CachedRawResource.cpp:
 129 (WebCore::CachedRawResource::calculateIncrementalDataChunk const):
 130 (WebCore::CachedRawResource::updateBuffer):
 131 (WebCore::CachedRawResource::updateData):
 132 (WebCore::CachedRawResource::finishLoading):
 133 (WebCore::CachedRawResource::notifyClientsDataWasReceived):
 134 (WebCore::CachedRawResource::didAddClient):
 135 * loader/cache/CachedRawResource.h:
 136 * loader/cache/CachedRawResourceClient.h:
 137 (WebCore::CachedRawResourceClient::dataReceived):
 138 * loader/cache/CachedResource.cpp:
 139 (WebCore::CachedResource::updateData):
 140 * loader/cache/CachedResource.h:
 141 * loader/ios/LegacyPreviewLoader.h:
 142 * loader/ios/LegacyPreviewLoader.mm:
 143 (WebCore::LegacyPreviewLoader::didReceiveData):
 144 (WebCore::LegacyPreviewLoader::previewConverterDidReceiveData):
 145 * page/EventSource.cpp:
 146 (WebCore::EventSource::didReceiveData):
 147 * page/EventSource.h:
 148 * platform/SharedBuffer.cpp:
 149 (WebCore::FragmentedSharedBuffer::takeData):
 150 (WebCore::SharedBuffer::SharedBuffer):
 151 (WebCore::SharedBufferDataView::SharedBufferDataView):
 152 (WebCore::SharedBufferDataView::createSharedBuffer const):
 153 * platform/SharedBuffer.h:
 154 (WebCore::SharedBuffer::create):
 155 (WebCore::SharedBuffer::SharedBuffer):
 156 * platform/graphics/PlatformMediaResourceLoader.h:
 157 (WebCore::PlatformMediaResourceClient::dataReceived):
 158 * platform/graphics/avfoundation/cf/WebCoreAVCFResourceLoader.cpp:
 159 (WebCore::WebCoreAVCFResourceLoader::dataReceived):
 160 * platform/graphics/avfoundation/cf/WebCoreAVCFResourceLoader.h:
 161 * platform/graphics/avfoundation/objc/WebCoreAVFResourceLoader.mm:
 162 (WebCore::CachedResourceMediaLoader::dataReceived):
 163 (WebCore::PlatformResourceMediaLoader::dataReceived):
 164 * platform/network/ResourceHandleClient.cpp:
 165 (WebCore::ResourceHandleClient::didReceiveBuffer):
 166 * platform/network/ResourceHandleClient.h:
 167 (WebCore::ResourceHandleClient::didReceiveData):
 168 * platform/network/SynchronousLoaderClient.cpp:
 169 (WebCore::SynchronousLoaderClient::didReceiveData):
 170 * platform/network/SynchronousLoaderClient.h:
 171 * platform/network/cocoa/RangeResponseGenerator.mm:
 172 (WebCore::RangeResponseGenerator::giveResponseToTaskIfBytesInRangeReceived):
 173 * platform/network/cocoa/WebCoreNSURLSession.h:
 174 * platform/network/cocoa/WebCoreNSURLSession.mm:
 175 (WebCore::WebCoreNSURLSessionDataTaskClient::dataReceived):
 176 (-[WebCoreNSURLSessionDataTask resource:receivedData:]):
 177 * platform/network/ios/LegacyPreviewLoaderClient.h:
 178 (WebCore::LegacyPreviewLoaderClient::didReceiveData):
 179 * platform/network/mac/WebCoreResourceHandleAsOperationQueueDelegate.mm:
 180 (-[WebCoreResourceHandleAsOperationQueueDelegate connection:didReceiveData:lengthReceived:]):
 181 * svg/graphics/SVGImage.cpp:
 182 (WebCore::SVGImage::dataChanged):
 183 * workers/WorkerFontLoadRequest.cpp:
 184 (WebCore::WorkerFontLoadRequest::didReceiveData):
 185 * workers/WorkerFontLoadRequest.h:
 186 * workers/WorkerScriptLoader.cpp:
 187 (WebCore::WorkerScriptLoader::didReceiveData):
 188 * workers/WorkerScriptLoader.h:
 189 * workers/service/context/ServiceWorkerFetch.h:
 190 * xml/XMLHttpRequest.cpp:
 191 (WebCore::XMLHttpRequest::didReceiveData):
 192 * xml/XMLHttpRequest.h:
 193
 1942021-12-23 Jean-Yves Avenard <jya@apple.com>
 195
 196 ScalableImageDecoder should be using SharedBuffer instead of DataSegment
 197 https://bugs.webkit.org/show_bug.cgi?id=233441
 198 rdar://problem/85854204
 199
 200 Reviewed by NOBODY (OOPS!).
 201
 202 DataSegment should be a SharedBuffer's implementation details and not
 203 be used outside SharedBuffer's code.
 204 Historically, using the inner DataSegment was required as it was thread
 205 safe while SharedBuffer wasn't: This is no longer the case.
 206 SharedBuffer and DataSegment are semantically very similar, so this is
 207 mostly a find/replace change.
 208 Flattening the FragmentedSharedBuffer is still required as most decoders
 209 require reading the raw bytes.
 210
 211 No change in observable behaviour.
 212
 213 * platform/graphics/ImageBackingStore.h:
 214 (WebCore::ImageBackingStore::setSize):
 215 (WebCore::ImageBackingStore::ImageBackingStore):
 216 * platform/image-decoders/ScalableImageDecoder.h:
 217 * platform/image-decoders/avif/AVIFImageReader.cpp:
 218 (WebCore::AVIFImageReader::parseHeader):
 219 (WebCore::AVIFImageReader::decodeFrame):
 220 * platform/image-decoders/avif/AVIFImageReader.h:
 221 * platform/image-decoders/bmp/BMPImageReader.h:
 222 (WebCore::BMPImageReader::readUint16):
 223 (WebCore::BMPImageReader::readUint32):
 224 (WebCore::BMPImageReader::setData):
 225 * platform/image-decoders/gif/GIFImageReader.h:
 226 (GIFImageReader::setData):
 227 * platform/image-decoders/jpeg/JPEGImageDecoder.cpp:
 228 (WebCore::JPEGImageReader::decode):
 229 * platform/image-decoders/jpeg2000/JPEG2000ImageDecoder.cpp:
 230 (WebCore::JPEG2000ImageDecoder::decode):
 231 * platform/image-decoders/png/PNGImageDecoder.cpp:
 232 (WebCore::PNGImageReader::decode):
 233 * platform/image-decoders/webp/WEBPImageDecoder.cpp:
 234 (WebCore::WEBPImageDecoder::decode):
 235
 2362021-12-22 Jean-Yves Avenard <jya@apple.com>
 237
 238 make SharedBuffer::copy() return a contiguous SharedBuffer
 239 https://bugs.webkit.org/show_bug.cgi?id=234622
 240 rdar://problem/86829527
 241
 242 Reviewed by NOBODY (OOPS!).
 243
 244 make SharedBuffer::copy() return a contiguous SharedBuffer
 245
 246 API tests added.
 247
 248 * platform/SharedBuffer.cpp:
 249 (WebCore::FragmentedSharedBuffer::copy const):
 250
12512021-12-26 Carlos Garcia Campos <cgarcia@igalia.com>
2252
3253 [GTK][a11y] Test accessibility/aria-inherits-presentational.html is failing with ATSPI

Source/WebKit/ChangeLog

 12021-12-22 Jean-Yves Avenard <jya@apple.com>
 2
 3 Have CachedRawResourceClient and related networking actors use SharedBuffer.
 4 https://bugs.webkit.org/show_bug.cgi?id=232424
 5 rdar://84744687
 6
 7 Reviewed by NOBODY (OOPS!).
 8
 9 * GPUProcess/media/RemoteMediaResource.cpp:
 10 (WebKit::RemoteMediaResource::dataReceived):
 11 * GPUProcess/media/RemoteMediaResource.h:
 12 * NetworkProcess/Downloads/PendingDownload.h:
 13 * NetworkProcess/NetworkCORSPreflightChecker.cpp:
 14 (WebKit::NetworkCORSPreflightChecker::didReceiveData):
 15 * NetworkProcess/NetworkCORSPreflightChecker.h:
 16 * NetworkProcess/NetworkDataTask.h:
 17 * NetworkProcess/NetworkLoad.cpp:
 18 (WebKit::NetworkLoad::didReceiveData):
 19 * NetworkProcess/NetworkLoad.h:
 20 * NetworkProcess/NetworkLoadClient.h:
 21 * NetworkProcess/NetworkResourceLoader.cpp:
 22 (WebKit::NetworkResourceLoader::didReceiveBuffer):
 23 (WebKit::NetworkResourceLoader::sendBuffer):
 24 * NetworkProcess/NetworkResourceLoader.h:
 25 * NetworkProcess/PingLoad.cpp:
 26 (WebKit::PingLoad::didReceiveData):
 27 * NetworkProcess/PingLoad.h:
 28 * NetworkProcess/PreconnectTask.cpp:
 29 (WebKit::PreconnectTask::didReceiveBuffer):
 30 * NetworkProcess/PreconnectTask.h:
 31 * NetworkProcess/ServiceWorker/ServiceWorkerDownloadTask.messages.in:
 32 * NetworkProcess/ServiceWorker/ServiceWorkerFetchTask.cpp:
 33 (WebKit::ServiceWorkerFetchTask::didReceiveData):
 34 (WebKit::ServiceWorkerFetchTask::loadBodyFromPreloader):
 35 * NetworkProcess/ServiceWorker/ServiceWorkerFetchTask.h:
 36 * NetworkProcess/ServiceWorker/ServiceWorkerFetchTask.messages.in:
 37 * NetworkProcess/ServiceWorker/ServiceWorkerNavigationPreloader.cpp:
 38 (WebKit::ServiceWorkerNavigationPreloader::didReceiveBuffer):
 39 * NetworkProcess/ServiceWorker/ServiceWorkerNavigationPreloader.h:
 40 * NetworkProcess/ServiceWorker/ServiceWorkerSoftUpdateLoader.cpp:
 41 (WebKit::ServiceWorkerSoftUpdateLoader::didReceiveBuffer):
 42 * NetworkProcess/ServiceWorker/ServiceWorkerSoftUpdateLoader.h:
 43 * NetworkProcess/cache/NetworkCacheSpeculativeLoad.cpp:
 44 (WebKit::NetworkCache::SpeculativeLoad::didReceiveBuffer):
 45 * NetworkProcess/cache/NetworkCacheSpeculativeLoad.h:
 46 * NetworkProcess/cocoa/NetworkDataTaskCocoa.h:
 47 * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:
 48 (WebKit::NetworkDataTaskCocoa::didReceiveData):
 49 * Platform/IPC/SharedBufferCopy.h:
 50 (IPC::SharedBufferCopy::SharedBufferCopy):
 51 * Shared/mac/MediaFormatReader/MediaFormatReader.cpp:
 52 (WebKit::MediaFormatReader::didParseTracks):
 53 * Shared/mac/MediaFormatReader/MediaFormatReader.h:
 54 * UIProcess/WebURLSchemeTask.cpp:
 55 (WebKit::WebURLSchemeTask::didReceiveData):
 56 * UIProcess/WebURLSchemeTask.h:
 57 * WebProcess/GPU/media/RemoteMediaResourceProxy.cpp:
 58 (WebKit::RemoteMediaResourceProxy::dataReceived):
 59 * WebProcess/GPU/media/RemoteMediaResourceProxy.h:
 60 * WebProcess/Network/WebResourceLoader.cpp:
 61 (WebKit::WebResourceLoader::didReceiveData):
 62 (WebKit::WebResourceLoader::didReceiveResource):
 63 * WebProcess/Network/WebResourceLoader.h:
 64 * WebProcess/Network/WebResourceLoader.messages.in:
 65 * WebProcess/Plugins/PDF/PDFPlugin.h:
 66 * WebProcess/Plugins/PDF/PDFPlugin.mm:
 67 (WebKit::PDFPlugin::PDFPluginStreamLoaderClient::didReceiveData):
 68 (WebKit::PDFPlugin::streamDidReceiveData):
 69 (WebKit::PDFPlugin::manualStreamDidReceiveData):
 70 * WebProcess/Plugins/Plugin.h:
 71 * WebProcess/Plugins/PluginView.cpp:
 72 (WebKit::PluginView::Stream::didReceiveData):
 73 (WebKit::PluginView::manualLoadDidReceiveData):
 74 (WebKit::PluginView::redeliverManualStream):
 75 * WebProcess/Plugins/PluginView.h:
 76 * WebProcess/Storage/WebServiceWorkerFetchTaskClient.cpp:
 77 (WebKit::WebServiceWorkerFetchTaskClient::didReceiveData):
 78 (WebKit::WebServiceWorkerFetchTaskClient::didReceiveBlobChunk):
 79 (WebKit::WebServiceWorkerFetchTaskClient::continueDidReceiveResponse):
 80 * WebProcess/Storage/WebServiceWorkerFetchTaskClient.h:
 81 * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
 82 (WebKit::WebFrameLoaderClient::committedLoad):
 83 * WebProcess/WebCoreSupport/WebFrameLoaderClient.h:
 84 * WebProcess/WebCoreSupport/ios/WebPreviewLoaderClient.cpp:
 85 (WebKit::WebPreviewLoaderClient::didReceiveData):
 86 * WebProcess/WebCoreSupport/ios/WebPreviewLoaderClient.h:
 87 * WebProcess/WebPage/WebPage.cpp:
 88 (WebKit::WebPage::urlSchemeTaskDidReceiveData):
 89 * WebProcess/WebPage/WebPage.h:
 90 * WebProcess/WebPage/WebPage.messages.in:
 91 * WebProcess/WebPage/WebURLSchemeHandlerProxy.cpp:
 92 (WebKit::WebURLSchemeHandlerProxy::taskDidReceiveData):
 93 * WebProcess/WebPage/WebURLSchemeHandlerProxy.h:
 94 * WebProcess/WebPage/WebURLSchemeTaskProxy.cpp:
 95 (WebKit::WebURLSchemeTaskProxy::didReceiveData):
 96 * WebProcess/WebPage/WebURLSchemeTaskProxy.h:
 97 * WebProcess/cocoa/WebProcessCocoa.mm:
 98 (WebKit::WebProcess::initializeSandbox):
 99
11002021-12-26 Sam Weinig <weinig@apple.com>
2101
3102 Replace WebKit/CocoaColor.h with WebCore/ColorCocoa.h, not confusing at all

Source/WebKitLegacy/ChangeLog

 12021-12-22 Jean-Yves Avenard <jya@apple.com>
 2
 3 Have CachedRawResourceClient and related networking actors use SharedBuffer.
 4 https://bugs.webkit.org/show_bug.cgi?id=232424
 5 rdar://84744687
 6
 7 Reviewed by NOBODY (OOPS!).
 8
 9 * WebCoreSupport/PingHandle.h:
 10
1112021-12-14 Jean-Yves Avenard <jya@apple.com>
212
313 Rename SharedBuffer classes.

Source/WebKitLegacy/mac/ChangeLog

 12021-12-22 Jean-Yves Avenard <jya@apple.com>
 2
 3 Have CachedRawResourceClient and related networking actors use SharedBuffer.
 4 https://bugs.webkit.org/show_bug.cgi?id=232424
 5 rdar://84744687
 6
 7 Reviewed by NOBODY (OOPS!).
 8
 9 * WebCoreSupport/WebFrameLoaderClient.h:
 10 * WebCoreSupport/WebFrameLoaderClient.mm:
 11 (WebFrameLoaderClient::committedLoad):
 12 (WebFrameLoaderClient::createPreviewLoaderClient):
 13 * WebView/WebFrame.mm:
 14 (-[WebFrame _commitData:]):
 15
1162021-12-22 Michael Saboff <msaboff@apple.com>
217
318 Fix WebKit Build issues when using system content path

Source/WebCore/Modules/fetch/FetchBodyConsumer.cpp

@@void FetchBodyConsumer::resolve(Ref<DeferredPromise>&& promise, const String& co
320320 }
321321}
322322
323 void FetchBodyConsumer::append(const uint8_t* data, unsigned size)
 323void FetchBodyConsumer::append(const SharedBuffer& buffer)
324324{
325325 if (m_source) {
326  m_source->enqueue(ArrayBuffer::tryCreate(data, size));
 326 m_source->enqueue(buffer.tryCreateArrayBuffer());
327327 return;
328328 }
329  m_buffer.append(data, size);
 329 m_buffer.append(buffer);
330330}
331331
332332void FetchBodyConsumer::setData(Ref<FragmentedSharedBuffer>&& data)

Source/WebCore/Modules/fetch/FetchBodyConsumer.h

@@public:
4747
4848 explicit FetchBodyConsumer(Type type) : m_type(type) { }
4949
50  void append(const uint8_t* data, unsigned);
 50 void append(const SharedBuffer&);
5151
5252 bool hasData() const { return !!m_buffer; }
5353 const FragmentedSharedBuffer* data() const { return m_buffer.get().get(); }

Source/WebCore/Modules/fetch/FetchBodyOwner.cpp

@@void FetchBodyOwner::blobLoadingFailed()
298298 finishBlobLoading();
299299}
300300
301 void FetchBodyOwner::blobChunk(const uint8_t* data, size_t size)
 301void FetchBodyOwner::blobChunk(const SharedBuffer& buffer)
302302{
303  ASSERT(data);
304303 ASSERT(m_readableStreamSource);
305  if (!m_readableStreamSource->enqueue(ArrayBuffer::tryCreate(data, size)))
 304 if (!m_readableStreamSource->enqueue(buffer.tryCreateArrayBuffer()))
306305 stop();
307306}
308307

Source/WebCore/Modules/fetch/FetchBodyOwner.h

3737#include "FetchLoader.h"
3838#include "FetchLoaderClient.h"
3939#include "ResourceError.h"
 40#include "SharedBuffer.h"
4041
4142namespace WebCore {
4243

@@protected:
100101
101102private:
102103 // Blob loading routines
103  void blobChunk(const uint8_t*, size_t);
 104 void blobChunk(const SharedBuffer&);
104105 void blobLoadingSucceeded();
105106 void blobLoadingFailed();
106107 void finishBlobLoading();

@@private:
113114
114115 // FetchLoaderClient API
115116 void didReceiveResponse(const ResourceResponse&) final;
116  void didReceiveData(const uint8_t* data, size_t size) final { owner.blobChunk(data, size); }
 117 void didReceiveData(const SharedBuffer& buffer) final { owner.blobChunk(buffer); }
117118 void didFail(const ResourceError&) final;
118119 void didSucceed() final { owner.blobLoadingSucceeded(); }
119120

Source/WebCore/Modules/fetch/FetchLoader.cpp

@@void FetchLoader::didReceiveResponse(ResourceLoaderIdentifier, const ResourceRes
148148 m_client.didReceiveResponse(response);
149149}
150150
151 void FetchLoader::didReceiveData(const uint8_t* value, int size)
 151void FetchLoader::didReceiveData(const SharedBuffer& buffer, bool)
152152{
153153 if (!m_consumer) {
154  m_client.didReceiveData(value, size);
 154 m_client.didReceiveData(buffer);
155155 return;
156156 }
157  m_consumer->append(value, size);
 157 m_consumer->append(buffer);
158158}
159159
160160void FetchLoader::didFinishLoading(ResourceLoaderIdentifier)

Source/WebCore/Modules/fetch/FetchLoader.h

@@public:
5858private:
5959 // ThreadableLoaderClient API.
6060 void didReceiveResponse(ResourceLoaderIdentifier, const ResourceResponse&) final;
61  void didReceiveData(const uint8_t*, int) final;
 61 void didReceiveData(const SharedBuffer&, bool useStrLen) final;
6262 void didFinishLoading(ResourceLoaderIdentifier) final;
6363 void didFail(const ResourceError&) final;
6464

Source/WebCore/Modules/fetch/FetchLoaderClient.h

@@public:
4141
4242 virtual void didReceiveResponse(const ResourceResponse&) { }
4343
44  virtual void didReceiveData(const uint8_t*, size_t) { }
 44 virtual void didReceiveData(const SharedBuffer&) { }
4545
4646 virtual void didSucceed() = 0;
4747 virtual void didFail(const ResourceError&) = 0;

Source/WebCore/Modules/fetch/FetchResponse.cpp

@@void FetchResponse::BodyLoader::didReceiveResponse(const ResourceResponse& resou
362362 responseCallback(m_response);
363363}
364364
365 void FetchResponse::BodyLoader::didReceiveData(const uint8_t* data, size_t size)
 365void FetchResponse::BodyLoader::didReceiveData(const SharedBuffer& buffer)
366366{
367367 ASSERT(m_response.m_readableStreamSource || m_consumeDataCallback);
368368
369369 if (m_consumeDataCallback) {
370  Span chunk { data, size };
 370 Span chunk { buffer.data(), buffer.size() };
371371 m_consumeDataCallback(&chunk);
372372 return;
373373 }

@@void FetchResponse::BodyLoader::didReceiveData(const uint8_t* data, size_t size)
375375 auto& source = *m_response.m_readableStreamSource;
376376
377377 if (!source.isPulling()) {
378  m_response.body().consumer().append(data, size);
 378 m_response.body().consumer().append(buffer);
379379 return;
380380 }
381381

@@void FetchResponse::BodyLoader::didReceiveData(const uint8_t* data, size_t size)
383383 stop();
384384 return;
385385 }
386  if (!source.enqueue(ArrayBuffer::tryCreate(data, size))) {
 386 if (!source.enqueue(buffer.tryCreateArrayBuffer())) {
387387 stop();
388388 return;
389389 }

@@void FetchResponse::setBodyData(ResponseData&& data, uint64_t bodySizeWithPaddin
467467
468468void FetchResponse::consumeChunk(Ref<JSC::Uint8Array>&& chunk)
469469{
470  body().consumer().append(chunk->data(), chunk->byteLength());
 470 body().consumer().append(SharedBuffer::create(chunk->data(), chunk->byteLength()));
471471}
472472
473473void FetchResponse::consumeBodyAsStream()

Source/WebCore/Modules/fetch/FetchResponse.h

@@private:
143143 void didSucceed() final;
144144 void didFail(const ResourceError&) final;
145145 void didReceiveResponse(const ResourceResponse&) final;
146  void didReceiveData(const uint8_t*, size_t) final;
 146 void didReceiveData(const SharedBuffer&) final;
147147
148148 FetchResponse& m_response;
149149 NotificationCallback m_responseCallback;

Source/WebCore/Modules/model-element/HTMLModelElement.cpp

@@RenderPtr<RenderElement> HTMLModelElement::createElementRenderer(RenderStyle&& s
177177
178178// MARK: - CachedRawResourceClient
179179
180 void HTMLModelElement::dataReceived(CachedResource& resource, const uint8_t* data, int dataLength)
 180void HTMLModelElement::dataReceived(CachedResource& resource, const SharedBuffer& buffer)
181181{
182182 ASSERT_UNUSED(resource, &resource == m_resource);
183  m_data.append(data, dataLength);
 183 m_data.append(buffer);
184184}
185185
186186void HTMLModelElement::notifyFinished(CachedResource& resource, const NetworkLoadMetrics&)

Source/WebCore/Modules/model-element/HTMLModelElement.h

@@private:
116116 RenderPtr<RenderElement> createElementRenderer(RenderStyle&&, const RenderTreePosition&) final;
117117
118118 // CachedRawResourceClient overrides.
119  void dataReceived(CachedResource&, const uint8_t* data, int dataLength) final;
 119 void dataReceived(CachedResource&, const SharedBuffer&) final;
120120 void notifyFinished(CachedResource&, const NetworkLoadMetrics&) final;
121121
122122 // ModelPlayerClient overrides.

Source/WebCore/Modules/streams/ReadableStreamSink.h

@@namespace WebCore {
3535
3636class BufferSource;
3737class ReadableStream;
38 class FragmentedSharedBuffer;
3938
4039class ReadableStreamSink : public RefCounted<ReadableStreamSink> {
4140public:

Source/WebCore/fileapi/FileReaderLoader.cpp

4141#include "ResourceRequest.h"
4242#include "ResourceResponse.h"
4343#include "ScriptExecutionContext.h"
 44#include "SharedBuffer.h"
4445#include "TextResourceDecoder.h"
4546#include "ThreadableBlobRegistry.h"
4647#include "ThreadableLoader.h"

@@void FileReaderLoader::didReceiveResponse(ResourceLoaderIdentifier, const Resour
163164 m_client->didStartLoading();
164165}
165166
166 void FileReaderLoader::didReceiveData(const uint8_t* data, int dataLength)
 167void FileReaderLoader::didReceiveData(const SharedBuffer& buffer, bool)
167168{
168  ASSERT(data);
169  ASSERT(dataLength > 0);
 169 ASSERT(buffer.size());
170170
171171 // Bail out if we already encountered an error.
172172 if (m_errorCode)
173173 return;
174174
175  int length = dataLength;
 175 int length = buffer.size();
176176 unsigned remainingBufferSpace = m_totalBytes - m_bytesLoaded;
177177 if (length > static_cast<long long>(remainingBufferSpace)) {
178178 // If the buffer has hit maximum size, it can't be grown any more.

@@void FileReaderLoader::didReceiveData(const uint8_t* data, int dataLength)
181181 return;
182182 }
183183 if (m_variableLength) {
184  unsigned newLength = m_totalBytes + static_cast<unsigned>(dataLength);
 184 unsigned newLength = m_totalBytes + buffer.size();
185185 if (newLength < m_totalBytes) {
186186 failed(NotReadableError);
187187 return;

@@void FileReaderLoader::didReceiveData(const uint8_t* data, int dataLength)
206206 if (length <= 0)
207207 return;
208208
209  memcpy(static_cast<char*>(m_rawData->data()) + m_bytesLoaded, data, length);
 209 memcpy(static_cast<char*>(m_rawData->data()) + m_bytesLoaded, buffer.data(), length);
210210 m_bytesLoaded += length;
211211
212212 m_isRawDataConverted = false;

Source/WebCore/fileapi/FileReaderLoader.h

@@public:
7070
7171 // ThreadableLoaderClient
7272 void didReceiveResponse(ResourceLoaderIdentifier, const ResourceResponse&) override;
73  void didReceiveData(const uint8_t*, int) override;
 73 void didReceiveData(const SharedBuffer&, bool) override;
7474 void didFinishLoading(ResourceLoaderIdentifier) override;
7575 void didFail(const ResourceError&) override;
7676

Source/WebCore/inspector/InspectorInstrumentation.cpp

@@void InspectorInstrumentation::didReceiveThreadableLoaderResponseImpl(Instrument
616616 networkAgent->didReceiveThreadableLoaderResponse(identifier, documentThreadableLoader);
617617}
618618
619 void InspectorInstrumentation::didReceiveDataImpl(InstrumentingAgents& instrumentingAgents, ResourceLoaderIdentifier identifier, const uint8_t* data, int dataLength, int encodedDataLength)
 619void InspectorInstrumentation::didReceiveDataImpl(InstrumentingAgents& instrumentingAgents, ResourceLoaderIdentifier identifier, const SharedBuffer& buffer, int encodedDataLength)
620620{
621621 if (auto* networkAgent = instrumentingAgents.enabledNetworkAgent())
622  networkAgent->didReceiveData(identifier, data, dataLength, encodedDataLength);
 622 networkAgent->didReceiveData(identifier, buffer, encodedDataLength);
623623}
624624
625625void InspectorInstrumentation::didFinishLoadingImpl(InstrumentingAgents& instrumentingAgents, ResourceLoaderIdentifier identifier, DocumentLoader* loader, const NetworkLoadMetrics& networkLoadMetrics, ResourceLoader* resourceLoader)

Source/WebCore/inspector/InspectorInstrumentation.h

@@public:
193193 static void didLoadResourceFromMemoryCache(Page&, DocumentLoader*, CachedResource*);
194194 static void didReceiveResourceResponse(Frame&, ResourceLoaderIdentifier, DocumentLoader*, const ResourceResponse&, ResourceLoader*);
195195 static void didReceiveThreadableLoaderResponse(DocumentThreadableLoader&, ResourceLoaderIdentifier);
196  static void didReceiveData(Frame*, ResourceLoaderIdentifier, const uint8_t* data, int dataLength, int encodedDataLength);
 196 static void didReceiveData(Frame*, ResourceLoaderIdentifier, const SharedBuffer&, int encodedDataLength);
197197 static void didFinishLoading(Frame*, DocumentLoader*, ResourceLoaderIdentifier, const NetworkLoadMetrics&, ResourceLoader*);
198198 static void didFailLoading(Frame*, DocumentLoader*, ResourceLoaderIdentifier, const ResourceError&);
199199
200200 static void willSendRequest(WorkerOrWorkletGlobalScope&, ResourceLoaderIdentifier, ResourceRequest&);
201201 static void didReceiveResourceResponse(WorkerOrWorkletGlobalScope&, ResourceLoaderIdentifier, const ResourceResponse&);
202  static void didReceiveData(WorkerOrWorkletGlobalScope&, ResourceLoaderIdentifier, const uint8_t* data, int dataLength);
 202 static void didReceiveData(WorkerOrWorkletGlobalScope&, ResourceLoaderIdentifier, const SharedBuffer&);
203203 static void didFinishLoading(WorkerOrWorkletGlobalScope&, ResourceLoaderIdentifier, const NetworkLoadMetrics&);
204204 static void didFailLoading(WorkerOrWorkletGlobalScope&, ResourceLoaderIdentifier, const ResourceError&);
205205

@@private:
414414 static void didLoadResourceFromMemoryCacheImpl(InstrumentingAgents&, DocumentLoader*, CachedResource*);
415415 static void didReceiveResourceResponseImpl(InstrumentingAgents&, ResourceLoaderIdentifier, DocumentLoader*, const ResourceResponse&, ResourceLoader*);
416416 static void didReceiveThreadableLoaderResponseImpl(InstrumentingAgents&, DocumentThreadableLoader&, ResourceLoaderIdentifier);
417  static void didReceiveDataImpl(InstrumentingAgents&, ResourceLoaderIdentifier, const uint8_t* data, int dataLength, int encodedDataLength);
 417 static void didReceiveDataImpl(InstrumentingAgents&, ResourceLoaderIdentifier, const SharedBuffer&, int encodedDataLength);
418418 static void didFinishLoadingImpl(InstrumentingAgents&, ResourceLoaderIdentifier, DocumentLoader*, const NetworkLoadMetrics&, ResourceLoader*);
419419 static void didFailLoadingImpl(InstrumentingAgents&, ResourceLoaderIdentifier, DocumentLoader*, const ResourceError&);
420420 static void willLoadXHRSynchronouslyImpl(InstrumentingAgents&);

@@inline void InspectorInstrumentation::didReceiveThreadableLoaderResponse(Documen
10821082 didReceiveThreadableLoaderResponseImpl(*agents, documentThreadableLoader, identifier);
10831083}
10841084
1085 inline void InspectorInstrumentation::didReceiveData(Frame* frame, ResourceLoaderIdentifier identifier, const uint8_t* data, int dataLength, int encodedDataLength)
 1085inline void InspectorInstrumentation::didReceiveData(Frame* frame, ResourceLoaderIdentifier identifier, const SharedBuffer& buffer, int encodedDataLength)
10861086{
10871087 FAST_RETURN_IF_NO_FRONTENDS(void());
10881088 if (auto* agents = instrumentingAgents(frame))
1089  didReceiveDataImpl(*agents, identifier, data, dataLength, encodedDataLength);
 1089 didReceiveDataImpl(*agents, identifier, buffer, encodedDataLength);
10901090}
10911091
1092 inline void InspectorInstrumentation::didReceiveData(WorkerOrWorkletGlobalScope& globalScope, ResourceLoaderIdentifier identifier, const uint8_t* data, int dataLength)
 1092inline void InspectorInstrumentation::didReceiveData(WorkerOrWorkletGlobalScope& globalScope, ResourceLoaderIdentifier identifier, const SharedBuffer& buffer)
10931093{
10941094 FAST_RETURN_IF_NO_FRONTENDS(void());
1095  didReceiveDataImpl(instrumentingAgents(globalScope), identifier, data, dataLength, dataLength);
 1095 didReceiveDataImpl(instrumentingAgents(globalScope), identifier, buffer, buffer.size());
10961096}
10971097
10981098inline void InspectorInstrumentation::didFinishLoading(Frame* frame, DocumentLoader* loader, ResourceLoaderIdentifier identifier, const NetworkLoadMetrics& networkLoadMetrics, ResourceLoader* resourceLoader)

Source/WebCore/inspector/NetworkResourcesData.cpp

@@size_t NetworkResourcesData::ResourceData::dataLength() const
9090 return m_dataBuffer.size();
9191}
9292
93 void NetworkResourcesData::ResourceData::appendData(const uint8_t* data, size_t dataLength)
 93void NetworkResourcesData::ResourceData::appendData(const SharedBuffer& data)
9494{
9595 ASSERT(!hasContent());
96  m_dataBuffer.append(data, dataLength);
 96 m_dataBuffer.append(data);
9797}
9898
9999unsigned NetworkResourcesData::ResourceData::decodeDataToContent()

@@static bool shouldBufferResourceData(const NetworkResourcesData::ResourceData& r
221221 return false;
222222}
223223
224 NetworkResourcesData::ResourceData const* NetworkResourcesData::maybeAddResourceData(const String& requestId, const uint8_t* data, size_t dataLength)
 224NetworkResourcesData::ResourceData const* NetworkResourcesData::maybeAddResourceData(const String& requestId, const SharedBuffer& data)
225225{
226226 ResourceData* resourceData = resourceDataForRequestId(requestId);
227227 if (!resourceData)

@@NetworkResourcesData::ResourceData const* NetworkResourcesData::maybeAddResource
230230 if (!shouldBufferResourceData(*resourceData))
231231 return resourceData;
232232
233  if (resourceData->dataLength() + dataLength > m_maximumSingleResourceContentSize)
 233 if (resourceData->dataLength() + data.size() > m_maximumSingleResourceContentSize)
234234 m_contentSize -= resourceData->evictContent();
235235 if (resourceData->isContentEvicted())
236236 return resourceData;
237237
238  if (ensureFreeSpace(dataLength) && !resourceData->isContentEvicted()) {
 238 if (ensureFreeSpace(data.size()) && !resourceData->isContentEvicted()) {
239239 m_requestIdsDeque.append(requestId);
240  resourceData->appendData(data, dataLength);
241  m_contentSize += dataLength;
 240 resourceData->appendData(data);
 241 m_contentSize += data.size();
242242 }
243243
244244 return resourceData;

Source/WebCore/inspector/NetworkResourcesData.h

@@public:
108108 private:
109109 bool hasData() const;
110110 size_t dataLength() const;
111  void appendData(const uint8_t* data, size_t dataLength);
 111 void appendData(const SharedBuffer&);
112112 unsigned decodeDataToContent();
113113
114114 String m_requestId;

@@public:
141141 void setResourceType(const String& requestId, InspectorPageAgent::ResourceType);
142142 InspectorPageAgent::ResourceType resourceType(const String& requestId);
143143 void setResourceContent(const String& requestId, const String& content, bool base64Encoded = false);
144  ResourceData const* maybeAddResourceData(const String& requestId, const uint8_t* data, size_t dataLength);
 144 ResourceData const* maybeAddResourceData(const String& requestId, const SharedBuffer&);
145145 void maybeDecodeDataToContent(const String& requestId);
146146 void addCachedResource(const String& requestId, CachedResource*);
147147 void addResourceSharedBuffer(const String& requestId, RefPtr<FragmentedSharedBuffer>&&, const String& textEncodingName);

Source/WebCore/inspector/agents/InspectorNetworkAgent.cpp

@@public:
124124 m_decoder = TextResourceDecoder::create("text/plain"_s, textEncoding, useDetector);
125125 }
126126
127  void didReceiveData(const uint8_t* data, int dataLength) override
 127 void didReceiveData(const SharedBuffer& buffer, bool useStrLen) override
128128 {
129  if (!dataLength)
 129 if (buffer.isEmpty())
130130 return;
131131
132  if (dataLength == -1)
133  dataLength = strlen(reinterpret_cast<const char*>(data));
134 
135  m_responseText.append(m_decoder->decode(data, dataLength));
 132 size_t dataLength = useStrLen ? strlen(reinterpret_cast<const char*>(buffer.data())) : buffer.size();
 133 m_responseText.append(m_decoder->decode(buffer.data(), dataLength));
136134 }
137135
138136 void didFinishLoading(ResourceLoaderIdentifier) override

@@void InspectorNetworkAgent::didReceiveResponse(ResourceLoaderIdentifier identifi
549547 if (previousResourceData->hasContent())
550548 m_resourcesData->setResourceContent(requestId, previousResourceData->content(), previousResourceData->base64Encoded());
551549 else if (previousResourceData->hasBufferedData()) {
552  auto previousBuffer = previousResourceData->buffer();
553  previousBuffer->forEachSegment([&](auto& segment) {
554  m_resourcesData->maybeAddResourceData(requestId, segment.data(), segment.size());
 550 previousResourceData->buffer()->forEachSegmentAsSharedBuffer([&](auto&& buffer) {
 551 m_resourcesData->maybeAddResourceData(requestId, buffer);
555552 });
556553 }
557554

@@void InspectorNetworkAgent::didReceiveResponse(ResourceLoaderIdentifier identifi
574571 // If we revalidated the resource and got Not modified, send content length following didReceiveResponse
575572 // as there will be no calls to didReceiveData from the network stack.
576573 if (isNotModified && cachedResource && cachedResource->encodedSize())
577  didReceiveData(identifier, nullptr, cachedResource->encodedSize(), 0);
 574 didReceiveData(identifier, SharedBuffer::create(), cachedResource->encodedSize());
578575}
579576
580 void InspectorNetworkAgent::didReceiveData(ResourceLoaderIdentifier identifier, const uint8_t* data, int dataLength, int encodedDataLength)
 577void InspectorNetworkAgent::didReceiveData(ResourceLoaderIdentifier identifier, const SharedBuffer& data, int encodedDataLength)
581578{
582579 if (m_hiddenRequestIdentifiers.contains(identifier))
583580 return;
584581
585582 String requestId = IdentifiersFactory::requestId(identifier.toUInt64());
 583 int dataLength = data.size();
586584
587  if (data) {
588  NetworkResourcesData::ResourceData const* resourceData = m_resourcesData->maybeAddResourceData(requestId, data, dataLength);
 585 if (data.data()) {
 586 NetworkResourcesData::ResourceData const* resourceData = m_resourcesData->maybeAddResourceData(requestId, data);
589587
590588 // For a synchronous XHR, if we didn't add data then we can apply it here as base64 encoded content.
591589 // Often the data is text and we would have a decoder, but for non-text we won't have a decoder.
592590 // Sync XHRs may not have a cached resource, while non-sync XHRs usually transfer data over on completion.
593591 if (m_loadingXHRSynchronously && resourceData && !resourceData->hasBufferedData() && !resourceData->cachedResource())
594  m_resourcesData->setResourceContent(requestId, base64EncodeToString(data, dataLength), true);
 592 m_resourcesData->setResourceContent(requestId, base64EncodeToString(data.data(), data.size()), true);
 593 } else {
 594 dataLength = encodedDataLength;
 595 encodedDataLength = 0;
595596 }
596597
597598 m_frontendDispatcher->dataReceived(requestId, timestamp(), dataLength, encodedDataLength);

@@Protocol::ErrorStringOr<void> InspectorNetworkAgent::interceptRequestWithRespons
12711272 if (loader->reachedTerminalState())
12721273 return makeUnexpected("Unable to fulfill request, it has already been processed"_s);
12731274
1274  RefPtr<FragmentedSharedBuffer> data;
 1275 RefPtr<SharedBuffer> data;
12751276 if (base64Encoded) {
12761277 auto buffer = base64Decode(content);
12771278 if (!buffer)

@@Protocol::ErrorStringOr<void> InspectorNetworkAgent::interceptRequestWithRespons
12961297 }
12971298 response.setHTTPHeaderFields(WTFMove(explicitHeaders));
12981299 response.setHTTPHeaderField(HTTPHeaderName::ContentType, response.mimeType());
1299  loader->didReceiveResponse(response, [loader, buffer = data.releaseNonNull()]() mutable {
 1300 loader->didReceiveResponse(response, [loader, buffer = data.releaseNonNull()]() {
13001301 if (buffer->size())
1301  loader->didReceiveBuffer(WTFMove(buffer), buffer->size(), DataPayloadWholeResource);
 1302 loader->didReceiveData(buffer, buffer->size(), DataPayloadWholeResource);
13021303 loader->didFinishLoading(NetworkLoadMetrics());
13031304 });
13041305

Source/WebCore/inspector/agents/InspectorNetworkAgent.h

@@public:
101101 void willSendRequest(ResourceLoaderIdentifier, DocumentLoader*, ResourceRequest&, const ResourceResponse& redirectResponse, const CachedResource*);
102102 void willSendRequestOfType(ResourceLoaderIdentifier, DocumentLoader*, ResourceRequest&, InspectorInstrumentation::LoadType);
103103 void didReceiveResponse(ResourceLoaderIdentifier, DocumentLoader*, const ResourceResponse&, ResourceLoader*);
104  void didReceiveData(ResourceLoaderIdentifier, const uint8_t* data, int dataLength, int encodedDataLength);
 104 void didReceiveData(ResourceLoaderIdentifier, const SharedBuffer&, int encodedDataLength);
105105 void didFinishLoading(ResourceLoaderIdentifier, DocumentLoader*, const NetworkLoadMetrics&, ResourceLoader*);
106106 void didFailLoading(ResourceLoaderIdentifier, DocumentLoader*, const ResourceError&);
107107 void didLoadResourceFromMemoryCache(DocumentLoader*, CachedResource&);

Source/WebCore/loader/ContentFilter.cpp

@@bool ContentFilter::continueAfterResponseReceived(const ResourceResponse& respon
145145 return m_state != State::Blocked;
146146}
147147
148 bool ContentFilter::continueAfterDataReceived(const uint8_t* data, int length)
 148bool ContentFilter::continueAfterDataReceived(const SharedBuffer& data)
149149{
150150 Ref<ContentFilterClient> protectedClient { m_client };
151151
152152 if (m_state == State::Filtering) {
153  LOG(ContentFiltering, "ContentFilter received %d bytes of data from <%s>.\n", length, m_mainResource->url().string().ascii().data());
154  forEachContentFilterUntilBlocked([data, length](PlatformContentFilter& contentFilter) {
155  contentFilter.addData(data, length);
 153 LOG(ContentFiltering, "ContentFilter received %zu bytes of data from <%s>.\n", data.size(), m_mainResource->url().string().ascii().data());
 154 forEachContentFilterUntilBlocked([data = Ref { data }](PlatformContentFilter& contentFilter) {
 155 contentFilter.addData(data);
156156 });
157157
158158 if (m_state == State::Allowed)

@@void ContentFilter::deliverResourceData(CachedResource& resource)
233233 ASSERT(m_state == State::Allowed);
234234 ASSERT(resource.dataBufferingPolicy() == DataBufferingPolicy::BufferData);
235235 if (auto* resourceBuffer = resource.resourceBuffer())
236  m_client.dataReceivedThroughContentFilter(resourceBuffer->makeContiguous()->data(), resourceBuffer->size());
 236 m_client.dataReceivedThroughContentFilter(resourceBuffer->makeContiguous());
237237}
238238
239239static const URL& blockedPageURL()

Source/WebCore/loader/ContentFilter.h

@@public:
6060
6161 bool continueAfterWillSendRequest(ResourceRequest&, const ResourceResponse&);
6262 bool continueAfterResponseReceived(const ResourceResponse&);
63  bool continueAfterDataReceived(const uint8_t* data, int length);
 63 bool continueAfterDataReceived(const SharedBuffer&);
6464 bool continueAfterNotifyFinished(CachedResource&);
6565
6666 static bool continueAfterSubstituteDataRequest(const DocumentLoader& activeLoader, const SubstituteData&);

Source/WebCore/loader/ContentFilterClient.h

@@namespace WebCore {
3333
3434class ContentFilterUnblockHandler;
3535class ResourceError;
 36class SharedBuffer;
3637class SubstituteData;
3738
3839class ContentFilterClient {

@@public:
4142 virtual void ref() const = 0;
4243 virtual void deref() const = 0;
4344
44  virtual void dataReceivedThroughContentFilter(const uint8_t*, int) = 0;
 45 virtual void dataReceivedThroughContentFilter(const SharedBuffer&) = 0;
4546 virtual ResourceError contentFilterDidBlock(ContentFilterUnblockHandler, String&& unblockRequestDeniedScript) = 0;
4647 virtual void cancelMainResourceLoadForContentFilter(const ResourceError&) = 0;
4748 virtual void handleProvisionalLoadFailureFromContentFilter(const URL& blockedPageURL, SubstituteData&) = 0;

Source/WebCore/loader/DocumentLoader.cpp

@@void DocumentLoader::finishedLoading()
483483 // If this is an empty document, it will not have actually been created yet. Commit dummy data so that
484484 // DocumentWriter::begin() gets called and creates the Document.
485485 if (!m_gotFirstByte)
486  commitData(0, 0);
487 
 486 commitData(SharedBuffer::create());
 487
488488 if (!frameLoader())
489489 return;
490490 frameLoader()->client().finishedLoading(this);

@@void DocumentLoader::continueAfterContentPolicy(PolicyAction policy)
11571157 if (!isStopping() && m_substituteData.isValid() && isLoadingMainResource()) {
11581158 auto content = m_substituteData.content();
11591159 if (content && content->size()) {
1160  content->forEachSegment([&](auto& segment) {
1161  dataReceived(segment.data(), segment.size());
 1160 content->forEachSegmentAsSharedBuffer([&](auto&& buffer) {
 1161 dataReceived(buffer);
11621162 });
11631163 }
11641164 if (isLoadingMainResource())

@@void DocumentLoader::continueAfterContentPolicy(PolicyAction policy)
11711171 }
11721172}
11731173
1174 void DocumentLoader::commitLoad(const uint8_t* data, int length)
 1174void DocumentLoader::commitLoad(const SharedBuffer& data)
11751175{
11761176 // Both unloading the old page and parsing the new page may execute JavaScript which destroys the datasource
11771177 // by starting a new load, so retain temporarily.

@@void DocumentLoader::commitLoad(const uint8_t* data, int length)
11861186 if (ArchiveFactory::isArchiveMIMEType(response().mimeType()))
11871187 return;
11881188#endif
1189  frameLoader->client().committedLoad(this, data, length);
 1189 frameLoader->client().committedLoad(this, data);
11901190
11911191 if (isMultipartReplacingLoad())
11921192 frameLoader->client().didReplaceMultipartContent();

@@static inline bool shouldUseActiveServiceWorkerFromParent(const Document& docume
12151215}
12161216#endif
12171217
1218 void DocumentLoader::commitData(const uint8_t* bytes, size_t length)
 1218void DocumentLoader::commitData(const SharedBuffer& data)
12191219{
12201220 if (!m_gotFirstByte) {
12211221 m_gotFirstByte = true;

@@void DocumentLoader::commitData(const uint8_t* bytes, size_t length)
13131313#endif
13141314
13151315 ASSERT(m_frame->document()->parsing());
1316  m_writer.addData(bytes, length);
 1316 m_writer.addData(data);
13171317}
13181318
1319 void DocumentLoader::dataReceived(CachedResource& resource, const uint8_t* data, int length)
 1319void DocumentLoader::dataReceived(CachedResource& resource, const SharedBuffer& buffer)
13201320{
13211321 ASSERT_UNUSED(resource, &resource == m_mainResource);
1322  dataReceived(data, length);
 1322 dataReceived(buffer);
13231323}
13241324
1325 void DocumentLoader::dataReceived(const uint8_t* data, int length)
 1325void DocumentLoader::dataReceived(const SharedBuffer& buffer)
13261326{
13271327#if ENABLE(CONTENT_FILTERING)
1328  if (m_contentFilter && !m_contentFilter->continueAfterDataReceived(data, length))
 1328 if (m_contentFilter && !m_contentFilter->continueAfterDataReceived(buffer))
13291329 return;
13301330#endif
13311331
1332  ASSERT(data);
1333  ASSERT(length);
 1332 ASSERT(buffer.data());
 1333 ASSERT(buffer.size());
13341334 ASSERT(!m_response.isNull());
13351335
13361336 // There is a bug in CFNetwork where callbacks can be dispatched even when loads are deferred.

@@void DocumentLoader::dataReceived(const uint8_t* data, int length)
13401340#endif
13411341
13421342 if (m_identifierForLoadWithoutResourceLoader)
1343  frameLoader()->notifier().dispatchDidReceiveData(this, m_identifierForLoadWithoutResourceLoader, data, length, -1);
 1343 frameLoader()->notifier().dispatchDidReceiveData(this, m_identifierForLoadWithoutResourceLoader, buffer, -1);
13441344
1345  m_applicationCacheHost->mainResourceDataReceived(data, length, -1, false);
 1345 m_applicationCacheHost->mainResourceDataReceived(buffer, -1, false);
13461346
13471347 if (!isMultipartReplacingLoad())
1348  commitLoad(data, length);
 1348 commitLoad(buffer);
13491349}
13501350
13511351void DocumentLoader::setupForReplace()

@@bool DocumentLoader::maybeCreateArchive()
16141614 m_writer.setMIMEType(mainResource.mimeType());
16151615
16161616 ASSERT(m_frame->document());
1617  commitData(m_parsedArchiveData->data(), mainResource.data().size());
 1617 commitData(*m_parsedArchiveData);
16181618 return true;
16191619#endif
16201620}

@@void DocumentLoader::maybeFinishLoadingMultipartContent()
22572257
22582258 frameLoader()->setupForReplace();
22592259 m_committed = false;
2260  RefPtr<FragmentedSharedBuffer> resourceData = mainResourceData();
2261  commitLoad(resourceData->makeContiguous()->data(), resourceData->size());
 2260 commitLoad(mainResourceData()->makeContiguous());
22622261}
22632262
22642263void DocumentLoader::startIconLoading()

@@void DocumentLoader::enqueueSecurityPolicyViolationEvent(SecurityPolicyViolation
24102409}
24112410
24122411#if ENABLE(CONTENT_FILTERING)
2413 void DocumentLoader::dataReceivedThroughContentFilter(const uint8_t* data, int size)
 2412void DocumentLoader::dataReceivedThroughContentFilter(const SharedBuffer& buffer)
24142413{
2415  dataReceived(data, size);
 2414 dataReceived(buffer);
24162415}
24172416
24182417void DocumentLoader::cancelMainResourceLoadForContentFilter(const ResourceError& error)

Source/WebCore/loader/DocumentLoader.h

@@class PreviewConverter;
8686class ResourceLoader;
8787class FragmentedSharedBuffer;
8888class SWClientConnection;
 89class SharedBuffer;
8990class SubresourceLoader;
9091class SubstituteResource;
9192class UserContentURLPattern;

@@public:
377378 void resetTiming() { m_loadTiming = { }; }
378379
379380 // The WebKit layer calls this function when it's ready for the data to actually be added to the document.
380  WEBCORE_EXPORT void commitData(const uint8_t* bytes, size_t length);
 381 WEBCORE_EXPORT void commitData(const SharedBuffer&);
381382
382383 ApplicationCacheHost& applicationCacheHost() const;
383384 ApplicationCacheHost* applicationCacheHostUnlessBeingDestroyed() const;

@@private:
477478
478479 void commitIfReady();
479480 void setMainDocumentError(const ResourceError&);
480  void commitLoad(const uint8_t*, int);
 481 void commitLoad(const SharedBuffer&);
481482 void clearMainResourceLoader();
482483
483484 void setupForReplace();

@@private:
493494 void mainReceivedError(const ResourceError&);
494495 WEBCORE_EXPORT void redirectReceived(CachedResource&, ResourceRequest&&, const ResourceResponse&, CompletionHandler<void(ResourceRequest&&)>&&) override;
495496 WEBCORE_EXPORT void responseReceived(CachedResource&, const ResourceResponse&, CompletionHandler<void()>&&) override;
496  WEBCORE_EXPORT void dataReceived(CachedResource&, const uint8_t* data, int length) override;
 497 WEBCORE_EXPORT void dataReceived(CachedResource&, const SharedBuffer&) override;
497498 WEBCORE_EXPORT void notifyFinished(CachedResource&, const NetworkLoadMetrics&) override;
498499#if USE(QUICK_LOOK)
499500 WEBCORE_EXPORT void previewResponseReceived(CachedResource&, const ResourceResponse&) override;

@@private:
503504
504505#if ENABLE(CONTENT_FILTERING)
505506 // ContentFilterClient
506  WEBCORE_EXPORT void dataReceivedThroughContentFilter(const uint8_t*, int) final;
 507 WEBCORE_EXPORT void dataReceivedThroughContentFilter(const SharedBuffer&) final;
507508 WEBCORE_EXPORT ResourceError contentFilterDidBlock(ContentFilterUnblockHandler, String&& unblockRequestDeniedScript) final;
508509 WEBCORE_EXPORT void cancelMainResourceLoadForContentFilter(const ResourceError&) final;
509510 WEBCORE_EXPORT void handleProvisionalLoadFailureFromContentFilter(const URL& blockedPageURL, SubstituteData&) final;
510511#endif
511512
512  void dataReceived(const uint8_t* data, int length);
 513 void dataReceived(const SharedBuffer&);
513514
514515 bool maybeLoadEmpty();
515516

Source/WebCore/loader/DocumentThreadableLoader.cpp

@@void DocumentThreadableLoader::didReceiveResponse(ResourceLoaderIdentifier ident
437437 m_client->didReceiveResponse(identifier, response);
438438}
439439
440 void DocumentThreadableLoader::dataReceived(CachedResource& resource, const uint8_t* data, int dataLength)
 440void DocumentThreadableLoader::dataReceived(CachedResource& resource, const SharedBuffer& buffer)
441441{
442442 ASSERT_UNUSED(resource, &resource == m_resource);
443  didReceiveData(m_resource->identifier(), data, dataLength);
 443 didReceiveData(m_resource->identifier(), buffer);
444444}
445445
446 void DocumentThreadableLoader::didReceiveData(ResourceLoaderIdentifier, const uint8_t* data, int dataLength)
 446void DocumentThreadableLoader::didReceiveData(ResourceLoaderIdentifier, const SharedBuffer& buffer)
447447{
448448 ASSERT(m_client);
449449
450450 if (m_delayCallbacksForIntegrityCheck)
451451 return;
452452
453  m_client->didReceiveData(data, dataLength);
 453 m_client->didReceiveData(buffer, false);
454454}
455455
456456void DocumentThreadableLoader::finishedTimingForWorkerLoad(CachedResource& resource, const ResourceTiming& resourceTiming)

@@void DocumentThreadableLoader::didFinishLoading(ResourceLoaderIdentifier identif
493493
494494 if (options().filteringPolicy == ResponseFilteringPolicy::Disable) {
495495 m_client->didReceiveResponse(identifier, response);
496  if (auto* buffer = m_resource->resourceBuffer()) {
497  buffer->forEachSegment([&](auto& segment) {
498  m_client->didReceiveData(segment.data(), segment.size());
499  });
500  }
 496 if (auto* buffer = m_resource->resourceBuffer())
 497 m_client->didReceiveData(*buffer, false);
501498 } else {
502499 ASSERT(response.type() == ResourceResponse::Type::Default);
503500
504501 m_client->didReceiveResponse(identifier, ResourceResponse::filter(response, m_options.credentials == FetchOptions::Credentials::Include ? ResourceResponse::PerformExposeAllHeadersCheck::No : ResourceResponse::PerformExposeAllHeadersCheck::Yes));
505  if (auto* buffer = m_resource->resourceBuffer()) {
506  buffer->forEachSegment([&](auto& segment) {
507  m_client->didReceiveData(segment.data(), segment.size());
508  });
509  }
 502 if (auto* buffer = m_resource->resourceBuffer())
 503 m_client->didReceiveData(*buffer, false);
510504 }
511505 }
512506

@@void DocumentThreadableLoader::loadRequest(ResourceRequest&& request, SecurityCh
667661 }
668662 didReceiveResponse(identifier, response);
669663
670  if (data) {
671  data->forEachSegment([&](auto& segment) {
672  didReceiveData(identifier, segment.data(), segment.size());
673  });
674  }
 664 if (data)
 665 didReceiveData(identifier, *data);
675666
676667 const auto* timing = response.deprecatedNetworkLoadMetricsOrNull();
677668 auto resourceTiming = ResourceTiming::fromSynchronousLoad(requestURL, m_options.initiator, loadTiming, timing ? *timing : NetworkLoadMetrics::emptyMetrics(), response, securityOrigin());

Source/WebCore/loader/DocumentThreadableLoader.h

@@namespace WebCore {
8686 // CachedRawResourceClient
8787 void dataSent(CachedResource&, unsigned long long bytesSent, unsigned long long totalBytesToBeSent) override;
8888 void responseReceived(CachedResource&, const ResourceResponse&, CompletionHandler<void()>&&) override;
89  void dataReceived(CachedResource&, const uint8_t* data, int dataLength) override;
 89 void dataReceived(CachedResource&, const SharedBuffer&) override;
9090 void redirectReceived(CachedResource&, ResourceRequest&&, const ResourceResponse&, CompletionHandler<void(ResourceRequest&&)>&&) override;
9191 void finishedTimingForWorkerLoad(CachedResource&, const ResourceTiming&) override;
9292 void finishedTimingForWorkerLoad(const ResourceTiming&);
9393 void notifyFinished(CachedResource&, const NetworkLoadMetrics&) override;
9494
9595 void didReceiveResponse(ResourceLoaderIdentifier, const ResourceResponse&);
96  void didReceiveData(ResourceLoaderIdentifier, const uint8_t* data, int dataLength);
 96 void didReceiveData(ResourceLoaderIdentifier, const SharedBuffer&);
9797 void didFinishLoading(ResourceLoaderIdentifier);
9898 void didFail(ResourceLoaderIdentifier, const ResourceError&);
9999 void makeCrossOriginAccessRequest(ResourceRequest&&);

Source/WebCore/loader/DocumentWriter.cpp

@@void DocumentWriter::reportDataReceived()
264264 m_frame->document()->resolveStyle(Document::ResolveStyleType::Rebuild);
265265}
266266
267 void DocumentWriter::addData(const uint8_t* bytes, size_t length)
 267void DocumentWriter::addData(const SharedBuffer& data)
268268{
269269 // FIXME: Change these to ASSERT once https://bugs.webkit.org/show_bug.cgi?id=80427 has been resolved.
270270 RELEASE_ASSERT(m_state != State::NotStarted);

@@void DocumentWriter::addData(const uint8_t* bytes, size_t length)
273273 return;
274274 }
275275 ASSERT(m_parser);
276  m_parser->appendBytes(*this, bytes, length);
 276 m_parser->appendBytes(*this, data.data(), data.size());
277277}
278278
279279void DocumentWriter::insertDataSynchronously(const String& markup)

Source/WebCore/loader/DocumentWriter.h

@@namespace WebCore {
3636class Document;
3737class DocumentParser;
3838class Frame;
 39class SharedBuffer;
3940class TextResourceDecoder;
4041
4142class DocumentWriter {

@@public:
4748
4849 bool begin();
4950 bool begin(const URL&, bool dispatchWindowObjectAvailable = true, Document* ownerDocument = nullptr);
50  void addData(const uint8_t* bytes, size_t length);
 51 void addData(const SharedBuffer&);
5152 void insertDataSynchronously(const String&); // For an internal use only to prevent the parser from yielding.
5253 WEBCORE_EXPORT void end();
5354

Source/WebCore/loader/EmptyClients.cpp

@@void EmptyFrameLoaderClient::didReplaceMultipartContent()
870870{
871871}
872872
873 void EmptyFrameLoaderClient::committedLoad(DocumentLoader*, const uint8_t*, int)
 873void EmptyFrameLoaderClient::committedLoad(DocumentLoader*, const SharedBuffer&)
874874{
875875}
876876

Source/WebCore/loader/EmptyFrameLoaderClient.h

@@private:
119119 void willReplaceMultipartContent() final;
120120 void didReplaceMultipartContent() final;
121121
122  void committedLoad(DocumentLoader*, const uint8_t*, int) final;
 122 void committedLoad(DocumentLoader*, const SharedBuffer&) final;
123123 void finishedLoading(DocumentLoader*) final;
124124
125125 ResourceError cancelledError(const ResourceRequest&) const final;

Source/WebCore/loader/FrameLoader.cpp

@@bool FrameLoader::willLoadMediaElementURL(URL& url, Node& initiatorNode)
16871687 ResourceLoaderIdentifier identifier;
16881688 ResourceError error;
16891689 requestFromDelegate(request, identifier, error);
1690  notifier().sendRemainingDelegateMessages(m_documentLoader.get(), identifier, request, ResourceResponse(url, String(), -1, String()), 0, -1, -1, error);
 1690 notifier().sendRemainingDelegateMessages(m_documentLoader.get(), identifier, request, ResourceResponse(url, String(), -1, String()), nullptr, -1, error);
16911691
16921692 url = request.url();
16931693

@@void FrameLoader::commitProvisionalLoad()
20872087 m_client->dispatchDidReceiveTitle(title);
20882088
20892089 // Send remaining notifications for the main resource.
2090  notifier().sendRemainingDelegateMessages(m_documentLoader.get(), mainResourceIdentifier, mainResourceRequest, ResourceResponse(),
2091  nullptr, static_cast<int>(m_documentLoader->response().expectedContentLength()), 0, mainResouceError);
 2090 notifier().sendRemainingDelegateMessages(m_documentLoader.get(), mainResourceIdentifier, mainResourceRequest, ResourceResponse(), nullptr, static_cast<int>(m_documentLoader->response().expectedContentLength()), mainResouceError);
20922091
20932092 Vector<Ref<Frame>> targetFrames;
20942093 targetFrames.append(m_frame);

@@void FrameLoader::commitProvisionalLoad()
21362135 // FIXME: If we get a resource with more than 2B bytes, this code won't do the right thing.
21372136 // However, with today's computers and networking speeds, this won't happen in practice.
21382137 // Could be an issue with a giant local file.
2139  notifier().sendRemainingDelegateMessages(m_documentLoader.get(), identifier, request, response, 0, static_cast<int>(response.expectedContentLength()), 0, error);
 2138 notifier().sendRemainingDelegateMessages(m_documentLoader.get(), identifier, request, response, nullptr, static_cast<int>(response.expectedContentLength()), error);
21402139 }
21412140
21422141 // FIXME: Why only this frame and not parent frames?

@@ResourceLoaderIdentifier FrameLoader::loadResourceSynchronously(const ResourceRe
31663165 (isScriptLikeDestination(options.destination) ? ResourceLoadObserver::FetchDestinationIsScriptLike::Yes : ResourceLoadObserver::FetchDestinationIsScriptLike::No));
31673166 }
31683167 }
3169  notifier().sendRemainingDelegateMessages(m_documentLoader.get(), identifier, request, response, data ? data->data() : nullptr, data ? data->size() : 0, -1, error);
 3168
 3169 notifier().sendRemainingDelegateMessages(m_documentLoader.get(), identifier, request, response, data, -1, error);
31703170 return identifier;
31713171}
31723172

@@void FrameLoader::loadedResourceFromMemoryCache(CachedResource& resource, Resour
36473647
36483648 ResourceResponse response = resource.response();
36493649 response.setSource(ResourceResponse::Source::MemoryCache);
3650  notifier().sendRemainingDelegateMessages(m_documentLoader.get(), identifier, newRequest, response, 0, resource.encodedSize(), 0, error);
 3650 notifier().sendRemainingDelegateMessages(m_documentLoader.get(), identifier, newRequest, response, nullptr, resource.encodedSize(), error);
36513651}
36523652
36533653void FrameLoader::applyUserAgentIfNeeded(ResourceRequest& request)

Source/WebCore/loader/FrameLoaderClient.h

77 * are met:
88 *
99 * 1. Redistributions of source code must retain the above copyright
10  * notice, this list of conditions and the following disclaimer.
 10 * notice, this list of conditions and the following disclaimer.
1111 * 2. Redistributions in binary form must reproduce the above copyright
1212 * notice, this list of conditions and the following disclaimer in the
1313 * documentation and/or other materials provided with the distribution.

5050#endif
5151
5252#if PLATFORM(COCOA)
53 #ifdef __OBJC__
 53#ifdef __OBJC__
5454#import <Foundation/Foundation.h>
5555typedef id RemoteAXObjectRef;
5656#else

@@class ResourceHandle;
9898class ResourceRequest;
9999class ResourceResponse;
100100class SecurityOrigin;
101 class FragmentedSharedBuffer;
 101class SharedBuffer;
102102class SubstituteData;
103103class Widget;
104104

@@public:
214214 virtual void willReplaceMultipartContent() = 0;
215215 virtual void didReplaceMultipartContent() = 0;
216216
217  virtual void committedLoad(DocumentLoader*, const uint8_t*, int) = 0;
 217 virtual void committedLoad(DocumentLoader*, const SharedBuffer&) = 0;
218218 virtual void finishedLoading(DocumentLoader*) = 0;
219 
 219
220220 virtual void updateGlobalHistory() = 0;
221221 virtual void updateGlobalHistoryRedirectLinks() = 0;
222222

@@public:
272272 virtual String userAgent(const URL&) const = 0;
273273
274274 virtual String overrideContentSecurityPolicy() const { return String(); }
275 
 275
276276 virtual void savePlatformDataToCachedFrame(CachedFrame*) = 0;
277277 virtual void transitionToCommittedFromCachedFrame(CachedFrame*) = 0;
278278#if PLATFORM(IOS_FAMILY)

@@public:
381381#endif
382382
383383 virtual AllowsContentJavaScript allowsContentJavaScriptFromMostRecentNavigation() const { return AllowsContentJavaScript::Yes; }
384 
 384
385385#if ENABLE(APP_BOUND_DOMAINS)
386386 virtual bool shouldEnableInAppBrowserPrivacyProtections() const { return false; }
387387 virtual void notifyPageOfAppBoundBehavior() { }

@@public:
390390#if ENABLE(PDFKIT_PLUGIN)
391391 virtual bool shouldUsePDFPlugin(const String&, StringView) const { return false; }
392392#endif
393 
 393
394394 virtual bool isParentProcessAFullWebBrowser() const { return false; }
395395};
396396

Source/WebCore/loader/MediaResourceLoader.cpp

@@void MediaResource::dataSent(CachedResource& resource, unsigned long long bytesS
231231 m_client->dataSent(*this, bytesSent, totalBytesToBeSent);
232232}
233233
234 void MediaResource::dataReceived(CachedResource& resource, const uint8_t* data, int dataLength)
 234void MediaResource::dataReceived(CachedResource& resource, const SharedBuffer& buffer)
235235{
236236 ASSERT_UNUSED(resource, &resource == m_resource);
237237
238238 RefPtr<MediaResource> protectedThis(this);
239239 if (m_client)
240  m_client->dataReceived(*this, data, dataLength);
 240 m_client->dataReceived(*this, buffer);
241241}
242242
243243void MediaResource::notifyFinished(CachedResource& resource, const NetworkLoadMetrics& metrics)

Source/WebCore/loader/MediaResourceLoader.h

@@public:
8686 void redirectReceived(CachedResource&, ResourceRequest&&, const ResourceResponse&, CompletionHandler<void(ResourceRequest&&)>&&) override;
8787 bool shouldCacheResponse(CachedResource&, const ResourceResponse&) override;
8888 void dataSent(CachedResource&, unsigned long long, unsigned long long) override;
89  void dataReceived(CachedResource&, const uint8_t*, int) override;
 89 void dataReceived(CachedResource&, const SharedBuffer&) override;
9090 void notifyFinished(CachedResource&, const NetworkLoadMetrics&) override;
9191
9292private:

Source/WebCore/loader/NetscapePlugInStreamLoader.cpp

@@void NetscapePlugInStreamLoader::didReceiveResponse(const ResourceResponse& resp
141141 });
142142}
143143
144 void NetscapePlugInStreamLoader::didReceiveData(const uint8_t* data, unsigned length, long long encodedDataLength, DataPayloadType dataPayloadType)
145 {
146  didReceiveDataOrBuffer(data, length, nullptr, encodedDataLength, dataPayloadType);
147 }
148 
149 void NetscapePlugInStreamLoader::didReceiveBuffer(Ref<FragmentedSharedBuffer>&& buffer, long long encodedDataLength, DataPayloadType dataPayloadType)
150 {
151  didReceiveDataOrBuffer(nullptr, 0, WTFMove(buffer), encodedDataLength, dataPayloadType);
152 }
153 
154 void NetscapePlugInStreamLoader::didReceiveDataOrBuffer(const uint8_t* data, int length, RefPtr<FragmentedSharedBuffer>&& buffer, long long encodedDataLength, DataPayloadType dataPayloadType)
 144void NetscapePlugInStreamLoader::didReceiveData(const SharedBuffer& buffer, long long encodedDataLength, DataPayloadType dataPayloadType)
155145{
156146 Ref<NetscapePlugInStreamLoader> protectedThis(*this);
157147
158  if (m_client) {
159  if (buffer) {
160  buffer->forEachSegment([&](auto& segment) {
161  m_client->didReceiveData(this, segment.data(), segment.size());
162  });
163  } else
164  m_client->didReceiveData(this, data, length);
165  }
 148 if (m_client)
 149 m_client->didReceiveData(this, buffer);
166150
167  ResourceLoader::didReceiveDataOrBuffer(data, length, WTFMove(buffer), encodedDataLength, dataPayloadType);
 151 ResourceLoader::didReceiveData(buffer, encodedDataLength, dataPayloadType);
168152}
169153
170154void NetscapePlugInStreamLoader::didFinishLoading(const NetworkLoadMetrics& networkLoadMetrics)

Source/WebCore/loader/NetscapePlugInStreamLoader.h

3636namespace WebCore {
3737
3838class NetscapePlugInStreamLoader;
 39class SharedBuffer;
3940
4041class NetscapePlugInStreamLoaderClient : public CanMakeWeakPtr<NetscapePlugInStreamLoaderClient> {
4142public:
4243 virtual void willSendRequest(NetscapePlugInStreamLoader*, ResourceRequest&&, const ResourceResponse& redirectResponse, CompletionHandler<void(ResourceRequest&&)>&&) = 0;
4344 virtual void didReceiveResponse(NetscapePlugInStreamLoader*, const ResourceResponse&) = 0;
44  virtual void didReceiveData(NetscapePlugInStreamLoader*, const uint8_t*, int) = 0;
 45 virtual void didReceiveData(NetscapePlugInStreamLoader*, const SharedBuffer&) = 0;
4546 virtual void didFail(NetscapePlugInStreamLoader*, const ResourceError&) = 0;
4647 virtual void didFinishLoading(NetscapePlugInStreamLoader*) { }
4748 virtual bool wantsAllStreams() const { return false; }

@@private:
6263
6364 void willSendRequest(ResourceRequest&&, const ResourceResponse& redirectResponse, CompletionHandler<void(ResourceRequest&&)>&& callback) override;
6465 void didReceiveResponse(const ResourceResponse&, CompletionHandler<void()>&& policyCompletionHandler) override;
65  void didReceiveData(const uint8_t*, unsigned, long long encodedDataLength, DataPayloadType) override;
66  void didReceiveBuffer(Ref<FragmentedSharedBuffer>&&, long long encodedDataLength, DataPayloadType) override;
 66 void didReceiveData(const SharedBuffer&, long long encodedDataLength, DataPayloadType) override;
6767 void didFinishLoading(const NetworkLoadMetrics&) override;
6868 void didFail(const ResourceError&) override;
6969

@@private:
7474 void willCancel(const ResourceError&) override;
7575 void didCancel(const ResourceError&) override;
7676
77  void didReceiveDataOrBuffer(const uint8_t*, int, RefPtr<FragmentedSharedBuffer>&&, long long encodedDataLength, DataPayloadType);
78 
7977 void notifyDone();
8078
8179 WeakPtr<NetscapePlugInStreamLoaderClient> m_client;

Source/WebCore/loader/ResourceLoadNotifier.cpp

3939#include "Page.h"
4040#include "ProgressTracker.h"
4141#include "ResourceLoader.h"
 42#include "SharedBuffer.h"
4243
4344#if USE(QUICK_LOOK)
4445#include "QuickLook.h"

@@void ResourceLoadNotifier::didReceiveResponse(ResourceLoader* loader, const Reso
7879 dispatchDidReceiveResponse(loader->documentLoader(), loader->identifier(), r, loader);
7980}
8081
81 void ResourceLoadNotifier::didReceiveData(ResourceLoader* loader, const uint8_t* data, int dataLength, int encodedDataLength)
 82void ResourceLoadNotifier::didReceiveData(ResourceLoader* loader, const SharedBuffer& buffer, int encodedDataLength)
8283{
8384 if (Page* page = m_frame.page())
84  page->progress().incrementProgress(loader->identifier(), dataLength);
 85 page->progress().incrementProgress(loader->identifier(), buffer.size());
8586
86  dispatchDidReceiveData(loader->documentLoader(), loader->identifier(), data, dataLength, encodedDataLength);
 87 dispatchDidReceiveData(loader->documentLoader(), loader->identifier(), buffer, encodedDataLength);
8788}
8889
8990void ResourceLoadNotifier::didFinishLoad(ResourceLoader* loader, const NetworkLoadMetrics& networkLoadMetrics)

@@void ResourceLoadNotifier::dispatchDidReceiveResponse(DocumentLoader* loader, Re
153154 InspectorInstrumentation::didReceiveResourceResponse(m_frame, identifier, loader, r, resourceLoader);
154155}
155156
156 void ResourceLoadNotifier::dispatchDidReceiveData(DocumentLoader* loader, ResourceLoaderIdentifier identifier, const uint8_t* data, int dataLength, int encodedDataLength)
 157void ResourceLoadNotifier::dispatchDidReceiveData(DocumentLoader* loader, ResourceLoaderIdentifier identifier, const SharedBuffer& buffer, int encodedDataLength)
157158{
158159 // Notifying the FrameLoaderClient may cause the frame to be destroyed.
159160 Ref<Frame> protect(m_frame);
160  m_frame.loader().client().dispatchDidReceiveContentLength(loader, identifier, dataLength);
 161 m_frame.loader().client().dispatchDidReceiveContentLength(loader, identifier, buffer.size());
161162
162  InspectorInstrumentation::didReceiveData(&m_frame, identifier, data, dataLength, encodedDataLength);
 163 InspectorInstrumentation::didReceiveData(&m_frame, identifier, buffer, encodedDataLength);
163164}
164165
165166void ResourceLoadNotifier::dispatchDidFinishLoading(DocumentLoader* loader, ResourceLoaderIdentifier identifier, const NetworkLoadMetrics& networkLoadMetrics, ResourceLoader* resourceLoader)

@@void ResourceLoadNotifier::dispatchDidFailLoading(DocumentLoader* loader, Resour
180181 InspectorInstrumentation::didFailLoading(&m_frame, loader, identifier, error);
181182}
182183
183 void ResourceLoadNotifier::sendRemainingDelegateMessages(DocumentLoader* loader, ResourceLoaderIdentifier identifier, const ResourceRequest& request, const ResourceResponse& response, const uint8_t* data, int dataLength, int encodedDataLength, const ResourceError& error)
 184void ResourceLoadNotifier::sendRemainingDelegateMessages(DocumentLoader* loader, ResourceLoaderIdentifier identifier, const ResourceRequest& request, const ResourceResponse& response, RefPtr<const SharedBuffer> buffer, int encodedDataLength, const ResourceError& error)
184185{
185186 // If the request is null, willSendRequest cancelled the load. We should
186187 // only dispatch didFailLoading in this case.

@@void ResourceLoadNotifier::sendRemainingDelegateMessages(DocumentLoader* loader,
193194 if (!response.isNull())
194195 dispatchDidReceiveResponse(loader, identifier, response);
195196
196  if (dataLength > 0)
197  dispatchDidReceiveData(loader, identifier, data, dataLength, encodedDataLength);
 197 if (buffer && buffer->size())
 198 dispatchDidReceiveData(loader, identifier, *buffer, encodedDataLength);
198199
199200 if (error.isNull()) {
200201 NetworkLoadMetrics emptyMetrics;

Source/WebCore/loader/ResourceLoadNotifier.h

@@class ResourceError;
4444class ResourceLoader;
4545class ResourceRequest;
4646class ResourceResponse;
 47class SharedBuffer;
4748
4849class ResourceLoadNotifier {
4950 WTF_MAKE_NONCOPYABLE(ResourceLoadNotifier);

@@public:
5556
5657 void willSendRequest(ResourceLoader*, ResourceRequest&, const ResourceResponse& redirectResponse);
5758 void didReceiveResponse(ResourceLoader*, const ResourceResponse&);
58  void didReceiveData(ResourceLoader*, const uint8_t*, int dataLength, int encodedDataLength);
 59 void didReceiveData(ResourceLoader*, const SharedBuffer&, int encodedDataLength);
5960 void didFinishLoad(ResourceLoader*, const NetworkLoadMetrics&);
6061 void didFailToLoad(ResourceLoader*, const ResourceError&);
6162
6263 void assignIdentifierToInitialRequest(ResourceLoaderIdentifier, DocumentLoader*, const ResourceRequest&);
6364 void dispatchWillSendRequest(DocumentLoader*, ResourceLoaderIdentifier, ResourceRequest&, const ResourceResponse& redirectResponse, const CachedResource*);
6465 void dispatchDidReceiveResponse(DocumentLoader*, ResourceLoaderIdentifier, const ResourceResponse&, ResourceLoader* = nullptr);
65  void dispatchDidReceiveData(DocumentLoader*, ResourceLoaderIdentifier, const uint8_t* data, int dataLength, int encodedDataLength);
 66 void dispatchDidReceiveData(DocumentLoader*, ResourceLoaderIdentifier, const SharedBuffer&, int encodedDataLength);
6667 void dispatchDidFinishLoading(DocumentLoader*, ResourceLoaderIdentifier, const NetworkLoadMetrics&, ResourceLoader*);
6768 void dispatchDidFailLoading(DocumentLoader*, ResourceLoaderIdentifier, const ResourceError&);
6869
69  void sendRemainingDelegateMessages(DocumentLoader*, ResourceLoaderIdentifier, const ResourceRequest&, const ResourceResponse&, const uint8_t* data, int dataLength, int encodedDataLength, const ResourceError&);
 70 void sendRemainingDelegateMessages(DocumentLoader*, ResourceLoaderIdentifier, const ResourceRequest&, const ResourceResponse&, RefPtr<const SharedBuffer>, int encodedDataLength, const ResourceError&);
7071
7172 bool isInitialRequestIdentifier(ResourceLoaderIdentifier identifier)
7273 {

Source/WebCore/loader/ResourceLoader.cpp

@@void ResourceLoader::loadDataURL()
299299
300300 auto dataSize = decodeResult->data.size();
301301 ResourceResponse dataResponse = ResourceResponse::dataURLResponse(url, decodeResult.value());
302  this->didReceiveResponse(dataResponse, [this, protectedThis = WTFMove(protectedThis), dataSize, data = SharedBuffer::create(WTFMove(decodeResult->data))]() mutable {
 302 this->didReceiveResponse(dataResponse, [this, protectedThis = WTFMove(protectedThis), dataSize, data = SharedBuffer::create(WTFMove(decodeResult->data))]() {
303303 if (!this->reachedTerminalState() && dataSize && m_request.httpMethod() != "HEAD")
304  this->didReceiveBuffer(WTFMove(data), dataSize, DataPayloadWholeResource);
 304 this->didReceiveBuffer(data, dataSize, DataPayloadWholeResource);
305305
306306 if (!this->reachedTerminalState()) {
307307 NetworkLoadMetrics emptyMetrics;

@@void ResourceLoader::willSwitchToSubstituteResource()
328328 m_handle->cancel();
329329}
330330
331 void ResourceLoader::addDataOrBuffer(const uint8_t* data, unsigned length, FragmentedSharedBuffer* buffer, DataPayloadType dataPayloadType)
 331void ResourceLoader::addBuffer(const FragmentedSharedBuffer& buffer, DataPayloadType dataPayloadType)
332332{
333333 if (m_options.dataBufferingPolicy == DataBufferingPolicy::DoNotBufferData)
334334 return;

@@void ResourceLoader::addDataOrBuffer(const uint8_t* data, unsigned length, Fragm
336336 if (dataPayloadType == DataPayloadWholeResource)
337337 m_resourceData.reset();
338338
339  if (buffer)
340  m_resourceData.append(*buffer);
341  else
342  m_resourceData.append(data, length);
 339 m_resourceData.append(buffer);
343340}
344341
345342const FragmentedSharedBuffer* ResourceLoader::resourceData() const

@@void ResourceLoader::didReceiveResponse(const ResourceResponse& r, CompletionHan
539536 frameLoader()->notifier().didReceiveResponse(this, m_response);
540537}
541538
542 void ResourceLoader::didReceiveData(const uint8_t* data, unsigned length, long long encodedDataLength, DataPayloadType dataPayloadType)
 539void ResourceLoader::didReceiveData(const SharedBuffer& buffer, long long encodedDataLength, DataPayloadType dataPayloadType)
543540{
544541 // The following assertions are not quite valid here, since a subclass
545542 // might override didReceiveData in a way that invalidates them. This

@@void ResourceLoader::didReceiveData(const uint8_t* data, unsigned length, long l
547544 // ASSERT(con == connection);
548545 // ASSERT(!m_reachedTerminalState);
549546
550  didReceiveDataOrBuffer(data, length, nullptr, encodedDataLength, dataPayloadType);
 547 didReceiveBuffer(buffer, encodedDataLength, dataPayloadType);
551548}
552549
553 void ResourceLoader::didReceiveBuffer(Ref<FragmentedSharedBuffer>&& buffer, long long encodedDataLength, DataPayloadType dataPayloadType)
 550void ResourceLoader::didReceiveBuffer(const FragmentedSharedBuffer& buffer, long long encodedDataLength, DataPayloadType dataPayloadType)
554551{
555  didReceiveDataOrBuffer(nullptr, 0, WTFMove(buffer), encodedDataLength, dataPayloadType);
556 }
557 
558 void ResourceLoader::didReceiveDataOrBuffer(const uint8_t* data, unsigned length, RefPtr<FragmentedSharedBuffer>&& buffer, long long encodedDataLength, DataPayloadType dataPayloadType)
559 {
560  // This method should only get data+length *OR* a FragmentedSharedBuffer.
561  ASSERT(!buffer || (!data && !length));
562 
563552 // Protect this in this delegate method since the additional processing can do
564553 // anything including possibly derefing this; one example of this is Radar 3266216.
565554 Ref<ResourceLoader> protectedThis(*this);
566555
567  addDataOrBuffer(data, length, buffer.get(), dataPayloadType);
 556 addBuffer(buffer, dataPayloadType);
568557
569558 // FIXME: If we get a resource with more than 2B bytes, this code won't do the right thing.
570559 // However, with today's computers and networking speeds, this won't happen in practice.
571560 // Could be an issue with a giant local file.
572561 if (m_options.sendLoadCallbacks == SendCallbackPolicy::SendCallbacks && m_frame)
573  frameLoader()->notifier().didReceiveData(this, buffer ? buffer->makeContiguous()->data() : data, buffer ? buffer->size() : length, static_cast<int>(encodedDataLength));
 562 frameLoader()->notifier().didReceiveData(this, buffer.makeContiguous(), static_cast<int>(encodedDataLength));
574563}
575564
576565void ResourceLoader::didFinishLoading(const NetworkLoadMetrics& networkLoadMetrics)

@@void ResourceLoader::didReceiveResponseAsync(ResourceHandle*, ResourceResponse&&
729718 didReceiveResponse(response, WTFMove(completionHandler));
730719}
731720
732 void ResourceLoader::didReceiveData(ResourceHandle*, const uint8_t* data, unsigned length, int encodedDataLength)
 721void ResourceLoader::didReceiveData(ResourceHandle*, const SharedBuffer& buffer, int encodedDataLength)
733722{
734  didReceiveData(data, length, encodedDataLength, DataPayloadBytes);
 723 didReceiveData(buffer, encodedDataLength, DataPayloadBytes);
735724}
736725
737 void ResourceLoader::didReceiveBuffer(ResourceHandle*, Ref<FragmentedSharedBuffer>&& buffer, int encodedDataLength)
 726void ResourceLoader::didReceiveBuffer(ResourceHandle*, const FragmentedSharedBuffer& buffer, int encodedDataLength)
738727{
739  didReceiveBuffer(WTFMove(buffer), encodedDataLength, DataPayloadBytes);
 728 didReceiveBuffer(buffer, encodedDataLength, DataPayloadBytes);
740729}
741730
742731void ResourceLoader::didFinishLoading(ResourceHandle*, const NetworkLoadMetrics& metrics)

Source/WebCore/loader/ResourceLoader.h

@@public:
107107 virtual void willSendRequest(ResourceRequest&&, const ResourceResponse& redirectResponse, CompletionHandler<void(ResourceRequest&&)>&& callback);
108108 virtual void didSendData(unsigned long long bytesSent, unsigned long long totalBytesToBeSent);
109109 virtual void didReceiveResponse(const ResourceResponse&, CompletionHandler<void()>&& policyCompletionHandler);
110  virtual void didReceiveData(const uint8_t*, unsigned, long long encodedDataLength, DataPayloadType);
111  virtual void didReceiveBuffer(Ref<FragmentedSharedBuffer>&&, long long encodedDataLength, DataPayloadType);
 110 virtual void didReceiveData(const SharedBuffer&, long long encodedDataLength, DataPayloadType);
 111 virtual void didReceiveBuffer(const FragmentedSharedBuffer&, long long encodedDataLength, DataPayloadType);
112112 virtual void didFinishLoading(const NetworkLoadMetrics&);
113113 virtual void didFail(const ResourceError&);
114114

@@protected:
167167
168168 bool wasCancelled() const { return m_cancellationStatus >= Cancelled; }
169169
170  void didReceiveDataOrBuffer(const uint8_t*, unsigned, RefPtr<FragmentedSharedBuffer>&&, long long encodedDataLength, DataPayloadType);
171 
172170 void setReferrerPolicy(ReferrerPolicy referrerPolicy) { m_options.referrerPolicy = referrerPolicy; }
173171 ReferrerPolicy referrerPolicy() const { return m_options.referrerPolicy; }
174172

@@private:
192190 virtual void willCancel(const ResourceError&) = 0;
193191 virtual void didCancel(const ResourceError&) = 0;
194192
195  void addDataOrBuffer(const uint8_t*, unsigned, FragmentedSharedBuffer*, DataPayloadType);
 193 void addBuffer(const FragmentedSharedBuffer&, DataPayloadType);
196194 void loadDataURL();
197195 void finishNetworkLoad();
198196

@@private:
202200 void didSendData(ResourceHandle*, unsigned long long bytesSent, unsigned long long totalBytesToBeSent) override;
203201 void didReceiveResponseAsync(ResourceHandle*, ResourceResponse&&, CompletionHandler<void()>&&) override;
204202 void willSendRequestAsync(ResourceHandle*, ResourceRequest&&, ResourceResponse&&, CompletionHandler<void(ResourceRequest&&)>&&) override;
205  void didReceiveData(ResourceHandle*, const uint8_t*, unsigned, int encodedDataLength) override;
206  void didReceiveBuffer(ResourceHandle*, Ref<FragmentedSharedBuffer>&&, int encodedDataLength) override;
 203 void didReceiveData(ResourceHandle*, const SharedBuffer&, int encodedDataLength) override;
 204 void didReceiveBuffer(ResourceHandle*, const FragmentedSharedBuffer&, int encodedDataLength) override;
207205 void didFinishLoading(ResourceHandle*, const NetworkLoadMetrics&) override;
208206 void didFail(ResourceHandle*, const ResourceError&) override;
209207 void wasBlocked(ResourceHandle*) override;

Source/WebCore/loader/SubresourceLoader.cpp

@@void SubresourceLoader::didReceiveResponsePolicy()
518518 completionHandler();
519519}
520520
521 void SubresourceLoader::didReceiveData(const uint8_t* data, unsigned length, long long encodedDataLength, DataPayloadType dataPayloadType)
 521void SubresourceLoader::didReceiveBuffer(const FragmentedSharedBuffer& buffer, long long encodedDataLength, DataPayloadType dataPayloadType)
522522{
523523#if USE(QUICK_LOOK)
524524 if (auto previewLoader = m_previewLoader.get()) {
525  if (previewLoader->didReceiveData(data, length))
 525 if (previewLoader->didReceiveData(buffer.makeContiguous()))
526526 return;
527527 }
528528#endif
529529
530  didReceiveDataOrBuffer(data, length, nullptr, encodedDataLength, dataPayloadType);
531 }
532 
533 void SubresourceLoader::didReceiveBuffer(Ref<FragmentedSharedBuffer>&& buffer, long long encodedDataLength, DataPayloadType dataPayloadType)
534 {
535 #if USE(QUICK_LOOK)
536  if (auto previewLoader = m_previewLoader.get()) {
537  if (previewLoader->didReceiveBuffer(buffer.get()))
538  return;
539  }
540 #endif
541 
542  didReceiveDataOrBuffer(nullptr, 0, WTFMove(buffer), encodedDataLength, dataPayloadType);
543 }
544 
545 void SubresourceLoader::didReceiveDataOrBuffer(const uint8_t* data, int length, RefPtr<FragmentedSharedBuffer>&& buffer, long long encodedDataLength, DataPayloadType dataPayloadType)
546 {
547530 ASSERT(m_resource);
548531
549532 if (m_resource->response().httpStatusCode() >= 400 && !m_resource->shouldIgnoreHTTPStatusCodeErrors())

@@void SubresourceLoader::didReceiveDataOrBuffer(const uint8_t* data, int length,
555538 // anything including removing the last reference to this object; one example of this is 3266216.
556539 Ref<SubresourceLoader> protectedThis(*this);
557540
558  ResourceLoader::didReceiveDataOrBuffer(data, length, buffer.copyRef(), encodedDataLength, dataPayloadType);
 541 ResourceLoader::didReceiveBuffer(buffer, encodedDataLength, dataPayloadType);
559542
560543 if (!m_loadingMultipartContent) {
561544 if (auto* resourceData = this->resourceData())
562545 m_resource->updateBuffer(*resourceData);
563546 else
564  m_resource->updateData(buffer ? buffer->makeContiguous()->data() : data, buffer ? buffer->size() : length);
 547 m_resource->updateData(buffer.makeContiguous());
565548 }
566549}
567550

Source/WebCore/loader/SubresourceLoader.h

@@private:
7373 void willSendRequestInternal(ResourceRequest&&, const ResourceResponse& redirectResponse, CompletionHandler<void(ResourceRequest&&)>&&) override;
7474 void didSendData(unsigned long long bytesSent, unsigned long long totalBytesToBeSent) override;
7575 void didReceiveResponse(const ResourceResponse&, CompletionHandler<void()>&& policyCompletionHandler) override;
76  void didReceiveData(const uint8_t*, unsigned, long long encodedDataLength, DataPayloadType) override;
77  void didReceiveBuffer(Ref<FragmentedSharedBuffer>&&, long long encodedDataLength, DataPayloadType) override;
 76 void didReceiveBuffer(const FragmentedSharedBuffer&, long long encodedDataLength, DataPayloadType) override;
7877 void didFinishLoading(const NetworkLoadMetrics&) override;
7978 void didFail(const ResourceError&) override;
8079 void willCancel(const ResourceError&) override;

@@private:
9291 Expected<void, String> checkResponseCrossOriginAccessControl(const ResourceResponse&);
9392 Expected<void, String> checkRedirectionCrossOriginAccessControl(const ResourceRequest& previousRequest, const ResourceResponse&, ResourceRequest& newRequest);
9493
95  void didReceiveDataOrBuffer(const uint8_t*, int, RefPtr<FragmentedSharedBuffer>&&, long long encodedDataLength, DataPayloadType);
 94 void didReceiveDataOrBuffer(const FragmentedSharedBuffer&, long long encodedDataLength, DataPayloadType);
9695
9796 void notifyDone(LoadCompletionType);
9897

Source/WebCore/loader/SubstituteResource.h

@@public:
3838 const URL& url() const { return m_url; }
3939 const ResourceResponse& response() const { return m_response; }
4040 FragmentedSharedBuffer& data() const { return static_reference_cast<FragmentedSharedBuffer>(Ref { *m_data.get() }); }
41  void append(const uint8_t* data, int length) { m_data.append(data, length); }
 41 void append(const SharedBuffer& buffer) { m_data.append(buffer); }
4242 void clear() { m_data.empty(); }
4343
4444 virtual void deliver(ResourceLoader& loader) { loader.deliverResponseAndData(m_response, m_data.copy()); }

Source/WebCore/loader/ThreadableLoaderClient.h

@@namespace WebCore {
3737class ResourceError;
3838class ResourceResponse;
3939class ResourceTiming;
 40class SharedBuffer;
4041
4142class ThreadableLoaderClient {
4243 WTF_MAKE_NONCOPYABLE(ThreadableLoaderClient); WTF_MAKE_FAST_ALLOCATED;

@@public:
4445 virtual void didSendData(unsigned long long /*bytesSent*/, unsigned long long /*totalBytesToBeSent*/) { }
4546
4647 virtual void didReceiveResponse(ResourceLoaderIdentifier, const ResourceResponse&) { }
47  virtual void didReceiveData(const uint8_t*, int /*dataLength*/) { }
 48 virtual void didReceiveData(const SharedBuffer&, bool /* useStrLen */) { }
4849 virtual void didFinishLoading(ResourceLoaderIdentifier) { }
4950 virtual void didFail(const ResourceError&) { }
5051 virtual void didFinishTiming(const ResourceTiming&) { }

Source/WebCore/loader/ThreadableLoaderClientWrapper.h

@@public:
6666 m_client->didReceiveResponse(identifier, response);
6767 }
6868
69  void didReceiveData(const uint8_t* data, int dataLength)
 69 void didReceiveData(const SharedBuffer& buffer, bool useStrLen)
7070 {
7171 if (m_client)
72  m_client->didReceiveData(data, dataLength);
 72 m_client->didReceiveData(buffer, useStrLen);
7373 }
7474
7575 void didFinishLoading(ResourceLoaderIdentifier identifier)

Source/WebCore/loader/WorkerThreadableLoader.cpp

@@void WorkerThreadableLoader::MainThreadBridge::didReceiveResponse(ResourceLoader
231231 }, m_taskMode);
232232}
233233
234 void WorkerThreadableLoader::MainThreadBridge::didReceiveData(const uint8_t* data, int dataLength)
 234void WorkerThreadableLoader::MainThreadBridge::didReceiveData(const SharedBuffer& data, bool useStrLen)
235235{
236  Vector<uint8_t> buffer(data, dataLength);
237  m_loaderProxy.postTaskForModeToWorkerOrWorkletGlobalScope([protectedWorkerClientWrapper = Ref { *m_workerClientWrapper }, workerRequestIdentifier = m_workerRequestIdentifier, buffer = WTFMove(buffer)] (ScriptExecutionContext& context) mutable {
 236 m_loaderProxy.postTaskForModeToWorkerOrWorkletGlobalScope([protectedWorkerClientWrapper = Ref { *m_workerClientWrapper }, workerRequestIdentifier = m_workerRequestIdentifier, buffer = Ref { data }, useStrLen] (ScriptExecutionContext& context) {
238237 ASSERT(context.isWorkerGlobalScope() || context.isWorkletGlobalScope());
239  protectedWorkerClientWrapper->didReceiveData(buffer.data(), buffer.size());
 238 protectedWorkerClientWrapper->didReceiveData(buffer, useStrLen);
240239 if (is<WorkerGlobalScope>(context))
241  InspectorInstrumentation::didReceiveData(downcast<WorkerGlobalScope>(context), workerRequestIdentifier, buffer.data(), buffer.size());
 240 InspectorInstrumentation::didReceiveData(downcast<WorkerGlobalScope>(context), workerRequestIdentifier, buffer);
242241 }, m_taskMode);
243242}
244243

Source/WebCore/loader/WorkerThreadableLoader.h

@@private:
105105 // All executed on the main thread.
106106 void didSendData(unsigned long long bytesSent, unsigned long long totalBytesToBeSent) override;
107107 void didReceiveResponse(ResourceLoaderIdentifier, const ResourceResponse&) override;
108  void didReceiveData(const uint8_t*, int dataLength) override;
 108 void didReceiveData(const SharedBuffer&, bool) override;
109109 void didFinishLoading(ResourceLoaderIdentifier) override;
110110 void didFail(const ResourceError&) override;
111111 void didFinishTiming(const ResourceTiming&) override;

Source/WebCore/loader/appcache/ApplicationCacheHost.cpp

@@bool ApplicationCacheHost::maybeLoadFallbackForMainError(const ResourceRequest&
149149 return false;
150150}
151151
152 void ApplicationCacheHost::mainResourceDataReceived(const uint8_t*, int, long long, bool)
 152void ApplicationCacheHost::mainResourceDataReceived(const SharedBuffer&, long long, bool)
153153{
154154}
155155

Source/WebCore/loader/appcache/ApplicationCacheHost.h

@@public:
9595 void maybeLoadMainResource(const ResourceRequest&, SubstituteData&);
9696 void maybeLoadMainResourceForRedirect(const ResourceRequest&, SubstituteData&);
9797 bool maybeLoadFallbackForMainResponse(const ResourceRequest&, const ResourceResponse&);
98  void mainResourceDataReceived(const uint8_t* data, int length, long long encodedDataLength, bool allAtOnce);
 98 void mainResourceDataReceived(const SharedBuffer&, long long encodedDataLength, bool allAtOnce);
9999 void finishedLoadingMainResource();
100100 void failedLoadingMainResource();
101101

Source/WebCore/loader/appcache/ApplicationCacheResource.cpp

@@ApplicationCacheResource::ApplicationCacheResource(URL&& url, ResourceResponse&&
5151
5252void ApplicationCacheResource::deliver(ResourceLoader& loader)
5353{
54  loader.deliverResponseAndData(response(), m_path.isEmpty() ? data().makeContiguous() : SharedBuffer::createWithContentsOfFile(m_path));
 54 if (m_path.isEmpty())
 55 loader.deliverResponseAndData(response(), RefPtr { &data() });
 56 else
 57 loader.deliverResponseAndData(response(), SharedBuffer::createWithContentsOfFile(m_path));
5558}
5659
5760void ApplicationCacheResource::addType(unsigned type)

Source/WebCore/loader/appcache/ApplicationCacheResourceLoader.cpp

@@void ApplicationCacheResourceLoader::responseReceived(CachedResource& resource,
9999 m_applicationCacheResource = ApplicationCacheResource::create(m_resource->url(), response, m_type);
100100}
101101
102 void ApplicationCacheResourceLoader::dataReceived(CachedResource&, const uint8_t* data, int length)
 102void ApplicationCacheResourceLoader::dataReceived(CachedResource&, const SharedBuffer& buffer)
103103{
104  m_applicationCacheResource->append(data, length);
 104 m_applicationCacheResource->append(buffer);
105105}
106106
107107void ApplicationCacheResourceLoader::redirectReceived(CachedResource&, ResourceRequest&& newRequest, const ResourceResponse&, CompletionHandler<void(ResourceRequest&&)>&& callback)

Source/WebCore/loader/appcache/ApplicationCacheResourceLoader.h

@@private:
5656
5757 // CachedRawResourceClient
5858 void responseReceived(CachedResource&, const ResourceResponse&, CompletionHandler<void()>&&) final;
59  void dataReceived(CachedResource&, const uint8_t* data, int dataLength) final;
 59 void dataReceived(CachedResource&, const SharedBuffer&) final;
6060 void redirectReceived(CachedResource&, ResourceRequest&&, const ResourceResponse&, CompletionHandler<void(ResourceRequest&&)>&&) final;
6161 void notifyFinished(CachedResource&, const NetworkLoadMetrics&) final;
6262

Source/WebCore/loader/cache/CachedImage.cpp

@@inline void CachedImage::clearImage()
468468 m_updateImageDataCount = 0;
469469}
470470
471 void CachedImage::updateBufferInternal(const FragmentedSharedBuffer& data)
 471void CachedImage::updateBufferInternal(const SharedBuffer& data)
472472{
473473 m_data = data.makeContiguous();
474474 setEncodedSize(m_data->size());

@@EncodedDataStatus CachedImage::updateImageData(bool allDataReceived)
558558void CachedImage::updateBuffer(const FragmentedSharedBuffer& data)
559559{
560560 ASSERT(dataBufferingPolicy() == DataBufferingPolicy::BufferData);
561  updateBufferInternal(data);
 561 updateBufferInternal(data.makeContiguous());
562562 CachedResource::updateBuffer(data);
563563}
564564
565 void CachedImage::updateData(const uint8_t* data, unsigned length)
 565void CachedImage::updateData(const SharedBuffer& buffer)
566566{
567567 ASSERT(dataBufferingPolicy() == DataBufferingPolicy::DoNotBufferData);
568  updateBufferInternal(SharedBuffer::create(data, length));
569  CachedResource::updateData(data, length);
 568 updateBufferInternal(buffer);
 569 CachedResource::updateData(buffer);
570570}
571571
572572void CachedImage::finishLoading(const FragmentedSharedBuffer* data, const NetworkLoadMetrics& metrics)

Source/WebCore/loader/cache/CachedImage.h

@@private:
128128 RefPtr<SharedBuffer> convertedDataIfNeeded(const FragmentedSharedBuffer* data) const;
129129 void didUpdateImageData();
130130 EncodedDataStatus updateImageData(bool allDataReceived);
131  void updateData(const uint8_t* data, unsigned length) override;
 131 void updateData(const SharedBuffer&) override;
132132 void error(CachedResource::Status) override;
133133 void responseReceived(const ResourceResponse&) override;
134134

@@private:
169169 void changedInRect(const Image&, const IntRect*);
170170 void scheduleRenderingUpdate(const Image&);
171171
172  void updateBufferInternal(const FragmentedSharedBuffer&);
 172 void updateBufferInternal(const SharedBuffer&);
173173
174174 void didReplaceSharedBufferContents() override;
175175

Source/WebCore/loader/cache/CachedRawResource.cpp

@@CachedRawResource::CachedRawResource(CachedResourceRequest&& request, Type type,
4848 ASSERT(isMainOrMediaOrIconOrRawResource());
4949}
5050
51 std::optional<SharedBufferDataView> CachedRawResource::calculateIncrementalDataChunk(const FragmentedSharedBuffer* data) const
 51std::optional<SharedBufferDataView> CachedRawResource::calculateIncrementalDataChunk(const SharedBuffer& data) const
5252{
5353 size_t previousDataLength = encodedSize();
54  if (!data || data->size() <= previousDataLength)
 54 if (data.size() <= previousDataLength)
5555 return std::nullopt;
56  return data->getSomeData(previousDataLength);
 56 return data.getSomeData(previousDataLength);
5757}
5858
5959void CachedRawResource::updateBuffer(const FragmentedSharedBuffer& data)

@@void CachedRawResource::updateBuffer(const FragmentedSharedBuffer& data)
7272 previousDataSize += incrementalData.size();
7373
7474 SetForScope<bool> notifyScope(m_inIncrementalDataNotify, true);
75  notifyClientsDataWasReceived(incrementalData.data(), incrementalData.size());
 75 notifyClientsDataWasReceived(incrementalData.createSharedBuffer());
7676 }
7777 setEncodedSize(m_data->size());
7878

@@void CachedRawResource::updateBuffer(const FragmentedSharedBuffer& data)
8989 }
9090}
9191
92 void CachedRawResource::updateData(const uint8_t* data, unsigned length)
 92void CachedRawResource::updateData(const SharedBuffer& buffer)
9393{
9494 ASSERT(dataBufferingPolicy() == DataBufferingPolicy::DoNotBufferData);
95  notifyClientsDataWasReceived(data, length);
96  CachedResource::updateData(data, length);
 95 notifyClientsDataWasReceived(buffer);
 96 CachedResource::updateData(buffer);
9797}
9898
9999void CachedRawResource::finishLoading(const FragmentedSharedBuffer* data, const NetworkLoadMetrics& metrics)

@@void CachedRawResource::finishLoading(const FragmentedSharedBuffer* data, const
110110 if (data) {
111111 if (data != m_data.get())
112112 m_data = data->makeContiguous();
113  if (auto incrementalData = calculateIncrementalDataChunk(data)) {
 113 if (auto incrementalData = calculateIncrementalDataChunk(*m_data)) {
114114 setEncodedSize(data->size());
115  notifyClientsDataWasReceived(incrementalData->data(), incrementalData->size());
 115 notifyClientsDataWasReceived(incrementalData->createSharedBuffer());
116116 }
117117 } else
118118 m_data = nullptr;

@@void CachedRawResource::finishLoading(const FragmentedSharedBuffer* data, const
130130 }
131131}
132132
133 void CachedRawResource::notifyClientsDataWasReceived(const uint8_t* data, unsigned length)
 133void CachedRawResource::notifyClientsDataWasReceived(const SharedBuffer& buffer)
134134{
135  if (!length)
 135 if (buffer.isEmpty())
136136 return;
137137
138138 CachedResourceHandle<CachedRawResource> protectedThis(this);
139139 CachedResourceClientWalker<CachedRawResourceClient> w(m_clients);
140140 while (CachedRawResourceClient* c = w.next())
141  c->dataReceived(*this, data, length);
 141 c->dataReceived(*this, buffer);
142142}
143143
144144static void iterateRedirects(CachedResourceHandle<CachedRawResource>&& handle, CachedRawResourceClient& client, Vector<std::pair<ResourceRequest, ResourceResponse>>&& redirectsInReverseOrder, CompletionHandler<void(ResourceRequest&&)>&& completionHandler)

@@void CachedRawResource::didAddClient(CachedResourceClient& c)
170170 if (!hasClient(*client))
171171 return;
172172 if (m_data) {
173  m_data->forEachSegment([&](auto& segment) {
 173 m_data->forEachSegmentAsSharedBuffer([&](auto&& buffer) {
174174 if (hasClient(*client))
175  client->dataReceived(*this, segment.data(), segment.size());
 175 client->dataReceived(*this, buffer);
176176 });
177177 }
178178 if (!hasClient(*client))

Source/WebCore/loader/cache/CachedRawResource.h

@@namespace WebCore {
2828
2929class CachedResourceClient;
3030class ResourceTiming;
 31class SharedBuffer;
3132class SharedBufferDataView;
3233
3334class CachedRawResource final : public CachedResource {

@@public:
5253private:
5354 void didAddClient(CachedResourceClient&) final;
5455 void updateBuffer(const FragmentedSharedBuffer&) final;
55  void updateData(const uint8_t* data, unsigned length) final;
 56 void updateData(const SharedBuffer&) final;
5657 void finishLoading(const FragmentedSharedBuffer*, const NetworkLoadMetrics&) final;
5758
5859 bool shouldIgnoreHTTPStatusCodeErrors() const override { return true; }

@@private:
6667 void switchClientsToRevalidatedResource() override;
6768 bool mayTryReplaceEncodedData() const override { return m_allowEncodedDataReplacement; }
6869
69  std::optional<SharedBufferDataView> calculateIncrementalDataChunk(const FragmentedSharedBuffer*) const;
70  void notifyClientsDataWasReceived(const uint8_t* data, unsigned length);
 70 std::optional<SharedBufferDataView> calculateIncrementalDataChunk(const SharedBuffer&) const;
 71 void notifyClientsDataWasReceived(const SharedBuffer&);
7172
7273#if USE(QUICK_LOOK)
7374 void previewResponseReceived(const ResourceResponse&) final;

Source/WebCore/loader/cache/CachedRawResourceClient.h

@@class CachedResource;
3131class ResourceRequest;
3232class ResourceResponse;
3333class ResourceTiming;
 34class SharedBuffer;
3435
3536class CachedRawResourceClient : public CachedResourceClient {
3637public:

@@public:
4647 }
4748
4849 virtual bool shouldCacheResponse(CachedResource&, const ResourceResponse&) { return true; }
49  virtual void dataReceived(CachedResource&, const uint8_t* /* data */, int /* length */) { }
 50 virtual void dataReceived(CachedResource&, const SharedBuffer&) { }
5051 virtual void redirectReceived(CachedResource&, ResourceRequest&& request, const ResourceResponse&, CompletionHandler<void(ResourceRequest&&)>&& completionHandler) { completionHandler(WTFMove(request)); }
5152 virtual void finishedTimingForWorkerLoad(CachedResource&, const ResourceTiming&) { }
5253

Source/WebCore/loader/cache/CachedResource.cpp

@@void CachedResource::updateBuffer(const FragmentedSharedBuffer&)
341341 ASSERT(dataBufferingPolicy() == DataBufferingPolicy::BufferData);
342342}
343343
344 void CachedResource::updateData(const uint8_t*, unsigned)
 344void CachedResource::updateData(const SharedBuffer&)
345345{
346346 ASSERT(dataBufferingPolicy() == DataBufferingPolicy::DoNotBufferData);
347347}

Source/WebCore/loader/cache/CachedResource.h

@@public:
113113 virtual String encoding() const { return String(); }
114114 virtual const TextResourceDecoder* textResourceDecoder() const { return nullptr; }
115115 virtual void updateBuffer(const FragmentedSharedBuffer&);
116  virtual void updateData(const uint8_t* data, unsigned length);
 116 virtual void updateData(const SharedBuffer&);
117117 virtual void finishLoading(const FragmentedSharedBuffer*, const NetworkLoadMetrics&);
118118 virtual void error(CachedResource::Status);
119119

Source/WebCore/loader/ios/LegacyPreviewLoader.h

@@public:
4747 ~LegacyPreviewLoader();
4848
4949 bool didReceiveResponse(const ResourceResponse&);
50  bool didReceiveData(const uint8_t* data, unsigned length);
51  bool didReceiveBuffer(const FragmentedSharedBuffer&);
 50 bool didReceiveData(const SharedBuffer&);
5251 bool didFinishLoading();
5352 void didFail();
5453

Source/WebCore/loader/ios/LegacyPreviewLoader.mm

@@static Ref<LegacyPreviewLoaderClient> makeClient(const ResourceLoader& loader, c
6363 return emptyClient();
6464}
6565
66 bool LegacyPreviewLoader::didReceiveBuffer(const FragmentedSharedBuffer& buffer)
 66bool LegacyPreviewLoader::didReceiveData(const SharedBuffer& buffer)
6767{
6868 if (m_finishedLoadingDataIntoConverter)
6969 return false;

@@bool LegacyPreviewLoader::didReceiveBuffer(const FragmentedSharedBuffer& buffer)
7171 LOG(Network, "LegacyPreviewLoader appending buffer with size %ld.", buffer.size());
7272 m_originalData.append(buffer);
7373 m_converter->updateMainResource();
74  m_client->didReceiveBuffer(buffer);
 74 m_client->didReceiveData(buffer);
7575 return true;
7676}
7777

@@void LegacyPreviewLoader::previewConverterDidReceiveData(PreviewConverter&, cons
162162 if (!m_hasProcessedResponse)
163163 return;
164164
165  auto dataCopy = data.copy();
166  resourceLoader->didReceiveBuffer(WTFMove(dataCopy), dataCopy->size(), DataPayloadBytes);
 165 resourceLoader->didReceiveBuffer(data, data.size(), DataPayloadBytes);
167166}
168167
169168void LegacyPreviewLoader::previewConverterDidFinishConverting(PreviewConverter&)

@@LegacyPreviewLoader::LegacyPreviewLoader(ResourceLoader& loader, const ResourceR
243242 LOG(Network, "LegacyPreviewLoader created with preview file name \"%s\".", m_converter->previewFileName().utf8().data());
244243}
245244
246 bool LegacyPreviewLoader::didReceiveData(const uint8_t* data, unsigned length)
247 {
248  return didReceiveBuffer(SharedBuffer::create(data, length).get());
249 }
250 
251245bool LegacyPreviewLoader::didReceiveResponse(const ResourceResponse&)
252246{
253247 return !m_shouldDecidePolicyBeforeLoading;

Source/WebCore/page/EventSource.cpp

4242#include "ResourceResponse.h"
4343#include "ScriptExecutionContext.h"
4444#include "SecurityOrigin.h"
 45#include "SharedBuffer.h"
4546#include "TextResourceDecoder.h"
4647#include "ThreadableLoader.h"
4748#include <wtf/IsoMallocInlines.h>

@@void EventSource::dispatchErrorEvent()
210211 dispatchEvent(Event::create(eventNames().errorEvent, Event::CanBubble::No, Event::IsCancelable::No));
211212}
212213
213 void EventSource::didReceiveData(const uint8_t* data, int length)
 214void EventSource::didReceiveData(const SharedBuffer& buffer, bool)
214215{
215216 ASSERT(m_state == OPEN);
216217 ASSERT(m_requestInFlight);
217218 RELEASE_ASSERT_WITH_SECURITY_IMPLICATION(!m_isSuspendedForBackForwardCache);
218219
219  append(m_receiveBuffer, m_decoder->decode(data, length));
 220 append(m_receiveBuffer, m_decoder->decode(buffer.data(), buffer.size()));
220221 parseEventStream();
221222}
222223

Source/WebCore/page/EventSource.h

@@private:
8484
8585 // ThreadableLoaderClient
8686 void didReceiveResponse(ResourceLoaderIdentifier, const ResourceResponse&) final;
87  void didReceiveData(const uint8_t*, int) final;
 87 void didReceiveData(const SharedBuffer&, bool) final;
8888 void didFinishLoading(ResourceLoaderIdentifier) final;
8989 void didFail(const ResourceError&) final;
9090

Source/WebCore/platform/PlatformContentFilter.h

2626#ifndef PlatformContentFilter_h
2727#define PlatformContentFilter_h
2828
 29#include "SharedBuffer.h"
2930#include <wtf/Ref.h>
3031#include <wtf/text/WTFString.h>
3132
3233namespace WebCore {
3334
3435class ContentFilterUnblockHandler;
 36class FragmentedSharedBuffer;
3537class ResourceRequest;
3638class ResourceResponse;
37 class FragmentedSharedBuffer;
 39class SharedBuffer;
3840
3941class PlatformContentFilter {
4042 WTF_MAKE_FAST_ALLOCATED;

@@public:
5456 virtual ~PlatformContentFilter() = default;
5557 virtual void willSendRequest(ResourceRequest&, const ResourceResponse&) = 0;
5658 virtual void responseReceived(const ResourceResponse&) = 0;
57  virtual void addData(const uint8_t* data, int length) = 0;
 59 virtual void addData(const SharedBuffer&) = 0;
5860 virtual void finishedAddingData() = 0;
5961 virtual Ref<FragmentedSharedBuffer> replacementData() const = 0;
6062#if ENABLE(CONTENT_FILTERING)

Source/WebCore/platform/SharedBuffer.cpp

@@Vector<uint8_t> FragmentedSharedBuffer::takeData()
138138
139139 Vector<uint8_t> combinedData;
140140 if (hasOneSegment() && std::holds_alternative<Vector<uint8_t>>(m_segments[0].segment->m_immutableData))
141  combinedData = std::exchange(std::get<Vector<uint8_t>>(m_segments[0].segment->m_immutableData), Vector<uint8_t>());
 141 combinedData = std::exchange(std::get<Vector<uint8_t>>(const_cast<DataSegment&>(m_segments[0].segment.get()).m_immutableData), Vector<uint8_t>());
142142 else
143143 combinedData = combineSegmentsData(m_segments, m_size);
144144

@@void FragmentedSharedBuffer::clear()
231231
232232Ref<FragmentedSharedBuffer> FragmentedSharedBuffer::copy() const
233233{
 234 if (m_contiguous)
 235 return m_segments.size() ? SharedBuffer::create(m_segments[0].segment.copyRef()) : SharedBuffer::create();
234236 Ref<FragmentedSharedBuffer> clone = adoptRef(*new FragmentedSharedBuffer);
235237 clone->m_size = m_size;
236238 clone->m_segments.reserveInitialCapacity(m_segments.size());

@@void FragmentedSharedBuffer::forEachSegment(const Function<void(const Span<const
248250 apply(Span { segment.segment->data(), segment.segment->size() });
249251}
250252
 253void FragmentedSharedBuffer::forEachSegmentAsSharedBuffer(const Function<void(Ref<SharedBuffer>&&)>& apply) const
 254{
 255 auto protectedThis = Ref { *this };
 256 for (auto& segment : m_segments)
 257 apply(SharedBuffer::create(segment.segment.copyRef()));
 258}
 259
251260bool FragmentedSharedBuffer::startsWith(const Span<const uint8_t>& prefix) const
252261{
253262 if (prefix.empty())

@@SharedBuffer::SharedBuffer()
413422 m_contiguous = true;
414423}
415424
416 SharedBuffer::SharedBuffer(Ref<DataSegment>&& segment)
 425SharedBuffer::SharedBuffer(Ref<const DataSegment>&& segment)
417426{
418427 m_size = segment->size();
419428 m_segments.append({ 0, WTFMove(segment) });

@@void SharedBufferBuilder::ensureBuffer()
601610 m_buffer = FragmentedSharedBuffer::create();
602611}
603612
604 SharedBufferDataView::SharedBufferDataView(Ref<DataSegment>&& segment, size_t positionWithinSegment, std::optional<size_t> size)
 613SharedBufferDataView::SharedBufferDataView(Ref<const DataSegment>&& segment, size_t positionWithinSegment, std::optional<size_t> size)
605614 : m_segment(WTFMove(segment))
606615 , m_positionWithinSegment(positionWithinSegment)
607616 , m_size(size ? *size : m_segment->size() - positionWithinSegment)

@@SharedBufferDataView::SharedBufferDataView(const SharedBufferDataView& other, si
617626
618627Ref<SharedBuffer> SharedBufferDataView::createSharedBuffer() const
619628{
620  const Ref<DataSegment> segment = m_segment;
 629 const Ref<const DataSegment> segment = m_segment;
621630 return SharedBuffer::create(DataSegment::Provider {
622631 [segment, data = data()]() { return data; },
623632 [size = size()]() { return size; }

Source/WebCore/platform/SharedBuffer.h

@@public:
178178
179179 WEBCORE_EXPORT void forEachSegment(const Function<void(const Span<const uint8_t>&)>&) const;
180180 WEBCORE_EXPORT bool startsWith(const Span<const uint8_t>& prefix) const;
 181 WEBCORE_EXPORT void forEachSegmentAsSharedBuffer(const Function<void(Ref<SharedBuffer>&&)>&) const;
181182
182183 using DataSegment = WebCore::DataSegment; // To keep backward compatibility when using FragmentedSharedBuffer::DataSegment
183184
184185 struct DataSegmentVectorEntry {
185186 size_t beginPosition;
186  Ref<DataSegment> segment;
 187 const Ref<const DataSegment> segment;
187188 };
188189 using DataSegmentVector = Vector<DataSegmentVectorEntry, 1>;
189190 DataSegmentVector::const_iterator begin() const { return m_segments.begin(); }

@@public:
259260 if constexpr (!sizeof...(Args))
260261 return adoptRef(*new SharedBuffer());
261262 else if constexpr (sizeof...(Args) == 1
262  && (std::is_same_v<Args, Ref<DataSegment>> &&...))
 263 && (std::is_same_v<Args, Ref<const DataSegment>> &&...))
 264 return adoptRef(*new SharedBuffer(std::forward<Args>(args)...));
 265 else if constexpr (sizeof...(Args) == 1
 266 && (std::is_same_v<std::remove_const_t<std::remove_reference_t<Args>>, DataSegment> &&...))
263267 return adoptRef(*new SharedBuffer(std::forward<Args>(args)...));
264268 else {
265269 auto buffer = FragmentedSharedBuffer::create(std::forward<Args>(args)...);

@@public:
286290
287291private:
288292 WEBCORE_EXPORT SharedBuffer();
 293 SharedBuffer(const DataSegment& segment)
 294 : SharedBuffer(Ref<const DataSegment> { segment }) { }
289295 WEBCORE_EXPORT explicit SharedBuffer(FileSystem::MappedFileData&&);
290  WEBCORE_EXPORT explicit SharedBuffer(Ref<DataSegment>&&);
 296 WEBCORE_EXPORT explicit SharedBuffer(Ref<const DataSegment>&&);
291297 WEBCORE_EXPORT explicit SharedBuffer(Ref<FragmentedSharedBuffer>&&);
292298
293299 WEBCORE_EXPORT static RefPtr<SharedBuffer> createFromReadingFile(const String& filePath);

@@inline Vector<uint8_t> FragmentedSharedBuffer::extractData()
359365
360366class SharedBufferDataView {
361367public:
362  WEBCORE_EXPORT SharedBufferDataView(Ref<DataSegment>&&, size_t positionWithinSegment, std::optional<size_t> newSize = std::nullopt);
 368 WEBCORE_EXPORT SharedBufferDataView(Ref<const DataSegment>&&, size_t positionWithinSegment, std::optional<size_t> newSize = std::nullopt);
363369 WEBCORE_EXPORT SharedBufferDataView(const SharedBufferDataView&, size_t newSize);
364370 size_t size() const { return m_size; }
365371 const uint8_t* data() const { return m_segment->data() + m_positionWithinSegment; }

@@public:
370376 WEBCORE_EXPORT RetainPtr<NSData> createNSData() const;
371377#endif
372378private:
373  const Ref<DataSegment> m_segment;
 379 const Ref<const DataSegment> m_segment;
374380 const size_t m_positionWithinSegment;
375381 const size_t m_size;
376382};

Source/WebCore/platform/cocoa/NetworkExtensionContentFilter.h

@@public:
4949
5050 void willSendRequest(ResourceRequest&, const ResourceResponse&) override;
5151 void responseReceived(const ResourceResponse&) override;
52  void addData(const uint8_t* data, int length) override;
 52 void addData(const SharedBuffer&) override;
5353 void finishedAddingData() override;
5454 Ref<FragmentedSharedBuffer> replacementData() const override;
5555 ContentFilterUnblockHandler unblockHandler() const override;

Source/WebCore/platform/cocoa/NetworkExtensionContentFilter.mm

@@void NetworkExtensionContentFilter::responseReceived(const ResourceResponse& res
145145 semaphore.wait();
146146}
147147
148 void NetworkExtensionContentFilter::addData(const uint8_t* data, int length)
 148void NetworkExtensionContentFilter::addData(const SharedBuffer& data)
149149{
150  RetainPtr<NSData> copiedData { [NSData dataWithBytes:(void*)data length:length] };
 150 auto nsData = data.createNSData();
151151
152152 BinarySemaphore semaphore;
153  [m_neFilterSource receivedData:copiedData.get() decisionHandler:[this, &semaphore](NEFilterSourceStatus status, NSDictionary *decisionInfo) {
 153 [m_neFilterSource receivedData:nsData.get() decisionHandler:[this, &semaphore](NEFilterSourceStatus status, NSDictionary *decisionInfo) {
154154 handleDecision(status, replacementDataFromDecisionInfo(decisionInfo));
155155 semaphore.signal();
156156 }];

Source/WebCore/platform/cocoa/ParentalControlsContentFilter.h

@@public:
4343
4444 void willSendRequest(ResourceRequest&, const ResourceResponse&) override { }
4545 void responseReceived(const ResourceResponse&) override;
46  void addData(const uint8_t* data, int length) override;
 46 void addData(const SharedBuffer&) override;
4747 void finishedAddingData() override;
4848 Ref<FragmentedSharedBuffer> replacementData() const override;
4949#if ENABLE(CONTENT_FILTERING)

Source/WebCore/platform/cocoa/ParentalControlsContentFilter.mm

@@void ParentalControlsContentFilter::responseReceived(const ResourceResponse& res
9494 updateFilterState();
9595}
9696
97 void ParentalControlsContentFilter::addData(const uint8_t* data, int length)
 97void ParentalControlsContentFilter::addData(const SharedBuffer& data)
9898{
9999 ASSERT(![m_replacementData length]);
100  m_replacementData = [m_webFilterEvaluator addData:[NSData dataWithBytesNoCopy:(void*)data length:length freeWhenDone:NO]];
 100 m_replacementData = [m_webFilterEvaluator addData:data.createNSData().get()];
101101 updateFilterState();
102102 ASSERT(needsMoreData() || [m_replacementData length]);
103103}

Source/WebCore/platform/graphics/ImageBackingStore.h

@@private:
233233 return PackedColor::ARGB { result }.value;
234234 }
235235
 236 // m_pixels type should be identical to the one set in ImageBackingStoreCairo.cpp
236237 RefPtr<FragmentedSharedBuffer::DataSegment> m_pixels;
237238 uint32_t* m_pixelsPtr { nullptr };
238239 IntSize m_size;

Source/WebCore/platform/graphics/PlatformMediaResourceLoader.h

@@public:
5151 virtual void redirectReceived(PlatformMediaResource&, ResourceRequest&& request, const ResourceResponse&, CompletionHandler<void(ResourceRequest&&)>&& completionHandler) { completionHandler(WTFMove(request)); }
5252 virtual bool shouldCacheResponse(PlatformMediaResource&, const ResourceResponse&) { return true; }
5353 virtual void dataSent(PlatformMediaResource&, unsigned long long, unsigned long long) { }
54  virtual void dataReceived(PlatformMediaResource&, Ref<FragmentedSharedBuffer>&&) { RELEASE_ASSERT_NOT_REACHED(); }
55  // This method should be removed once CachedRawResourceClient uses FragmentedSharedBuffer.
56  virtual void dataReceived(PlatformMediaResource& platform, const uint8_t* data, int length) { dataReceived(platform, SharedBuffer::create(data, length)); }
 54 virtual void dataReceived(PlatformMediaResource&, const SharedBuffer&) { RELEASE_ASSERT_NOT_REACHED(); }
5755 virtual void accessControlCheckFailed(PlatformMediaResource&, const ResourceError&) { }
5856 virtual void loadFailed(PlatformMediaResource&, const ResourceError&) { }
5957 virtual void loadFinished(PlatformMediaResource&, const NetworkLoadMetrics&) { }

Source/WebCore/platform/graphics/avfoundation/cf/WebCoreAVCFResourceLoader.cpp

@@void WebCoreAVCFResourceLoader::responseReceived(CachedResource& resource, const
138138 notImplemented();
139139}
140140
141 void WebCoreAVCFResourceLoader::dataReceived(CachedResource& resource, const uint8_t*, int)
 141void WebCoreAVCFResourceLoader::dataReceived(CachedResource& resource, const SharedBuffer&)
142142{
143143 fulfillRequestWithResource(resource);
144144}

Source/WebCore/platform/graphics/avfoundation/cf/WebCoreAVCFResourceLoader.h

@@public:
5757private:
5858 // CachedRawResourceClient
5959 void responseReceived(CachedResource&, const ResourceResponse&, CompletionHandler<void()>&&) override;
60  void dataReceived(CachedResource&, const uint8_t*, int) override;
 60 void dataReceived(CachedResource&, const SharedBuffer&) override;
6161 void notifyFinished(CachedResource&, const NetworkLoadMetrics&) override;
6262
6363 void fulfillRequestWithResource(CachedResource&);

Source/WebCore/platform/graphics/avfoundation/objc/WebCoreAVFResourceLoader.mm

@@private:
6161
6262 // CachedRawResourceClient
6363 void responseReceived(CachedResource&, const ResourceResponse&, CompletionHandler<void()>&&) final;
64  void dataReceived(CachedResource&, const uint8_t*, int) final;
 64 void dataReceived(CachedResource&, const SharedBuffer&) final;
6565 void notifyFinished(CachedResource&, const NetworkLoadMetrics&) final;
6666
6767 void fulfillRequestWithResource(CachedResource&);

@@void CachedResourceMediaLoader::notifyFinished(CachedResource& resource, const N
130130 m_parent.loadFinished();
131131}
132132
133 void CachedResourceMediaLoader::dataReceived(CachedResource& resource, const uint8_t*, int)
 133void CachedResourceMediaLoader::dataReceived(CachedResource& resource, const SharedBuffer&)
134134{
135135 ASSERT(&resource == m_resource);
136136 if (auto* data = resource.resourceBuffer())

@@private:
156156 void redirectReceived(PlatformMediaResource&, ResourceRequest&& request, const ResourceResponse&, CompletionHandler<void(ResourceRequest&&)>&& completionHandler) final { completionHandler(WTFMove(request)); }
157157 bool shouldCacheResponse(PlatformMediaResource&, const ResourceResponse&) final { return false; }
158158 void dataSent(PlatformMediaResource&, unsigned long long, unsigned long long) final { }
159  void dataReceived(PlatformMediaResource&, Ref<FragmentedSharedBuffer>&&) final;
 159 void dataReceived(PlatformMediaResource&, const SharedBuffer&) final;
160160 void accessControlCheckFailed(PlatformMediaResource&, const ResourceError& error) final { loadFailed(error); }
161161 void loadFailed(PlatformMediaResource&, const ResourceError& error) final { loadFailed(error); }
162162 void loadFinished(PlatformMediaResource&, const NetworkLoadMetrics&) final { loadFinished(); }

@@void PlatformResourceMediaLoader::loadFinished()
211211 m_parent.loadFinished();
212212}
213213
214 void PlatformResourceMediaLoader::dataReceived(PlatformMediaResource&, Ref<FragmentedSharedBuffer>&& buffer)
 214void PlatformResourceMediaLoader::dataReceived(PlatformMediaResource&, const SharedBuffer& buffer)
215215{
216  m_buffer.append(WTFMove(buffer));
 216 m_buffer.append(buffer);
217217 m_parent.newDataStoredInSharedBuffer(*m_buffer.get());
218218}
219219

Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp

@@private:
7171
7272 // PlatformMediaResourceClient virtual methods.
7373 void responseReceived(PlatformMediaResource&, const ResourceResponse&, CompletionHandler<void(ShouldContinuePolicyCheck)>&&) override;
74  void dataReceived(PlatformMediaResource&, Ref<FragmentedSharedBuffer>&&) override;
 74 void dataReceived(PlatformMediaResource&, const SharedBuffer&) override;
7575 void accessControlCheckFailed(PlatformMediaResource&, const ResourceError&) override;
7676 void loadFailed(PlatformMediaResource&, const ResourceError&) override;
7777 void loadFinished(PlatformMediaResource&, const NetworkLoadMetrics&) override;

@@void CachedResourceStreamingClient::responseReceived(PlatformMediaResource&, con
10931093 completionHandler(ShouldContinuePolicyCheck::Yes);
10941094}
10951095
1096 void CachedResourceStreamingClient::dataReceived(PlatformMediaResource&, Ref<FragmentedSharedBuffer>&& buffer)
 1096void CachedResourceStreamingClient::dataReceived(PlatformMediaResource&, const SharedBuffer& data)
10971097{
10981098 ASSERT(isMainThread());
10991099 WebKitWebSrc* src = WEBKIT_WEB_SRC(m_src.get());

@@void CachedResourceStreamingClient::dataReceived(PlatformMediaResource&, Ref<Fra
11071107 // that first package delivery would include the time of sending out the request and getting the data back. Since we can't distinguish the
11081108 // sending time from the receiving time, it is better to ignore it.
11091109 if (!std::isnan(members->downloadStartTime)) {
1110  members->totalDownloadedBytes += buffer->size();
 1110 members->totalDownloadedBytes += data.size();
11111111 double timeSinceStart = (WallTime::now() - members->downloadStartTime).seconds();
11121112 GST_TRACE_OBJECT(src, "R%u: downloaded %" G_GUINT64_FORMAT " bytes in %f seconds =~ %1.0f bytes/second", m_requestNumber, members->totalDownloadedBytes, timeSinceStart
11131113 , timeSinceStart ? members->totalDownloadedBytes / timeSinceStart : 0);

@@void CachedResourceStreamingClient::dataReceived(PlatformMediaResource&, Ref<Fra
11151115 members->downloadStartTime = WallTime::now();
11161116 }
11171117
1118  buffer->forEachSegment([&](auto& segment) {
1119  int length = segment.size();
1120  GST_LOG_OBJECT(src, "R%u: Have %d bytes of data", m_requestNumber, length);
 1118 int length = data.size();
 1119 GST_LOG_OBJECT(src, "R%u: Have %d bytes of data", m_requestNumber, length);
11211120
1122  members->readPosition += length;
1123  ASSERT(!members->haveSize || members->readPosition <= members->size);
 1121 members->readPosition += length;
 1122 ASSERT(!members->haveSize || members->readPosition <= members->size);
11241123
1125  gst_element_post_message(GST_ELEMENT_CAST(src), gst_message_new_element(GST_OBJECT_CAST(src),
1126  gst_structure_new("webkit-network-statistics", "read-position", G_TYPE_UINT64, members->readPosition, "size", G_TYPE_UINT64, members->size, nullptr)));
 1124 gst_element_post_message(GST_ELEMENT_CAST(src), gst_message_new_element(GST_OBJECT_CAST(src),
 1125 gst_structure_new("webkit-network-statistics", "read-position", G_TYPE_UINT64, members->readPosition, "size", G_TYPE_UINT64, members->size, nullptr)));
 1126
 1127 checkUpdateBlocksize(length);
 1128 GstBuffer* buffer = gstBufferNewWrappedFast(fastMemDup(data.data(), length), length);
 1129 gst_adapter_push(members->adapter.get(), buffer);
11271130
1128  checkUpdateBlocksize(length);
1129  GstBuffer* buffer = gstBufferNewWrappedFast(fastMemDup(segment.data(), length), length);
1130  gst_adapter_push(members->adapter.get(), buffer);
1131  });
11321131 stopLoaderIfNeeded(src, members);
11331132 members->responseCondition.notifyOne();
11341133}

Source/WebCore/platform/image-decoders/ScalableImageDecoder.h

@@public:
7676 if (m_encodedDataStatus == EncodedDataStatus::Error)
7777 return;
7878
79  auto contiguousData = data.makeContiguous();
80  if (contiguousData->data())
81  m_data = contiguousData->begin()->segment.copyRef();
 79 m_data = data.makeContiguous();
 80
8281 if (m_encodedDataStatus == EncodedDataStatus::TypeAvailable) {
8382 m_decodingSizeFromSetData = true;
8483 tryDecodeSize(allDataReceived);

@@public:
194193 std::optional<IntPoint> hotSpot() const override { return std::nullopt; }
195194
196195protected:
197  RefPtr<FragmentedSharedBuffer::DataSegment> m_data;
 196 RefPtr<const SharedBuffer> m_data;
198197 Vector<ScalableImageDecoderFrame, 1> m_frameBufferCache WTF_GUARDED_BY_LOCK(m_lock);
199198 mutable Lock m_lock;
200199 bool m_premultiplyAlpha;

Source/WebCore/platform/image-decoders/avif/AVIFImageReader.cpp

@@AVIFImageReader::AVIFImageReader(RefPtr<AVIFImageDecoder>&& decoder)
4141
4242AVIFImageReader::~AVIFImageReader() = default;
4343
44 bool AVIFImageReader::parseHeader(const FragmentedSharedBuffer::DataSegment& data, bool allDataReceived)
 44bool AVIFImageReader::parseHeader(const SharedBuffer& data, bool allDataReceived)
4545{
4646 if (avifDecoderSetIOMemory(m_avifDecoder.get(), data.data(), data.size()) != AVIF_RESULT_OK)
4747 return allDataReceived ? m_decoder->setFailed() : false;

@@bool AVIFImageReader::parseHeader(const FragmentedSharedBuffer::DataSegment& dat
5858 return true;
5959}
6060
61 void AVIFImageReader::decodeFrame(size_t frameIndex, ScalableImageDecoderFrame& buffer, const FragmentedSharedBuffer::DataSegment& data)
 61void AVIFImageReader::decodeFrame(size_t frameIndex, ScalableImageDecoderFrame& buffer, const SharedBuffer& data)
6262{
6363 if (m_decoder->failed())
6464 return;

Source/WebCore/platform/image-decoders/avif/AVIFImageReader.h

@@public:
3939 AVIFImageReader(RefPtr<AVIFImageDecoder>&&);
4040 ~AVIFImageReader();
4141
42  bool parseHeader(const FragmentedSharedBuffer::DataSegment&, bool allDataReceived);
43  void decodeFrame(size_t index, ScalableImageDecoderFrame&, const FragmentedSharedBuffer::DataSegment&);
 42 bool parseHeader(const SharedBuffer&, bool allDataReceived);
 43 void decodeFrame(size_t index, ScalableImageDecoderFrame&, const SharedBuffer&);
4444 size_t imageCount() const;
4545 double repetitionCount() const;
4646

Source/WebCore/platform/image-decoders/bmp/BMPImageReader.h

@@class BMPImageReader {
4242public:
4343 // Read a value from |data[offset]|, converting from little to native
4444 // endianness.
45  static inline uint16_t readUint16(const FragmentedSharedBuffer::DataSegment& data, int offset)
 45 static inline uint16_t readUint16(const SharedBuffer& data, int offset)
4646 {
4747 uint16_t result;
4848 memcpy(&result, &data.data()[offset], 2);

@@public:
5252 return result;
5353 }
5454
55  static inline uint32_t readUint32(const FragmentedSharedBuffer::DataSegment& data, int offset)
 55 static inline uint32_t readUint32(const SharedBuffer& data, int offset)
5656 {
5757 uint32_t result;
5858 memcpy(&result, &data.data()[offset], 4);

@@public:
6969 BMPImageReader(ScalableImageDecoder* parent, size_t decodedAndHeaderOffset, size_t imgDataOffset, bool usesAndMask);
7070
7171 void setBuffer(ScalableImageDecoderFrame* buffer) { m_buffer = buffer; }
72  void setData(FragmentedSharedBuffer::DataSegment& data) { m_data = &data; }
 72 void setData(const SharedBuffer& data) { m_data = &data; }
7373
7474 // Does the actual decoding. If |onlySize| is true, decoding only
7575 // progresses as far as necessary to get the image size. Returns

@@private:
272272 ScalableImageDecoderFrame* m_buffer;
273273
274274 // The file to decode.
275  RefPtr<FragmentedSharedBuffer::DataSegment> m_data;
 275 RefPtr<const SharedBuffer> m_data;
276276
277277 // An index into |m_data| representing how much we've already decoded.
278278 size_t m_decodedOffset;

Source/WebCore/platform/image-decoders/gif/GIFImageReader.h

@@public:
237237 {
238238 }
239239
240  void setData(WebCore::FragmentedSharedBuffer::DataSegment& data) { m_data = &data; }
 240 void setData(const WebCore::SharedBuffer& data) { m_data = &data; }
241241 // FIXME: haltAtFrame should be size_t.
242242 bool decode(WebCore::GIFImageDecoder::GIFQuery, unsigned haltAtFrame);
243243

@@private:
316316 Vector<std::unique_ptr<GIFFrameContext> > m_frames;
317317 size_t m_currentDecodingFrame;
318318
319  RefPtr<WebCore::FragmentedSharedBuffer::DataSegment> m_data;
 319 RefPtr<const WebCore::SharedBuffer> m_data;
320320 bool m_parseCompleted;
321321};

Source/WebCore/platform/image-decoders/jpeg/JPEGImageDecoder.cpp

@@public:
317317 m_bytesToSkip = std::max(numBytes - bytesToSkip, static_cast<long>(0));
318318 }
319319
320  bool decode(const FragmentedSharedBuffer::DataSegment& data, bool onlySize)
 320 bool decode(const SharedBuffer& data, bool onlySize)
321321 {
322322 m_decodingSizeOnly = onlySize;
323323

Source/WebCore/platform/image-decoders/jpeg2000/JPEG2000ImageDecoder.cpp

@@void JPEG2000ImageDecoder::decode(bool onlySize, bool allDataReceived)
380380 }
381381
382382 struct Reader {
383  FragmentedSharedBuffer::DataSegment& data;
 383 const SharedBuffer& data;
384384 size_t offset;
385385 } reader = { *m_data, 0 };
386386

Source/WebCore/platform/image-decoders/png/PNGImageDecoder.cpp

@@public:
148148 m_readOffset = 0;
149149 }
150150
151  bool decode(const FragmentedSharedBuffer::DataSegment& data, bool sizeOnly, unsigned haltAtFrame)
 151 bool decode(const SharedBuffer& data, bool sizeOnly, unsigned haltAtFrame)
152152 {
153153 m_decodingSizeOnly = sizeOnly;
154154 PNGImageDecoder* decoder = static_cast<PNGImageDecoder*>(png_get_progressive_ptr(m_png));

Source/WebCore/platform/image-decoders/webp/WEBPImageDecoder.cpp

@@void WEBPImageDecoder::decode(size_t frameIndex, bool allDataReceived)
132132 // This can be executed both in the main thread (when not using async decoding) or in the decoding thread.
133133 // When executed in the decoding thread, a call to setData() from the main thread may change the data
134134 // the WebPDemuxer is using, leaving it in an inconsistent state, so we need to protect the data.
135  RefPtr<FragmentedSharedBuffer::DataSegment> protectedData(m_data);
 135 RefPtr<const SharedBuffer> protectedData(m_data);
136136 WebPData inputData = { protectedData->data(), protectedData->size() };
137137 WebPDemuxState demuxerState;
138138 WebPDemuxer* demuxer = WebPDemuxPartial(&inputData, &demuxerState);

Source/WebCore/platform/network/ResourceHandleClient.cpp

@@ResourceHandleClient::ResourceHandleClient() = default;
3636
3737ResourceHandleClient::~ResourceHandleClient() = default;
3838
39 void ResourceHandleClient::didReceiveBuffer(ResourceHandle* handle, Ref<FragmentedSharedBuffer>&& buffer, int encodedDataLength)
 39void ResourceHandleClient::didReceiveBuffer(ResourceHandle* handle, const FragmentedSharedBuffer& buffer, int encodedDataLength)
4040{
41  didReceiveData(handle, buffer->makeContiguous()->data(), buffer->size(), encodedDataLength);
 41 buffer.forEachSegmentAsSharedBuffer([&](auto&& buffer) {
 42 didReceiveData(handle, buffer, encodedDataLength);
 43 });
4244}
4345
4446}

Source/WebCore/platform/network/ResourceHandleClient.h

@@OBJC_CLASS NSCachedURLResponse;
4444namespace WebCore {
4545class AuthenticationChallenge;
4646class Credential;
 47class FragmentedSharedBuffer;
4748class NetworkLoadMetrics;
4849class ProtectionSpace;
4950class ResourceHandle;
5051class ResourceError;
5152class ResourceRequest;
5253class ResourceResponse;
53 class FragmentedSharedBuffer;
 54class SharedBuffer;
5455
5556enum CacheStoragePolicy {
5657 StorageAllowed,

@@public:
6566
6667 virtual void didSendData(ResourceHandle*, unsigned long long /*bytesSent*/, unsigned long long /*totalBytesToBeSent*/) { }
6768
68  virtual void didReceiveData(ResourceHandle*, const uint8_t*, unsigned, int /*encodedDataLength*/) { }
69  WEBCORE_EXPORT virtual void didReceiveBuffer(ResourceHandle*, Ref<FragmentedSharedBuffer>&&, int encodedDataLength);
70 
 69 virtual void didReceiveData(ResourceHandle*, const SharedBuffer&, int /*encodedDataLength*/) { }
 70 WEBCORE_EXPORT virtual void didReceiveBuffer(ResourceHandle*, const FragmentedSharedBuffer&, int encodedDataLength);
 71
7172 virtual void didFinishLoading(ResourceHandle*, const NetworkLoadMetrics&) { }
7273 virtual void didFail(ResourceHandle*, const ResourceError&) { }
7374 virtual void wasBlocked(ResourceHandle*) { }

Source/WebCore/platform/network/SynchronousLoaderClient.cpp

@@void SynchronousLoaderClient::didReceiveResponseAsync(ResourceHandle*, ResourceR
7171 completionHandler();
7272}
7373
74 void SynchronousLoaderClient::didReceiveData(ResourceHandle*, const uint8_t* data, unsigned length, int /*encodedDataLength*/)
 74void SynchronousLoaderClient::didReceiveData(ResourceHandle*, const SharedBuffer& buffer, int /*encodedDataLength*/)
7575{
76  m_data.append(data, length);
 76 m_data.append(buffer.data(), buffer.size());
7777}
7878
7979void SynchronousLoaderClient::didFinishLoading(ResourceHandle* handle, const NetworkLoadMetrics&)

Source/WebCore/platform/network/SynchronousLoaderClient.h

3434
3535namespace WebCore {
3636
 37class SharedBuffer;
 38
3739class SynchronousLoaderMessageQueue : public ThreadSafeRefCounted<SynchronousLoaderMessageQueue> {
3840public:
3941 static Ref<SynchronousLoaderMessageQueue> create() { return adoptRef(*new SynchronousLoaderMessageQueue); }

@@private:
6668 bool shouldUseCredentialStorage(ResourceHandle*) override;
6769 void didReceiveAuthenticationChallenge(ResourceHandle*, const AuthenticationChallenge&) override;
6870 void didReceiveResponseAsync(ResourceHandle*, ResourceResponse&&, CompletionHandler<void()>&&) override;
69  void didReceiveData(ResourceHandle*, const uint8_t*, unsigned, int /*encodedDataLength*/) override;
 71 void didReceiveData(ResourceHandle*, const SharedBuffer&, int /*encodedDataLength*/) override;
7072 void didFinishLoading(ResourceHandle*, const NetworkLoadMetrics&) override;
7173 void didFail(ResourceHandle*, const ResourceError&) override;
7274#if USE(PROTECTION_SPACE_AUTH_CALLBACK)

Source/WebCore/platform/network/cocoa/RangeResponseGenerator.mm

@@void RangeResponseGenerator::giveResponseToTaskIfBytesInRangeReceived(WebCoreNSU
132132
133133 size_t bytesFromThisViewToDeliver = std::min(bufferView.size(), range.end - byteIndex + 1);
134134 byteIndex += bytesFromThisViewToDeliver;
135  [task resource:nullptr receivedData:SharedBufferDataView(bufferView, bytesFromThisViewToDeliver).createSharedBuffer()];
 135 [task resource:nullptr receivedData:SharedBufferDataView(bufferView, bytesFromThisViewToDeliver).createSharedBuffer()->createNSData()];
136136 }
137137 if (byteIndex >= range.end) {
138138 [task resourceFinished:nullptr metrics:NetworkLoadMetrics { }];

@@private:
238238 return false;
239239 }
240240
241  void dataReceived(PlatformMediaResource&, Ref<FragmentedSharedBuffer>&& buffer) final
 241 void dataReceived(PlatformMediaResource&, const SharedBuffer& buffer) final
242242 {
243243 ASSERT(isMainThread());
244244 if (!m_generator)

@@private:
246246 auto* data = m_generator->m_map.get(m_urlString);
247247 if (!data)
248248 return;
249  data->buffer.append(WTFMove(buffer));
 249 data->buffer.append(buffer);
250250 m_generator->giveResponseToTasksWithFinishedRanges(*data);
251251 }
252252

Source/WebCore/platform/network/cocoa/WebCoreNSURLSession.h

@@WEBCORE_EXPORT @interface WebCoreNSURLSession : NSObject {
158158- (void)resource:(nullable WebCore::PlatformMediaResource*)resource sentBytes:(unsigned long long)bytesSent totalBytesToBeSent:(unsigned long long)totalBytesToBeSent;
159159- (void)resource:(nullable WebCore::PlatformMediaResource*)resource receivedResponse:(const WebCore::ResourceResponse&)response completionHandler:(CompletionHandler<void(WebCore::ShouldContinuePolicyCheck)>&&)completionHandler;
160160- (BOOL)resource:(nullable WebCore::PlatformMediaResource*)resource shouldCacheResponse:(const WebCore::ResourceResponse&)response;
161 - (void)resource:(nullable WebCore::PlatformMediaResource*)resource receivedData:(Ref<WebCore::FragmentedSharedBuffer>&&)data;
 161- (void)resource:(nullable WebCore::PlatformMediaResource*)resource receivedData:(RetainPtr<NSData>&&)data;
162162- (void)resource:(nullable WebCore::PlatformMediaResource*)resource receivedRedirect:(const WebCore::ResourceResponse&)response request:(WebCore::ResourceRequest&&)request completionHandler:(CompletionHandler<void(WebCore::ResourceRequest&&)>&&)completionHandler;
163163- (void)resource:(nullable WebCore::PlatformMediaResource*)resource accessControlCheckFailedWithError:(const WebCore::ResourceError&)error;
164164- (void)resource:(nullable WebCore::PlatformMediaResource*)resource loadFailedWithError:(const WebCore::ResourceError&)error;

Source/WebCore/platform/network/cocoa/WebCoreNSURLSession.mm

@@public:
608608 void redirectReceived(PlatformMediaResource&, ResourceRequest&&, const ResourceResponse&, CompletionHandler<void(ResourceRequest&&)>&&) override;
609609 bool shouldCacheResponse(PlatformMediaResource&, const ResourceResponse&) override;
610610 void dataSent(PlatformMediaResource&, unsigned long long, unsigned long long) override;
611  void dataReceived(PlatformMediaResource&, Ref<FragmentedSharedBuffer>&&) override;
 611 void dataReceived(PlatformMediaResource&, const SharedBuffer&) override;
612612 void accessControlCheckFailed(PlatformMediaResource&, const ResourceError&) override;
613613 void loadFailed(PlatformMediaResource&, const ResourceError&) override;
614614 void loadFinished(PlatformMediaResource&, const NetworkLoadMetrics&) override;

@@bool WebCoreNSURLSessionDataTaskClient::shouldCacheResponse(PlatformMediaResourc
652652 return [m_task resource:&resource shouldCacheResponse:response];
653653}
654654
655 void WebCoreNSURLSessionDataTaskClient::dataReceived(PlatformMediaResource& resource, Ref<FragmentedSharedBuffer>&& buffer)
 655void WebCoreNSURLSessionDataTaskClient::dataReceived(PlatformMediaResource& resource, const SharedBuffer& buffer)
656656{
657657 Locker locker { m_taskLock };
658658 if (!m_task)
659659 return;
660660
661  [m_task resource:&resource receivedData:WTFMove(buffer)];
 661 [m_task resource:&resource receivedData:buffer.createNSData()];
662662}
663663
664664void WebCoreNSURLSessionDataTaskClient::redirectReceived(PlatformMediaResource& resource, ResourceRequest&& request, const ResourceResponse& response, CompletionHandler<void(ResourceRequest&&)>&& completionHandler)

@@- (BOOL)resource:(PlatformMediaResource*)resource shouldCacheResponse:(const Res
931931 return response.httpHeaderField(HTTPHeaderName::ContentRange).isEmpty();
932932}
933933
934 - (void)resource:(PlatformMediaResource*)resource receivedData:(Ref<WebCore::FragmentedSharedBuffer>&&)data
 934- (void)resource:(PlatformMediaResource*)resource receivedData:(RetainPtr<NSData>&&)data
935935{
936936 ASSERT_UNUSED(resource, !resource || resource == _resource);
937937 [self.session addDelegateOperation:[strongSelf = RetainPtr { self }, data = WTFMove(data)] {
938  auto nsData = data->makeContiguous()->createNSData();
939  strongSelf.get().countOfBytesReceived += data->size();
 938 strongSelf.get().countOfBytesReceived += [data length];
940939 id<NSURLSessionDataDelegate> dataDelegate = (id<NSURLSessionDataDelegate>)strongSelf.get().session.delegate;
941940 if ([dataDelegate respondsToSelector:@selector(URLSession:dataTask:didReceiveData:)])
942  [dataDelegate URLSession:(NSURLSession *)strongSelf.get().session dataTask:(NSURLSessionDataTask *)strongSelf.get() didReceiveData:nsData.get()];
 941 [dataDelegate URLSession:(NSURLSession *)strongSelf.get().session dataTask:(NSURLSessionDataTask *)strongSelf.get() didReceiveData:data.get()];
943942 }];
944943}
945944

Source/WebCore/platform/network/curl/CurlCacheManager.cpp

@@bool CurlCacheManager::getCachedResponse(const String& url, ResourceResponse& re
243243 return false;
244244}
245245
246 void CurlCacheManager::didReceiveData(ResourceHandle& job, const uint8_t* data, size_t size)
 246void CurlCacheManager::didReceiveData(ResourceHandle& job, const SharedBuffer& data)
247247{
248248 if (m_disabled)
249249 return;

@@void CurlCacheManager::didReceiveData(ResourceHandle& job, const uint8_t* data,
255255 if (it->value->getJob() != &job)
256256 return;
257257
258  if (!it->value->saveCachedData(data, size))
 258 if (!it->value->saveCachedData(data.data(), data.size()))
259259 invalidateCacheEntry(url);
260260
261261 else {
262  m_currentStorageSize += size;
 262 m_currentStorageSize += data.size();
263263 m_LRUEntryList.prependOrMoveToFirst(url);
264264 makeRoomForNewEntry();
265265 }

Source/WebCore/platform/network/curl/CurlCacheManager.h

@@public:
4949 bool getCachedResponse(const String& url, ResourceResponse&);
5050
5151 void didReceiveResponse(ResourceHandle&, ResourceResponse&);
52  void didReceiveData(ResourceHandle&, const uint8_t*, size_t); // Save data
 52 void didReceiveData(ResourceHandle&, const SharedBuffer&); // Save data
5353 void didFinishLoading(ResourceHandle&);
5454 void didFail(ResourceHandle&);
5555

Source/WebCore/platform/network/curl/CurlDownload.cpp

@@void CurlDownload::curlDidReceiveResponse(CurlRequest& request, CurlResponse&& r
103103}
104104
105105
106 void CurlDownload::curlDidReceiveBuffer(CurlRequest&, Ref<FragmentedSharedBuffer>&& buffer)
 106void CurlDownload::curlDidReceiveData(CurlRequest&, const SharedBuffer& buffer)
107107{
108108 ASSERT(isMainThread());
109109

@@void CurlDownload::curlDidReceiveBuffer(CurlRequest&, Ref<FragmentedSharedBuffer
111111 return;
112112
113113 if (m_listener)
114  m_listener->didReceiveDataOfLength(buffer->size());
 114 m_listener->didReceiveDataOfLength(buffer.size());
115115}
116116
117117void CurlDownload::curlDidComplete(CurlRequest& request, NetworkLoadMetrics&&)

Source/WebCore/platform/network/curl/CurlDownload.h

@@namespace WebCore {
3838
3939class CurlRequest;
4040class ResourceHandle;
 41class SharedBuffer;
4142
4243class CurlDownloadListener {
4344public:

@@private:
7273 Ref<CurlRequest> createCurlRequest(ResourceRequest&);
7374 void curlDidSendData(CurlRequest&, unsigned long long, unsigned long long) override { }
7475 void curlDidReceiveResponse(CurlRequest&, CurlResponse&&) override;
75  void curlDidReceiveBuffer(CurlRequest&, Ref<FragmentedSharedBuffer>&&) override;
 76 void curlDidReceiveData(CurlRequest&, const SharedBuffer&) override;
7677 void curlDidComplete(CurlRequest&, NetworkLoadMetrics&&) override;
7778 void curlDidFailWithError(CurlRequest&, ResourceError&&, CertificateInfo&&) override;
7879

Source/WebCore/platform/network/curl/CurlMultipartHandle.cpp

@@CurlMultipartHandle::CurlMultipartHandle(CurlMultipartHandleClient& client, cons
119119
120120}
121121
122 void CurlMultipartHandle::didReceiveData(const FragmentedSharedBuffer& buffer)
 122void CurlMultipartHandle::didReceiveData(const SharedBuffer& buffer)
123123{
124124 if (m_state == State::End)
125125 return; // The handler is closed down so ignore everything.
126126
127  m_buffer.append(buffer.makeContiguous()->data(), buffer.size());
 127 m_buffer.append(buffer.data(), buffer.size());
128128
129129 while (processContent()) { }
130130}

Source/WebCore/platform/network/curl/CurlMultipartHandle.h

@@namespace WebCore {
3434
3535class CurlMultipartHandleClient;
3636class CurlResponse;
37 class FragmentedSharedBuffer;
 37class SharedBuffer;
3838
3939class CurlMultipartHandle {
4040 WTF_MAKE_FAST_ALLOCATED;

@@public:
4444 CurlMultipartHandle(CurlMultipartHandleClient&, const String&);
4545 ~CurlMultipartHandle() { }
4646
47  void didReceiveData(const FragmentedSharedBuffer&);
 47 void didReceiveData(const SharedBuffer&);
4848 void didComplete();
4949
5050private:

Source/WebCore/platform/network/curl/CurlMultipartHandleClient.h

@@class FragmentedSharedBuffer;
3333class CurlMultipartHandleClient {
3434public:
3535 virtual void didReceiveHeaderFromMultipart(const Vector<String>&) = 0;
36  virtual void didReceiveDataFromMultipart(Ref<FragmentedSharedBuffer>&&) = 0;
 36 virtual void didReceiveDataFromMultipart(const SharedBuffer&) = 0;
3737
3838protected:
3939 ~CurlMultipartHandleClient() { }

Source/WebCore/platform/network/curl/CurlRequest.cpp

@@size_t CurlRequest::didReceiveHeader(String&& header)
396396
397397// called with data after all headers have been processed via headerCallback
398398
399 size_t CurlRequest::didReceiveData(Ref<FragmentedSharedBuffer>&& buffer)
 399size_t CurlRequest::didReceiveData(const SharedBuffer& buffer)
400400{
401401 if (isCompletedOrCancelled())
402402 return 0;

@@size_t CurlRequest::didReceiveData(Ref<FragmentedSharedBuffer>&& buffer)
411411 return CURL_WRITEFUNC_PAUSE;
412412 }
413413
414  auto receiveBytes = buffer->size();
 414 auto receiveBytes = buffer.size();
415415 m_totalReceivedSize += receiveBytes;
416416
417417 writeDataToDownloadFileIfEnabled(buffer);

@@size_t CurlRequest::didReceiveData(Ref<FragmentedSharedBuffer>&& buffer)
420420 if (m_multipartHandle)
421421 m_multipartHandle->didReceiveData(buffer);
422422 else {
423  callClient([buffer = WTFMove(buffer)](CurlRequest& request, CurlRequestClient& client) mutable {
424  client.curlDidReceiveBuffer(request, WTFMove(buffer));
 423 callClient([buffer = Ref { buffer }](CurlRequest& request, CurlRequestClient& client) {
 424 client.curlDidReceiveData(request, buffer);
425425 });
426426 }
427427 }

@@void CurlRequest::didReceiveHeaderFromMultipart(const Vector<String>& headers)
444444 invokeDidReceiveResponse(response, Action::None);
445445}
446446
447 void CurlRequest::didReceiveDataFromMultipart(Ref<FragmentedSharedBuffer>&& buffer)
 447void CurlRequest::didReceiveDataFromMultipart(const SharedBuffer& buffer)
448448{
449449 if (isCompletedOrCancelled())
450450 return;
451451
452  auto receiveBytes = buffer->size();
 452 auto receiveBytes = buffer.size();
453453
454454 if (receiveBytes) {
455  callClient([buffer = WTFMove(buffer)](CurlRequest& request, CurlRequestClient& client) mutable {
456  client.curlDidReceiveBuffer(request, WTFMove(buffer));
 455 callClient([buffer = Ref { buffer }](CurlRequest& request, CurlRequestClient& client) {
 456 client.curlDidReceiveData(request, buffer);
457457 });
458458 }
459459}

Source/WebCore/platform/network/curl/CurlRequest.h

@@private:
122122 CURL* setupTransfer() override;
123123 size_t willSendData(char*, size_t, size_t);
124124 size_t didReceiveHeader(String&&);
125  size_t didReceiveData(Ref<FragmentedSharedBuffer>&&);
 125 size_t didReceiveData(const SharedBuffer&);
126126 void didReceiveHeaderFromMultipart(const Vector<String>&) override;
127  void didReceiveDataFromMultipart(Ref<FragmentedSharedBuffer>&&) override;
 127 void didReceiveDataFromMultipart(const SharedBuffer&) override;
128128 void didCompleteTransfer(CURLcode) override;
129129 void didCancelTransfer() override;
130130 void finalizeTransfer();

Source/WebCore/platform/network/curl/CurlRequestClient.h

@@class CurlRequest;
3434class CurlResponse;
3535class NetworkLoadMetrics;
3636class ResourceError;
37 class FragmentedSharedBuffer;
 37class SharedBuffer;
3838
3939class CurlRequestClient {
4040public:

@@public:
4343
4444 virtual void curlDidSendData(CurlRequest&, unsigned long long bytesSent, unsigned long long totalBytesToBeSent) = 0;
4545 virtual void curlDidReceiveResponse(CurlRequest&, CurlResponse&&) = 0;
46  virtual void curlDidReceiveBuffer(CurlRequest&, Ref<FragmentedSharedBuffer>&&) = 0;
 46 virtual void curlDidReceiveData(CurlRequest&, const SharedBuffer&) = 0;
4747 virtual void curlDidComplete(CurlRequest&, NetworkLoadMetrics&&) = 0;
4848 virtual void curlDidFailWithError(CurlRequest&, ResourceError&&, CertificateInfo&&) = 0;
4949};

Source/WebCore/platform/network/curl/CurlResourceHandleDelegate.cpp

@@void CurlResourceHandleDelegate::curlDidReceiveResponse(CurlRequest& request, Cu
142142 });
143143}
144144
145 void CurlResourceHandleDelegate::curlDidReceiveBuffer(CurlRequest&, Ref<FragmentedSharedBuffer>&& buffer)
 145void CurlResourceHandleDelegate::curlDidReceiveData(CurlRequest&, const SharedBuffer& buffer)
146146{
147147 ASSERT(isMainThread());
148148
149149 if (cancelledOrClientless())
150150 return;
151151
152  auto contiguousBuffer = buffer->makeContiguous();
153  CurlCacheManager::singleton().didReceiveData(m_handle, contiguousBuffer->data(), buffer->size());
154  client()->didReceiveBuffer(&m_handle, WTFMove(contiguousBuffer), buffer->size());
 152 CurlCacheManager::singleton().didReceiveData(m_handle, buffer);
 153 client()->didReceiveBuffer(&m_handle, buffer, buffer.size());
155154}
156155
157156void CurlResourceHandleDelegate::curlDidComplete(CurlRequest&, NetworkLoadMetrics&& metrics)

Source/WebCore/platform/network/curl/CurlResourceHandleDelegate.h

@@namespace WebCore {
3838class ResourceHandle;
3939class ResourceHandleClient;
4040class ResourceHandleInternal;
 41class SharedBuffer;
4142
4243class CurlResourceHandleDelegate final : public CurlRequestClient {
4344 WTF_MAKE_NONCOPYABLE(CurlResourceHandleDelegate); WTF_MAKE_FAST_ALLOCATED;

@@public:
5354
5455 void curlDidSendData(CurlRequest&, unsigned long long bytesSent, unsigned long long totalBytesToBeSent) final;
5556 void curlDidReceiveResponse(CurlRequest&, CurlResponse&&) final;
56  void curlDidReceiveBuffer(CurlRequest&, Ref<FragmentedSharedBuffer>&&) final;
 57 void curlDidReceiveData(CurlRequest&, const SharedBuffer&) final;
5758 void curlDidComplete(CurlRequest&, NetworkLoadMetrics&&) final;
5859 void curlDidFailWithError(CurlRequest&, ResourceError&&, CertificateInfo&&) final;
5960

Source/WebCore/platform/network/curl/CurlStream.cpp

99 * 2. Redistributions in binary form must reproduce the above copyright
1010 * notice, this list of conditions and the following disclaimer in the
1111 * documentation and/or other materials provided with the distribution.
12  *
 12 *
1313 * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
1414 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
1515 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR

2727#include "CurlStream.h"
2828
2929#include "CurlStreamScheduler.h"
 30#include "SharedBuffer.h"
3031#include "SocketStreamError.h"
3132
3233#if USE(CURL)

@@void CurlStream::tryToReceive()
129130 if (!m_curlHandle)
130131 return;
131132
132  auto receiveBuffer = makeUniqueArray<uint8_t>(kReceiveBufferSize);
 133 Vector<uint8_t> receiveBuffer(kReceiveBufferSize);
133134 size_t bytesReceived = 0;
134135
135  auto errorCode = m_curlHandle->receive(receiveBuffer.get(), kReceiveBufferSize, bytesReceived);
 136 auto errorCode = m_curlHandle->receive(receiveBuffer.data(), kReceiveBufferSize, bytesReceived);
136137 if (errorCode != CURLE_OK) {
137138 if (errorCode != CURLE_AGAIN)
138139 notifyFailure(errorCode);

@@void CurlStream::tryToReceive()
143144 if (!bytesReceived)
144145 destroyHandle();
145146
146  m_scheduler.callClientOnMainThread(m_streamID, [streamID = m_streamID, buffer = WTFMove(receiveBuffer), length = bytesReceived](Client& client) mutable {
147  client.didReceiveData(streamID, buffer.get(), length);
 147 receiveBuffer.resize(bytesReceived);
 148 m_scheduler.callClientOnMainThread(m_streamID, [streamID = m_streamID, buffer = SharedBuffer::create(WTFMove(receiveBuffer))](Client& client) {
 149 client.didReceiveData(streamID, buffer);
148150 });
149151}
150152

Source/WebCore/platform/network/curl/CurlStream.h

99 * 2. Redistributions in binary form must reproduce the above copyright
1010 * notice, this list of conditions and the following disclaimer in the
1111 * documentation and/or other materials provided with the distribution.
12  *
 12 *
1313 * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
1414 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
1515 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR

3333namespace WebCore {
3434
3535class CurlStreamScheduler;
 36class SharedBuffer;
3637class SocketStreamError;
3738
3839using CurlStreamID = uint16_t;

@@public:
4647 public:
4748 virtual void didOpen(CurlStreamID) = 0;
4849 virtual void didSendData(CurlStreamID, size_t) = 0;
49  virtual void didReceiveData(CurlStreamID, const uint8_t*, size_t) = 0;
 50 virtual void didReceiveData(CurlStreamID, const SharedBuffer&) = 0;
5051 virtual void didFail(CurlStreamID, CURLcode) = 0;
5152 };
5253

Source/WebCore/platform/network/curl/SocketStreamHandleImpl.h

@@private:
5959 std::optional<size_t> platformSendInternal(const uint8_t*, size_t);
6060 bool sendPendingData();
6161
 62 // CurlStream::Client
6263 void didOpen(CurlStreamID) final;
6364 void didSendData(CurlStreamID, size_t) final;
64  void didReceiveData(CurlStreamID, const uint8_t*, size_t) final;
 65 void didReceiveData(CurlStreamID, const SharedBuffer&) final;
6566 void didFail(CurlStreamID, CURLcode) final;
6667
6768 bool isStreamInvalidated() { return m_streamID == invalidCurlStreamID; }

Source/WebCore/platform/network/curl/SocketStreamHandleImplCurl.cpp

3737
3838#include "CurlStreamScheduler.h"
3939#include "DeprecatedGlobalSettings.h"
 40#include "SharedBuffer.h"
4041#include "SocketStreamError.h"
4142#include "SocketStreamHandleClient.h"
4243#include "StorageSessionProvider.h"

@@void SocketStreamHandleImpl::didSendData(CurlStreamID, size_t length)
104105 sendPendingData();
105106}
106107
107 void SocketStreamHandleImpl::didReceiveData(CurlStreamID, const uint8_t* data, size_t length)
 108void SocketStreamHandleImpl::didReceiveData(CurlStreamID, const SharedBuffer& data)
108109{
109110 if (m_state != Open)
110111 return;
111112
112  m_client.didReceiveSocketStreamData(*this, data, length);
 113 m_client.didReceiveSocketStreamData(*this, data.data(), data.size());
113114}
114115
115116void SocketStreamHandleImpl::didFail(CurlStreamID, CURLcode errorCode)

Source/WebCore/platform/network/ios/LegacyPreviewLoaderClient.h

3131
3232namespace WebCore {
3333
34 class FragmentedSharedBuffer;
 34class SharedBuffer;
3535
3636class LegacyPreviewLoaderClient : public RefCounted<LegacyPreviewLoaderClient> {
3737public:
3838 virtual ~LegacyPreviewLoaderClient() = default;
39  virtual void didReceiveBuffer(const FragmentedSharedBuffer&) { }
 39 virtual void didReceiveData(const SharedBuffer&) { }
4040 virtual void didFinishLoading() { }
4141 virtual void didFail() { }
4242 virtual bool supportsPasswordEntry() const { return false; }

Source/WebCore/platform/network/mac/WebCoreResourceHandleAsOperationQueueDelegate.mm

@@- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data l
300300 // FIXME: https://bugs.webkit.org/show_bug.cgi?id=19793
301301 // -1 means we do not provide any data about transfer size to inspector so it would use
302302 // Content-Length headers or content size to show transfer size.
303  m_handle->client()->didReceiveBuffer(m_handle, SharedBuffer::create(data.get()), -1);
 303 m_handle->client()->didReceiveData(m_handle, SharedBuffer::create(data.get()), -1);
304304 };
305305
306306 [self callFunctionOnMainThread:WTFMove(work)];

Source/WebCore/svg/graphics/SVGImage.cpp

@@EncodedDataStatus SVGImage::dataChanged(bool allDataReceived)
546546 ASSERT(loader.activeDocumentLoader()); // DocumentLoader should have been created by frame->init().
547547 loader.activeDocumentLoader()->writer().setMIMEType("image/svg+xml");
548548 loader.activeDocumentLoader()->writer().begin(URL()); // create the empty document
549  data()->forEachSegment([&](auto& segment) {
550  loader.activeDocumentLoader()->writer().addData(segment.data(), segment.size());
 549 data()->forEachSegmentAsSharedBuffer([&](auto&& buffer) {
 550 loader.activeDocumentLoader()->writer().addData(buffer);
551551 });
552552 loader.activeDocumentLoader()->writer().end();
553553

Source/WebCore/testing/MockContentFilter.cpp

@@void MockContentFilter::responseReceived(const ResourceResponse&)
100100 maybeDetermineStatus(DecisionPoint::AfterResponse);
101101}
102102
103 void MockContentFilter::addData(const uint8_t*, int)
 103void MockContentFilter::addData(const SharedBuffer&)
104104{
105105 maybeDetermineStatus(DecisionPoint::AfterAddData);
106106}

Source/WebCore/testing/MockContentFilter.h

@@public:
4040
4141 void willSendRequest(ResourceRequest&, const ResourceResponse&) override;
4242 void responseReceived(const ResourceResponse&) override;
43  void addData(const uint8_t* data, int length) override;
 43 void addData(const SharedBuffer&) override;
4444 void finishedAddingData() override;
4545 Ref<FragmentedSharedBuffer> replacementData() const override;
4646#if ENABLE(CONTENT_FILTERING)

Source/WebCore/workers/WorkerFontLoadRequest.cpp

@@void WorkerFontLoadRequest::didReceiveResponse(ResourceLoaderIdentifier, const R
115115 m_errorOccurred = true;
116116}
117117
118 void WorkerFontLoadRequest::didReceiveData(const uint8_t* data, int dataLength)
 118void WorkerFontLoadRequest::didReceiveData(const SharedBuffer& buffer, bool)
119119{
120120 if (m_errorOccurred)
121121 return;
122122
123  m_data.append(data, dataLength);
 123 m_data.append(buffer);
124124}
125125
126126void WorkerFontLoadRequest::didFinishLoading(ResourceLoaderIdentifier)

Source/WebCore/workers/WorkerFontLoadRequest.h

@@private:
6363 bool isWorkerFontLoadRequest() const final { return true; }
6464
6565 void didReceiveResponse(ResourceLoaderIdentifier, const ResourceResponse&) final;
66  void didReceiveData(const uint8_t* data, int dataLength) final;
 66 void didReceiveData(const SharedBuffer&, bool) final;
6767 void didFinishLoading(ResourceLoaderIdentifier) final;
6868 void didFail(const ResourceError&) final;
6969

Source/WebCore/workers/WorkerScriptLoader.cpp

@@void WorkerScriptLoader::didReceiveResponse(ResourceLoaderIdentifier identifier,
200200 m_client->didReceiveResponse(identifier, response);
201201}
202202
203 void WorkerScriptLoader::didReceiveData(const uint8_t* data, int len)
 203void WorkerScriptLoader::didReceiveData(const SharedBuffer& buffer, bool useStrLen)
204204{
205205 if (m_failed)
206206 return;

@@void WorkerScriptLoader::didReceiveData(const uint8_t* data, int len)
212212 m_decoder = TextResourceDecoder::create("text/javascript"_s, "UTF-8");
213213 }
214214
215  if (!len)
 215 if (buffer.isEmpty())
216216 return;
217 
218  if (len == -1)
219  len = strlen(reinterpret_cast<const char*>(data));
220217
221  m_script.append(m_decoder->decode(data, len));
 218 size_t len = useStrLen ? strlen(reinterpret_cast<const char*>(buffer.data())) : buffer.size();
 219 m_script.append(m_decoder->decode(buffer.data(), len));
222220}
223221
224222void WorkerScriptLoader::didFinishLoading(ResourceLoaderIdentifier identifier)

Source/WebCore/workers/WorkerScriptLoader.h

@@public:
7979 const ResourceError& error() const { return m_error; }
8080
8181 void didReceiveResponse(ResourceLoaderIdentifier, const ResourceResponse&) override;
82  void didReceiveData(const uint8_t* data, int dataLength) override;
 82 void didReceiveData(const SharedBuffer&, bool useStrLen) override;
8383 void didFinishLoading(ResourceLoaderIdentifier) override;
8484 void didFail(const ResourceError&) override;
8585

Source/WebCore/workers/service/context/ServiceWorkerFetch.h

@@public:
5151
5252 virtual void didReceiveRedirection(const ResourceResponse&) = 0;
5353 virtual void didReceiveResponse(const ResourceResponse&) = 0;
54  virtual void didReceiveData(Ref<FragmentedSharedBuffer>&&) = 0;
 54 virtual void didReceiveData(const SharedBuffer&) = 0;
5555 virtual void didReceiveFormDataAndFinish(Ref<FormData>&&) = 0;
5656 virtual void didFail(const ResourceError&) = 0;
5757 virtual void didFinish() = 0;

Source/WebCore/xml/XMLHttpRequest.cpp

@@Ref<TextResourceDecoder> XMLHttpRequest::createDecoder() const
10341034 return TextResourceDecoder::create("text/plain", "UTF-8");
10351035}
10361036
1037 void XMLHttpRequest::didReceiveData(const uint8_t* data, int len)
 1037void XMLHttpRequest::didReceiveData(const SharedBuffer& buffer, bool useStrLen)
10381038{
10391039 if (m_error)
10401040 return;

@@void XMLHttpRequest::didReceiveData(const uint8_t* data, int len)
10521052 if (useDecoder && !m_decoder)
10531053 m_decoder = createDecoder();
10541054
1055  if (!len)
 1055 if (buffer.isEmpty())
10561056 return;
10571057
1058  if (len == -1)
1059  len = strlen(reinterpret_cast<const char*>(data));
 1058 size_t len = useStrLen ? strlen(reinterpret_cast<const char*>(buffer.data())) : buffer.size();
10601059
10611060 if (useDecoder)
1062  m_responseBuilder.append(m_decoder->decode(data, len));
 1061 m_responseBuilder.append(m_decoder->decode(buffer.data(), len));
10631062 else {
10641063 // Buffer binary data.
1065  m_binaryResponseBuilder.append(data, len);
 1064 m_binaryResponseBuilder.append(buffer);
10661065 }
10671066
10681067 if (!m_error) {

Source/WebCore/xml/XMLHttpRequest.h

@@private:
162162 // ThreadableLoaderClient
163163 void didSendData(unsigned long long bytesSent, unsigned long long totalBytesToBeSent) override;
164164 void didReceiveResponse(ResourceLoaderIdentifier, const ResourceResponse&) override;
165  void didReceiveData(const uint8_t* data, int dataLength) override;
 165 void didReceiveData(const SharedBuffer&, bool) override;
166166 void didFinishLoading(ResourceLoaderIdentifier) override;
167167 void didFail(const ResourceError&) override;
168168 void notifyIsDone(bool) final;

Source/WebKit/GPUProcess/media/RemoteMediaResource.cpp

3131#include "RemoteMediaPlayerProxy.h"
3232#include "RemoteMediaResourceManager.h"
3333#include <WebCore/ResourceResponse.h>
 34#include <WebCore/SharedBuffer.h>
3435
3536namespace WebKit {
3637

@@void RemoteMediaResource::dataSent(uint64_t bytesSent, uint64_t totalBytesToBeSe
9697 m_client->dataSent(*this, bytesSent, totalBytesToBeSent);
9798}
9899
99 void RemoteMediaResource::dataReceived(Ref<FragmentedSharedBuffer>&& data)
 100void RemoteMediaResource::dataReceived(const SharedBuffer& data)
100101{
101102 if (m_client)
102  m_client->dataReceived(*this, WTFMove(data));
 103 m_client->dataReceived(*this, data);
103104}
104105
105106void RemoteMediaResource::accessControlCheckFailed(const ResourceError& error)

Source/WebKit/GPUProcess/media/RemoteMediaResource.h

3535namespace WebCore {
3636class NetworkLoadMetrics;
3737class FragmentedSharedBuffer;
 38class SharedBuffer;
3839}
3940
4041namespace WebKit {

@@public:
5758 void responseReceived(const WebCore::ResourceResponse&, bool, CompletionHandler<void(WebCore::ShouldContinuePolicyCheck)>&&);
5859 void redirectReceived(WebCore::ResourceRequest&&, const WebCore::ResourceResponse&, CompletionHandler<void(WebCore::ResourceRequest&&)>&&);
5960 void dataSent(uint64_t, uint64_t);
60  void dataReceived(Ref<WebCore::FragmentedSharedBuffer>&&);
 61 void dataReceived(const WebCore::SharedBuffer&);
6162 void accessControlCheckFailed(const WebCore::ResourceError&);
6263 void loadFailed(const WebCore::ResourceError&);
6364 void loadFinished(const WebCore::NetworkLoadMetrics&);

Source/WebKit/NetworkProcess/Downloads/PendingDownload.h

@@private:
6868 bool isAllowedToAskUserForCredentials() const final { return m_isAllowedToAskUserForCredentials; }
6969 void willSendRedirectedRequest(WebCore::ResourceRequest&&, WebCore::ResourceRequest&& redirectRequest, WebCore::ResourceResponse&& redirectResponse) override;
7070 void didReceiveResponse(WebCore::ResourceResponse&&, ResponseCompletionHandler&&) override;
71  void didReceiveBuffer(Ref<WebCore::FragmentedSharedBuffer>&&, int reportedEncodedDataLength) override { };
 71 void didReceiveBuffer(const WebCore::FragmentedSharedBuffer&, int reportedEncodedDataLength) override { };
7272 void didFinishLoading(const WebCore::NetworkLoadMetrics&) override { };
7373 void didFailLoading(const WebCore::ResourceError&) override;
7474

Source/WebKit/NetworkProcess/NetworkCORSPreflightChecker.cpp

@@void NetworkCORSPreflightChecker::didReceiveResponse(WebCore::ResourceResponse&&
120120 completionHandler(PolicyAction::Use);
121121}
122122
123 void NetworkCORSPreflightChecker::didReceiveData(Ref<WebCore::FragmentedSharedBuffer>&&)
 123void NetworkCORSPreflightChecker::didReceiveData(const WebCore::SharedBuffer&)
124124{
125125 CORS_CHECKER_RELEASE_LOG("didReceiveData");
126126}

Source/WebKit/NetworkProcess/NetworkCORSPreflightChecker.h

3737namespace WebCore {
3838class ResourceError;
3939class SecurityOrigin;
 40class SharedBuffer;
4041}
4142
4243namespace WebKit {

@@private:
7172 void willPerformHTTPRedirection(WebCore::ResourceResponse&&, WebCore::ResourceRequest&&, RedirectCompletionHandler&&) final;
7273 void didReceiveChallenge(WebCore::AuthenticationChallenge&&, NegotiatedLegacyTLS, ChallengeCompletionHandler&&) final;
7374 void didReceiveResponse(WebCore::ResourceResponse&&, NegotiatedLegacyTLS, ResponseCompletionHandler&&) final;
74  void didReceiveData(Ref<WebCore::FragmentedSharedBuffer>&&) final;
 75 void didReceiveData(const WebCore::SharedBuffer&) final;
7576 void didCompleteWithError(const WebCore::ResourceError&, const WebCore::NetworkLoadMetrics&) final;
7677 void didSendData(uint64_t totalBytesSent, uint64_t totalBytesExpectedToSend) final;
7778 void wasBlocked() final;

Source/WebKit/NetworkProcess/NetworkDataTask.h

@@namespace WebCore {
4343class AuthenticationChallenge;
4444class ResourceError;
4545class ResourceResponse;
46 class FragmentedSharedBuffer;
 46class SharedBuffer;
4747}
4848
4949namespace WebKit {

@@public:
6363 virtual void willPerformHTTPRedirection(WebCore::ResourceResponse&&, WebCore::ResourceRequest&&, RedirectCompletionHandler&&) = 0;
6464 virtual void didReceiveChallenge(WebCore::AuthenticationChallenge&&, NegotiatedLegacyTLS, ChallengeCompletionHandler&&) = 0;
6565 virtual void didReceiveResponse(WebCore::ResourceResponse&&, NegotiatedLegacyTLS, ResponseCompletionHandler&&) = 0;
66  virtual void didReceiveData(Ref<WebCore::FragmentedSharedBuffer>&&) = 0;
 66 virtual void didReceiveData(const WebCore::SharedBuffer&) = 0;
6767 virtual void didCompleteWithError(const WebCore::ResourceError&, const WebCore::NetworkLoadMetrics&) = 0;
6868 virtual void didSendData(uint64_t totalBytesSent, uint64_t totalBytesExpectedToSend) = 0;
6969 virtual void wasBlocked() = 0;

Source/WebKit/NetworkProcess/NetworkLoad.cpp

@@void NetworkLoad::notifyDidReceiveResponse(ResourceResponse&& response, Negotiat
254254 m_client.get().didReceiveResponse(WTFMove(response), WTFMove(completionHandler));
255255}
256256
257 void NetworkLoad::didReceiveData(Ref<FragmentedSharedBuffer>&& buffer)
 257void NetworkLoad::didReceiveData(const WebCore::SharedBuffer& buffer)
258258{
259259 // FIXME: This should be the encoded data length, not the decoded data length.
260  auto size = buffer->size();
261  m_client.get().didReceiveBuffer(WTFMove(buffer), size);
 260 m_client.get().didReceiveBuffer(buffer, buffer.size());
262261}
263262
264263void NetworkLoad::didCompleteWithError(const ResourceError& error, const WebCore::NetworkLoadMetrics& networkLoadMetrics)

Source/WebKit/NetworkProcess/NetworkLoad.h

@@private:
8181 void willPerformHTTPRedirection(WebCore::ResourceResponse&&, WebCore::ResourceRequest&&, RedirectCompletionHandler&&) final;
8282 void didReceiveChallenge(WebCore::AuthenticationChallenge&&, NegotiatedLegacyTLS, ChallengeCompletionHandler&&) final;
8383 void didReceiveResponse(WebCore::ResourceResponse&&, NegotiatedLegacyTLS, ResponseCompletionHandler&&) final;
84  void didReceiveData(Ref<WebCore::FragmentedSharedBuffer>&&) final;
 84 void didReceiveData(const WebCore::SharedBuffer&) final;
8585 void didCompleteWithError(const WebCore::ResourceError&, const WebCore::NetworkLoadMetrics&) final;
8686 void didSendData(uint64_t totalBytesSent, uint64_t totalBytesExpectedToSend) final;
8787 void wasBlocked() final;

Source/WebKit/NetworkProcess/NetworkLoadClient.h

@@public:
5151 virtual void didSendData(unsigned long long bytesSent, unsigned long long totalBytesToBeSent) = 0;
5252 virtual void willSendRedirectedRequest(WebCore::ResourceRequest&&, WebCore::ResourceRequest&& redirectRequest, WebCore::ResourceResponse&& redirectResponse) = 0;
5353 virtual void didReceiveResponse(WebCore::ResourceResponse&&, ResponseCompletionHandler&&) = 0;
54  virtual void didReceiveBuffer(Ref<WebCore::FragmentedSharedBuffer>&&, int reportedEncodedDataLength) = 0;
 54 virtual void didReceiveBuffer(const WebCore::FragmentedSharedBuffer&, int reportedEncodedDataLength) = 0;
5555 virtual void didFinishLoading(const WebCore::NetworkLoadMetrics&) = 0;
5656 virtual void didFailLoading(const WebCore::ResourceError&) = 0;
5757 virtual void didBlockAuthenticationChallenge() { };

Source/WebKit/NetworkProcess/NetworkResourceLoader.cpp

@@void NetworkResourceLoader::sendDidReceiveResponsePotentiallyInNewBrowsingContex
863863 });
864864}
865865
866 void NetworkResourceLoader::didReceiveBuffer(Ref<FragmentedSharedBuffer>&& buffer, int reportedEncodedDataLength)
 866void NetworkResourceLoader::didReceiveBuffer(const WebCore::FragmentedSharedBuffer& buffer, int reportedEncodedDataLength)
867867{
868868 if (!m_numBytesReceived)
869  LOADER_RELEASE_LOG("didReceiveBuffer: Started receiving data (reportedEncodedDataLength=%d)", reportedEncodedDataLength);
870  m_numBytesReceived += buffer->size();
 869 LOADER_RELEASE_LOG("didReceiveData: Started receiving data (reportedEncodedDataLength=%d)", reportedEncodedDataLength);
 870 m_numBytesReceived += buffer.size();
871871
872872 ASSERT(!m_cacheEntryForValidation);
873873
874874 if (m_bufferedDataForCache) {
875875 // Prevent memory growth in case of streaming data and limit size of entries in the cache.
876876 const size_t maximumCacheBufferSize = m_cache->capacity() / 8;
877  if (m_bufferedDataForCache.size() + buffer->size() <= maximumCacheBufferSize)
878  m_bufferedDataForCache.append(buffer.get());
 877 if (m_bufferedDataForCache.size() + buffer.size() <= maximumCacheBufferSize)
 878 m_bufferedDataForCache.append(buffer);
879879 else
880880 m_bufferedDataForCache.reset();
881881 }
882882 if (isCrossOriginPrefetch())
883883 return;
884884 // FIXME: At least on OS X Yosemite we always get -1 from the resource handle.
885  unsigned encodedDataLength = reportedEncodedDataLength >= 0 ? reportedEncodedDataLength : buffer->size();
 885 unsigned encodedDataLength = reportedEncodedDataLength >= 0 ? reportedEncodedDataLength : buffer.size();
886886
887887 if (m_bufferedData) {
888  m_bufferedData.append(buffer.get());
 888 m_bufferedData.append(buffer);
889889 m_bufferedDataEncodedDataLength += encodedDataLength;
890890 startBufferingTimerIfNeeded();
891891 return;

@@void NetworkResourceLoader::bufferingTimerFired()
12731273 m_bufferedDataEncodedDataLength = 0;
12741274}
12751275
1276 void NetworkResourceLoader::sendBuffer(FragmentedSharedBuffer& buffer, size_t encodedDataLength)
 1276void NetworkResourceLoader::sendBuffer(const FragmentedSharedBuffer& buffer, size_t encodedDataLength)
12771277{
12781278 ASSERT(!isSynchronous());
12791279

Source/WebKit/NetworkProcess/NetworkResourceLoader.h

@@public:
115115 bool isAllowedToAskUserForCredentials() const final { return m_isAllowedToAskUserForCredentials; }
116116 void willSendRedirectedRequest(WebCore::ResourceRequest&&, WebCore::ResourceRequest&& redirectRequest, WebCore::ResourceResponse&&) final;
117117 void didReceiveResponse(WebCore::ResourceResponse&&, ResponseCompletionHandler&&) final;
118  void didReceiveBuffer(Ref<WebCore::FragmentedSharedBuffer>&&, int reportedEncodedDataLength) final;
 118 void didReceiveBuffer(const WebCore::FragmentedSharedBuffer&, int reportedEncodedDataLength) final;
119119 void didFinishLoading(const WebCore::NetworkLoadMetrics&) final;
120120 void didFailLoading(const WebCore::ResourceError&) final;
121121 void didBlockAuthenticationChallenge() final;

@@private:
193193
194194 void startBufferingTimerIfNeeded();
195195 void bufferingTimerFired();
196  void sendBuffer(WebCore::FragmentedSharedBuffer&, size_t encodedDataLength);
 196 void sendBuffer(const WebCore::FragmentedSharedBuffer&, size_t encodedDataLength);
197197
198198 void consumeSandboxExtensions();
199199 void invalidateSandboxExtensions();

Source/WebKit/NetworkProcess/PingLoad.cpp

@@void PingLoad::didReceiveResponse(ResourceResponse&& response, NegotiatedLegacyT
172172 didFinish({ }, response);
173173}
174174
175 void PingLoad::didReceiveData(Ref<FragmentedSharedBuffer>&&)
 175void PingLoad::didReceiveData(const SharedBuffer&)
176176{
177177 PING_RELEASE_LOG("didReceiveData");
178178 ASSERT_NOT_REACHED();

Source/WebKit/NetworkProcess/PingLoad.h

@@private:
5454 void willPerformHTTPRedirection(WebCore::ResourceResponse&&, WebCore::ResourceRequest&&, RedirectCompletionHandler&&) final;
5555 void didReceiveChallenge(WebCore::AuthenticationChallenge&&, NegotiatedLegacyTLS, ChallengeCompletionHandler&&) final;
5656 void didReceiveResponse(WebCore::ResourceResponse&&, NegotiatedLegacyTLS, ResponseCompletionHandler&&) final;
57  void didReceiveData(Ref<WebCore::FragmentedSharedBuffer>&&) final;
 57 void didReceiveData(const WebCore::SharedBuffer&) final;
5858 void didCompleteWithError(const WebCore::ResourceError&, const WebCore::NetworkLoadMetrics&) final;
5959 void didSendData(uint64_t totalBytesSent, uint64_t totalBytesExpectedToSend) final;
6060 void wasBlocked() final;

Source/WebKit/NetworkProcess/PreconnectTask.cpp

@@void PreconnectTask::didReceiveResponse(ResourceResponse&& response, ResponseCom
7979 completionHandler(PolicyAction::Ignore);
8080}
8181
82 void PreconnectTask::didReceiveBuffer(Ref<FragmentedSharedBuffer>&&, int reportedEncodedDataLength)
 82void PreconnectTask::didReceiveBuffer(const FragmentedSharedBuffer&, int reportedEncodedDataLength)
8383{
8484 ASSERT_NOT_REACHED();
8585}

Source/WebKit/NetworkProcess/PreconnectTask.h

@@private:
5555 void didSendData(unsigned long long bytesSent, unsigned long long totalBytesToBeSent) final;
5656 void willSendRedirectedRequest(WebCore::ResourceRequest&&, WebCore::ResourceRequest&& redirectRequest, WebCore::ResourceResponse&& redirectResponse) final;
5757 void didReceiveResponse(WebCore::ResourceResponse&&, ResponseCompletionHandler&&) final;
58  void didReceiveBuffer(Ref<WebCore::FragmentedSharedBuffer>&&, int reportedEncodedDataLength) final;
 58 void didReceiveBuffer(const WebCore::FragmentedSharedBuffer&, int reportedEncodedDataLength) final;
5959 void didFinishLoading(const WebCore::NetworkLoadMetrics&) final;
6060 void didFailLoading(const WebCore::ResourceError&) final;
6161

Source/WebKit/NetworkProcess/ServiceWorker/ServiceWorkerDownloadTask.cpp

3131#include "DownloadManager.h"
3232#include "Logging.h"
3333#include "NetworkProcess.h"
 34#include "SharedBufferCopy.h"
3435#include "WebErrors.h"
3536#include "WebSWContextManagerConnectionMessages.h"
3637#include "WebSWServerToContextConnection.h"

@@void ServiceWorkerDownloadTask::start()
173174 downloadPtr->didCreateDestination(m_pendingDownloadLocation);
174175}
175176
176 void ServiceWorkerDownloadTask::didReceiveData(const IPC::DataReference& data, int64_t encodedDataLength)
 177void ServiceWorkerDownloadTask::didReceiveData(const IPC::SharedBufferCopy& data, int64_t encodedDataLength)
177178{
178179 ASSERT(!isMainRunLoop());
179180

Source/WebKit/NetworkProcess/ServiceWorker/ServiceWorkerDownloadTask.h

3737
3838namespace IPC {
3939class FormDataReference;
 40class SharedBufferCopy;
4041}
4142
4243namespace WebKit {

@@private:
6667 ServiceWorkerDownloadTask(NetworkSession&, NetworkDataTaskClient&, WebSWServerToContextConnection&, WebCore::ServiceWorkerIdentifier, WebCore::SWServerConnectionIdentifier, WebCore::FetchIdentifier, const WebCore::ResourceRequest&, DownloadID);
6768
6869 // IPC Message
69  void didReceiveData(const IPC::DataReference&, int64_t encodedDataLength);
 70 void didReceiveData(const IPC::SharedBufferCopy&, int64_t encodedDataLength);
7071 void didReceiveFormData(const IPC::FormDataReference&);
7172 void didFinish();
7273 void didFail(WebCore::ResourceError&&);

Source/WebKit/NetworkProcess/ServiceWorker/ServiceWorkerDownloadTask.messages.in

2424
2525messages -> ServiceWorkerDownloadTask NotRefCounted {
2626 DidFail(WebCore::ResourceError error)
27  DidReceiveData(IPC::SharedBufferDataReference data, int64_t encodedDataLength)
 27 DidReceiveData(IPC::SharedBufferCopy data, int64_t encodedDataLength)
2828 DidReceiveFormData(IPC::FormDataReference data)
2929 DidFinish()
3030}

Source/WebKit/NetworkProcess/ServiceWorker/ServiceWorkerFetchTask.cpp

3636#include "NetworkResourceLoader.h"
3737#include "NetworkSession.h"
3838#include "ServiceWorkerNavigationPreloader.h"
39 #include "SharedBufferDataReference.h"
 39#include "SharedBufferCopy.h"
4040#include "WebCoreArgumentCoders.h"
4141#include "WebResourceLoaderMessages.h"
4242#include "WebSWContextManagerConnectionMessages.h"

@@void ServiceWorkerFetchTask::processResponse(ResourceResponse&& response, bool n
225225 m_loader.setResponse(WTFMove(response));
226226}
227227
228 void ServiceWorkerFetchTask::didReceiveData(const IPC::DataReference& data, int64_t encodedDataLength)
 228void ServiceWorkerFetchTask::didReceiveData(const IPC::SharedBufferCopy& data, int64_t encodedDataLength)
229229{
230230 if (m_isDone)
231231 return;

@@void ServiceWorkerFetchTask::loadBodyFromPreloader()
401401 didFinishWithMetrics(m_preloader->networkLoadMetrics());
402402 return;
403403 }
404  didReceiveData(IPC::DataReference { chunk->data(), chunk->size() }, length);
 404 didReceiveData(Ref { const_cast<WebCore::FragmentedSharedBuffer&>(*chunk) }, length);
405405 });
406406}
407407

Source/WebKit/NetworkProcess/ServiceWorker/ServiceWorkerFetchTask.h

@@namespace IPC {
4848class Connection;
4949class Decoder;
5050class FormDataReference;
 51class SharedBufferCopy;
5152}
5253
5354namespace WebCore {

@@private:
9394 enum class ShouldSetSource : bool { No, Yes };
9495 void didReceiveRedirectResponse(WebCore::ResourceResponse&&);
9596 void didReceiveResponse(WebCore::ResourceResponse&&, bool needsContinueDidReceiveResponseMessage);
96  void didReceiveData(const IPC::DataReference&, int64_t encodedDataLength);
 97 void didReceiveData(const IPC::SharedBufferCopy&, int64_t encodedDataLength);
9798 void didReceiveFormData(const IPC::FormDataReference&);
9899 void didFinish();
99100 void didFinishWithMetrics(const WebCore::NetworkLoadMetrics&);

Source/WebKit/NetworkProcess/ServiceWorker/ServiceWorkerFetchTask.messages.in

@@messages -> ServiceWorkerFetchTask NotRefCounted {
2727 DidFail(WebCore::ResourceError error)
2828 DidReceiveRedirectResponse(WebCore::ResourceResponse response)
2929 DidReceiveResponse(WebCore::ResourceResponse response, bool needsContinueDidReceiveResponseMessage)
30  DidReceiveData(IPC::SharedBufferDataReference data, int64_t encodedDataLength)
 30 DidReceiveData(IPC::SharedBufferCopy data, int64_t encodedDataLength)
3131 DidReceiveFormData(IPC::FormDataReference data)
3232 DidFinish()
3333}

Source/WebKit/NetworkProcess/ServiceWorker/ServiceWorkerNavigationPreloader.cpp

@@void ServiceWorkerNavigationPreloader::didReceiveResponse(ResourceResponse&& res
175175 callback();
176176}
177177
178 void ServiceWorkerNavigationPreloader::didReceiveBuffer(Ref<FragmentedSharedBuffer>&& buffer, int reportedEncodedDataLength)
 178void ServiceWorkerNavigationPreloader::didReceiveBuffer(const FragmentedSharedBuffer& buffer, int reportedEncodedDataLength)
179179{
180180 if (m_bodyCallback)
181  m_bodyCallback(buffer->makeContiguous(), reportedEncodedDataLength);
 181 m_bodyCallback(RefPtr { &buffer }, reportedEncodedDataLength);
182182}
183183
184184void ServiceWorkerNavigationPreloader::didFinishLoading(const NetworkLoadMetrics& networkLoadMetrics)

Source/WebKit/NetworkProcess/ServiceWorker/ServiceWorkerNavigationPreloader.h

3636
3737namespace WebCore {
3838class NetworkLoadMetrics;
 39class FragmentedSharedBuffer;
3940}
4041
4142namespace WebKit {

@@public:
5455
5556 using ResponseCallback = Function<void()>;
5657 void waitForResponse(ResponseCallback&&);
57  using BodyCallback = Function<void(RefPtr<WebCore::SharedBuffer>&&, int reportedEncodedDataLength)>;
 58 using BodyCallback = Function<void(RefPtr<const WebCore::FragmentedSharedBuffer>&&, int reportedEncodedDataLength)>;
5859 void waitForBody(BodyCallback&&);
5960
6061 const WebCore::ResourceError& error() const { return m_error; }

@@private:
7172 bool isAllowedToAskUserForCredentials() const final { return false; }
7273 void willSendRedirectedRequest(WebCore::ResourceRequest&&, WebCore::ResourceRequest&& redirectRequest, WebCore::ResourceResponse&& redirectResponse) final;
7374 void didReceiveResponse(WebCore::ResourceResponse&&, ResponseCompletionHandler&&) final;
74  void didReceiveBuffer(Ref<WebCore::FragmentedSharedBuffer>&&, int reportedEncodedDataLength) final;
 75 void didReceiveBuffer(const WebCore::FragmentedSharedBuffer&, int reportedEncodedDataLength) final;
7576 void didFinishLoading(const WebCore::NetworkLoadMetrics&) final;
7677 void didFailLoading(const WebCore::ResourceError&) final;
7778 bool shouldCaptureExtraNetworkLoadMetrics() const final { return m_shouldCaptureExtraNetworkLoadMetrics; }

Source/WebKit/NetworkProcess/ServiceWorker/ServiceWorkerSoftUpdateLoader.cpp

@@ResourceError ServiceWorkerSoftUpdateLoader::processResponse(const ResourceRespo
177177 return { };
178178}
179179
180 void ServiceWorkerSoftUpdateLoader::didReceiveBuffer(Ref<FragmentedSharedBuffer>&& buffer, int reportedEncodedDataLength)
 180void ServiceWorkerSoftUpdateLoader::didReceiveBuffer(const WebCore::FragmentedSharedBuffer& buffer, int reportedEncodedDataLength)
181181{
182182 if (!m_decoder) {
183183 if (!m_responseEncoding.isEmpty())

@@void ServiceWorkerSoftUpdateLoader::didReceiveBuffer(Ref<FragmentedSharedBuffer>
186186 m_decoder = TextResourceDecoder::create("text/javascript"_s, "UTF-8");
187187 }
188188
189  if (auto size = buffer->size())
190  m_script.append(m_decoder->decode(buffer->makeContiguous()->data(), size));
 189 if (!buffer.isEmpty()) {
 190 buffer.forEachSegment([&](auto& segment) {
 191 m_script.append(m_decoder->decode(segment.data(), segment.size()));
 192 });
 193 }
191194}
192195
193196void ServiceWorkerSoftUpdateLoader::didFinishLoading(const WebCore::NetworkLoadMetrics&)

Source/WebKit/NetworkProcess/ServiceWorker/ServiceWorkerSoftUpdateLoader.h

@@private:
6464 bool isAllowedToAskUserForCredentials() const final { return false; }
6565 void willSendRedirectedRequest(WebCore::ResourceRequest&&, WebCore::ResourceRequest&& redirectRequest, WebCore::ResourceResponse&& redirectResponse) final;
6666 void didReceiveResponse(WebCore::ResourceResponse&&, ResponseCompletionHandler&&) final;
67  void didReceiveBuffer(Ref<WebCore::FragmentedSharedBuffer>&&, int reportedEncodedDataLength) final;
 67 void didReceiveBuffer(const WebCore::FragmentedSharedBuffer&, int reportedEncodedDataLength) final;
6868 void didFinishLoading(const WebCore::NetworkLoadMetrics&) final;
6969 void didFailLoading(const WebCore::ResourceError&) final;
7070

Source/WebKit/NetworkProcess/cache/NetworkCacheSpeculativeLoad.cpp

@@void SpeculativeLoad::didReceiveResponse(ResourceResponse&& receivedResponse, Re
120120 completionHandler(PolicyAction::Use);
121121}
122122
123 void SpeculativeLoad::didReceiveBuffer(Ref<FragmentedSharedBuffer>&& buffer, int reportedEncodedDataLength)
 123void SpeculativeLoad::didReceiveBuffer(const WebCore::FragmentedSharedBuffer& buffer, int reportedEncodedDataLength)
124124{
125125 ASSERT(!m_cacheEntry);
126126
127127 if (m_bufferedDataForCache) {
128128 // Prevent memory growth in case of streaming data.
129129 const size_t maximumCacheBufferSize = 10 * 1024 * 1024;
130  if (m_bufferedDataForCache.size() + buffer->size() <= maximumCacheBufferSize)
131  m_bufferedDataForCache.append(buffer.get());
 130 if (m_bufferedDataForCache.size() + buffer.size() <= maximumCacheBufferSize)
 131 m_bufferedDataForCache.append(buffer);
132132 else
133133 m_bufferedDataForCache.reset();
134134 }

Source/WebKit/NetworkProcess/cache/NetworkCacheSpeculativeLoad.h

@@private:
6161 bool isAllowedToAskUserForCredentials() const final { return false; }
6262 void willSendRedirectedRequest(WebCore::ResourceRequest&&, WebCore::ResourceRequest&& redirectRequest, WebCore::ResourceResponse&& redirectResponse) override;
6363 void didReceiveResponse(WebCore::ResourceResponse&&, ResponseCompletionHandler&&) override;
64  void didReceiveBuffer(Ref<WebCore::FragmentedSharedBuffer>&&, int reportedEncodedDataLength) override;
 64 void didReceiveBuffer(const WebCore::FragmentedSharedBuffer&, int reportedEncodedDataLength) override;
6565 void didFinishLoading(const WebCore::NetworkLoadMetrics&) override;
6666 void didFailLoading(const WebCore::ResourceError&) override;
6767

Source/WebKit/NetworkProcess/cocoa/NetworkDataTaskCocoa.h

@@OBJC_CLASS NSMutableURLRequest;
3838
3939namespace WebCore {
4040class RegistrableDomain;
 41class SharedBuffer;
4142}
4243
4344namespace WebKit {

@@public:
6263 void didNegotiateModernTLS(const URL&);
6364 void didCompleteWithError(const WebCore::ResourceError&, const WebCore::NetworkLoadMetrics&);
6465 void didReceiveResponse(WebCore::ResourceResponse&&, NegotiatedLegacyTLS, ResponseCompletionHandler&&);
65  void didReceiveData(Ref<WebCore::FragmentedSharedBuffer>&&);
 66 void didReceiveData(const WebCore::SharedBuffer&);
6667
6768 void willPerformHTTPRedirection(WebCore::ResourceResponse&&, WebCore::ResourceRequest&&, RedirectCompletionHandler&&);
6869 void transferSandboxExtensionToDownload(Download&);

Source/WebKit/NetworkProcess/cocoa/NetworkDataTaskCocoa.mm

@@void NetworkDataTaskCocoa::didCompleteWithError(const WebCore::ResourceError& er
443443 m_client->didCompleteWithError(error, networkLoadMetrics);
444444}
445445
446 void NetworkDataTaskCocoa::didReceiveData(Ref<WebCore::FragmentedSharedBuffer>&& data)
 446void NetworkDataTaskCocoa::didReceiveData(const WebCore::SharedBuffer& data)
447447{
448  WTFEmitSignpost(m_task.get(), "DataTask", "received %zd bytes", data->size());
 448 WTFEmitSignpost(m_task.get(), "DataTask", "received %zd bytes", data.size());
449449
450450 if (m_client)
451  m_client->didReceiveData(WTFMove(data));
 451 m_client->didReceiveData(data);
452452}
453453
454454void NetworkDataTaskCocoa::didReceiveResponse(WebCore::ResourceResponse&& response, NegotiatedLegacyTLS negotiatedLegacyTLS, WebKit::ResponseCompletionHandler&& completionHandler)

Source/WebKit/NetworkProcess/curl/NetworkDataTaskCurl.cpp

3737#include <WebCore/NotImplemented.h>
3838#include <WebCore/ResourceError.h>
3939#include <WebCore/SameSiteInfo.h>
 40#include <WebCore/SharedBuffer.h>
4041#include <WebCore/ShouldRelaxThirdPartyCookieBlocking.h>
4142#include <WebCore/SynchronousLoaderClient.h>
4243#include <pal/text/TextEncoding.h>

@@void NetworkDataTaskCurl::curlDidReceiveResponse(CurlRequest& request, CurlRespo
172173 invokeDidReceiveResponse();
173174}
174175
175 void NetworkDataTaskCurl::curlDidReceiveBuffer(CurlRequest&, Ref<FragmentedSharedBuffer>&& buffer)
 176void NetworkDataTaskCurl::curlDidReceiveData(CurlRequest&, const SharedBuffer& buffer)
176177{
177178 Ref protectedThis { *this };
178179 if (state() == State::Canceling || state() == State::Completed || (!m_client && !isDownload()))
179180 return;
180181
181  m_client->didReceiveData(WTFMove(buffer));
 182 m_client->didReceiveData(buffer);
182183}
183184
184185void NetworkDataTaskCurl::curlDidComplete(CurlRequest&, NetworkLoadMetrics&& networkLoadMetrics)

Source/WebKit/NetworkProcess/curl/NetworkDataTaskCurl.h

3636
3737namespace WebCore {
3838class CurlRequest;
 39class SharedBuffer;
3940}
4041
4142namespace WebKit {

@@private:
6869 Ref<WebCore::CurlRequest> createCurlRequest(WebCore::ResourceRequest&&, RequestStatus = RequestStatus::NewRequest);
6970 void curlDidSendData(WebCore::CurlRequest&, unsigned long long, unsigned long long) override;
7071 void curlDidReceiveResponse(WebCore::CurlRequest&, WebCore::CurlResponse&&) override;
71  void curlDidReceiveBuffer(WebCore::CurlRequest&, Ref<WebCore::FragmentedSharedBuffer>&&) override;
 72 void curlDidReceiveData(WebCore::CurlRequest&, const WebCore::SharedBuffer&) override;
7273 void curlDidComplete(WebCore::CurlRequest&, WebCore::NetworkLoadMetrics&&) override;
7374 void curlDidFailWithError(WebCore::CurlRequest&, WebCore::ResourceError&&, WebCore::CertificateInfo&&) override;
7475

Source/WebKit/Platform/IPC/SharedBufferCopy.h

2828
2929#pragma once
3030
 31#include "DataReference.h"
3132#include <WebCore/SharedBuffer.h>
3233
3334namespace IPC {

@@public:
5354 RefPtr<WebCore::SharedBuffer>& buffer() { return m_buffer; }
5455 const RefPtr<WebCore::SharedBuffer>& buffer() const { return m_buffer; }
5556
 57 // TODO : SharedBufferCopy should contain a FragmentedSharedBuffer and those should go away.
 58 // Allows to not unecessarily flatten the SharedBuffer before sending it over IPC.
5659 const uint8_t* data() const { return m_buffer ? m_buffer->data() : nullptr; }
5760 size_t size() const { return m_buffer ? m_buffer->size() : 0; }
5861 bool isEmpty() const { return m_buffer ? m_buffer->isEmpty() : true; }

Source/WebKit/Shared/mac/MediaFormatReader/MediaFormatReader.cpp

@@void MediaFormatReader::didParseTracks(SourceBufferPrivateClient::Initialization
185185 ASSERT(!isMainRunLoop());
186186
187187 Locker locker { m_parseTracksLock };
188  ASSERT(!m_parseTracksStatus);
189  ASSERT(m_duration.isInvalid());
190  ASSERT(m_trackReaders.isEmpty());
 188 ASSERT(!m_parseTracksStatus || (m_init && errorCode));
 189 ASSERT(m_duration.isInvalid() || (m_init && errorCode));
 190 ASSERT(m_trackReaders.isEmpty() || (m_init && errorCode));
191191
192192 ALWAYS_LOG_IF_POSSIBLE(LOGIDENTIFIER);
193193 if (errorCode)

@@void MediaFormatReader::didParseTracks(SourceBufferPrivateClient::Initialization
221221 }
222222
223223 m_parseTracksCondition.notifyAll();
 224 m_init = true;
224225}
225226
226227void MediaFormatReader::didProvideMediaData(Ref<MediaSample>&& mediaSample, uint64_t trackID, const String&)

Source/WebKit/Shared/mac/MediaFormatReader/MediaFormatReader.h

@@private:
8787 Vector<Ref<MediaTrackReader>> m_trackReaders WTF_GUARDED_BY_LOCK(m_parseTracksLock);
8888 RefPtr<const Logger> m_logger;
8989 const void* m_logIdentifier;
 90 bool m_init { false };
9091};
9192
9293constexpr MediaFormatReader::WrapperClass MediaFormatReader::wrapperClass()

Source/WebKit/UIProcess/WebURLSchemeTask.cpp

@@auto WebURLSchemeTask::didReceiveResponse(const ResourceResponse& response) -> E
168168 return ExceptionType::None;
169169}
170170
171 auto WebURLSchemeTask::didReceiveData(Ref<FragmentedSharedBuffer>&& buffer) -> ExceptionType
 171auto WebURLSchemeTask::didReceiveData(const SharedBuffer& buffer) -> ExceptionType
172172{
173173 ASSERT(RunLoop::isMain());
174174

@@auto WebURLSchemeTask::didReceiveData(Ref<FragmentedSharedBuffer>&& buffer) -> E
187187 m_dataSent = true;
188188
189189 if (isSync()) {
190  m_syncData.append(WTFMove(buffer));
 190 m_syncData.append(buffer);
191191 return ExceptionType::None;
192192 }
193193
194  m_process->send(Messages::WebPage::URLSchemeTaskDidReceiveData(m_urlSchemeHandler->identifier(), m_resourceLoaderID, buffer.get()), m_webPageID);
 194 m_process->send(Messages::WebPage::URLSchemeTaskDidReceiveData(m_urlSchemeHandler->identifier(), m_resourceLoaderID, buffer), m_webPageID);
195195 return ExceptionType::None;
196196}
197197

Source/WebKit/UIProcess/WebURLSchemeTask.h

@@public:
8383 ExceptionType willPerformRedirection(WebCore::ResourceResponse&&, WebCore::ResourceRequest&&, Function<void(WebCore::ResourceRequest&&)>&&);
8484 ExceptionType didPerformRedirection(WebCore::ResourceResponse&&, WebCore::ResourceRequest&&);
8585 ExceptionType didReceiveResponse(const WebCore::ResourceResponse&);
86  ExceptionType didReceiveData(Ref<WebCore::FragmentedSharedBuffer>&&);
 86 ExceptionType didReceiveData(const WebCore::SharedBuffer&);
8787 ExceptionType didComplete(const WebCore::ResourceError&);
8888
8989 void stop();

Source/WebKit/WebProcess/GPU/media/RemoteMediaResourceProxy.cpp

@@void RemoteMediaResourceProxy::dataSent(WebCore::PlatformMediaResource&, unsigne
7272 m_connection->send(Messages::RemoteMediaResourceManager::DataSent(m_id, bytesSent, totalBytesToBeSent), 0);
7373}
7474
75 void RemoteMediaResourceProxy::dataReceived(WebCore::PlatformMediaResource&, const uint8_t* data, int length)
 75void RemoteMediaResourceProxy::dataReceived(WebCore::PlatformMediaResource&, const WebCore::SharedBuffer& buffer)
7676{
77  auto sharedMemory = SharedMemory::allocate(length);
 77 auto sharedMemory = SharedMemory::copyBuffer(buffer);
7878 if (!sharedMemory)
7979 return;
8080
81  auto sharedMemoryPtr = static_cast<char*>(sharedMemory->data());
82  memcpy(sharedMemoryPtr, data, length);
83 
8481 SharedMemory::Handle handle;
8582 sharedMemory->createHandle(handle, SharedMemory::Protection::ReadOnly);
8683 // Take ownership of shared memory and mark it as media-related memory.
8784 handle.takeOwnershipOfMemory(MemoryLedger::Media);
88  m_connection->send(Messages::RemoteMediaResourceManager::DataReceived(m_id, SharedMemory::IPCHandle { WTFMove(handle), static_cast<uint64_t>(length) }), 0);
 85 m_connection->send(Messages::RemoteMediaResourceManager::DataReceived(m_id, SharedMemory::IPCHandle { WTFMove(handle), buffer.size() }), 0);
8986}
9087
9188void RemoteMediaResourceProxy::accessControlCheckFailed(WebCore::PlatformMediaResource&, const WebCore::ResourceError& error)

Source/WebKit/WebProcess/GPU/media/RemoteMediaResourceProxy.h

@@private:
4747 void redirectReceived(WebCore::PlatformMediaResource&, WebCore::ResourceRequest&&, const WebCore::ResourceResponse&, CompletionHandler<void(WebCore::ResourceRequest&&)>&&) final;
4848 bool shouldCacheResponse(WebCore::PlatformMediaResource&, const WebCore::ResourceResponse&) final;
4949 void dataSent(WebCore::PlatformMediaResource&, unsigned long long, unsigned long long) final;
50  void dataReceived(WebCore::PlatformMediaResource&, const uint8_t*, int) final;
 50 void dataReceived(WebCore::PlatformMediaResource&, const WebCore::SharedBuffer&) final;
5151 void accessControlCheckFailed(WebCore::PlatformMediaResource&, const WebCore::ResourceError&) final;
5252 void loadFailed(WebCore::PlatformMediaResource&, const WebCore::ResourceError&) final;
5353 void loadFinished(WebCore::PlatformMediaResource&, const WebCore::NetworkLoadMetrics&) final;

Source/WebKit/WebProcess/Network/WebResourceLoader.cpp

3030#include "Logging.h"
3131#include "NetworkProcessConnection.h"
3232#include "NetworkResourceLoaderMessages.h"
 33#include "SharedBufferCopy.h"
3334#include "WebCoreArgumentCoders.h"
3435#include "WebErrors.h"
3536#include "WebFrame.h"

@@void WebResourceLoader::didReceiveResponse(const ResourceResponse& response, boo
200201 m_coreLoader->didReceiveResponse(response, WTFMove(policyDecisionCompletionHandler));
201202}
202203
203 void WebResourceLoader::didReceiveData(const IPC::DataReference& data, int64_t encodedDataLength)
 204void WebResourceLoader::didReceiveData(const IPC::SharedBufferCopy& data, int64_t encodedDataLength)
204205{
205206 LOG(Network, "(WebProcess) WebResourceLoader::didReceiveData of size %lu for '%s'", data.size(), m_coreLoader->url().string().latin1().data());
206207 ASSERT_WITH_MESSAGE(!m_isProcessingNetworkResponse, "Network process should not send data until we've validated the response");
207208
208209 if (UNLIKELY(m_interceptController.isIntercepting(m_coreLoader->identifier()))) {
209  auto buffer = SharedBuffer::create(data.data(), data.size());
210  m_interceptController.defer(m_coreLoader->identifier(), [this, protectedThis = Ref { *this }, buffer = WTFMove(buffer), encodedDataLength]() mutable {
 210 m_interceptController.defer(m_coreLoader->identifier(), [this, protectedThis = Ref { *this }, buffer = data.buffer(), encodedDataLength]() mutable {
211211 if (m_coreLoader)
212  didReceiveData({ buffer->data(), buffer->size() }, encodedDataLength);
 212 didReceiveData(WTFMove(buffer), encodedDataLength);
213213 });
214214 return;
215215 }

@@void WebResourceLoader::didReceiveData(const IPC::DataReference& data, int64_t e
218218 WEBRESOURCELOADER_RELEASE_LOG("didReceiveData: Started receiving data");
219219 m_numBytesReceived += data.size();
220220
221  m_coreLoader->didReceiveData(data.data(), data.size(), encodedDataLength, DataPayloadBytes);
 221 auto buffer = data.buffer() ? Ref { *data.buffer() } : SharedBuffer::create();
 222 m_coreLoader->didReceiveData(buffer, encodedDataLength, DataPayloadBytes);
222223}
223224
224225void WebResourceLoader::didFinishResourceLoad(const NetworkLoadMetrics& networkLoadMetrics)

@@void WebResourceLoader::didReceiveResource(const ShareableResource::Handle& hand
306307 LOG(Network, "(WebProcess) WebResourceLoader::didReceiveResource for '%s'", m_coreLoader->url().string().latin1().data());
307308 WEBRESOURCELOADER_RELEASE_LOG("didReceiveResource:");
308309
309  RefPtr<FragmentedSharedBuffer> buffer = handle.tryWrapInSharedBuffer();
 310 RefPtr<SharedBuffer> buffer = handle.tryWrapInSharedBuffer();
310311
311312 if (!buffer) {
312313 LOG_ERROR("Unable to create buffer from ShareableResource sent from the network process.");

@@void WebResourceLoader::didReceiveResource(const ShareableResource::Handle& hand
323324
324325 // Only send data to the didReceiveData callback if it exists.
325326 if (unsigned bufferSize = buffer->size())
326  m_coreLoader->didReceiveBuffer(buffer.releaseNonNull(), bufferSize, DataPayloadWholeResource);
 327 m_coreLoader->didReceiveData(buffer.releaseNonNull(), bufferSize, DataPayloadWholeResource);
327328
328329 if (!m_coreLoader)
329330 return;

Source/WebKit/WebProcess/Network/WebResourceLoader.h

3939
4040namespace IPC {
4141class FormDataReference;
 42class SharedBufferCopy;
4243}
4344
4445namespace WebCore {

@@private:
8081 void willSendRequest(WebCore::ResourceRequest&&, IPC::FormDataReference&& requestBody, WebCore::ResourceResponse&&);
8182 void didSendData(uint64_t bytesSent, uint64_t totalBytesToBeSent);
8283 void didReceiveResponse(const WebCore::ResourceResponse&, bool needsContinueDidReceiveResponseMessage);
83  void didReceiveData(const IPC::DataReference&, int64_t encodedDataLength);
 84 void didReceiveData(const IPC::SharedBufferCopy& data, int64_t encodedDataLength);
8485 void didFinishResourceLoad(const WebCore::NetworkLoadMetrics&);
8586 void didFailResourceLoad(const WebCore::ResourceError&);
8687 void didFailServiceWorkerLoad(const WebCore::ResourceError&);

Source/WebKit/WebProcess/Network/WebResourceLoader.messages.in

@@messages -> WebResourceLoader LegacyReceiver {
2424 WillSendRequest(WebCore::ResourceRequest request, IPC::FormDataReference requestBody, WebCore::ResourceResponse redirectResponse)
2525 DidSendData(uint64_t bytesSent, uint64_t totalBytesToBeSent)
2626 DidReceiveResponse(WebCore::ResourceResponse response, bool needsContinueDidReceiveResponseMessage)
27  DidReceiveData(IPC::SharedBufferDataReference data, int64_t encodedDataLength)
 27 DidReceiveData(IPC::SharedBufferCopy data, int64_t encodedDataLength)
2828 DidFinishResourceLoad(WebCore::NetworkLoadMetrics networkLoadMetrics)
2929 DidFailResourceLoad(WebCore::ResourceError error)
3030 DidFailServiceWorkerLoad(WebCore::ResourceError error)

Source/WebKit/WebProcess/Plugins/PDF/PDFPlugin.h

@@namespace WebCore {
6565class AXObjectCache;
6666class Element;
6767struct PluginInfo;
 68class SharedBuffer;
6869}
6970
7071namespace WTF {

@@private:
176177 void didEvaluateJavaScript(uint64_t requestID, const String& result) final;
177178 void streamWillSendRequest(uint64_t streamID, const URL& requestURL, const URL& responseURL, int responseStatus) final { }
178179 void streamDidReceiveResponse(uint64_t streamID, const URL& responseURL, uint32_t streamLength, uint32_t lastModifiedTime, const String& mimeType, const String& headers, const String& suggestedFileName) final;
179  void streamDidReceiveData(uint64_t streamID, const uint8_t* bytes, int length) final;
 180 void streamDidReceiveData(uint64_t streamID, const WebCore::SharedBuffer&) final;
180181 void streamDidFinishLoading(uint64_t streamID) final;
181182 void streamDidFail(uint64_t streamID, bool wasCancelled) final;
182183 void manualStreamDidReceiveResponse(const URL& responseURL, uint32_t streamLength, uint32_t lastModifiedTime, const WTF::String& mimeType, const WTF::String& headers, const String& suggestedFileName) final;
183  void manualStreamDidReceiveData(const uint8_t* bytes, int length) final;
 184 void manualStreamDidReceiveData(const WebCore::SharedBuffer&) final;
184185 void manualStreamDidFinishLoading() final;
185186 void manualStreamDidFail(bool wasCancelled) final;
186187 bool handleMouseEvent(const WebMouseEvent&) final;

@@private:
362363
363364 void willSendRequest(WebCore::NetscapePlugInStreamLoader*, WebCore::ResourceRequest&&, const WebCore::ResourceResponse& redirectResponse, CompletionHandler<void(WebCore::ResourceRequest&&)>&&) final;
364365 void didReceiveResponse(WebCore::NetscapePlugInStreamLoader*, const WebCore::ResourceResponse&) final;
365  void didReceiveData(WebCore::NetscapePlugInStreamLoader*, const uint8_t*, int) final;
 366 void didReceiveData(WebCore::NetscapePlugInStreamLoader*, const WebCore::SharedBuffer&) final;
366367 void didFail(WebCore::NetscapePlugInStreamLoader*, const WebCore::ResourceError&) final;
367368 void didFinishLoading(WebCore::NetscapePlugInStreamLoader*) final;
368369

Source/WebKit/WebProcess/Plugins/PDF/PDFPlugin.mm

9494#import <WebCore/ScrollAnimator.h>
9595#import <WebCore/ScrollbarTheme.h>
9696#import <WebCore/Settings.h>
 97#import <WebCore/SharedBuffer.h>
9798#import <WebCore/WebAccessibilityObjectWrapperMac.h>
9899#import <WebCore/WheelEventTestMonitor.h>
99100#import <pal/spi/cg/CoreGraphicsSPI.h>

@@void PDFPlugin::PDFPluginStreamLoaderClient::didReceiveResponse(NetscapePlugInSt
11911192 }
11921193}
11931194
1194 void PDFPlugin::PDFPluginStreamLoaderClient::didReceiveData(NetscapePlugInStreamLoader* loader, const uint8_t* data, int count)
 1195void PDFPlugin::PDFPluginStreamLoaderClient::didReceiveData(NetscapePlugInStreamLoader* loader, const SharedBuffer& data)
11951196{
11961197 if (!m_pdfPlugin)
11971198 return;

@@void PDFPlugin::PDFPluginStreamLoaderClient::didReceiveData(NetscapePlugInStream
12001201 if (!request)
12011202 return;
12021203
1203  request->addData(data, count);
 1204 request->addData(data.data(), data.size());
12041205}
12051206
12061207void PDFPlugin::PDFPluginStreamLoaderClient::didFail(NetscapePlugInStreamLoader* loader, const ResourceError&)

@@void PDFPlugin::streamDidReceiveResponse(uint64_t streamID, const URL&, uint32_t
17181719 m_isPostScript = true;
17191720}
17201721
1721 void PDFPlugin::streamDidReceiveData(uint64_t streamID, const uint8_t* bytes, int length)
 1722void PDFPlugin::streamDidReceiveData(uint64_t streamID, const SharedBuffer& buffer)
17221723{
17231724 ASSERT_UNUSED(streamID, streamID == pdfDocumentRequestID);
17241725
17251726 if (!m_data)
17261727 m_data = adoptCF(CFDataCreateMutable(0, 0));
17271728
1728  CFDataAppendBytes(m_data.get(), bytes, length);
1729  m_streamedBytes += length;
 1729 CFDataAppendBytes(m_data.get(), buffer.data(), buffer.size());
 1730 m_streamedBytes += buffer.size();
17301731}
17311732
17321733void PDFPlugin::streamDidFinishLoading(uint64_t streamID)

@@void PDFPlugin::ensureDataBufferLength(uint64_t targetLength)
17631764 CFDataIncreaseLength(m_data.get(), targetLength - currentLength);
17641765}
17651766
1766 void PDFPlugin::manualStreamDidReceiveData(const uint8_t* bytes, int length)
 1767void PDFPlugin::manualStreamDidReceiveData(const SharedBuffer& buffer)
17671768{
17681769 if (!m_data)
17691770 m_data = adoptCF(CFDataCreateMutable(0, 0));
17701771
1771  ensureDataBufferLength(m_streamedBytes + length);
1772  memcpy(CFDataGetMutableBytePtr(m_data.get()) + m_streamedBytes, bytes, length);
1773  m_streamedBytes += length;
 1772 ensureDataBufferLength(m_streamedBytes + buffer.size());
 1773 memcpy(CFDataGetMutableBytePtr(m_data.get()) + m_streamedBytes, buffer.data(), buffer.size());
 1774 m_streamedBytes += buffer.size();
17741775
17751776#if HAVE(INCREMENTAL_PDF_APIS)
17761777 // Keep our ranges-lookup-table compact by continuously updating its first range

Source/WebKit/WebProcess/Plugins/Plugin.h

@@class AffineTransform;
5454class Element;
5555class FloatPoint;
5656class FloatSize;
 57class FragmentedSharedBuffer;
5758class GraphicsContext;
5859class IntPoint;
5960class IntRect;
6061class IntSize;
6162class Scrollbar;
62 class FragmentedSharedBuffer;
 63class SharedBuffer;
6364}
6465
6566namespace WebKit {

@@public:
160161 uint32_t lastModifiedTime, const String& mimeType, const String& headers, const String& suggestedFileName) = 0;
161162
162163 // Tells the plug-in that a stream did receive data.
163  virtual void streamDidReceiveData(uint64_t streamID, const uint8_t* bytes, int length) = 0;
 164 virtual void streamDidReceiveData(uint64_t streamID, const WebCore::SharedBuffer&) = 0;
164165
165166 // Tells the plug-in that a stream has finished loading.
166167 virtual void streamDidFinishLoading(uint64_t streamID) = 0;

@@public:
173174 uint32_t lastModifiedTime, const String& mimeType, const String& headers, const String& suggestedFileName) = 0;
174175
175176 // Tells the plug-in that the manual stream did receive data.
176  virtual void manualStreamDidReceiveData(const uint8_t* bytes, int length) = 0;
 177 virtual void manualStreamDidReceiveData(const WebCore::SharedBuffer&) = 0;
177178
178179 // Tells the plug-in that a stream has finished loading.
179180 virtual void manualStreamDidFinishLoading() = 0;

Source/WebKit/WebProcess/Plugins/PluginView.cpp

@@private:
127127 // NetscapePluginStreamLoaderClient
128128 void willSendRequest(NetscapePlugInStreamLoader*, ResourceRequest&&, const ResourceResponse& redirectResponse, CompletionHandler<void(ResourceRequest&&)>&&) override;
129129 void didReceiveResponse(NetscapePlugInStreamLoader*, const ResourceResponse&) override;
130  void didReceiveData(NetscapePlugInStreamLoader*, const uint8_t*, int) override;
 130 void didReceiveData(NetscapePlugInStreamLoader*, const SharedBuffer&) override;
131131 void didFail(NetscapePlugInStreamLoader*, const ResourceError&) override;
132132 void didFinishLoading(NetscapePlugInStreamLoader*) override;
133133

@@void PluginView::Stream::didReceiveResponse(NetscapePlugInStreamLoader*, const R
235235 m_pluginView->m_plugin->streamDidReceiveResponse(m_streamID, responseURL, streamLength, lastModifiedDateMS(response), mimeType, headers, response.suggestedFilename());
236236}
237237
238 void PluginView::Stream::didReceiveData(NetscapePlugInStreamLoader*, const uint8_t* bytes, int length)
 238void PluginView::Stream::didReceiveData(NetscapePlugInStreamLoader*, const SharedBuffer& buffer)
239239{
240  m_pluginView->m_plugin->streamDidReceiveData(m_streamID, bytes, length);
 240 m_pluginView->m_plugin->streamDidReceiveData(m_streamID, buffer);
241241}
242242
243243void PluginView::Stream::didFail(NetscapePlugInStreamLoader*, const ResourceError& error)

@@void PluginView::manualLoadDidReceiveResponse(const ResourceResponse& response)
374374 m_plugin->manualStreamDidReceiveResponse(responseURL, streamLength, lastModifiedDateMS(response), mimeType, headers, response.suggestedFilename());
375375}
376376
377 void PluginView::manualLoadDidReceiveData(const uint8_t* bytes, int length)
 377void PluginView::manualLoadDidReceiveData(const SharedBuffer& buffer)
378378{
379379 // The plug-in can be null here if it failed to initialize.
380380 if (!m_plugin)

@@void PluginView::manualLoadDidReceiveData(const uint8_t* bytes, int length)
382382
383383 if (!m_isInitialized) {
384384 ASSERT(m_manualStreamState == ManualStreamState::HasReceivedResponse);
385  m_manualStreamData.append(bytes, length);
 385 m_manualStreamData.append(buffer);
386386 return;
387387 }
388388
389  m_plugin->manualStreamDidReceiveData(bytes, length);
 389 m_plugin->manualStreamDidReceiveData(buffer);
390390}
391391
392392void PluginView::manualLoadDidFinishLoading()

@@void PluginView::redeliverManualStream()
11711171
11721172 // Deliver the data.
11731173 if (m_manualStreamData) {
1174  auto buffer = m_manualStreamData.take();
1175  for (const auto& element : buffer.get())
1176  manualLoadDidReceiveData(element.segment->data(), element.segment->size());
 1174 m_manualStreamData.take()->forEachSegmentAsSharedBuffer([&](auto&& buffer) {
 1175 manualLoadDidReceiveData(buffer);
 1176 });
11771177 }
11781178
11791179 if (m_manualStreamState == ManualStreamState::Finished)

Source/WebKit/WebProcess/Plugins/PluginView.h

@@public:
7373 bool isBeingDestroyed() const { return !m_plugin || m_plugin->isBeingDestroyed(); }
7474
7575 void manualLoadDidReceiveResponse(const WebCore::ResourceResponse&);
76  void manualLoadDidReceiveData(const uint8_t* bytes, int length);
 76 void manualLoadDidReceiveData(const WebCore::SharedBuffer&);
7777 void manualLoadDidFinishLoading();
7878 void manualLoadDidFail(const WebCore::ResourceError&);
7979

Source/WebKit/WebProcess/Storage/WebServiceWorkerFetchTaskClient.cpp

@@void WebServiceWorkerFetchTaskClient::didReceiveResponse(const ResourceResponse&
7272 m_connection->send(Messages::ServiceWorkerFetchTask::DidReceiveResponse { response, m_needsContinueDidReceiveResponseMessage }, m_fetchIdentifier);
7373}
7474
75 void WebServiceWorkerFetchTaskClient::didReceiveData(Ref<FragmentedSharedBuffer>&& buffer)
 75void WebServiceWorkerFetchTaskClient::didReceiveData(const SharedBuffer& buffer)
7676{
7777 if (!m_connection)
7878 return;

@@void WebServiceWorkerFetchTaskClient::didReceiveData(Ref<FragmentedSharedBuffer>
8080 if (m_waitingForContinueDidReceiveResponseMessage) {
8181 if (!std::holds_alternative<SharedBufferBuilder>(m_responseData))
8282 m_responseData = SharedBufferBuilder();
83  std::get<SharedBufferBuilder>(m_responseData).append(WTFMove(buffer));
 83 std::get<SharedBufferBuilder>(m_responseData).append(buffer);
8484 return;
8585 }
8686
8787 if (m_isDownload)
88  m_connection->send(Messages::ServiceWorkerDownloadTask::DidReceiveData { buffer.get(), static_cast<int64_t>(buffer->size()) }, m_fetchIdentifier);
 88 m_connection->send(Messages::ServiceWorkerDownloadTask::DidReceiveData { buffer, static_cast<int64_t>(buffer.size()) }, m_fetchIdentifier);
8989 else
90  m_connection->send(Messages::ServiceWorkerFetchTask::DidReceiveData { buffer.get(), static_cast<int64_t>(buffer->size()) }, m_fetchIdentifier);
 90 m_connection->send(Messages::ServiceWorkerFetchTask::DidReceiveData { buffer, static_cast<int64_t>(buffer.size()) }, m_fetchIdentifier);
9191}
9292
9393void WebServiceWorkerFetchTaskClient::didReceiveFormDataAndFinish(Ref<FormData>&& formData)

@@void WebServiceWorkerFetchTaskClient::didReceiveFormDataAndFinish(Ref<FormData>&
136136 });
137137}
138138
139 void WebServiceWorkerFetchTaskClient::didReceiveBlobChunk(const uint8_t* data, size_t size)
 139void WebServiceWorkerFetchTaskClient::didReceiveBlobChunk(const SharedBuffer& buffer)
140140{
141141 if (!m_connection)
142142 return;
143143
144144 if (m_isDownload)
145  m_connection->send(Messages::ServiceWorkerDownloadTask::DidReceiveData { { data, size }, static_cast<int64_t>(size) }, m_fetchIdentifier);
 145 m_connection->send(Messages::ServiceWorkerDownloadTask::DidReceiveData { buffer, static_cast<int64_t>(buffer.size()) }, m_fetchIdentifier);
146146 else
147  m_connection->send(Messages::ServiceWorkerFetchTask::DidReceiveData { { data, size }, static_cast<int64_t>(size) }, m_fetchIdentifier);
 147 m_connection->send(Messages::ServiceWorkerFetchTask::DidReceiveData { buffer , static_cast<int64_t>(buffer.size()) }, m_fetchIdentifier);
148148}
149149
150150void WebServiceWorkerFetchTaskClient::didFinishBlobLoading()

@@void WebServiceWorkerFetchTaskClient::continueDidReceiveResponse()
228228 if (m_didFinish)
229229 didFinish();
230230 }, [this](const SharedBufferBuilder& buffer) {
231  didReceiveData(*buffer.get());
 231 didReceiveData(buffer.copy()->makeContiguous());
232232 if (m_didFinish)
233233 didFinish();
234234 }, [this](Ref<FormData>& formData) {

Source/WebKit/WebProcess/Storage/WebServiceWorkerFetchTaskClient.h

@@private:
5050
5151 void didReceiveResponse(const WebCore::ResourceResponse&) final;
5252 void didReceiveRedirection(const WebCore::ResourceResponse&) final;
53  void didReceiveData(Ref<WebCore::FragmentedSharedBuffer>&&) final;
 53 void didReceiveData(const WebCore::SharedBuffer&) final;
5454 void didReceiveFormDataAndFinish(Ref<WebCore::FormData>&&) final;
5555 void didFail(const WebCore::ResourceError&) final;
5656 void didFinish() final;

@@private:
6060 void convertFetchToDownload() final;
6161
6262 void cleanup();
63 
64  void didReceiveBlobChunk(const uint8_t* data, size_t);
 63
 64 void didReceiveBlobChunk(const WebCore::SharedBuffer&);
6565 void didFinishBlobLoading();
6666
6767 struct BlobLoader final : WebCore::FetchLoaderClient {

@@private:
6969
7070 // FetchLoaderClient API
7171 void didReceiveResponse(const WebCore::ResourceResponse&) final { }
72  void didReceiveData(const uint8_t* data, size_t size) final { client->didReceiveBlobChunk(data, size); }
 72 void didReceiveData(const WebCore::SharedBuffer& data) final { client->didReceiveBlobChunk(data); }
7373 void didFail(const WebCore::ResourceError& error) final { client->didFail(error); }
7474 void didSucceed() final { client->didFinishBlobLoading(); }
7575

Source/WebKit/WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp

@@void WebFrameLoaderClient::didReplaceMultipartContent()
11521152 webPage->didReplaceMultipartContent(m_frame);
11531153}
11541154
1155 void WebFrameLoaderClient::committedLoad(DocumentLoader* loader, const uint8_t* data, int length)
 1155void WebFrameLoaderClient::committedLoad(DocumentLoader* loader, const SharedBuffer& data)
11561156{
11571157 if (!m_pluginView)
1158  loader->commitData(data, length);
 1158 loader->commitData(data);
11591159
11601160 // If the document is a stand-alone media document, now is the right time to cancel the WebKit load.
11611161 // FIXME: This code should be shared across all ports. <http://webkit.org/b/48762>.

@@void WebFrameLoaderClient::committedLoad(DocumentLoader* loader, const uint8_t*
11771177 return;
11781178 m_hasSentResponseToPluginView = true;
11791179 }
1180  m_pluginView->manualLoadDidReceiveData(data, length);
 1180 m_pluginView->manualLoadDidReceiveData(data);
11811181}
11821182
11831183void WebFrameLoaderClient::finishedLoading(DocumentLoader* loader)

Source/WebKit/WebProcess/WebCoreSupport/WebFrameLoaderClient.h

@@private:
152152 void willReplaceMultipartContent() final;
153153 void didReplaceMultipartContent() final;
154154
155  void committedLoad(WebCore::DocumentLoader*, const uint8_t*, int) final;
 155 void committedLoad(WebCore::DocumentLoader*, const WebCore::SharedBuffer&) final;
156156 void finishedLoading(WebCore::DocumentLoader*) final;
157157
158158 void updateGlobalHistory() final;

Source/WebKit/WebProcess/WebCoreSupport/ios/WebPreviewLoaderClient.cpp

@@WebPreviewLoaderClient::WebPreviewLoaderClient(const String& fileName, const Str
4949
5050WebPreviewLoaderClient::~WebPreviewLoaderClient() = default;
5151
52 void WebPreviewLoaderClient::didReceiveBuffer(const FragmentedSharedBuffer& buffer)
 52void WebPreviewLoaderClient::didReceiveData(const SharedBuffer& buffer)
5353{
5454 auto webPage = WebProcess::singleton().webPage(m_pageID);
5555 if (!webPage)

Source/WebKit/WebProcess/WebCoreSupport/ios/WebPreviewLoaderClient.h

@@public:
4646
4747private:
4848 WebPreviewLoaderClient(const String& fileName, const String& uti, WebCore::PageIdentifier);
49  void didReceiveBuffer(const WebCore::FragmentedSharedBuffer&) override;
 49 void didReceiveData(const WebCore::SharedBuffer&) override;
5050 void didFinishLoading() override;
5151 void didFail() override;
5252 bool supportsPasswordEntry() const override { return true; }

Source/WebKit/WebProcess/WebPage/WebPage.cpp

@@void WebPage::urlSchemeTaskDidReceiveResponse(WebURLSchemeHandlerIdentifier hand
70577057 handler->taskDidReceiveResponse(taskIdentifier, response);
70587058}
70597059
7060 void WebPage::urlSchemeTaskDidReceiveData(WebURLSchemeHandlerIdentifier handlerIdentifier, WebCore::ResourceLoaderIdentifier taskIdentifier, const IPC::DataReference& data)
 7060void WebPage::urlSchemeTaskDidReceiveData(WebURLSchemeHandlerIdentifier handlerIdentifier, WebCore::ResourceLoaderIdentifier taskIdentifier, const IPC::SharedBufferCopy& data)
70617061{
70627062 auto* handler = m_identifierToURLSchemeHandlerProxyMap.get(handlerIdentifier);
70637063 ASSERT(handler);
70647064
7065  handler->taskDidReceiveData(taskIdentifier, data.size(), data.data());
 7065 handler->taskDidReceiveData(taskIdentifier, data.buffer() ? *data.buffer() : SharedBuffer::create().get());
70667066}
70677067
70687068void WebPage::urlSchemeTaskDidComplete(WebURLSchemeHandlerIdentifier handlerIdentifier, WebCore::ResourceLoaderIdentifier taskIdentifier, const ResourceError& error)

Source/WebKit/WebProcess/WebPage/WebPage.h

@@namespace IPC {
184184class Connection;
185185class Decoder;
186186class FormDataReference;
 187class SharedBufferCopy;
187188}
188189
189190namespace WebCore {

@@private:
18961897 void urlSchemeTaskWillPerformRedirection(WebURLSchemeHandlerIdentifier, WebCore::ResourceLoaderIdentifier taskIdentifier, WebCore::ResourceResponse&&, WebCore::ResourceRequest&&, CompletionHandler<void(WebCore::ResourceRequest&&)>&&);
18971898 void urlSchemeTaskDidPerformRedirection(WebURLSchemeHandlerIdentifier, WebCore::ResourceLoaderIdentifier taskIdentifier, WebCore::ResourceResponse&&, WebCore::ResourceRequest&&);
18981899 void urlSchemeTaskDidReceiveResponse(WebURLSchemeHandlerIdentifier, WebCore::ResourceLoaderIdentifier taskIdentifier, const WebCore::ResourceResponse&);
1899  void urlSchemeTaskDidReceiveData(WebURLSchemeHandlerIdentifier, WebCore::ResourceLoaderIdentifier taskIdentifier, const IPC::DataReference&);
 1900 void urlSchemeTaskDidReceiveData(WebURLSchemeHandlerIdentifier, WebCore::ResourceLoaderIdentifier taskIdentifier, const IPC::SharedBufferCopy&);
19001901 void urlSchemeTaskDidComplete(WebURLSchemeHandlerIdentifier, WebCore::ResourceLoaderIdentifier taskIdentifier, const WebCore::ResourceError&);
19011902
19021903 void setIsTakingSnapshotsForApplicationSuspension(bool);

Source/WebKit/WebProcess/WebPage/WebPage.messages.in

@@GenerateSyntheticEditingCommand(enum:uint8_t WebKit::SyntheticEditingCommandType
564564 URLSchemeTaskWillPerformRedirection(WebKit::WebURLSchemeHandlerIdentifier handlerIdentifier, WebCore::ResourceLoaderIdentifier taskIdentifier, WebCore::ResourceResponse response, WebCore::ResourceRequest proposedRequest) -> (WebCore::ResourceRequest actualRequest) Async
565565 URLSchemeTaskDidPerformRedirection(WebKit::WebURLSchemeHandlerIdentifier handlerIdentifier, WebCore::ResourceLoaderIdentifier taskIdentifier, WebCore::ResourceResponse response, WebCore::ResourceRequest proposedRequest)
566566 URLSchemeTaskDidReceiveResponse(WebKit::WebURLSchemeHandlerIdentifier handlerIdentifier, WebCore::ResourceLoaderIdentifier taskIdentifier, WebCore::ResourceResponse response)
567  URLSchemeTaskDidReceiveData(WebKit::WebURLSchemeHandlerIdentifier handlerIdentifier, WebCore::ResourceLoaderIdentifier taskIdentifier, IPC::SharedBufferDataReference data)
 567 URLSchemeTaskDidReceiveData(WebKit::WebURLSchemeHandlerIdentifier handlerIdentifier, WebCore::ResourceLoaderIdentifier taskIdentifier, IPC::SharedBufferCopy data)
568568 URLSchemeTaskDidComplete(WebKit::WebURLSchemeHandlerIdentifier handlerIdentifier, WebCore::ResourceLoaderIdentifier taskIdentifier, WebCore::ResourceError error)
569569
570570 SetIsSuspended(bool suspended)

Source/WebKit/WebProcess/WebPage/WebURLSchemeHandlerProxy.cpp

@@void WebURLSchemeHandlerProxy::taskDidReceiveResponse(WebCore::ResourceLoaderIde
9696 task->didReceiveResponse(response);
9797}
9898
99 void WebURLSchemeHandlerProxy::taskDidReceiveData(WebCore::ResourceLoaderIdentifier taskIdentifier, size_t size, const uint8_t* data)
 99void WebURLSchemeHandlerProxy::taskDidReceiveData(WebCore::ResourceLoaderIdentifier taskIdentifier, const SharedBuffer& data)
100100{
101101 auto* task = m_tasks.get(taskIdentifier);
102102 if (!task)
103103 return;
104104
105  task->didReceiveData(size, data);
 105 task->didReceiveData(data);
106106}
107107
108108void WebURLSchemeHandlerProxy::taskDidComplete(WebCore::ResourceLoaderIdentifier taskIdentifier, const ResourceError& error)

Source/WebKit/WebProcess/WebPage/WebURLSchemeHandlerProxy.h

@@class ResourceError;
3535class ResourceLoader;
3636class ResourceResponse;
3737class ResourceRequest;
 38class SharedBuffer;
3839}
3940
4041namespace WebKit {

@@public:
5960
6061 void taskDidPerformRedirection(WebCore::ResourceLoaderIdentifier, WebCore::ResourceResponse&&, WebCore::ResourceRequest&&, CompletionHandler<void(WebCore::ResourceRequest&&)>&&);
6162 void taskDidReceiveResponse(WebCore::ResourceLoaderIdentifier, const WebCore::ResourceResponse&);
62  void taskDidReceiveData(WebCore::ResourceLoaderIdentifier, size_t, const uint8_t* data);
 63 void taskDidReceiveData(WebCore::ResourceLoaderIdentifier, const WebCore::SharedBuffer&);
6364 void taskDidComplete(WebCore::ResourceLoaderIdentifier, const WebCore::ResourceError&);
6465 void taskDidStopLoading(WebURLSchemeTaskProxy&);
6566

Source/WebKit/WebProcess/WebPage/WebURLSchemeTaskProxy.cpp

@@void WebURLSchemeTaskProxy::didReceiveResponse(const ResourceResponse& response)
140140 });
141141}
142142
143 void WebURLSchemeTaskProxy::didReceiveData(size_t size, const uint8_t* data)
 143void WebURLSchemeTaskProxy::didReceiveData(const WebCore::SharedBuffer& data)
144144{
145145 if (!hasLoader())
146146 return;
147147
148148 if (m_waitingForCompletionHandler) {
149149 WEBURLSCHEMETASKPROXY_RELEASE_LOG("didReceiveData: Received data during response processing, queuing it.");
150  queueTask([this, protectedThis = Ref { *this }, dataVector = Vector { data, size }] {
151  didReceiveData(dataVector.size(), dataVector.data());
 150 queueTask([this, protectedThis = Ref { *this }, data = Ref { data }] {
 151 didReceiveData(data);
152152 });
153153 return;
154154 }
155155
156156 Ref protectedThis { *this };
157  m_coreLoader->didReceiveData(data, size, 0, DataPayloadType::DataPayloadBytes);
 157 m_coreLoader->didReceiveData(data, 0, DataPayloadType::DataPayloadBytes);
158158 processNextPendingTask();
159159}
160160

Source/WebKit/WebProcess/WebPage/WebURLSchemeTaskProxy.h

@@namespace WebCore {
3434class ResourceError;
3535class ResourceLoader;
3636class ResourceResponse;
 37class SharedBuffer;
3738}
3839
3940namespace WebKit {

@@public:
5556
5657 void didPerformRedirection(WebCore::ResourceResponse&&, WebCore::ResourceRequest&&, CompletionHandler<void(WebCore::ResourceRequest&&)>&&);
5758 void didReceiveResponse(const WebCore::ResourceResponse&);
58  void didReceiveData(size_t, const uint8_t* data);
 59 void didReceiveData(const WebCore::SharedBuffer&);
5960 void didComplete(const WebCore::ResourceError&);
6061
6162 WebCore::ResourceLoaderIdentifier identifier() const { return m_identifier; }

Source/WebKit/WebProcess/cocoa/WebProcessCocoa.mm

@@RetainPtr<CFDataRef> WebProcess::sourceApplicationAuditData() const
693693
694694void WebProcess::initializeSandbox(const AuxiliaryProcessInitializationParameters& parameters, SandboxInitializationParameters& sandboxParameters)
695695{
 696 return;
696697#if PLATFORM(MAC) || PLATFORM(MACCATALYST)
697698 // Need to override the default, because service has a different bundle ID.
698699 auto webKitBundle = [NSBundle bundleWithIdentifier:@"com.apple.WebKit"];

Source/WebKitLegacy/WebCoreSupport/PingHandle.h

3030#include <WebCore/ResourceHandleClient.h>
3131#include <WebCore/ResourceRequest.h>
3232#include <WebCore/ResourceResponse.h>
 33#include <WebCore/SharedBuffer.h>
3334#include <WebCore/Timer.h>
3435#include <wtf/CompletionHandler.h>
3536

@@private:
7374 completionHandler();
7475 pingLoadComplete({ }, response);
7576 }
76  void didReceiveBuffer(WebCore::ResourceHandle*, Ref<WebCore::FragmentedSharedBuffer>&&, int) final { pingLoadComplete(); }
 77 void didReceiveData(WebCore::ResourceHandle*, const WebCore::SharedBuffer&, int) final { pingLoadComplete(); }
7778 void didFinishLoading(WebCore::ResourceHandle*, const WebCore::NetworkLoadMetrics&) final { pingLoadComplete(); }
7879 void didFail(WebCore::ResourceHandle*, const WebCore::ResourceError& error) final { pingLoadComplete(error); }
7980 bool shouldUseCredentialStorage(WebCore::ResourceHandle*) final { return m_shouldUseCredentialStorage; }

Source/WebKitLegacy/mac/WebCoreSupport/WebFrameLoaderClient.h

@@class SessionID;
4848namespace WebCore {
4949class AuthenticationChallenge;
5050class CachedFrame;
 51class FragmentedSharedBuffer;
5152class HistoryItem;
5253class ProtectionSpace;
5354class ResourceLoader;
5455class ResourceRequest;
 56class SharedBuffer;
5557}
5658
5759class WebFrameLoaderClient : public WebCore::FrameLoaderClient, public CanMakeWeakPtr<WebFrameLoaderClient> {

@@private:
151153 void willReplaceMultipartContent() final { }
152154 void didReplaceMultipartContent() final;
153155
154  void committedLoad(WebCore::DocumentLoader*, const uint8_t*, int) final;
 156 void committedLoad(WebCore::DocumentLoader*, const WebCore::SharedBuffer&) final;
155157 void finishedLoading(WebCore::DocumentLoader*) final;
156158 void updateGlobalHistory() final;
157159 void updateGlobalHistoryRedirectLinks() final;

Source/WebKitLegacy/mac/WebCoreSupport/WebFrameLoaderClient.mm

@@void WebFrameLoaderClient::didReplaceMultipartContent()
992992#endif
993993}
994994
995 void WebFrameLoaderClient::committedLoad(WebCore::DocumentLoader* loader, const uint8_t* data, int length)
 995void WebFrameLoaderClient::committedLoad(WebCore::DocumentLoader* loader, const WebCore::SharedBuffer& data)
996996{
997  auto nsData = adoptNS([[NSData alloc] initWithBytesNoCopy:(void*)data length:length freeWhenDone:NO]);
998  [dataSource(loader) _receivedData:nsData.get()];
 997 [dataSource(loader) _receivedData:data.createNSData().get()];
999998}
1000999
10011000void WebFrameLoaderClient::finishedLoading(WebCore::DocumentLoader* loader)

@@RefPtr<WebCore::LegacyPreviewLoaderClient> WebFrameLoaderClient::createPreviewLo
20122011 RetainPtr<NSString> m_filePath;
20132012 RetainPtr<NSFileHandle> m_fileHandle;
20142013
2015  void didReceiveBuffer(const WebCore::FragmentedSharedBuffer& buffer) override
 2014 void didReceiveData(const WebCore::SharedBuffer& buffer) override
20162015 {
20172016 auto dataArray = buffer.createNSDataArray();
20182017 for (NSData *data in dataArray.get())

Source/WebKitLegacy/mac/WebView/WebFrame.mm

@@- (void)_commitData:(NSData *)data
977977 auto* document = _private->coreFrame->document();
978978 document->setShouldCreateRenderers(_private->shouldCreateRenderers);
979979
980  _private->coreFrame->loader().documentLoader()->commitData((const uint8_t*)[data bytes], [data length]);
 980 _private->coreFrame->loader().documentLoader()->commitData(WebCore::SharedBuffer::create(data));
981981}
982982
983983@end

Source/WebKitLegacy/win/WebCoreSupport/WebFrameLoaderClient.cpp

@@void WebFrameLoaderClient::didChangeTitle(DocumentLoader*)
641641 notImplemented();
642642}
643643
644 void WebFrameLoaderClient::committedLoad(DocumentLoader* loader, const uint8_t* data, int length)
 644void WebFrameLoaderClient::committedLoad(DocumentLoader* loader, const SharedBuffer& data)
645645{
646  loader->commitData(data, length);
 646 loader->commitData(data);
647647
648648 // If the document is a stand-alone media document, now is the right time to cancel the WebKit load.
649649 // FIXME: This code should be shared across all ports. <http://webkit.org/b/48762>.

Source/WebKitLegacy/win/WebCoreSupport/WebFrameLoaderClient.h

@@public:
112112
113113 void startDownload(const WebCore::ResourceRequest&, const String& suggestedName = String()) override;
114114
115  void committedLoad(WebCore::DocumentLoader*, const uint8_t*, int) override;
 115 void committedLoad(WebCore::DocumentLoader*, const WebCore::SharedBuffer&) override;
116116 void finishedLoading(WebCore::DocumentLoader*) override;
117117
118118 void willChangeTitle(WebCore::DocumentLoader*) override;

Tools/ChangeLog

 12021-12-22 Jean-Yves Avenard <jya@apple.com>
 2
 3 make SharedBuffer::copy() return a contiguous SharedBuffer
 4 https://bugs.webkit.org/show_bug.cgi?id=234622
 5 rdar://problem/86829527
 6
 7 Reviewed by NOBODY (OOPS!).
 8
 9 * TestWebKitAPI/Tests/WebCore/SharedBuffer.cpp:
 10 (TestWebKitAPI::TEST_F):
 11
1122021-12-26 Carlos Garcia Campos <cgarcia@igalia.com>
213
314 [GTK][a11y] Stop setting manages-descendants on web process root object with ATSPI

Tools/TestWebKitAPI/Tests/WebCore/SharedBuffer.cpp

@@TEST_F(FragmentedSharedBufferTest, read)
303303 check(builder.take());
304304}
305305
 306TEST_F(FragmentedSharedBufferTest, copyIsContiguous)
 307{
 308 EXPECT_TRUE(SharedBuffer::create()->copy()->isContiguous());
 309 EXPECT_FALSE(FragmentedSharedBuffer::create()->copy()->isContiguous());
 310 const char* const simpleText = "This is a simple test.";
 311 EXPECT_TRUE(SharedBuffer::create(simpleText, strlen(simpleText))->copy()->isContiguous());
 312 EXPECT_FALSE(FragmentedSharedBuffer::create(simpleText, strlen(simpleText))->copy()->isContiguous());
 313}
 314
306315#if ENABLE(MHTML)
307316// SharedBufferChunkReader unit-tests -------------------------------------
308317template< typename T, size_t N >