Diff
Modified: trunk/LayoutTests/ChangeLog (225296 => 225297)
--- trunk/LayoutTests/ChangeLog 2017-11-29 22:19:23 UTC (rev 225296)
+++ trunk/LayoutTests/ChangeLog 2017-11-29 23:03:49 UTC (rev 225297)
@@ -1,3 +1,16 @@
+2017-11-29 Youenn Fablet <you...@apple.com>
+
+ Add support for service worker generated redirections
+ https://bugs.webkit.org/show_bug.cgi?id=179498
+
+ Reviewed by Darin Adler.
+
+ * http/tests/workers/service/resources/service-worker-redirection-fetch-worker.js: Added.
+ (event.event.request.url.indexOf):
+ (event.event.request.url.endsWith):
+ * http/tests/workers/service/service-worker-redirection-fetch.https-expected.txt: Added.
+ * http/tests/workers/service/service-worker-redirection-fetch.https.html: Added.
+
2017-11-29 Chris Dumez <cdu...@apple.com>
Start exposing self.registration inside service workers
Modified: trunk/Source/WebCore/ChangeLog (225296 => 225297)
--- trunk/Source/WebCore/ChangeLog 2017-11-29 22:19:23 UTC (rev 225296)
+++ trunk/Source/WebCore/ChangeLog 2017-11-29 23:03:49 UTC (rev 225297)
@@ -1,3 +1,28 @@
+2017-11-29 Youenn Fablet <you...@apple.com>
+
+ Add support for service worker generated redirections
+ https://bugs.webkit.org/show_bug.cgi?id=179498
+
+ Reviewed by Darin Adler.
+
+ Test: http/tests/workers/service/service-worker-redirection-fetch.https.html
+
+ Added redirection routines following fetch specification to:
+ - check whether a response is a redirection
+ - generate a redirected request from a request and its redirection response.
+ Added some specific redirect request generation following existing WebKit networking code.
+
+ * Modules/fetch/FetchResponse.cpp:
+ (WebCore::FetchResponse::redirect):
+ (WebCore::isRedirectStatus): Deleted.
+ * platform/network/ResourceRequestBase.cpp:
+ (WebCore::shouldUseGet):
+ (WebCore::ResourceRequestBase::redirectedRequest const):
+ * platform/network/ResourceRequestBase.h:
+ * platform/network/ResourceResponseBase.h:
+ (WebCore::ResourceResponseBase::isRedirectionStatusCode):
+ (WebCore::ResourceResponseBase::isRedirection const):
+
2017-11-29 Chris Dumez <cdu...@apple.com>
Start exposing self.registration inside service workers
Modified: trunk/Source/WebCore/Modules/fetch/FetchResponse.cpp (225296 => 225297)
--- trunk/Source/WebCore/Modules/fetch/FetchResponse.cpp 2017-11-29 22:19:23 UTC (rev 225296)
+++ trunk/Source/WebCore/Modules/fetch/FetchResponse.cpp 2017-11-29 23:03:49 UTC (rev 225297)
@@ -38,11 +38,6 @@
namespace WebCore {
-static inline bool isRedirectStatus(int status)
-{
- return status == 301 || status == 302 || status == 303 || status == 307 || status == 308;
-}
-
// https://fetch.spec.whatwg.org/#null-body-status
static inline bool isNullBodyStatus(int status)
{
@@ -134,7 +129,7 @@
URL requestURL = context.completeURL(url);
if (!requestURL.isValid() || !requestURL.user().isEmpty() || !requestURL.pass().isEmpty())
return Exception { TypeError };
- if (!isRedirectStatus(status))
+ if (!ResourceResponse::isRedirectionStatusCode(status))
return Exception { RangeError };
auto redirectResponse = adoptRef(*new FetchResponse(context, { }, FetchHeaders::create(FetchHeaders::Guard::Immutable), { }));
redirectResponse->m_response.setHTTPStatusCode(status);
Modified: trunk/Source/WebCore/platform/network/HTTPHeaderNames.in (225296 => 225297)
--- trunk/Source/WebCore/platform/network/HTTPHeaderNames.in 2017-11-29 22:19:23 UTC (rev 225296)
+++ trunk/Source/WebCore/platform/network/HTTPHeaderNames.in 2017-11-29 23:03:49 UTC (rev 225297)
@@ -74,6 +74,7 @@
Ping-To
Purpose
Pragma
+Proxy-Authorization
Range
Referer
Refresh
Modified: trunk/Source/WebCore/platform/network/ResourceRequestBase.cpp (225296 => 225297)
--- trunk/Source/WebCore/platform/network/ResourceRequestBase.cpp 2017-11-29 22:19:23 UTC (rev 225296)
+++ trunk/Source/WebCore/platform/network/ResourceRequestBase.cpp 2017-11-29 23:03:49 UTC (rev 225297)
@@ -120,6 +120,42 @@
m_platformRequestUpdated = false;
}
+static bool shouldUseGet(const ResourceRequestBase& request, const ResourceResponse& redirectResponse)
+{
+ if (redirectResponse.httpStatusCode() == 301 || redirectResponse.httpStatusCode() == 302)
+ return equalLettersIgnoringASCIICase(request.httpMethod(), "post");
+ return redirectResponse.httpStatusCode() == 303;
+}
+
+ResourceRequest ResourceRequestBase::redirectedRequest(const ResourceResponse& redirectResponse, bool shouldClearReferrerOnHTTPSToHTTPRedirect) const
+{
+ ASSERT(redirectResponse.isRedirection());
+ // This method is based on https://fetch.spec.whatwg.org/#http-redirect-fetch.
+ // It also implements additional processing like done by CFNetwork layer.
+
+ auto request = asResourceRequest();
+ auto location = redirectResponse.httpHeaderField(HTTPHeaderName::Location);
+
+ request.setURL(location.isEmpty() ? URL { } : URL { redirectResponse.url(), location });
+
+ if (shouldUseGet(*this, redirectResponse)) {
+ request.setHTTPMethod(ASCIILiteral("GET"));
+ request.setHTTPBody(nullptr);
+ request.clearHTTPContentType();
+ request.m_httpHeaderFields.remove(HTTPHeaderName::ContentLength);
+ }
+
+ if (shouldClearReferrerOnHTTPSToHTTPRedirect && !request.url().protocolIs("https") && WebCore::protocolIs(request.httpReferrer(), "https"))
+ request.clearHTTPReferrer();
+
+ if (!protocolHostAndPortAreEqual(request.url(), redirectResponse.url()))
+ request.clearHTTPOrigin();
+ request.clearHTTPAuthorization();
+ request.m_httpHeaderFields.remove(HTTPHeaderName::ProxyAuthorization);
+
+ return request;
+}
+
void ResourceRequestBase::removeCredentials()
{
updateResourceRequest();
@@ -520,7 +556,7 @@
return arePointingToEqualData(a.httpBody(), b.httpBody());
}
-bool ResourceRequestBase::compare(const ResourceRequest& a, const ResourceRequest& b)
+bool ResourceRequestBase::equal(const ResourceRequest& a, const ResourceRequest& b)
{
if (!equalIgnoringHeaderFields(a, b))
return false;
Modified: trunk/Source/WebCore/platform/network/ResourceRequestBase.h (225296 => 225297)
--- trunk/Source/WebCore/platform/network/ResourceRequestBase.h 2017-11-29 22:19:23 UTC (rev 225296)
+++ trunk/Source/WebCore/platform/network/ResourceRequestBase.h 2017-11-29 23:03:49 UTC (rev 225297)
@@ -50,6 +50,7 @@
};
class ResourceRequest;
+class ResourceResponse;
// Do not use this type directly. Use ResourceRequest instead.
class ResourceRequestBase {
@@ -64,6 +65,8 @@
WEBCORE_EXPORT const URL& url() const;
WEBCORE_EXPORT void setURL(const URL& url);
+ WEBCORE_EXPORT ResourceRequest redirectedRequest(const ResourceResponse&, bool shouldClearReferrerOnHTTPSToHTTPRedirect) const;
+
WEBCORE_EXPORT void removeCredentials();
WEBCORE_EXPORT ResourceRequestCachePolicy cachePolicy() const;
@@ -170,7 +173,7 @@
WEBCORE_EXPORT static void setDefaultAllowCookies(bool);
#endif
- static bool compare(const ResourceRequest&, const ResourceRequest&);
+ WEBCORE_EXPORT static bool equal(const ResourceRequest&, const ResourceRequest&);
protected:
// Used when ResourceRequest is initialized from a platform representation of the request
@@ -234,7 +237,7 @@
bool equalIgnoringHeaderFields(const ResourceRequestBase&, const ResourceRequestBase&);
-inline bool operator==(const ResourceRequest& a, const ResourceRequest& b) { return ResourceRequestBase::compare(a, b); }
+inline bool operator==(const ResourceRequest& a, const ResourceRequest& b) { return ResourceRequestBase::equal(a, b); }
inline bool operator!=(ResourceRequest& a, const ResourceRequest& b) { return !(a == b); }
WEBCORE_EXPORT unsigned initializeMaximumHTTPConnectionCountPerHost();
Modified: trunk/Source/WebCore/platform/network/ResourceResponseBase.h (225296 => 225297)
--- trunk/Source/WebCore/platform/network/ResourceResponseBase.h 2017-11-29 22:19:23 UTC (rev 225296)
+++ trunk/Source/WebCore/platform/network/ResourceResponseBase.h 2017-11-29 23:03:49 UTC (rev 225297)
@@ -47,6 +47,8 @@
enum class Type { Basic, Cors, Default, Error, Opaque, Opaqueredirect };
enum class Tainting { Basic, Cors, Opaque, Opaqueredirect };
+ static bool isRedirectionStatusCode(int code) { return code == 301 || code == 302 || code == 303 || code == 307 || code == 308; }
+
struct CrossThreadData {
CrossThreadData(const CrossThreadData&) = delete;
CrossThreadData& operator=(const CrossThreadData&) = delete;
@@ -88,6 +90,7 @@
WEBCORE_EXPORT int httpStatusCode() const;
WEBCORE_EXPORT void setHTTPStatusCode(int);
+ bool isRedirection() const { return isRedirectionStatusCode(m_httpStatusCode); }
WEBCORE_EXPORT const String& httpStatusText() const;
WEBCORE_EXPORT void setHTTPStatusText(const String&);
Modified: trunk/Source/WebKit/ChangeLog (225296 => 225297)
--- trunk/Source/WebKit/ChangeLog 2017-11-29 22:19:23 UTC (rev 225296)
+++ trunk/Source/WebKit/ChangeLog 2017-11-29 23:03:49 UTC (rev 225297)
@@ -1,5 +1,34 @@
2017-11-29 Youenn Fablet <you...@apple.com>
+ Add support for service worker generated redirections
+ https://bugs.webkit.org/show_bug.cgi?id=179498
+
+ Reviewed by Darin Adler.
+
+ Small refactoring to allow a service worker redirected fetch to follow the redirection through the service worker.
+
+ * WebProcess/Network/WebLoaderStrategy.cpp:
+ (WebKit::WebLoaderStrategy::scheduleLoad): Make use of the loader request in case a network load is needed after a service worker redirection.
+ * WebProcess/Storage/ServiceWorkerClientFetch.cpp:
+ (WebKit::ServiceWorkerClientFetch::create):
+ (WebKit::ServiceWorkerClientFetch::~ServiceWorkerClientFetch):
+ (WebKit::ServiceWorkerClientFetch::ServiceWorkerClientFetch):
+ (WebKit::ServiceWorkerClientFetch::start):
+ (WebKit::ServiceWorkerClientFetch::didReceiveResponse): Check for response.
+ Generate redirected request if needed and call loader callback to process the redirection.
+ Adding some states so that if didFinish is called before the willSendRequest callback, redirection is followed.
+ (WebKit::ServiceWorkerClientFetch::didFinish):
+ In case redirection should be followed, wait for didFinish to follow it.
+ This simplifies the model although introducing some limited latency.
+ * WebProcess/Storage/ServiceWorkerClientFetch.h:
+ * WebProcess/Storage/WebSWClientConnection.cpp:
+ (WebKit::WebSWClientConnection::startFetch):
+ * WebProcess/Storage/WebSWClientConnection.h:
+ * WebProcess/Storage/WebServiceWorkerProvider.cpp:
+ (WebKit::WebServiceWorkerProvider::handleFetch):
+
+2017-11-29 Youenn Fablet <you...@apple.com>
+
Add support for FetchEvent.clientId
https://bugs.webkit.org/show_bug.cgi?id=180052
Modified: trunk/Source/WebKit/WebProcess/Network/WebLoaderStrategy.cpp (225296 => 225297)
--- trunk/Source/WebKit/WebProcess/Network/WebLoaderStrategy.cpp 2017-11-29 22:19:23 UTC (rev 225296)
+++ trunk/Source/WebKit/WebProcess/Network/WebLoaderStrategy.cpp 2017-11-29 23:03:49 UTC (rev 225297)
@@ -219,7 +219,7 @@
}
#if ENABLE(SERVICE_WORKER)
- WebServiceWorkerProvider::singleton().handleFetch(resourceLoader, resource, sessionID, [trackingParameters, sessionID, shouldClearReferrerOnHTTPSToHTTPRedirect, maximumBufferingTime = maximumBufferingTime(resource), resourceLoader = makeRef(resourceLoader)] (ServiceWorkerClientFetch::Result result) mutable {
+ WebServiceWorkerProvider::singleton().handleFetch(resourceLoader, resource, sessionID, shouldClearReferrerOnHTTPSToHTTPRedirect, [trackingParameters, sessionID, shouldClearReferrerOnHTTPSToHTTPRedirect, maximumBufferingTime = maximumBufferingTime(resource), resourceLoader = makeRef(resourceLoader)] (ServiceWorkerClientFetch::Result result) mutable {
if (result != ServiceWorkerClientFetch::Result::Unhandled)
return;
if (resourceLoader->options().serviceWorkersMode == ServiceWorkersMode::Only) {
@@ -232,7 +232,7 @@
}
LOG(NetworkScheduling, "(WebProcess) WebLoaderStrategy::scheduleLoad, url '%s' will be scheduled through ServiceWorker handle fetch algorithm", resourceLoader->url().string().latin1().data());
- WebProcess::singleton().webLoaderStrategy().scheduleLoadFromNetworkProcess(resourceLoader.get(), resourceLoader->originalRequest(), trackingParameters, sessionID, shouldClearReferrerOnHTTPSToHTTPRedirect, maximumBufferingTime);
+ WebProcess::singleton().webLoaderStrategy().scheduleLoadFromNetworkProcess(resourceLoader.get(), resourceLoader->request(), trackingParameters, sessionID, shouldClearReferrerOnHTTPSToHTTPRedirect, maximumBufferingTime);
});
#else
LOG(NetworkScheduling, "(WebProcess) WebLoaderStrategy::scheduleLoad, url '%s' will be scheduled through ServiceWorker handle fetch algorithm", resourceLoader.url().string().latin1().data());
Modified: trunk/Source/WebKit/WebProcess/Storage/ServiceWorkerClientFetch.cpp (225296 => 225297)
--- trunk/Source/WebKit/WebProcess/Storage/ServiceWorkerClientFetch.cpp 2017-11-29 22:19:23 UTC (rev 225296)
+++ trunk/Source/WebKit/WebProcess/Storage/ServiceWorkerClientFetch.cpp 2017-11-29 23:03:49 UTC (rev 225297)
@@ -29,6 +29,7 @@
#if ENABLE(SERVICE_WORKER)
#include "DataReference.h"
+#include "WebSWClientConnection.h"
#include "WebServiceWorkerProvider.h"
#include <WebCore/MIMETypeRegistry.h>
#include <WebCore/NotImplemented.h>
@@ -38,25 +39,50 @@
namespace WebKit {
-ServiceWorkerClientFetch::ServiceWorkerClientFetch(WebServiceWorkerProvider& serviceWorkerProvider, Ref<WebCore::ResourceLoader>&& loader, uint64_t identifier, Ref<IPC::Connection>&& connection, Callback&& callback)
+Ref<ServiceWorkerClientFetch> ServiceWorkerClientFetch::create(WebServiceWorkerProvider& serviceWorkerProvider, Ref<WebCore::ResourceLoader>&& loader, uint64_t identifier, Ref<WebSWClientConnection>&& connection, bool shouldClearReferrerOnHTTPSToHTTPRedirect, Callback&& callback)
+{
+ auto fetch = adoptRef(*new ServiceWorkerClientFetch { serviceWorkerProvider, WTFMove(loader), identifier, WTFMove(connection), shouldClearReferrerOnHTTPSToHTTPRedirect, WTFMove(callback) });
+ fetch->start();
+ return fetch;
+}
+
+ServiceWorkerClientFetch::~ServiceWorkerClientFetch()
+{
+}
+
+ServiceWorkerClientFetch::ServiceWorkerClientFetch(WebServiceWorkerProvider& serviceWorkerProvider, Ref<WebCore::ResourceLoader>&& loader, uint64_t identifier, Ref<WebSWClientConnection>&& connection, bool shouldClearReferrerOnHTTPSToHTTPRedirect, Callback&& callback)
: m_serviceWorkerProvider(serviceWorkerProvider)
, m_loader(WTFMove(loader))
, m_identifier(identifier)
, m_connection(WTFMove(connection))
, m_callback(WTFMove(callback))
+ , m_shouldClearReferrerOnHTTPSToHTTPRedirect(shouldClearReferrerOnHTTPSToHTTPRedirect)
{
}
+void ServiceWorkerClientFetch::start()
+{
+ m_connection->startFetch(m_loader, m_loader->identifier());
+}
+
void ServiceWorkerClientFetch::didReceiveResponse(WebCore::ResourceResponse&& response)
{
auto protectedThis = makeRef(*this);
- if (!(response.httpStatusCode() <= 300 || response.httpStatusCode() >= 400 || response.httpStatusCode() == 304 || response.httpStatusCode() == 305 || response.httpStatusCode() == 306)) {
- // FIXME: Support redirections.
- notImplemented();
- m_loader->didFail({ ResourceError::Type::General });
- if (auto callback = WTFMove(m_callback))
- callback(Result::Succeeded);
+ if (response.isRedirection()) {
+ m_redirectionStatus = RedirectionStatus::Receiving;
+ // FIXME: Get shouldClearReferrerOnHTTPSToHTTPRedirect value from
+ m_loader->willSendRequest(m_loader->request().redirectedRequest(response, m_shouldClearReferrerOnHTTPSToHTTPRedirect), response, [protectedThis = makeRef(*this), this](ResourceRequest&& request) {
+ if (request.isNull() || !m_callback)
+ return;
+
+ ASSERT(request == m_loader->request());
+ if (m_redirectionStatus == RedirectionStatus::Received) {
+ start();
+ return;
+ }
+ m_redirectionStatus = RedirectionStatus::Following;
+ });
return;
}
@@ -92,6 +118,21 @@
void ServiceWorkerClientFetch::didFinish()
{
+ switch (m_redirectionStatus) {
+ case RedirectionStatus::None:
+ break;
+ case RedirectionStatus::Receiving:
+ m_redirectionStatus = RedirectionStatus::Received;
+ return;
+ case RedirectionStatus::Following:
+ m_redirectionStatus = RedirectionStatus::None;
+ start();
+ return;
+ case RedirectionStatus::Received:
+ ASSERT_NOT_REACHED();
+ m_redirectionStatus = RedirectionStatus::None;
+ }
+
ASSERT(!m_callback);
auto protectedThis = makeRef(*this);
Modified: trunk/Source/WebKit/WebProcess/Storage/ServiceWorkerClientFetch.h (225296 => 225297)
--- trunk/Source/WebKit/WebProcess/Storage/ServiceWorkerClientFetch.h 2017-11-29 22:19:23 UTC (rev 225296)
+++ trunk/Source/WebKit/WebProcess/Storage/ServiceWorkerClientFetch.h 2017-11-29 23:03:49 UTC (rev 225297)
@@ -27,6 +27,7 @@
#if ENABLE(SERVICE_WORKER)
+#include "DataReference.h"
#include "FormDataReference.h"
#include "MessageReceiver.h"
#include "MessageSender.h"
@@ -35,18 +36,19 @@
namespace WebKit {
+class WebSWClientConnection;
class WebServiceWorkerProvider;
-class ServiceWorkerClientFetch final : public RefCounted<ServiceWorkerClientFetch>, public IPC::MessageSender, public IPC::MessageReceiver {
+class ServiceWorkerClientFetch final : public RefCounted<ServiceWorkerClientFetch>, public IPC::MessageReceiver {
public:
enum class Result { Succeeded, Cancelled, Unhandled };
using Callback = WTF::CompletionHandler<void(Result)>;
- static Ref<ServiceWorkerClientFetch> create(WebServiceWorkerProvider& serviceWorkerProvider, Ref<WebCore::ResourceLoader>&& loader, uint64_t identifier, Ref<IPC::Connection>&& connection, Callback&& callback)
- {
- return adoptRef(*new ServiceWorkerClientFetch { serviceWorkerProvider, WTFMove(loader), identifier, WTFMove(connection), WTFMove(callback) });
- }
+ static Ref<ServiceWorkerClientFetch> create(WebServiceWorkerProvider&, Ref<WebCore::ResourceLoader>&&, uint64_t identifier, Ref<WebSWClientConnection>&&, bool shouldClearReferrerOnHTTPSToHTTPRedirect, Callback&&);
+ ~ServiceWorkerClientFetch();
+ void start();
+
void didReceiveMessage(IPC::Connection&, IPC::Decoder&) final;
void cancel();
@@ -53,7 +55,7 @@
bool isOngoing() const { return !!m_callback; }
private:
- ServiceWorkerClientFetch(WebServiceWorkerProvider&, Ref<WebCore::ResourceLoader>&&, uint64_t identifier, Ref<IPC::Connection>&&, Callback&&);
+ ServiceWorkerClientFetch(WebServiceWorkerProvider&, Ref<WebCore::ResourceLoader>&&, uint64_t identifier, Ref<WebSWClientConnection>&&, bool shouldClearReferrerOnHTTPSToHTTPRedirect, Callback&&);
void didReceiveResponse(WebCore::ResourceResponse&&);
void didReceiveData(const IPC::DataReference&, int64_t encodedDataLength);
@@ -62,14 +64,14 @@
void didFail();
void didNotHandle();
- IPC::Connection* messageSenderConnection() final { return m_connection.ptr(); }
- uint64_t messageSenderDestinationID() final { return m_identifier; }
-
WebServiceWorkerProvider& m_serviceWorkerProvider;
Ref<WebCore::ResourceLoader> m_loader;
uint64_t m_identifier { 0 };
- Ref<IPC::Connection> m_connection;
+ Ref<WebSWClientConnection> m_connection;
Callback m_callback;
+ enum class RedirectionStatus { None, Receiving, Following, Received };
+ RedirectionStatus m_redirectionStatus { RedirectionStatus::None };
+ bool m_shouldClearReferrerOnHTTPSToHTTPRedirect { true };
};
} // namespace WebKit
Modified: trunk/Source/WebKit/WebProcess/Storage/WebSWClientConnection.cpp (225296 => 225297)
--- trunk/Source/WebKit/WebProcess/Storage/WebSWClientConnection.cpp 2017-11-29 22:19:23 UTC (rev 225296)
+++ trunk/Source/WebKit/WebProcess/Storage/WebSWClientConnection.cpp 2017-11-29 23:03:49 UTC (rev 225297)
@@ -166,12 +166,10 @@
send(Messages::WebSWServerConnection::GetRegistrations(requestIdentifier, SecurityOriginData::fromSecurityOrigin(topOrigin), clientURL));
}
-Ref<ServiceWorkerClientFetch> WebSWClientConnection::startFetch(WebServiceWorkerProvider& provider, Ref<WebCore::ResourceLoader>&& loader, uint64_t identifier, ServiceWorkerClientFetch::Callback&& callback)
+void WebSWClientConnection::startFetch(const ResourceLoader& loader, uint64_t identifier)
{
- ASSERT(loader->options().serviceWorkersMode != ServiceWorkersMode::None && loader->options().serviceWorkerIdentifier);
-
- send(Messages::WebSWServerConnection::StartFetch { identifier, loader->options().serviceWorkerIdentifier, loader->originalRequest(), loader->options(), IPC::FormDataReference { loader->originalRequest().httpBody() } });
- return ServiceWorkerClientFetch::create(provider, WTFMove(loader), identifier, m_connection.get(), WTFMove(callback));
+ ASSERT(loader.options().serviceWorkersMode != ServiceWorkersMode::None && loader.options().serviceWorkerIdentifier);
+ send(Messages::WebSWServerConnection::StartFetch { identifier, loader.options().serviceWorkerIdentifier, loader.request(), loader.options(), IPC::FormDataReference { loader.request().httpBody() } });
}
void WebSWClientConnection::postMessageToServiceWorkerClient(DocumentIdentifier destinationContextIdentifier, const IPC::DataReference& message, ServiceWorkerData&& source, const String& sourceOrigin)
Modified: trunk/Source/WebKit/WebProcess/Storage/WebSWClientConnection.h (225296 => 225297)
--- trunk/Source/WebKit/WebProcess/Storage/WebSWClientConnection.h 2017-11-29 22:19:23 UTC (rev 225296)
+++ trunk/Source/WebKit/WebProcess/Storage/WebSWClientConnection.h 2017-11-29 23:03:49 UTC (rev 225297)
@@ -61,7 +61,7 @@
void didReceiveMessage(IPC::Connection&, IPC::Decoder&) final;
bool mayHaveServiceWorkerRegisteredForOrigin(const WebCore::SecurityOrigin&) const final;
- Ref<ServiceWorkerClientFetch> startFetch(WebServiceWorkerProvider&, Ref<WebCore::ResourceLoader>&&, uint64_t identifier, ServiceWorkerClientFetch::Callback&&);
+ void startFetch(const WebCore::ResourceLoader&, uint64_t identifier);
void postMessageToServiceWorkerClient(WebCore::DocumentIdentifier destinationContextIdentifier, const IPC::DataReference& message, WebCore::ServiceWorkerData&& source, const String& sourceOrigin);
Modified: trunk/Source/WebKit/WebProcess/Storage/WebServiceWorkerProvider.cpp (225296 => 225297)
--- trunk/Source/WebKit/WebProcess/Storage/WebServiceWorkerProvider.cpp 2017-11-29 22:19:23 UTC (rev 225296)
+++ trunk/Source/WebKit/WebProcess/Storage/WebServiceWorkerProvider.cpp 2017-11-29 23:03:49 UTC (rev 225297)
@@ -69,7 +69,7 @@
return !!options.serviceWorkerIdentifier;
}
-void WebServiceWorkerProvider::handleFetch(ResourceLoader& loader, CachedResource* resource, PAL::SessionID sessionID, ServiceWorkerClientFetch::Callback&& callback)
+void WebServiceWorkerProvider::handleFetch(ResourceLoader& loader, CachedResource* resource, PAL::SessionID sessionID, bool shouldClearReferrerOnHTTPSToHTTPRedirect, ServiceWorkerClientFetch::Callback&& callback)
{
if (!loader.request().url().protocolIsInHTTPFamily() || !shouldHandleFetch(loader.options())) {
callback(ServiceWorkerClientFetch::Result::Unhandled);
@@ -77,10 +77,7 @@
}
auto& connection = WebProcess::singleton().ensureWebToStorageProcessConnection().serviceWorkerConnectionForSession(sessionID);
- auto fetch = connection.startFetch(*this, loader, loader.identifier(), WTFMove(callback));
- ASSERT(fetch->isOngoing());
-
- m_ongoingFetchTasks.add(loader.identifier(), WTFMove(fetch));
+ m_ongoingFetchTasks.add(loader.identifier(), ServiceWorkerClientFetch::create(*this, loader, loader.identifier(), connection, shouldClearReferrerOnHTTPSToHTTPRedirect, WTFMove(callback)));
}
bool WebServiceWorkerProvider::cancelFetch(uint64_t fetchIdentifier)
Modified: trunk/Source/WebKit/WebProcess/Storage/WebServiceWorkerProvider.h (225296 => 225297)
--- trunk/Source/WebKit/WebProcess/Storage/WebServiceWorkerProvider.h 2017-11-29 22:19:23 UTC (rev 225296)
+++ trunk/Source/WebKit/WebProcess/Storage/WebServiceWorkerProvider.h 2017-11-29 23:03:49 UTC (rev 225297)
@@ -41,7 +41,7 @@
public:
static WebServiceWorkerProvider& singleton();
- void handleFetch(WebCore::ResourceLoader&, WebCore::CachedResource*, PAL::SessionID, ServiceWorkerClientFetch::Callback&&);
+ void handleFetch(WebCore::ResourceLoader&, WebCore::CachedResource*, PAL::SessionID, bool shouldClearReferrerOnHTTPSToHTTPRedirect, ServiceWorkerClientFetch::Callback&&);
bool cancelFetch(uint64_t fetchIdentifier);
void fetchFinished(uint64_t fetchIdentifier);