Title: [224532] trunk
Revision
224532
Author
[email protected]
Date
2017-11-07 08:25:58 -0800 (Tue, 07 Nov 2017)

Log Message

Support the case of fetch events that are not responded
https://bugs.webkit.org/show_bug.cgi?id=179336

Patch by Youenn Fablet <[email protected]> on 2017-11-07
Reviewed by Chris Dumez.

Source/WebCore:

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:

Source/WebKit:

* WebProcess/Storage/WebServiceWorkerFetchTaskClient.cpp:
(WebKit::WebServiceWorkerFetchTaskClient::didNotHandle):
* WebProcess/Storage/WebServiceWorkerFetchTaskClient.h:

LayoutTests:

* 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):

Modified Paths

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 };
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to