Upstream version 10.39.225.0
[platform/framework/web/crosswalk.git] / src / third_party / WebKit / LayoutTests / http / tests / serviceworker / state.html
1 <!DOCTYPE html>
2 <script src="../resources/testharness.js"></script>
3 <script src="../resources/testharnessreport.js"></script>
4 <script src="resources/test-helpers.js"></script>
5 <body>
6 <script>
7 (function () {
8     var t = async_test('Service Worker state property and "statechange" event');
9     var currentState = 'test-is-starting';
10     var scope = '/state/';
11
12     service_worker_unregister_and_register(
13         t, 'resources/empty-worker.js', scope)
14       .then(t.step_func(function(registration) {
15           return wait_for_update(t, registration);
16         }))
17       .then(t.step_func(function(sw) {
18           sw.addEventListener('statechange', t.step_func(onStateChange(sw)));
19           assert_in_array(sw.state, ['parsed', 'installing'],
20                           'the service worker should be in a state up to ' +
21                           '"installing".');
22           checkStateTransition(sw.state);
23         }))
24       .catch(unreached_rejection(t));
25
26     function checkStateTransition(newState) {
27         switch (currentState) {
28         case 'test-is-starting':
29             break; // anything goes
30         case 'parsed':
31             assert_equals(newState, 'installing');
32             break;
33         case 'installing':
34             assert_in_array(newState, ['installed', 'redundant']);
35             break;
36         case 'installed':
37             assert_in_array(newState, ['activating', 'redundant']);
38             break;
39         case 'activating':
40             assert_in_array(newState, ['activated', 'redundant']);
41             break;
42         case 'activated':
43             assert_equals(newState, 'redundant');
44             break;
45         case 'redundant':
46             assert_unreached('a ServiceWorker should not transition out of ' +
47                              'the "redundant" state');
48             break;
49         default:
50             assert_unreached('should not transition into unknown state "' +
51                              newState + '"');
52             break;
53         }
54         currentState = newState;
55     }
56
57     function onStateChange(expectedTarget) {
58         return function(event) {
59             assert_true(event.target instanceof ServiceWorker,
60                         'the target of the statechange event should be a ' +
61                         'ServiceWorker.');
62             assert_equals(event.target, expectedTarget,
63                           'the target of the statechange event should be ' +
64                           'the installing ServiceWorker');
65             assert_equals(event.type, 'statechange',
66                           'the type of the event should be "statechange".');
67
68             checkStateTransition(event.target.state);
69
70             if (event.target.state == 'activated')
71                 service_worker_unregister_and_done(t, scope);
72         };
73     }
74 }());
75 </script>