source: webkit/trunk/Source/WebCore/loader/NetscapePlugInStreamLoader.cpp

Last change on this file was 287684, checked in by Jean-Yves Avenard, 3 years ago

Have CachedRawResourceClient and related networking actors use SharedBuffer.
https://bugs.webkit.org/show_bug.cgi?id=232424
rdar://84744687

Reviewed by Youenn Fablet.

Source/WebCore:

We modify all didReceiveData and related methods so that they no longer
use uint8_t*/int and instead use SharedBuffer.
We do the same for any intermediaries used by the various didReceiveData
implementations.
This will facilitate moving networking off the main thread in the GPU
process and allows to remove several memory allocations and copies at the
process boundaries.
We can now consider transfer the underlying SharedMemory created in
the network process all the way to the GPU process.

Fly-by fix: change FragmentedSharedBuffer type to SharedBuffer when appropriate.

No change in observable behaviour. Covered by all existing tests.

  • Modules/fetch/FetchBodyConsumer.cpp:

(WebCore::FetchBodyConsumer::append):

  • Modules/fetch/FetchBodyConsumer.h:
  • Modules/fetch/FetchBodyOwner.cpp:

(WebCore::FetchBodyOwner::blobChunk):

  • Modules/fetch/FetchBodyOwner.h:
  • Modules/fetch/FetchLoader.cpp:

(WebCore::FetchLoader::didReceiveData):

  • Modules/fetch/FetchLoader.h:
  • Modules/fetch/FetchLoaderClient.h:

(WebCore::FetchLoaderClient::didReceiveData):

  • Modules/fetch/FetchResponse.cpp:

(WebCore::FetchResponse::BodyLoader::didReceiveData):
(WebCore::FetchResponse::consumeChunk):

  • Modules/fetch/FetchResponse.h:
  • Modules/model-element/HTMLModelElement.cpp:

(WebCore::HTMLModelElement::dataReceived):

  • Modules/model-element/HTMLModelElement.h:
  • Modules/streams/ReadableStreamSink.h:
  • fileapi/FileReaderLoader.cpp:

(WebCore::FileReaderLoader::didReceiveData):

  • fileapi/FileReaderLoader.h:
  • inspector/InspectorInstrumentation.cpp:

(WebCore::InspectorInstrumentation::didReceiveDataImpl):

  • inspector/InspectorInstrumentation.h:

(WebCore::InspectorInstrumentation::didReceiveData):

  • inspector/NetworkResourcesData.cpp:

(WebCore::NetworkResourcesData::ResourceData::appendData):
(WebCore::NetworkResourcesData::maybeAddResourceData):

  • inspector/NetworkResourcesData.h:
  • inspector/agents/InspectorNetworkAgent.cpp:

(WebCore::InspectorNetworkAgent::didReceiveResponse):
(WebCore::InspectorNetworkAgent::didReceiveData):
(WebCore::InspectorNetworkAgent::interceptRequestWithResponse):

  • inspector/agents/InspectorNetworkAgent.h:
  • loader/ContentFilter.cpp:

(WebCore::ContentFilter::deliverResourceData):

  • loader/ContentFilterClient.h:
  • loader/DocumentLoader.cpp:

(WebCore::DocumentLoader::finishedLoading):
(WebCore::DocumentLoader::continueAfterContentPolicy):
(WebCore::DocumentLoader::commitLoad):
(WebCore::DocumentLoader::commitData):
(WebCore::DocumentLoader::dataReceived):
(WebCore::DocumentLoader::maybeCreateArchive):
(WebCore::DocumentLoader::maybeFinishLoadingMultipartContent):
(WebCore::DocumentLoader::dataReceivedThroughContentFilter):

  • loader/DocumentLoader.h:
  • loader/DocumentThreadableLoader.cpp:

(WebCore::DocumentThreadableLoader::dataReceived):
(WebCore::DocumentThreadableLoader::didReceiveData):
(WebCore::DocumentThreadableLoader::didFinishLoading):
(WebCore::DocumentThreadableLoader::loadRequest):

  • loader/DocumentThreadableLoader.h:
  • loader/DocumentWriter.cpp:

(WebCore::DocumentWriter::addData):

  • loader/DocumentWriter.h:
  • loader/EmptyClients.cpp:

(WebCore::EmptyFrameLoaderClient::committedLoad):

  • loader/EmptyFrameLoaderClient.h:
  • loader/FrameLoader.cpp:

(WebCore::FrameLoader::willLoadMediaElementURL):
(WebCore::FrameLoader::commitProvisionalLoad):
(WebCore::FrameLoader::loadResourceSynchronously):
(WebCore::FrameLoader::loadedResourceFromMemoryCache):

  • loader/FrameLoaderClient.h:
  • loader/MediaResourceLoader.cpp:

(WebCore::MediaResource::dataReceived):

  • loader/MediaResourceLoader.h:
  • loader/NetscapePlugInStreamLoader.cpp:

(WebCore::NetscapePlugInStreamLoader::didReceiveData):

  • loader/NetscapePlugInStreamLoader.h:
  • loader/ResourceLoadNotifier.cpp:

(WebCore::ResourceLoadNotifier::didReceiveData):
(WebCore::ResourceLoadNotifier::dispatchDidReceiveData):
(WebCore::ResourceLoadNotifier::sendRemainingDelegateMessages):

  • loader/ResourceLoadNotifier.h:
  • loader/ResourceLoader.cpp:

(WebCore::ResourceLoader::loadDataURL):
(WebCore::ResourceLoader::addBuffer):
(WebCore::ResourceLoader::didReceiveData):
(WebCore::ResourceLoader::didReceiveBuffer):

  • loader/ResourceLoader.h:
  • loader/SubresourceLoader.cpp:

(WebCore::SubresourceLoader::didReceiveBuffer):

  • loader/SubresourceLoader.h:
  • loader/SubstituteResource.h:

(WebCore::SubstituteResource::append):

  • loader/ThreadableLoaderClient.h:

(WebCore::ThreadableLoaderClient::didReceiveData):

  • loader/ThreadableLoaderClientWrapper.h:

(WebCore::ThreadableLoaderClientWrapper::didReceiveData):

  • loader/WorkerThreadableLoader.cpp:

(WebCore::WorkerThreadableLoader::MainThreadBridge::didReceiveData):

  • loader/WorkerThreadableLoader.h:
  • loader/appcache/ApplicationCacheHost.cpp:

(WebCore::ApplicationCacheHost::mainResourceDataReceived):

  • loader/appcache/ApplicationCacheHost.h:
  • loader/appcache/ApplicationCacheResource.cpp:

(WebCore::ApplicationCacheResource::deliver):

  • loader/appcache/ApplicationCacheResourceLoader.cpp:

(WebCore::ApplicationCacheResourceLoader::dataReceived):

  • loader/appcache/ApplicationCacheResourceLoader.h:
  • loader/cache/CachedImage.cpp:

(WebCore::CachedImage::updateBufferInternal):
(WebCore::CachedImage::updateBuffer):
(WebCore::CachedImage::updateData):

  • loader/cache/CachedImage.h:
  • loader/cache/CachedRawResource.cpp:

(WebCore::CachedRawResource::calculateIncrementalDataChunk const):
(WebCore::CachedRawResource::updateBuffer):
(WebCore::CachedRawResource::updateData):
(WebCore::CachedRawResource::finishLoading):
(WebCore::CachedRawResource::notifyClientsDataWasReceived):
(WebCore::CachedRawResource::didAddClient):

  • loader/cache/CachedRawResource.h:
  • loader/cache/CachedRawResourceClient.h:

(WebCore::CachedRawResourceClient::dataReceived):

  • loader/cache/CachedResource.cpp:

(WebCore::CachedResource::updateData):

  • loader/cache/CachedResource.h:
  • loader/ios/LegacyPreviewLoader.h:
  • loader/ios/LegacyPreviewLoader.mm:

(WebCore::LegacyPreviewLoader::didReceiveData):
(WebCore::LegacyPreviewLoader::previewConverterDidReceiveData):

  • page/EventSource.cpp:

(WebCore::EventSource::didReceiveData):

  • page/EventSource.h:
  • platform/SharedBuffer.cpp:

(WebCore::FragmentedSharedBuffer::takeData): Update due to DataSegmentVectorEntry::segment being const
(WebCore::FragmentedSharedBuffer::forEachSegmentAsSharedBuffer const): Add convenience method.
(WebCore::SharedBuffer::SharedBuffer):
(WebCore::SharedBufferDataView::SharedBufferDataView):
(WebCore::SharedBufferDataView::createSharedBuffer const):

  • platform/SharedBuffer.h: Make DataSegmentVectorEntry::segment const.

(WebCore::SharedBuffer::create):
(WebCore::SharedBuffer::SharedBuffer):

  • platform/graphics/PlatformMediaResourceLoader.h:

(WebCore::PlatformMediaResourceClient::dataReceived):

  • platform/graphics/avfoundation/cf/WebCoreAVCFResourceLoader.cpp:

(WebCore::WebCoreAVCFResourceLoader::dataReceived):

  • platform/graphics/avfoundation/cf/WebCoreAVCFResourceLoader.h:
  • platform/graphics/avfoundation/objc/WebCoreAVFResourceLoader.mm:

(WebCore::CachedResourceMediaLoader::dataReceived):
(WebCore::PlatformResourceMediaLoader::dataReceived):

  • platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:

(CachedResourceStreamingClient::dataReceived):

  • platform/network/ResourceHandleClient.cpp:

(WebCore::ResourceHandleClient::didReceiveBuffer):

  • platform/network/ResourceHandleClient.h:

(WebCore::ResourceHandleClient::didReceiveData):

  • platform/network/SynchronousLoaderClient.cpp:

(WebCore::SynchronousLoaderClient::didReceiveData):

  • platform/network/SynchronousLoaderClient.h:
  • platform/network/cocoa/RangeResponseGenerator.mm:

(WebCore::RangeResponseGenerator::giveResponseToTaskIfBytesInRangeReceived):

  • platform/network/cocoa/WebCoreNSURLSession.h:
  • platform/network/cocoa/WebCoreNSURLSession.mm:

(WebCore::WebCoreNSURLSessionDataTaskClient::dataReceived):
(-[WebCoreNSURLSessionDataTask resource:receivedData:]):

  • platform/network/curl/CurlCacheManager.cpp:

(WebCore::CurlCacheManager::didReceiveData):

  • platform/network/curl/CurlCacheManager.h:
  • platform/network/curl/CurlDownload.cpp:

(WebCore::CurlDownload::curlDidReceiveData):

  • platform/network/curl/CurlDownload.h:
  • platform/network/curl/CurlMultipartHandle.cpp:

(WebCore::CurlMultipartHandle::didReceiveData):

  • platform/network/curl/CurlMultipartHandle.h:
  • platform/network/curl/CurlMultipartHandleClient.h:
  • platform/network/curl/CurlRequest.cpp:

(WebCore::CurlRequest::didReceiveData):
(WebCore::CurlRequest::didReceiveDataFromMultipart):

  • platform/network/curl/CurlRequest.h:
  • platform/network/curl/CurlRequestClient.h:
  • platform/network/curl/CurlResourceHandleDelegate.cpp:

(WebCore::CurlResourceHandleDelegate::curlDidReceiveData):

  • platform/network/curl/CurlResourceHandleDelegate.h:
  • platform/network/curl/CurlStream.cpp:

(WebCore::CurlStream::tryToReceive):

  • platform/network/curl/CurlStream.h:
  • platform/network/curl/SocketStreamHandleImpl.h:
  • platform/network/curl/SocketStreamHandleImplCurl.cpp:

(WebCore::SocketStreamHandleImpl::didReceiveData):

  • platform/network/ios/LegacyPreviewLoaderClient.h:

(WebCore::LegacyPreviewLoaderClient::didReceiveData):

  • platform/network/mac/WebCoreResourceHandleAsOperationQueueDelegate.mm:

(-[WebCoreResourceHandleAsOperationQueueDelegate connection:didReceiveData:lengthReceived:]):

  • svg/graphics/SVGImage.cpp:

(WebCore::SVGImage::dataChanged):

  • workers/WorkerFontLoadRequest.cpp:

(WebCore::WorkerFontLoadRequest::didReceiveData):

  • workers/WorkerFontLoadRequest.h:
  • workers/WorkerScriptLoader.cpp:

(WebCore::WorkerScriptLoader::didReceiveData):

  • workers/WorkerScriptLoader.h:
  • workers/service/context/ServiceWorkerFetch.h:
  • xml/XMLHttpRequest.cpp:

(WebCore::XMLHttpRequest::didReceiveData):

  • xml/XMLHttpRequest.h:

Source/WebKit:

  • GPUProcess/media/RemoteMediaResource.cpp:

(WebKit::RemoteMediaResource::dataReceived):

  • GPUProcess/media/RemoteMediaResource.h:
  • NetworkProcess/Downloads/PendingDownload.h:
  • NetworkProcess/NetworkCORSPreflightChecker.cpp:

(WebKit::NetworkCORSPreflightChecker::didReceiveData):

  • NetworkProcess/NetworkCORSPreflightChecker.h:
  • NetworkProcess/NetworkDataTask.h:
  • NetworkProcess/NetworkLoad.cpp:

(WebKit::NetworkLoad::didReceiveData):

  • NetworkProcess/NetworkLoad.h:
  • NetworkProcess/NetworkLoadClient.h:
  • NetworkProcess/NetworkResourceLoader.cpp:

(WebKit::NetworkResourceLoader::didReceiveBuffer):
(WebKit::NetworkResourceLoader::sendBuffer):

  • NetworkProcess/NetworkResourceLoader.h:
  • NetworkProcess/PingLoad.cpp:

(WebKit::PingLoad::didReceiveData):

  • NetworkProcess/PingLoad.h:
  • NetworkProcess/PreconnectTask.cpp:

(WebKit::PreconnectTask::didReceiveBuffer):

  • NetworkProcess/PreconnectTask.h:
  • NetworkProcess/ServiceWorker/ServiceWorkerDownloadTask.cpp:

(WebKit::ServiceWorkerDownloadTask::didReceiveData):

  • NetworkProcess/ServiceWorker/ServiceWorkerDownloadTask.h:
  • NetworkProcess/ServiceWorker/ServiceWorkerDownloadTask.messages.in:
  • NetworkProcess/ServiceWorker/ServiceWorkerFetchTask.cpp:

(WebKit::ServiceWorkerFetchTask::didReceiveData):
(WebKit::ServiceWorkerFetchTask::loadBodyFromPreloader):

  • NetworkProcess/ServiceWorker/ServiceWorkerFetchTask.h:
  • NetworkProcess/ServiceWorker/ServiceWorkerFetchTask.messages.in:
  • NetworkProcess/ServiceWorker/ServiceWorkerNavigationPreloader.cpp:

(WebKit::ServiceWorkerNavigationPreloader::didReceiveBuffer):

  • NetworkProcess/ServiceWorker/ServiceWorkerNavigationPreloader.h:
  • NetworkProcess/ServiceWorker/ServiceWorkerSoftUpdateLoader.cpp:

(WebKit::ServiceWorkerSoftUpdateLoader::didReceiveBuffer):

  • NetworkProcess/ServiceWorker/ServiceWorkerSoftUpdateLoader.h:
  • NetworkProcess/cache/NetworkCacheSpeculativeLoad.cpp:

(WebKit::NetworkCache::SpeculativeLoad::didReceiveBuffer):

  • NetworkProcess/cache/NetworkCacheSpeculativeLoad.h:
  • NetworkProcess/cocoa/NetworkDataTaskCocoa.h:
  • NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:

(WebKit::NetworkDataTaskCocoa::didReceiveData):

  • NetworkProcess/curl/NetworkDataTaskCurl.cpp:

(WebKit::NetworkDataTaskCurl::curlDidReceiveData):

  • NetworkProcess/curl/NetworkDataTaskCurl.h:
  • Platform/IPC/SharedBufferCopy.h:
  • Shared/mac/MediaFormatReader/MediaFormatReader.cpp:

(WebKit::MediaFormatReader::didParseTracks):

  • Shared/mac/MediaFormatReader/MediaFormatReader.h:
  • UIProcess/WebURLSchemeTask.cpp:

(WebKit::WebURLSchemeTask::didReceiveData):

  • UIProcess/WebURLSchemeTask.h:
  • WebProcess/GPU/media/RemoteMediaResourceProxy.cpp:

(WebKit::RemoteMediaResourceProxy::dataReceived):

  • WebProcess/GPU/media/RemoteMediaResourceProxy.h:
  • WebProcess/Network/WebResourceLoader.cpp:

(WebKit::WebResourceLoader::didReceiveData):
(WebKit::WebResourceLoader::didReceiveResource):

  • WebProcess/Network/WebResourceLoader.h:
  • WebProcess/Network/WebResourceLoader.messages.in:
  • WebProcess/Plugins/PDF/PDFPlugin.h:
  • WebProcess/Plugins/PDF/PDFPlugin.mm:

(WebKit::PDFPlugin::PDFPluginStreamLoaderClient::didReceiveData):
(WebKit::PDFPlugin::streamDidReceiveData):
(WebKit::PDFPlugin::manualStreamDidReceiveData):

  • WebProcess/Plugins/Plugin.h:
  • WebProcess/Plugins/PluginView.cpp:

(WebKit::PluginView::Stream::didReceiveData):
(WebKit::PluginView::manualLoadDidReceiveData):
(WebKit::PluginView::redeliverManualStream):

  • WebProcess/Plugins/PluginView.h:
  • WebProcess/Storage/WebServiceWorkerFetchTaskClient.cpp:

(WebKit::WebServiceWorkerFetchTaskClient::didReceiveData):
(WebKit::WebServiceWorkerFetchTaskClient::didReceiveBlobChunk):
(WebKit::WebServiceWorkerFetchTaskClient::continueDidReceiveResponse):

  • WebProcess/Storage/WebServiceWorkerFetchTaskClient.h:
  • WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:

(WebKit::WebFrameLoaderClient::committedLoad):

  • WebProcess/WebCoreSupport/WebFrameLoaderClient.h:
  • WebProcess/WebCoreSupport/ios/WebPreviewLoaderClient.cpp:

(WebKit::WebPreviewLoaderClient::didReceiveData):

  • WebProcess/WebCoreSupport/ios/WebPreviewLoaderClient.h:
  • WebProcess/WebPage/WebPage.cpp:

(WebKit::WebPage::urlSchemeTaskDidReceiveData):

  • WebProcess/WebPage/WebPage.h:
  • WebProcess/WebPage/WebPage.messages.in:
  • WebProcess/WebPage/WebURLSchemeHandlerProxy.cpp:

(WebKit::WebURLSchemeHandlerProxy::taskDidReceiveData):

  • WebProcess/WebPage/WebURLSchemeHandlerProxy.h:
  • WebProcess/WebPage/WebURLSchemeTaskProxy.cpp:

(WebKit::WebURLSchemeTaskProxy::didReceiveData):

  • WebProcess/WebPage/WebURLSchemeTaskProxy.h:

Source/WebKitLegacy:

  • WebCoreSupport/PingHandle.h:

Source/WebKitLegacy/mac:

  • WebCoreSupport/WebFrameLoaderClient.h:
  • WebCoreSupport/WebFrameLoaderClient.mm:

(WebFrameLoaderClient::committedLoad):
(WebFrameLoaderClient::createPreviewLoaderClient):

  • WebView/WebFrame.mm:

(-[WebFrame _commitData:]):

Source/WebKitLegacy/win:

  • WebCoreSupport/WebFrameLoaderClient.cpp:

(WebFrameLoaderClient::committedLoad):

  • WebCoreSupport/WebFrameLoaderClient.h:
  • Property svn:eol-style set to native
File size: 7.0 KB
Line 
1/*
2 * Copyright (C) 2006-2020 Apple Inc. All rights reserved.
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
6 * are met:
7 *
8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright
11 * notice, this list of conditions and the following disclaimer in the
12 * documentation and/or other materials provided with the distribution.
13 * 3. Neither the name of Apple Inc. ("Apple") nor the names of
14 * its contributors may be used to endorse or promote products derived
15 * from this software without specific prior written permission.
16 *
17 * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
18 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
19 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
20 * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
21 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
22 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
23 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
24 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 */
28
29#include "config.h"
30#include "NetscapePlugInStreamLoader.h"
31
32#include "DocumentLoader.h"
33#include "FrameLoader.h"
34#include "FrameLoaderClient.h"
35#include <wtf/CompletionHandler.h>
36#include <wtf/Ref.h>
37
38#if ENABLE(CONTENT_EXTENSIONS)
39#include "ResourceLoadInfo.h"
40#endif
41
42namespace WebCore {
43
44// FIXME: Skip Content Security Policy check when associated plugin element is in a user agent shadow tree.
45// See <https://bugs.webkit.org/show_bug.cgi?id=146663>.
46NetscapePlugInStreamLoader::NetscapePlugInStreamLoader(Frame& frame, NetscapePlugInStreamLoaderClient& client)
47 : ResourceLoader(frame, ResourceLoaderOptions(
48 SendCallbackPolicy::SendCallbacks,
49 ContentSniffingPolicy::SniffContent,
50 DataBufferingPolicy::DoNotBufferData,
51 StoredCredentialsPolicy::Use,
52 ClientCredentialPolicy::MayAskClientForCredentials,
53 FetchOptions::Credentials::Include,
54 SecurityCheckPolicy::SkipSecurityCheck,
55 FetchOptions::Mode::NoCors,
56 CertificateInfoPolicy::DoNotIncludeCertificateInfo,
57 ContentSecurityPolicyImposition::DoPolicyCheck,
58 DefersLoadingPolicy::AllowDefersLoading,
59 CachingPolicy::AllowCaching))
60 , m_client(client)
61{
62#if ENABLE(CONTENT_EXTENSIONS)
63 m_resourceType = { ContentExtensions::ResourceType::Other };
64#endif
65}
66
67NetscapePlugInStreamLoader::~NetscapePlugInStreamLoader() = default;
68
69void NetscapePlugInStreamLoader::create(Frame& frame, NetscapePlugInStreamLoaderClient& client, ResourceRequest&& request, CompletionHandler<void(RefPtr<NetscapePlugInStreamLoader>&&)>&& completionHandler)
70{
71 auto loader(adoptRef(*new NetscapePlugInStreamLoader(frame, client)));
72 loader->init(WTFMove(request), [loader, completionHandler = WTFMove(completionHandler)] (bool initialized) mutable {
73 if (!initialized)
74 return completionHandler(nullptr);
75 completionHandler(WTFMove(loader));
76 });
77}
78
79bool NetscapePlugInStreamLoader::isDone() const
80{
81 return !m_client;
82}
83
84void NetscapePlugInStreamLoader::releaseResources()
85{
86 m_client = nullptr;
87 ResourceLoader::releaseResources();
88}
89
90void NetscapePlugInStreamLoader::init(ResourceRequest&& request, CompletionHandler<void(bool)>&& completionHandler)
91{
92 ResourceLoader::init(WTFMove(request), [this, protectedThis = Ref { *this }, completionHandler = WTFMove(completionHandler)] (bool success) mutable {
93 if (!success)
94 return completionHandler(false);
95 ASSERT(!reachedTerminalState());
96 m_documentLoader->addPlugInStreamLoader(*this);
97 m_isInitialized = true;
98 completionHandler(true);
99 });
100}
101
102void NetscapePlugInStreamLoader::willSendRequest(ResourceRequest&& request, const ResourceResponse& redirectResponse, CompletionHandler<void(ResourceRequest&&)>&& callback)
103{
104 if (!m_client)
105 return;
106
107 m_client->willSendRequest(this, WTFMove(request), redirectResponse, [protectedThis = Ref { *this }, redirectResponse, callback = WTFMove(callback)] (ResourceRequest&& request) mutable {
108 if (!request.isNull())
109 protectedThis->willSendRequestInternal(WTFMove(request), redirectResponse, WTFMove(callback));
110 else
111 callback({ });
112 });
113}
114
115void NetscapePlugInStreamLoader::didReceiveResponse(const ResourceResponse& response, CompletionHandler<void()>&& policyCompletionHandler)
116{
117 Ref<NetscapePlugInStreamLoader> protectedThis(*this);
118 CompletionHandlerCallingScope completionHandlerCaller(WTFMove(policyCompletionHandler));
119
120 if (m_client)
121 m_client->didReceiveResponse(this, response);
122
123 // Don't continue if the stream is cancelled
124 if (!m_client)
125 return;
126
127 ResourceLoader::didReceiveResponse(response, [this, protectedThis = WTFMove(protectedThis), response, completionHandlerCaller = WTFMove(completionHandlerCaller)]() mutable {
128 // Don't continue if the stream is cancelled
129 if (!m_client)
130 return;
131
132 if (!response.isInHTTPFamily())
133 return;
134
135 if (m_client->wantsAllStreams())
136 return;
137
138 // Status code can be null when serving from a Web archive.
139 if (response.httpStatusCode() && (response.httpStatusCode() < 100 || response.httpStatusCode() >= 400))
140 cancel(frameLoader()->client().fileDoesNotExistError(response));
141 });
142}
143
144void NetscapePlugInStreamLoader::didReceiveData(const SharedBuffer& buffer, long long encodedDataLength, DataPayloadType dataPayloadType)
145{
146 Ref<NetscapePlugInStreamLoader> protectedThis(*this);
147
148 if (m_client)
149 m_client->didReceiveData(this, buffer);
150
151 ResourceLoader::didReceiveData(buffer, encodedDataLength, dataPayloadType);
152}
153
154void NetscapePlugInStreamLoader::didFinishLoading(const NetworkLoadMetrics& networkLoadMetrics)
155{
156 Ref<NetscapePlugInStreamLoader> protectedThis(*this);
157
158 notifyDone();
159
160 if (m_client)
161 m_client->didFinishLoading(this);
162 ResourceLoader::didFinishLoading(networkLoadMetrics);
163}
164
165void NetscapePlugInStreamLoader::didFail(const ResourceError& error)
166{
167 Ref<NetscapePlugInStreamLoader> protectedThis(*this);
168
169 notifyDone();
170
171 if (m_client)
172 m_client->didFail(this, error);
173 ResourceLoader::didFail(error);
174}
175
176void NetscapePlugInStreamLoader::willCancel(const ResourceError& error)
177{
178 if (m_client)
179 m_client->didFail(this, error);
180}
181
182void NetscapePlugInStreamLoader::didCancel(const ResourceError&)
183{
184 notifyDone();
185}
186
187void NetscapePlugInStreamLoader::notifyDone()
188{
189 if (!m_isInitialized)
190 return;
191
192 m_documentLoader->removePlugInStreamLoader(*this);
193}
194
195
196}
Note: See TracBrowser for help on using the repository browser.