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)