Chromium Code Reviews| Index: LayoutTests/http/tests/serviceworker/minimal-end-to-end.html |
| diff --git a/LayoutTests/http/tests/serviceworker/minimal-end-to-end.html b/LayoutTests/http/tests/serviceworker/minimal-end-to-end.html |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..657c19cb9a9a6eed179139620ccb70c882e0752d |
| --- /dev/null |
| +++ b/LayoutTests/http/tests/serviceworker/minimal-end-to-end.html |
| @@ -0,0 +1,89 @@ |
| +<!DOCTYPE html> |
| +<title>Service Worker: minimal end-to-end</title> |
| +<script src="../resources/testharness.js"></script> |
| +<script src="../resources/testharnessreport.js"></script> |
| +<script src="resources/support.js"></script> |
| +<script> |
| +var t = async_test('Minimal end-to-end registration'); |
| +t.step(function() { |
| + |
| + var stateChanges = recordStateChanges(); |
| + var serviceWorkerStates = []; |
| + var lastServiceWorkerState = ''; |
| + var receivedMessageFromPort = ''; |
| + var receivedMessage = ''; |
| + |
| + assert_true(navigator.serviceWorker instanceof ServiceWorkerContainer); |
| + assert_equals(typeof navigator.serviceWorker.register, 'function'); |
| + assert_equals(typeof navigator.serviceWorker.unregister, 'function'); |
| + |
| + // This always tests fresh registration, so unregister it first. |
| + |
| + // FIXME: This currently hits an ASSERT. |
| + //navigator.serviceWorker.unregister('/scope/*').then( |
| + Promise.resolve().then( |
| + // FIXME: Use a variant of step_func here to catch test bugs. |
| + function() { |
| + return navigator.serviceWorker.register( |
| + 'resources/end-to-end-worker.js', |
| + {scope: '/scope/*'}); |
| + } |
| + ).then( |
| + t.step_func(onRegister) |
| + ).catch( |
| + fail(t, 'Registration failed') |
| + ); |
| + |
| + function onRegister(serviceWorker) { |
| + serviceWorkerStates.push(serviceWorker.state); |
| + lastServiceWorkerState = serviceWorker.state; |
| + |
| + sendMessagePort(serviceWorker, 'registering doc').onmessage = t.step_func(function (e) { |
| + if (e.data === 'ping') |
| + serviceWorker.postMessage('pong'); |
| + else |
| + receivedMessageFromPort = e.data; |
| + }); |
| + |
| + serviceWorker.onstatechange = t.step_func(function() { |
| + serviceWorkerStates.push(serviceWorker.state); |
| + |
| + switch (serviceWorker.state) { |
| + case 'installed': |
| + assert_equals(lastServiceWorkerState, 'installing'); |
| + break; |
| + case 'activating': |
| + assert_equals(lastServiceWorkerState, 'installed'); |
| + break; |
| + case 'active': |
| + assert_equals(lastServiceWorkerState, 'activating'); |
| + break; |
| + default: |
| + fail(t, 'Unexpected state: ' + serviceWorker.state); |
| + } |
| + |
| + lastServiceWorkerState = serviceWorker.state; |
| + if (serviceWorker.state === 'active') |
| + finishTest(); |
| + }); |
| + } |
| + |
| + window.onmessage = t.step_func(function(e) { |
| + receivedMessage = e.message; |
| + }); |
| + |
| + function finishTest() { |
| + assert_equals(receivedMessageFromPort, 'Ack for: registering doc'); |
| + //assert_equals(receivedMessage, 'Ack for: registering doc'); |
| + |
| + assert_array_equals(serviceWorkerStates, |
| + ['installing', 'installed', 'activating', 'active'], |
| + 'Service worker should pass through four states'); |
| + assert_equals(stateChanges.pendingStateChangeCount, 0, |
| + 'Out-of-scope document should not see pending state changes'); |
| + assert_equals(stateChanges.activeStateChangeCount, 0, |
| + 'Out-of-scope document should not see pending state changes'); |
|
kinuko
2014/04/16 03:28:38
I think we can remove the latter two asserts for n
jsbell
2014/04/16 17:04:19
Done.
|
| + t.done(); |
| + } |
| +}); |
| +</script> |