Chromium Code Reviews| Index: LayoutTests/http/tests/serviceworker/install-phase-event-waituntil.html |
| diff --git a/LayoutTests/http/tests/serviceworker/install-phase-event-waituntil.html b/LayoutTests/http/tests/serviceworker/install-phase-event-waituntil.html |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..8f76f6960a2e3a75918a02d73cbc95d979bd04c8 |
| --- /dev/null |
| +++ b/LayoutTests/http/tests/serviceworker/install-phase-event-waituntil.html |
| @@ -0,0 +1,121 @@ |
| +<!DOCTYPE html> |
| +<title>InstallPhaseEvent: waitUntil</title> |
| +<script src="../resources/testharness.js"></script> |
| +<script src="../resources/testharnessreport.js"></script> |
| +<script src="resources/test-helpers.js"></script> |
| +<script> |
| +function runTest(test, scope, onRegister) { |
| + var script = 'resources/install-phase-event-waituntil.js'; |
| + test.step(function() { |
| + service_worker_unregister_and_register( |
| + test, script, scope |
| + ).then( |
| + test.step_func(onRegister) |
| + ); |
| + }); |
| +} |
| + |
| +function syncWorker(test, worker, obj) { |
| + var channel = new MessageChannel(); |
| + channel.port1.onmessage = test.step_func(function(e) { |
| + var message = e.data; |
| + assert_equals(message, 'SYNC', 'Should receive sync message from worker.'); |
| + obj.synced = true; |
| + channel.port1.postMessage('ACK'); |
| + }); |
| + worker.postMessage({port: channel.port2}, [channel.port2]); |
| +} |
| + |
| +(function() { |
| + var t = async_test('Test install event waitUntil fulfilled.'); |
|
jsbell
2014/07/01 16:16:48
I think dominicc was trying to get us to standardi
xiang
2014/07/02 05:10:42
will adapt this style.
|
| + // Passing scope as the test switch for worker script. |
| + var scope = 'install-fulfilled'; |
| + var onRegister = function(worker) { |
| + var obj = {}; |
| + worker.onstatechange = t.step_func(function() { |
| + if (worker.state == 'installing') { |
| + syncWorker(t, worker, obj); |
| + } else if (worker.state == 'installed') { |
| + assert_true(obj.synced, |
| + 'state should be "installed" after the waitUntil promise for "oninstall" is fulfilled.'); |
| + service_worker_unregister_and_done(t, scope); |
| + } |
| + }); |
| + }; |
| + runTest(t, scope, onRegister); |
| +}()); |
| + |
| +(function() { |
| + var t = async_test('Test activate event waitUntil fulfilled.'); |
| + var scope = 'activate-fulfilled'; |
| + var onRegister = function(worker) { |
| + var obj = {}; |
| + worker.onstatechange = t.step_func(function() { |
| + if (worker.state == 'activating') { |
| + syncWorker(t, worker, obj); |
| + } else if (worker.state == 'activated') { |
| + assert_true(obj.synced, |
| + 'state should be "activated" after the waitUntil promise for "onactivate" is fulfilled.'); |
| + service_worker_unregister_and_done(t, scope); |
| + } |
| + }); |
| + }; |
| + runTest(t, scope, onRegister); |
| +}()); |
| + |
| +(function() { |
| + var t = async_test('Test install event waitUntil rejected.'); |
| + var scope = 'install-rejected'; |
| + var onRegister = function(worker) { |
| + worker.onstatechange = t.step_func(function() { |
| + if (worker.state == 'redundant') |
| + service_worker_unregister_and_done(t, scope); |
| + }); |
| + }; |
| + runTest(t, scope, onRegister); |
| +}()); |
| + |
| +(function() { |
| + var t = async_test('Test activate event waitUntil rejected.'); |
| + var scope = 'activate-rejected'; |
| + var onRegister = function(worker) { |
| + worker.onstatechange = t.step_func(function() { |
| + if (worker.state == 'redundant') |
| + service_worker_unregister_and_done(t, scope); |
| + }); |
| + }; |
| + runTest(t, scope, onRegister); |
| +}()); |
| + |
| +(function() { |
| + var t = async_test('Test InstallPhaseEvent multiple waitUntil fulfilled.'); |
| + var scope = 'activate-multiple-fulfilled'; |
| + var onRegister = function(worker) { |
| + var obj1 = {}; |
| + var obj2 = {}; |
| + worker.onstatechange = t.step_func(function() { |
| + if (worker.state == 'activating') { |
| + syncWorker(t, worker, obj1); |
| + syncWorker(t, worker, obj2); |
| + } else if (worker.state == 'activated') { |
| + assert_true(obj1.synced && obj2.synced, |
| + 'state should be "activated" after all waitUnitl promises for "onactivate" are fulfilled.'); |
| + service_worker_unregister_and_done(t, scope); |
| + } |
| + }); |
| + }; |
| + runTest(t, scope, onRegister); |
| +}()); |
| + |
| +(function() { |
| + var t = async_test('Test InstallPhaseEvent waitUntil reject precedence.'); |
| + var scope = 'activate-reject-precedence'; |
| + var onRegister = function(worker) { |
| + worker.onstatechange = t.step_func(function() { |
| + if (worker.state == 'redundant') |
| + service_worker_unregister_and_done(t, scope); |
| + }); |
| + }; |
| + runTest(t, scope, onRegister); |
| +}()); |
| +</script> |