Title: [225644] trunk
Revision
225644
Author
[email protected]
Date
2017-12-07 13:46:11 -0800 (Thu, 07 Dec 2017)

Log Message

Activate IDB and WebSockets in service workers
https://bugs.webkit.org/show_bug.cgi?id=180534

Patch by Youenn Fablet <[email protected]> on 2017-12-07
Reviewed by Brady Eidson.

LayoutTests/imported/w3c:

* web-platform-tests/service-workers/service-worker/websocket-in-service-worker.https-expected.txt:

Source/WebCore:

Tests: http/tests/workers/service/serviceworker-idb.https.html
       http/tests/workers/service/serviceworker-websocket.https.html

Using the dummy document used for loading to also fuel IDB and WebSocket.

* workers/service/context/ServiceWorkerThread.cpp:
(WebCore::ServiceWorkerThread::ServiceWorkerThread):
* workers/service/context/ServiceWorkerThread.h:
* workers/service/context/ServiceWorkerThreadProxy.cpp:
(WebCore::idbConnectionProxy):
(WebCore::ServiceWorkerThreadProxy::ServiceWorkerThreadProxy):

LayoutTests:

* http/tests/workers/service/resources/serviceworker-idb-worker.js: Added.
* http/tests/workers/service/resources/serviceworker-websocket-worker.js: Added.
* http/tests/workers/service/serviceworker-idb.https-expected.txt: Added.
* http/tests/workers/service/serviceworker-idb.https.html: Added.
* http/tests/workers/service/serviceworker-websocket.https-expected.txt: Added.
* http/tests/workers/service/serviceworker-websocket.https.html: Added.

Modified Paths

Added Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (225643 => 225644)


--- trunk/LayoutTests/ChangeLog	2017-12-07 21:28:19 UTC (rev 225643)
+++ trunk/LayoutTests/ChangeLog	2017-12-07 21:46:11 UTC (rev 225644)
@@ -1,3 +1,17 @@
+2017-12-07  Youenn Fablet  <[email protected]>
+
+        Activate IDB and WebSockets in service workers
+        https://bugs.webkit.org/show_bug.cgi?id=180534
+
+        Reviewed by Brady Eidson.
+
+        * http/tests/workers/service/resources/serviceworker-idb-worker.js: Added.
+        * http/tests/workers/service/resources/serviceworker-websocket-worker.js: Added.
+        * http/tests/workers/service/serviceworker-idb.https-expected.txt: Added.
+        * http/tests/workers/service/serviceworker-idb.https.html: Added.
+        * http/tests/workers/service/serviceworker-websocket.https-expected.txt: Added.
+        * http/tests/workers/service/serviceworker-websocket.https.html: Added.
+
 2017-12-07  Jer Noble  <[email protected]>
 
         [EME] Support the 'encrypted' event for FPS encrypted streams

Modified: trunk/LayoutTests/TestExpectations (225643 => 225644)


--- trunk/LayoutTests/TestExpectations	2017-12-07 21:28:19 UTC (rev 225643)
+++ trunk/LayoutTests/TestExpectations	2017-12-07 21:46:11 UTC (rev 225644)
@@ -161,7 +161,6 @@
 imported/w3c/web-platform-tests/service-workers/service-worker/update-after-navigation-fetch-event.https.html [ Skip ]
 imported/w3c/web-platform-tests/service-workers/service-worker/update-after-oneday.https.html [ Skip ]
 imported/w3c/web-platform-tests/service-workers/service-worker/update-recovery.https.html [ Skip ]
-imported/w3c/web-platform-tests/service-workers/service-worker/websocket-in-service-worker.https.html [ Skip ]
 imported/w3c/web-platform-tests/service-workers/service-worker/client-navigate.https.html [ Skip ]
 
 webkit.org/b/179342 http/tests/workers/service/registration-task-queue-scheduling-1.html [ Pass Failure ]

Added: trunk/LayoutTests/http/tests/workers/service/resources/serviceworker-idb-worker.js (0 => 225644)


--- trunk/LayoutTests/http/tests/workers/service/resources/serviceworker-idb-worker.js	                        (rev 0)
+++ trunk/LayoutTests/http/tests/workers/service/resources/serviceworker-idb-worker.js	2017-12-07 21:46:11 UTC (rev 225644)
@@ -0,0 +1,11 @@
+async function doTest(event)
+{
+    if (!event.data.startsWith("TESTIDB")) {
+        event.source.postMessage("FAIL: received unexpected message from client");
+        return;
+    }
+
+    event.source.postMessage(!!self.indexedDB ? "PASS" : "FAIL: self.indexedDB is null or undefined");
+}
+
+self.addEventListener("message", doTest);

Added: trunk/LayoutTests/http/tests/workers/service/resources/serviceworker-websocket-worker.js (0 => 225644)


--- trunk/LayoutTests/http/tests/workers/service/resources/serviceworker-websocket-worker.js	                        (rev 0)
+++ trunk/LayoutTests/http/tests/workers/service/resources/serviceworker-websocket-worker.js	2017-12-07 21:46:11 UTC (rev 225644)
@@ -0,0 +1,24 @@
+async function doTest(event)
+{
+    if (!event.data.startsWith("WEBSOCKET")) {
+        event.source.postMessage("FAIL: received unexpected message from client");
+        return;
+    }
+            event.source.postMessage("PASS");
+
+    try {
+        var webSocket = new WebSocket('ws://localhost:8880/websocket/tests/hybi/workers/resources/echo');
+
+        webSocket._onerror_ = (e) => {
+            event.source.postMessage("FAIL: websocket had an error: " + e);
+        };
+
+        webSocket._onopen_ = () => {
+            event.source.postMessage("PASS");
+        };
+    } catch (e) {
+        event.source.postMessage("FAIL: exception was raised: " + e);
+    }
+}
+
+self.addEventListener("message", doTest);

Added: trunk/LayoutTests/http/tests/workers/service/serviceworker-idb.https-expected.txt (0 => 225644)


--- trunk/LayoutTests/http/tests/workers/service/serviceworker-idb.https-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/http/tests/workers/service/serviceworker-idb.https-expected.txt	2017-12-07 21:46:11 UTC (rev 225644)
@@ -0,0 +1,4 @@
+
+PASS Setup worker 
+PASS Ensure self.indexedDB is not null or undefined in service worker 
+

Added: trunk/LayoutTests/http/tests/workers/service/serviceworker-idb.https.html (0 => 225644)


--- trunk/LayoutTests/http/tests/workers/service/serviceworker-idb.https.html	                        (rev 0)
+++ trunk/LayoutTests/http/tests/workers/service/serviceworker-idb.https.html	2017-12-07 21:46:11 UTC (rev 225644)
@@ -0,0 +1,45 @@
+<html>
+<head>
+<script src=""
+<script src=""
+</head>
+<body>
+<script>
+var activeWorker;
+var scope = "whatever fits your IDB needs";
+
+promise_test(async (test) => {
+    var registration = await navigator.serviceWorker.getRegistration(scope);
+    if (registration && registration.scope === scope)
+        await registration.unregister();
+
+    var registration = await navigator.serviceWorker.register("resources/serviceworker-idb-worker.js", { scope : scope });
+    activeWorker = registration.active;
+    if (activeWorker)
+        return;
+    activeWorker = registration.installing;
+    return new Promise(resolve => {
+        activeWorker.addEventListener('statechange', () => {
+            if (activeWorker.state === "activated")
+                resolve();
+        });
+    });
+}, "Setup worker");
+
+promise_test(async (test) => {
+    var promise = new Promise((resolve, reject) => {
+        navigator.serviceWorker.addEventListener("message", test.step_func((event) => {
+            if (event.data ="" "PASS") {
+                resolve();
+                return;
+            }
+            reject(event.data);
+        }));
+    });
+
+    activeWorker.postMessage("TESTIDB-1");
+    await promise;
+}, "Ensure self.indexedDB is not null or undefined in service worker");
+</script>
+</body>
+</html>

Added: trunk/LayoutTests/http/tests/workers/service/serviceworker-websocket.https-expected.txt (0 => 225644)


--- trunk/LayoutTests/http/tests/workers/service/serviceworker-websocket.https-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/http/tests/workers/service/serviceworker-websocket.https-expected.txt	2017-12-07 21:46:11 UTC (rev 225644)
@@ -0,0 +1,4 @@
+
+PASS Setup worker 
+PASS Open a WebSocket in service worker 
+

Added: trunk/LayoutTests/http/tests/workers/service/serviceworker-websocket.https.html (0 => 225644)


--- trunk/LayoutTests/http/tests/workers/service/serviceworker-websocket.https.html	                        (rev 0)
+++ trunk/LayoutTests/http/tests/workers/service/serviceworker-websocket.https.html	2017-12-07 21:46:11 UTC (rev 225644)
@@ -0,0 +1,45 @@
+<html>
+<head>
+<script src=""
+<script src=""
+</head>
+<body>
+<script>
+var activeWorker;
+var scope = "wanna my sockets";
+
+promise_test(async (test) => {
+    var registration = await navigator.serviceWorker.getRegistration(scope);
+    if (registration && registration.scope === scope)
+        await registration.unregister();
+
+    var registration = await navigator.serviceWorker.register("resources/serviceworker-websocket-worker.js", { scope : scope });
+    activeWorker = registration.active;
+    if (activeWorker)
+        return;
+    activeWorker = registration.installing;
+    return new Promise(resolve => {
+        activeWorker.addEventListener('statechange', () => {
+            if (activeWorker.state === "activated")
+                resolve();
+        });
+    });
+}, "Setup worker");
+
+promise_test(async (test) => {
+    var promise = new Promise((resolve, reject) => {
+        navigator.serviceWorker.addEventListener("message", test.step_func((event) => {
+            if (event.data ="" "PASS") {
+                resolve();
+                return;
+            }
+            reject(event.data);
+        }));
+    });
+
+    activeWorker.postMessage("WEBSOCKET-1");
+    await promise;
+}, "Open a WebSocket in service worker");
+</script>
+</body>
+</html>

Modified: trunk/LayoutTests/imported/w3c/ChangeLog (225643 => 225644)


--- trunk/LayoutTests/imported/w3c/ChangeLog	2017-12-07 21:28:19 UTC (rev 225643)
+++ trunk/LayoutTests/imported/w3c/ChangeLog	2017-12-07 21:46:11 UTC (rev 225644)
@@ -1,3 +1,12 @@
+2017-12-07  Youenn Fablet  <[email protected]>
+
+        Activate IDB and WebSockets in service workers
+        https://bugs.webkit.org/show_bug.cgi?id=180534
+
+        Reviewed by Brady Eidson.
+
+        * web-platform-tests/service-workers/service-worker/websocket-in-service-worker.https-expected.txt:
+
 2017-12-07  Ms2ger  <[email protected]>
 
         Update imported/w3c/web-platform-tests/css/css-pseudo-4/marker-font-properties.html from upstream.

Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/service-workers/service-worker/websocket-in-service-worker.https-expected.txt (225643 => 225644)


--- trunk/LayoutTests/imported/w3c/web-platform-tests/service-workers/service-worker/websocket-in-service-worker.https-expected.txt	2017-12-07 21:28:19 UTC (rev 225643)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/service-workers/service-worker/websocket-in-service-worker.https-expected.txt	2017-12-07 21:46:11 UTC (rev 225644)
@@ -1,5 +1,3 @@
 
-Harness Error (TIMEOUT), message = null
+FAIL Verify WebSockets can be created in a Service Worker assert_equals: expected "PASS" but got "FAIL: Got an error event"
 
-TIMEOUT Verify WebSockets can be created in a Service Worker Test timed out
-

Modified: trunk/Source/WebCore/ChangeLog (225643 => 225644)


--- trunk/Source/WebCore/ChangeLog	2017-12-07 21:28:19 UTC (rev 225643)
+++ trunk/Source/WebCore/ChangeLog	2017-12-07 21:46:11 UTC (rev 225644)
@@ -1,3 +1,22 @@
+2017-12-07  Youenn Fablet  <[email protected]>
+
+        Activate IDB and WebSockets in service workers
+        https://bugs.webkit.org/show_bug.cgi?id=180534
+
+        Reviewed by Brady Eidson.
+
+        Tests: http/tests/workers/service/serviceworker-idb.https.html
+               http/tests/workers/service/serviceworker-websocket.https.html
+
+        Using the dummy document used for loading to also fuel IDB and WebSocket.
+
+        * workers/service/context/ServiceWorkerThread.cpp:
+        (WebCore::ServiceWorkerThread::ServiceWorkerThread):
+        * workers/service/context/ServiceWorkerThread.h:
+        * workers/service/context/ServiceWorkerThreadProxy.cpp:
+        (WebCore::idbConnectionProxy):
+        (WebCore::ServiceWorkerThreadProxy::ServiceWorkerThreadProxy):
+
 2017-12-07  Matt Lewis  <[email protected]>
 
         Unreviewed, rolling out r225634.

Modified: trunk/Source/WebCore/workers/service/context/ServiceWorkerThread.cpp (225643 => 225644)


--- trunk/Source/WebCore/workers/service/context/ServiceWorkerThread.cpp	2017-12-07 21:28:19 UTC (rev 225643)
+++ trunk/Source/WebCore/workers/service/context/ServiceWorkerThread.cpp	2017-12-07 21:46:11 UTC (rev 225644)
@@ -67,14 +67,12 @@
 
 // FIXME: Use a valid WorkerReportingProxy
 // FIXME: Use a valid WorkerObjectProxy
-// FIXME: Use a valid IDBConnection
-// FIXME: Use a valid SocketProvider
 // FIXME: Use a valid user agent
 // FIXME: Use a valid isOnline flag
 // FIXME: Use valid runtime flags
 
-ServiceWorkerThread::ServiceWorkerThread(const ServiceWorkerContextData& data, PAL::SessionID, WorkerLoaderProxy& loaderProxy, WorkerDebuggerProxy& debuggerProxy)
-    : WorkerThread(data.scriptURL, "serviceworker:" + Inspector::IdentifiersFactory::createIdentifier(), ASCIILiteral("WorkerUserAgent"), /* isOnline */ false, data.script, loaderProxy, debuggerProxy, DummyServiceWorkerThreadProxy::shared(), WorkerThreadStartMode::Normal, ContentSecurityPolicyResponseHeaders { }, false, SecurityOrigin::create(data.scriptURL).get(), MonotonicTime::now(), nullptr, nullptr, JSC::RuntimeFlags::createAllEnabled(), SessionID::defaultSessionID())
+ServiceWorkerThread::ServiceWorkerThread(const ServiceWorkerContextData& data, PAL::SessionID, WorkerLoaderProxy& loaderProxy, WorkerDebuggerProxy& debuggerProxy, IDBClient::IDBConnectionProxy* idbConnectionProxy, SocketProvider* socketProvider)
+    : WorkerThread(data.scriptURL, "serviceworker:" + Inspector::IdentifiersFactory::createIdentifier(), ASCIILiteral("WorkerUserAgent"), /* isOnline */ false, data.script, loaderProxy, debuggerProxy, DummyServiceWorkerThreadProxy::shared(), WorkerThreadStartMode::Normal, ContentSecurityPolicyResponseHeaders { }, false, SecurityOrigin::create(data.scriptURL).get(), MonotonicTime::now(), idbConnectionProxy, socketProvider, JSC::RuntimeFlags::createAllEnabled(), SessionID::defaultSessionID())
     , m_data(data.isolatedCopy())
     , m_workerObjectProxy(DummyServiceWorkerThreadProxy::shared())
 {

Modified: trunk/Source/WebCore/workers/service/context/ServiceWorkerThread.h (225643 => 225644)


--- trunk/Source/WebCore/workers/service/context/ServiceWorkerThread.h	2017-12-07 21:28:19 UTC (rev 225643)
+++ trunk/Source/WebCore/workers/service/context/ServiceWorkerThread.h	2017-12-07 21:46:11 UTC (rev 225644)
@@ -73,7 +73,7 @@
     void runEventLoop() override;
 
 private:
-    WEBCORE_EXPORT ServiceWorkerThread(const ServiceWorkerContextData&, PAL::SessionID, WorkerLoaderProxy&, WorkerDebuggerProxy&);
+    WEBCORE_EXPORT ServiceWorkerThread(const ServiceWorkerContextData&, PAL::SessionID, WorkerLoaderProxy&, WorkerDebuggerProxy&, IDBClient::IDBConnectionProxy*, SocketProvider*);
 
     ServiceWorkerContextData m_data;
     WorkerObjectProxy& m_workerObjectProxy;

Modified: trunk/Source/WebCore/workers/service/context/ServiceWorkerThreadProxy.cpp (225643 => 225644)


--- trunk/Source/WebCore/workers/service/context/ServiceWorkerThreadProxy.cpp	2017-12-07 21:28:19 UTC (rev 225643)
+++ trunk/Source/WebCore/workers/service/context/ServiceWorkerThreadProxy.cpp	2017-12-07 21:46:11 UTC (rev 225644)
@@ -47,10 +47,19 @@
     return page;
 }
 
+static inline IDBClient::IDBConnectionProxy* idbConnectionProxy(Document& document)
+{
+#if ENABLE(INDEXED_DATABASE)
+    return document.idbConnectionProxy();
+#else
+    return nullptr;
+#endif
+}
+
 ServiceWorkerThreadProxy::ServiceWorkerThreadProxy(PageConfiguration&& pageConfiguration, const ServiceWorkerContextData& data, PAL::SessionID sessionID, CacheStorageProvider& cacheStorageProvider)
     : m_page(createPageForServiceWorker(WTFMove(pageConfiguration), data.scriptURL))
     , m_document(*m_page->mainFrame().document())
-    , m_serviceWorkerThread(ServiceWorkerThread::create(data, sessionID, *this, *this))
+    , m_serviceWorkerThread(ServiceWorkerThread::create(data, sessionID, *this, *this, idbConnectionProxy(m_document), m_document->socketProvider()))
     , m_cacheStorageProvider(cacheStorageProvider)
     , m_sessionID(sessionID)
     , m_inspectorProxy(*this)
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to