2
* Copyright (C) 2019 Apple Inc. All rights reserved.
4
* Redistribution and use in source and binary forms, with or without
5
* modification, are permitted provided that the following conditions
7
* 1. Redistributions of source code must retain the above copyright
8
* notice, this list of conditions and the following disclaimer.
9
* 2. Redistributions in binary form must reproduce the above copyright
10
* notice, this list of conditions and the following disclaimer in the
11
* documentation and/or other materials provided with the distribution.
13
* THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
14
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
15
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
17
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
18
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
19
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
20
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
21
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
22
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
23
* THE POSSIBILITY OF SUCH DAMAGE.
28
#if ENABLE(SERVICE_WORKER)
30
#include "NetworkCacheEntry.h"
31
#include "NetworkLoadClient.h"
32
#include <WebCore/ContentSecurityPolicyResponseHeaders.h>
33
#include <WebCore/FetchOptions.h>
34
#include <WebCore/ServiceWorkerJobData.h>
35
#include <wtf/CompletionHandler.h>
36
#include <wtf/WeakPtr.h>
39
struct ServiceWorkerFetchResult;
40
struct ServiceWorkerJobData;
41
class TextResourceDecoder;
49
class ServiceWorkerSoftUpdateLoader final : public NetworkLoadClient, public CanMakeWeakPtr<ServiceWorkerSoftUpdateLoader> {
50
WTF_MAKE_FAST_ALLOCATED;
52
using Handler = CompletionHandler<void(const WebCore::ServiceWorkerFetchResult&)>;
53
static void start(NetworkSession*, WebCore::ServiceWorkerJobData&&, bool shouldRefreshCache, WebCore::ResourceRequest&&, Handler&&);
55
~ServiceWorkerSoftUpdateLoader();
58
ServiceWorkerSoftUpdateLoader(NetworkSession&, WebCore::ServiceWorkerJobData&&, bool shouldRefreshCache, WebCore::ResourceRequest&&, Handler&&);
61
void didSendData(unsigned long long bytesSent, unsigned long long totalBytesToBeSent) final { }
62
bool isSynchronous() const final { return false; }
63
bool isAllowedToAskUserForCredentials() const final { return false; }
64
void willSendRedirectedRequest(WebCore::ResourceRequest&&, WebCore::ResourceRequest&& redirectRequest, WebCore::ResourceResponse&& redirectResponse) final;
65
void didReceiveResponse(WebCore::ResourceResponse&&, ResponseCompletionHandler&&) final;
66
void didReceiveBuffer(Ref<WebCore::SharedBuffer>&&, int reportedEncodedDataLength) final;
67
void didFinishLoading(const WebCore::NetworkLoadMetrics&) final;
68
void didFailLoading(const WebCore::ResourceError&) final;
70
void loadWithCacheEntry(NetworkCache::Entry&);
71
void loadFromNetwork(NetworkSession&, WebCore::ResourceRequest&&);
72
void fail(WebCore::ResourceError&&);
74
WebCore::ResourceError processResponse(const WebCore::ResourceResponse&);
76
Handler m_completionHandler;
77
WebCore::ServiceWorkerJobData m_jobData;
78
std::unique_ptr<NetworkLoad> m_networkLoad;
79
WeakPtr<NetworkSession> m_session;
81
String m_responseEncoding;
82
String m_referrerPolicy;
83
WebCore::ContentSecurityPolicyResponseHeaders m_contentSecurityPolicy;
85
std::unique_ptr<NetworkCache::Entry> m_cacheEntry;
86
RefPtr<WebCore::TextResourceDecoder> m_decoder;
87
StringBuilder m_script;
92
#endif // ENABLE(SERVICE_WORKER)