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..1b91f7fe86739306e94460c02113f765d8dcccdd |
| --- /dev/null |
| +++ b/LayoutTests/http/tests/serviceworker/install-phase-event-waituntil.html |
| @@ -0,0 +1,118 @@ |
| +<!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 worker_script = 'resources/install-phase-event-waituntil.js'; |
|
falken
2014/06/30 04:35:31
Unfortunately Service Worker layout tests don't ha
xiang
2014/06/30 06:37:11
I will follow the Blink-style, thanks for the info
|
| + test.step(function() { |
| + service_worker_unregister_and_register( |
| + test, worker_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]); |
|
falken
2014/06/30 04:35:31
I might be missing something. The async tests run
xiang
2014/06/30 06:37:11
Yes, they're parallel. I think the passing "worker
|
| +} |
| + |
| +(function() { |
| + var t = async_test('Test install event waitUntil fulfilled.'); |
| + // 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, '"installed" state should changed after sync.'); |
|
falken
2014/06/30 04:35:31
This description is a bit unclear: "state should c
xiang
2014/06/30 06:37:11
will change that.
|
| + 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, '"activated" state should changed after sync.'); |
| + 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, '"activated" state should changed after sync.'); |
| + 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> |