Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(636)

Unified Diff: LayoutTests/http/tests/serviceworker/service-worker-gc.html

Issue 330173003: Make ServiceWorker an ActiveDOMObject (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: patch for landing Created 6 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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>

Powered by Google App Engine
This is Rietveld 408576698