| Index: LayoutTests/http/tests/serviceworker/service-worker-gc.html
|
| diff --git a/LayoutTests/http/tests/serviceworker/service-worker-gc.html b/LayoutTests/http/tests/serviceworker/service-worker-gc.html
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..633a380ecf81c85c96e9f851b82d942f20c097b2
|
| --- /dev/null
|
| +++ b/LayoutTests/http/tests/serviceworker/service-worker-gc.html
|
| @@ -0,0 +1,58 @@
|
| +<!DOCTYPE html>
|
| +<script src="/js-test-resources/js-test.js"></script>
|
| +<body>
|
| +<script>
|
| +window.jsTestIsAsync = true;
|
| +description('Test that a registered Service Worker with an event handler is not garbage collected prematurely');
|
| +swObservation = null;
|
| +scope = 'gc';
|
| +
|
| +if (!window.internals) {
|
| + testFailed('This test requires internals.observeGC');
|
| + finishJSTest();
|
| +} else {
|
| + setup();
|
| +}
|
| +
|
| +function setup() {
|
| + var worker = 'resources/empty-worker.js';
|
| + unregisterAndRegister(worker, scope).then(onRegister);
|
| +}
|
| +
|
| +function unregisterAndRegister(url, scope) {
|
| + return navigator.serviceWorker.unregister(scope).then(function() {
|
| + return navigator.serviceWorker.register(url, { scope: scope });
|
| + }).catch(function(error) {
|
| + testFailed('Could not register worker: ' + error);
|
| + finishJSTest();
|
| + });
|
| +}
|
| +
|
| +function assertServiceWorkerIsNotCollected() {
|
| + gc();
|
| + shouldBeFalse('swObservation.wasCollected')
|
| +}
|
| +
|
| +function onRegister(sw) {
|
| + swObservation = internals.observeGC(sw);
|
| + sw.addEventListener('statechange', onStateChange);
|
| + setTimeout(assertServiceWorkerIsNotCollected, 0);
|
| +}
|
| +
|
| +function onStateChange(event) {
|
| + assertServiceWorkerIsNotCollected();
|
| +
|
| + if (event.target.state != 'active')
|
| + return;
|
| + navigator.serviceWorker.unregister(scope).then(onUnregister);
|
| +}
|
| +
|
| +function onUnregister()
|
| +{
|
| + // FIXME: Assert that the ServiceWorker *is* collected when the 'redundant' state is implemented.
|
| + assertServiceWorkerIsNotCollected();
|
| +
|
| + finishJSTest();
|
| +}
|
| +</script>
|
| +</body>
|
|
|