Diff
Modified: trunk/LayoutTests/ChangeLog (224531 => 224532)
--- trunk/LayoutTests/ChangeLog 2017-11-07 14:59:05 UTC (rev 224531)
+++ trunk/LayoutTests/ChangeLog 2017-11-07 16:25:58 UTC (rev 224532)
@@ -1,3 +1,16 @@
+2017-11-07 Youenn Fablet <[email protected]>
+
+ Support the case of fetch events that are not responded
+ https://bugs.webkit.org/show_bug.cgi?id=179336
+
+ Reviewed by Chris Dumez.
+
+ * http/tests/workers/service/basic-fetch.https-expected.txt:
+ * http/tests/workers/service/resources/basic-fetch-worker.js:
+ (event.event.request.url.indexOf):
+ * http/tests/workers/service/resources/basic-fetch.js:
+ (async.test):
+
2017-11-06 Michael Catanzaro <[email protected]>
Unreviewed GTK test gardening
Modified: trunk/LayoutTests/http/tests/workers/service/basic-fetch.https-expected.txt (224531 => 224532)
--- trunk/LayoutTests/http/tests/workers/service/basic-fetch.https-expected.txt 2017-11-07 14:59:05 UTC (rev 224531)
+++ trunk/LayoutTests/http/tests/workers/service/basic-fetch.https-expected.txt 2017-11-07 16:25:58 UTC (rev 224532)
@@ -5,5 +5,7 @@
test2 status code: 500
test2 status text: Error from service worker
test2 source: Service worker
-test3 fetch failed as expected
+PASS: test3 fetch failed as expected
+test4 status code: 404
+PASS: test5 fetch failed as expected
Modified: trunk/LayoutTests/http/tests/workers/service/resources/basic-fetch-worker.js (224531 => 224532)
--- trunk/LayoutTests/http/tests/workers/service/resources/basic-fetch-worker.js 2017-11-07 14:59:05 UTC (rev 224531)
+++ trunk/LayoutTests/http/tests/workers/service/resources/basic-fetch-worker.js 2017-11-07 16:25:58 UTC (rev 224532)
@@ -11,5 +11,13 @@
event.respondWith(Response.error());
return;
}
+ if (event.request.url.indexOf("test4") !== -1)
+ return;
+
+ if (event.request.url.indexOf("test5") !== -1) {
+ event.preventDefault();
+ return;
+ }
+
event.respondWith(Response.error());
});
Modified: trunk/LayoutTests/http/tests/workers/service/resources/basic-fetch.js (224531 => 224532)
--- trunk/LayoutTests/http/tests/workers/service/resources/basic-fetch.js 2017-11-07 14:59:05 UTC (rev 224531)
+++ trunk/LayoutTests/http/tests/workers/service/resources/basic-fetch.js 2017-11-07 16:25:58 UTC (rev 224532)
@@ -20,13 +20,25 @@
try {
response = await fetch("test3");
- log("test3 fetch succeeded unexpectedly");
+ log("FAIL: test3 fetch succeeded unexpectedly");
log("test3 status code: " + response.status);
log("test3 status text: " + response.statusText);
} catch (e) {
- log("test3 fetch failed as expected");
+ log("PASS: test3 fetch failed as expected");
}
+
+ var response = await fetch("test4");
+ log("test4 status code: " + response.status);
+
+ try {
+ response = await fetch("test5");
+ log("FAIL: test5 fetch succeeded unexpectedly");
+ log("test5 status code: " + response.status);
+ } catch (e) {
+ log("PASS: test5 fetch failed as expected");
+ }
+
} catch(e) {
log("Got exception: " + e);
}
Modified: trunk/Source/WebCore/ChangeLog (224531 => 224532)
--- trunk/Source/WebCore/ChangeLog 2017-11-07 14:59:05 UTC (rev 224531)
+++ trunk/Source/WebCore/ChangeLog 2017-11-07 16:25:58 UTC (rev 224532)
@@ -1,3 +1,20 @@
+2017-11-07 Youenn Fablet <[email protected]>
+
+ Support the case of fetch events that are not responded
+ https://bugs.webkit.org/show_bug.cgi?id=179336
+
+ Reviewed by Chris Dumez.
+
+ Covered by updated test.
+
+ Implementing https://w3c.github.io/ServiceWorker/#on-fetch-request-algorithm step 19.
+ Making FetchEvent cancellable.
+
+ * workers/service/FetchEvent.h:
+ * workers/service/context/ServiceWorkerFetch.cpp:
+ (WebCore::ServiceWorkerFetch::dispatchFetchEvent):
+ * workers/service/context/ServiceWorkerFetch.h:
+
2017-11-07 Joseph Pecoraro <[email protected]>
Web Inspector: Create inspector agents lazily
Modified: trunk/Source/WebCore/workers/service/FetchEvent.h (224531 => 224532)
--- trunk/Source/WebCore/workers/service/FetchEvent.h 2017-11-07 14:59:05 UTC (rev 224531)
+++ trunk/Source/WebCore/workers/service/FetchEvent.h 2017-11-07 16:25:58 UTC (rev 224532)
@@ -63,6 +63,8 @@
const String& reservedClientId() const { return m_reservedClientId; }
const String& targetClientId() const { return m_targetClientId; }
+ bool respondWithEntered() const { return m_respondWithEntered; }
+
private:
WEBCORE_EXPORT FetchEvent(const AtomicString&, Init&&, IsTrusted);
Modified: trunk/Source/WebCore/workers/service/context/ServiceWorkerFetch.cpp (224531 => 224532)
--- trunk/Source/WebCore/workers/service/context/ServiceWorkerFetch.cpp 2017-11-07 14:59:05 UTC (rev 224531)
+++ trunk/Source/WebCore/workers/service/context/ServiceWorkerFetch.cpp 2017-11-07 16:25:58 UTC (rev 224532)
@@ -96,13 +96,23 @@
// FIXME: Initialize other FetchEvent::Init fields.
FetchEvent::Init init;
init.request = WTFMove(fetchRequest);
+ init.cancelable = true;
auto event = FetchEvent::create(eventNames().fetchEvent, WTFMove(init), Event::IsTrusted::Yes);
- event->onResponse([client = WTFMove(client)] (FetchResponse* response) mutable {
+ event->onResponse([client = client.copyRef()] (FetchResponse* response) mutable {
processResponse(WTFMove(client), response);
});
globalScope.dispatchEvent(event);
+
+ if (!event->respondWithEntered()) {
+ if (event->defaultPrevented()) {
+ client->didFail();
+ return;
+ }
+ client->didNotHandle();
+ // FIXME: Handle soft update.
+ }
}
} // namespace ServiceWorkerFetch
Modified: trunk/Source/WebCore/workers/service/context/ServiceWorkerFetch.h (224531 => 224532)
--- trunk/Source/WebCore/workers/service/context/ServiceWorkerFetch.h 2017-11-07 14:59:05 UTC (rev 224531)
+++ trunk/Source/WebCore/workers/service/context/ServiceWorkerFetch.h 2017-11-07 16:25:58 UTC (rev 224532)
@@ -47,6 +47,7 @@
virtual void didReceiveData(Ref<SharedBuffer>&&) = 0;
virtual void didFail() = 0;
virtual void didFinish() = 0;
+ virtual void didNotHandle() = 0;
};
void dispatchFetchEvent(Ref<Client>&&, WorkerGlobalScope&, ResourceRequest&&, FetchOptions&&);
Modified: trunk/Source/WebKit/ChangeLog (224531 => 224532)
--- trunk/Source/WebKit/ChangeLog 2017-11-07 14:59:05 UTC (rev 224531)
+++ trunk/Source/WebKit/ChangeLog 2017-11-07 16:25:58 UTC (rev 224532)
@@ -1,3 +1,14 @@
+2017-11-07 Youenn Fablet <[email protected]>
+
+ Support the case of fetch events that are not responded
+ https://bugs.webkit.org/show_bug.cgi?id=179336
+
+ Reviewed by Chris Dumez.
+
+ * WebProcess/Storage/WebServiceWorkerFetchTaskClient.cpp:
+ (WebKit::WebServiceWorkerFetchTaskClient::didNotHandle):
+ * WebProcess/Storage/WebServiceWorkerFetchTaskClient.h:
+
2017-11-06 Alex Christensen <[email protected]>
Make ResourceLoader::willSendRequestInternal asynchronous
Modified: trunk/Source/WebKit/WebProcess/Storage/WebServiceWorkerFetchTaskClient.cpp (224531 => 224532)
--- trunk/Source/WebKit/WebProcess/Storage/WebServiceWorkerFetchTaskClient.cpp 2017-11-07 14:59:05 UTC (rev 224531)
+++ trunk/Source/WebKit/WebProcess/Storage/WebServiceWorkerFetchTaskClient.cpp 2017-11-07 16:25:58 UTC (rev 224532)
@@ -82,6 +82,14 @@
m_connection = nullptr;
}
+void WebServiceWorkerFetchTaskClient::didNotHandle()
+{
+ if (!m_connection)
+ return;
+ m_connection->send(Messages::StorageProcess::DidNotHandleFetch { m_serverConnectionIdentifier, m_fetchTaskIdentifier }, 0);
+ m_connection = nullptr;
+}
+
} // namespace WebKit
#endif // ENABLE(SERVICE_WORKER)
Modified: trunk/Source/WebKit/WebProcess/Storage/WebServiceWorkerFetchTaskClient.h (224531 => 224532)
--- trunk/Source/WebKit/WebProcess/Storage/WebServiceWorkerFetchTaskClient.h 2017-11-07 14:59:05 UTC (rev 224531)
+++ trunk/Source/WebKit/WebProcess/Storage/WebServiceWorkerFetchTaskClient.h 2017-11-07 16:25:58 UTC (rev 224532)
@@ -48,6 +48,7 @@
void didReceiveData(Ref<WebCore::SharedBuffer>&&) final;
void didFail() final;
void didFinish() final;
+ void didNotHandle() final;
RefPtr<IPC::Connection> m_connection;
uint64_t m_serverConnectionIdentifier { 0 };