Title: [226361] trunk
Revision
226361
Author
[email protected]
Date
2018-01-03 09:32:31 -0800 (Wed, 03 Jan 2018)

Log Message

Select service worker for documents with data/blob URLS
https://bugs.webkit.org/show_bug.cgi?id=181213

Patch by Youenn Fablet <[email protected]> on 2018-01-03
Reviewed by Alex Christensen.

Source/WebCore:

Covered by updated test.

Reusing the service worker of the parent for blob/data URL documents.

* loader/DocumentLoader.cpp:
(WebCore::isLocalURL):
(WebCore::DocumentLoader::commitData):

LayoutTests:

* http/tests/workers/service/serviceworkerclients-claim.https-expected.txt:
* http/tests/workers/service/serviceworkerclients-claim.https.html:

Modified Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (226360 => 226361)


--- trunk/LayoutTests/ChangeLog	2018-01-03 17:28:37 UTC (rev 226360)
+++ trunk/LayoutTests/ChangeLog	2018-01-03 17:32:31 UTC (rev 226361)
@@ -1,3 +1,13 @@
+2018-01-03  Youenn Fablet  <[email protected]>
+
+        Select service worker for documents with data/blob URLS
+        https://bugs.webkit.org/show_bug.cgi?id=181213
+
+        Reviewed by Alex Christensen.
+
+        * http/tests/workers/service/serviceworkerclients-claim.https-expected.txt:
+        * http/tests/workers/service/serviceworkerclients-claim.https.html:
+
 2018-01-03  Ms2ger  <[email protected]>
 
         [GTK] Remove crash annotation for createImageBitmap-invalid-args.html.

Modified: trunk/LayoutTests/http/tests/workers/service/serviceworkerclients-claim.https-expected.txt (226360 => 226361)


--- trunk/LayoutTests/http/tests/workers/service/serviceworkerclients-claim.https-expected.txt	2018-01-03 17:28:37 UTC (rev 226360)
+++ trunk/LayoutTests/http/tests/workers/service/serviceworkerclients-claim.https-expected.txt	2018-01-03 17:32:31 UTC (rev 226361)
@@ -1,4 +1,7 @@
 
+
 PASS Setup worker 
 PASS Test self.clients.claim 
+PASS Test data URL frame 
+PASS Test blob URL frame 
 

Modified: trunk/LayoutTests/http/tests/workers/service/serviceworkerclients-claim.https.html (226360 => 226361)


--- trunk/LayoutTests/http/tests/workers/service/serviceworkerclients-claim.https.html	2018-01-03 17:28:37 UTC (rev 226360)
+++ trunk/LayoutTests/http/tests/workers/service/serviceworkerclients-claim.https.html	2018-01-03 17:32:31 UTC (rev 226361)
@@ -2,6 +2,7 @@
 <head>
 <script src=""
 <script src=""
+<script src=""
 </head>
 <body>
 <script>
@@ -47,6 +48,36 @@
     var text = await response.text();
     assert_equals(text, "PASS");
 }, "Test self.clients.claim");
+
+var htmlString = '<html><script>async function doTest() { ' +
+  '    var response = await fetch("https://127.0.0.1:8443/pinkelephant");' +
+  '    var text = await response.text();' +
+  '    window.parent.postMessage(text, "*");' +
+  '}' +
+  'doTest();' +
+  '</scr' + 'ipt></h' + 'tml>';
+
+promise_test(async (test) => {
+    var promise = new Promise((resolve, reject) => {
+        window.addEventListener("message", (event) => {
+            resolve(event.data);
+        }, false);
+        setTimeout(() => {  reject("Did not receive any message from iframe"); }, 5000);
+    });
+    var frame = await withFrame("data:text/html," + htmlString);
+    var result = await promise;
+    assert_equals(result, "PASS");
+}, "Test data URL frame");
+
+promise_test(async (test) => {
+    var blob = new Blob([''], {type: "text/html"});
+    var blobURL = URL.createObjectURL(blob);
+    var frame = await withFrame(blobURL);
+    var response = await frame.contentWindow.fetch("https://127.0.0.1:8443/pinkelephant");
+    var text = await response.text();
+    assert_equals(text, "PASS");
+}, "Test blob URL frame");
+
 </script>
 </body>
 </html>

Modified: trunk/Source/WebCore/ChangeLog (226360 => 226361)


--- trunk/Source/WebCore/ChangeLog	2018-01-03 17:28:37 UTC (rev 226360)
+++ trunk/Source/WebCore/ChangeLog	2018-01-03 17:32:31 UTC (rev 226361)
@@ -1,3 +1,18 @@
+2018-01-03  Youenn Fablet  <[email protected]>
+
+        Select service worker for documents with data/blob URLS
+        https://bugs.webkit.org/show_bug.cgi?id=181213
+
+        Reviewed by Alex Christensen.
+
+        Covered by updated test.
+
+        Reusing the service worker of the parent for blob/data URL documents.
+
+        * loader/DocumentLoader.cpp:
+        (WebCore::isLocalURL):
+        (WebCore::DocumentLoader::commitData):
+
 2018-01-03  Ryan Haddad  <[email protected]>
 
         Unreviewed, rolling out r226352.

Modified: trunk/Source/WebCore/loader/DocumentLoader.cpp (226360 => 226361)


--- trunk/Source/WebCore/loader/DocumentLoader.cpp	2018-01-03 17:28:37 UTC (rev 226360)
+++ trunk/Source/WebCore/loader/DocumentLoader.cpp	2018-01-03 17:32:31 UTC (rev 226361)
@@ -863,6 +863,15 @@
     cancelMainResourceLoad(error);
 }
 
+#if ENABLE(SERVICE_WORKER)
+static inline bool isLocalURL(const URL& url)
+{
+    // https://fetch.spec.whatwg.org/#is-local
+    auto protocol = url.protocol().toStringWithoutCopying();
+    return equalLettersIgnoringASCIICase(protocol, "data") || equalLettersIgnoringASCIICase(protocol, "blob") || equalLettersIgnoringASCIICase(protocol, "about");
+}
+#endif
+
 void DocumentLoader::commitData(const char* bytes, size_t length)
 {
     if (!m_gotFirstByte) {
@@ -892,8 +901,12 @@
             if (m_serviceWorkerRegistrationData && m_serviceWorkerRegistrationData->activeWorker) {
                 m_frame->document()->setActiveServiceWorker(ServiceWorker::getOrCreate(*m_frame->document(), WTFMove(m_serviceWorkerRegistrationData->activeWorker.value())));
                 m_serviceWorkerRegistrationData = { };
+            } else if (isLocalURL(m_frame->document()->url())) {
+                if (auto* parent = m_frame->document()->parentDocument())
+                    m_frame->document()->setActiveServiceWorker(parent->activeServiceWorker());
             }
-            if (SchemeRegistry::canServiceWorkersHandleURLScheme(m_frame->document()->url().protocol().toStringWithoutCopying()))
+
+            if (m_frame->document()->activeServiceWorker() || SchemeRegistry::canServiceWorkersHandleURLScheme(m_frame->document()->url().protocol().toStringWithoutCopying()))
                 m_frame->document()->setServiceWorkerConnection(&ServiceWorkerProvider::singleton().serviceWorkerConnectionForSession(m_frame->page()->sessionID()));
         }
 #endif
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to