Chromium Code Reviews| 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..254adb330f73a430882d1068b11497520bbe1257 |
| --- /dev/null |
| +++ b/LayoutTests/http/tests/serviceworker/service-worker-gc.html |
| @@ -0,0 +1,60 @@ |
| +<!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) { |
| + gc(); |
|
dominicc (has gone to gerrit)
2014/06/16 05:00:23
Maybe just call assertServiceWorkerIsNotCollected
falken
2014/06/16 08:29:20
Good point, done.
|
| + shouldBeFalse('swObservation.wasCollected'); |
| + |
| + if (event.target.state != 'active') |
| + return; |
| + navigator.serviceWorker.unregister(scope).then(onUnregister); |
| +} |
| + |
| +function onUnregister() |
| +{ |
| + gc(); |
| + // FIXME: Assert that the ServiceWorker *is* collected when the 'redundant' state is implemented. |
| + shouldBeFalse('swObservation.wasCollected') |
| + |
| + finishJSTest(); |
| +} |
| +</script> |
| +</body> |