Diff
Modified: trunk/LayoutTests/ChangeLog (225455 => 225456)
--- trunk/LayoutTests/ChangeLog 2017-12-03 02:32:42 UTC (rev 225455)
+++ trunk/LayoutTests/ChangeLog 2017-12-03 04:17:12 UTC (rev 225456)
@@ -1,5 +1,20 @@
2017-12-02 Chris Dumez <[email protected]>
+ Support container.register() / registration.unregister() / inside service workers
+ https://bugs.webkit.org/show_bug.cgi?id=180326
+
+ Reviewed by Youenn Fablet.
+
+ * TestExpectations:
+ Unskip test for registration.unregister() that now passes.
+
+ * http/tests/workers/service/ServiceWorkerGlobalScope_register-expected.txt: Added.
+ * http/tests/workers/service/ServiceWorkerGlobalScope_register.html: Added.
+ * http/tests/workers/service/resources/ServiceWorkerGlobalScope_register-worker.js: Added.
+ Add test coverage for container.register().
+
+2017-12-02 Chris Dumez <[email protected]>
+
Support serviceWorkerRegistration.update() inside service workers
https://bugs.webkit.org/show_bug.cgi?id=180215
Modified: trunk/LayoutTests/TestExpectations (225455 => 225456)
--- trunk/LayoutTests/TestExpectations 2017-12-03 02:32:42 UTC (rev 225455)
+++ trunk/LayoutTests/TestExpectations 2017-12-03 04:17:12 UTC (rev 225456)
@@ -146,7 +146,6 @@
# Skip service worker tests that are timing out.
imported/w3c/web-platform-tests/fetch/api/abort/general-serviceworker.https.html [ Skip ]
imported/w3c/web-platform-tests/service-workers/service-worker/ServiceWorkerGlobalScope/extendable-message-event.https.html [ Skip ]
-imported/w3c/web-platform-tests/service-workers/service-worker/ServiceWorkerGlobalScope/unregister.https.html [ Skip ]
imported/w3c/web-platform-tests/service-workers/service-worker/clients-matchall-on-evaluation.https.html [ Skip ]
imported/w3c/web-platform-tests/service-workers/service-worker/detached-context.https.html [ Skip ]
imported/w3c/web-platform-tests/service-workers/service-worker/extendable-event-waituntil.https.html [ Skip ]
Added: trunk/LayoutTests/http/tests/workers/service/ServiceWorkerGlobalScope_register-expected.txt (0 => 225456)
--- trunk/LayoutTests/http/tests/workers/service/ServiceWorkerGlobalScope_register-expected.txt (rev 0)
+++ trunk/LayoutTests/http/tests/workers/service/ServiceWorkerGlobalScope_register-expected.txt 2017-12-03 04:17:12 UTC (rev 225456)
@@ -0,0 +1,7 @@
+* Tests that serviceWorker.register() inside service workers
+
+PASS: Registration succeeded
+PASS: registration object's scope is valid
+PASS: registration object's updateViaCache is valid
+PASS: service worker is now active
+
Added: trunk/LayoutTests/http/tests/workers/service/ServiceWorkerGlobalScope_register.html (0 => 225456)
--- trunk/LayoutTests/http/tests/workers/service/ServiceWorkerGlobalScope_register.html (rev 0)
+++ trunk/LayoutTests/http/tests/workers/service/ServiceWorkerGlobalScope_register.html 2017-12-03 04:17:12 UTC (rev 225456)
@@ -0,0 +1,22 @@
+<!DOCTYPE html>
+<html>
+<body>
+<script src=""
+<script>
+log("* Tests that serviceWorker.register() inside service workers");
+log("");
+
+navigator.serviceWorker.addEventListener("message", function(event) {
+ if (event.data ="" "DONE") {
+ finishSWTest();
+ return;
+ }
+ log(event.data);
+});
+
+navigator.serviceWorker.register("resources/ServiceWorkerGlobalScope_register-worker.js", { }).then(function(registration) {
+ registration.installing.postMessage("runTest");
+});
+</script>
+</body>
+</html>
Added: trunk/LayoutTests/http/tests/workers/service/resources/ServiceWorkerGlobalScope_register-worker.js (0 => 225456)
--- trunk/LayoutTests/http/tests/workers/service/resources/ServiceWorkerGlobalScope_register-worker.js (rev 0)
+++ trunk/LayoutTests/http/tests/workers/service/resources/ServiceWorkerGlobalScope_register-worker.js 2017-12-03 04:17:12 UTC (rev 225456)
@@ -0,0 +1,40 @@
+let client = null;
+
+function log(msg)
+{
+ client.postMessage(msg);
+}
+
+async function runTest()
+{
+ try {
+ let r = await navigator.serviceWorker.register("empty-worker.js", { scope: "/test", updateViaCache: "none" });
+ log("PASS: Registration succeeded");
+
+ if (r.scope == "http://127.0.0.1:8000/test")
+ log("PASS: registration object's scope is valid");
+ else
+ log("FAIL: registration object's scope is invalid, got: " + r.scope);
+
+ if (r.updateViaCache == "none")
+ log("PASS: registration object's updateViaCache is valid");
+ else
+ log("FAIL: registration object's updateViaCache is invalid, got: " + r.updateViaCache);
+
+ worker = r.installing;
+ worker.addEventListener("statechange", function() {
+ if (worker.state === "activated") {
+ log("PASS: service worker is now active");
+ log("DONE");
+ }
+ });
+ } catch (e) {
+ log("FAIL: " + e);
+ log("DONE");
+ }
+}
+
+self.addEventListener("message", (event) => {
+ client = event.source;
+ runTest();
+});
Modified: trunk/LayoutTests/imported/w3c/ChangeLog (225455 => 225456)
--- trunk/LayoutTests/imported/w3c/ChangeLog 2017-12-03 02:32:42 UTC (rev 225455)
+++ trunk/LayoutTests/imported/w3c/ChangeLog 2017-12-03 04:17:12 UTC (rev 225456)
@@ -1,5 +1,16 @@
2017-12-02 Chris Dumez <[email protected]>
+ Support container.register() / registration.unregister() / inside service workers
+ https://bugs.webkit.org/show_bug.cgi?id=180326
+
+ Reviewed by Youenn Fablet.
+
+ Rebaseline WPT test that now passes most checks.
+
+ * web-platform-tests/service-workers/service-worker/ServiceWorkerGlobalScope/unregister.https-expected.txt:
+
+2017-12-02 Chris Dumez <[email protected]>
+
Support serviceWorkerRegistration.update() inside service workers
https://bugs.webkit.org/show_bug.cgi?id=180215
Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/service-workers/service-worker/ServiceWorkerGlobalScope/unregister.https-expected.txt (225455 => 225456)
--- trunk/LayoutTests/imported/w3c/web-platform-tests/service-workers/service-worker/ServiceWorkerGlobalScope/unregister.https-expected.txt 2017-12-03 02:32:42 UTC (rev 225455)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/service-workers/service-worker/ServiceWorkerGlobalScope/unregister.https-expected.txt 2017-12-03 04:17:12 UTC (rev 225456)
@@ -1,8 +1,7 @@
-Harness Error (TIMEOUT), message = null
-TIMEOUT Unregister on script evaluation Test timed out
-NOTRUN Unregister on installing event
-NOTRUN Unregister on activate event
-NOTRUN Unregister controlling service worker
+PASS Unregister on script evaluation
+PASS Unregister on installing event
+PASS Unregister on activate event
+FAIL Unregister controlling service worker promise_test: Unhandled rejection with value: object "NotSupportedError: Passing MessagePort objects to postMessage is not yet supported"
Modified: trunk/Source/WebCore/ChangeLog (225455 => 225456)
--- trunk/Source/WebCore/ChangeLog 2017-12-03 02:32:42 UTC (rev 225455)
+++ trunk/Source/WebCore/ChangeLog 2017-12-03 04:17:12 UTC (rev 225456)
@@ -1,5 +1,24 @@
2017-12-02 Chris Dumez <[email protected]>
+ Support container.register() / registration.unregister() / inside service workers
+ https://bugs.webkit.org/show_bug.cgi?id=180326
+
+ Reviewed by Youenn Fablet.
+
+ Support container.register() / registration.unregister() / inside service workers.
+ This is mostly about removing the is<Document>() checks and adding testing given
+ that most of the work was done in r225455.
+
+ Test: http/tests/workers/service/ServiceWorkerGlobalScope_register.html
+
+ * workers/service/ServiceWorkerContainer.cpp:
+ (WebCore::ServiceWorkerContainer::addRegistration):
+ * workers/service/ServiceWorkerRegistration.cpp:
+ (WebCore::ServiceWorkerRegistration::update):
+ (WebCore::ServiceWorkerRegistration::unregister):
+
+2017-12-02 Chris Dumez <[email protected]>
+
Support serviceWorkerRegistration.update() inside service workers
https://bugs.webkit.org/show_bug.cgi?id=180215
Modified: trunk/Source/WebCore/workers/service/ServiceWorkerContainer.cpp (225455 => 225456)
--- trunk/Source/WebCore/workers/service/ServiceWorkerContainer.cpp 2017-12-03 02:32:42 UTC (rev 225455)
+++ trunk/Source/WebCore/workers/service/ServiceWorkerContainer.cpp 2017-12-03 04:17:12 UTC (rev 225456)
@@ -94,12 +94,6 @@
return;
}
- // FIXME: Add support in workers.
- if (!is<Document>(*context)) {
- promise->reject(Exception { NotSupportedError, ASCIILiteral("serviceWorker.register() is not yet supported in workers") });
- return;
- }
-
if (relativeScriptURL.isEmpty()) {
promise->reject(Exception { TypeError, ASCIILiteral("serviceWorker.register() cannot be called with an empty script URL") });
return;
Modified: trunk/Source/WebCore/workers/service/ServiceWorkerRegistration.cpp (225455 => 225456)
--- trunk/Source/WebCore/workers/service/ServiceWorkerRegistration.cpp 2017-12-03 02:32:42 UTC (rev 225455)
+++ trunk/Source/WebCore/workers/service/ServiceWorkerRegistration.cpp 2017-12-03 04:17:12 UTC (rev 225456)
@@ -116,7 +116,6 @@
{
auto* context = scriptExecutionContext();
if (!context) {
- ASSERT_NOT_REACHED();
promise->reject(Exception(InvalidStateError));
return;
}
@@ -135,24 +134,11 @@
{
auto* context = scriptExecutionContext();
if (!context) {
- ASSERT_NOT_REACHED();
promise->reject(Exception(InvalidStateError));
return;
}
- // FIXME: Add support in workers.
- if (!is<Document>(*context)) {
- promise->reject(Exception { NotSupportedError, ASCIILiteral("serviceWorkerRegistration.unregister() is not yet supported in workers") });
- return;
- }
-
- auto* container = context->serviceWorkerContainer();
- if (!container) {
- promise->reject(Exception(InvalidStateError));
- return;
- }
-
- container->removeRegistration(m_registrationData.scopeURL, WTFMove(promise));
+ m_container->removeRegistration(m_registrationData.scopeURL, WTFMove(promise));
}
void ServiceWorkerRegistration::updateStateFromServer(ServiceWorkerRegistrationState state, RefPtr<ServiceWorker>&& serviceWorker)