Support container.getRegistration() / getRegistrations() inside service workers
[WebKit-https.git] / LayoutTests / imported / w3c / web-platform-tests / service-workers / service-worker / skip-waiting-using-registration.https.html
1 <!DOCTYPE html>
2 <title>Service Worker: Skip waiting using registration</title>
3 <script src="/resources/testharness.js"></script>
4 <script src="/resources/testharnessreport.js"></script>
5 <script src="resources/test-helpers.sub.js"></script>
6 <script>
7 'use strict';
8
9 promise_test(function(t) {
10     var scope = 'resources/blank.html?skip-waiting-using-registration';
11     var url1 = 'resources/empty.js';
12     var url2 = 'resources/skip-waiting-worker.js';
13     var frame, frame_sw, sw_registration, oncontrollerchanged;
14     var saw_controllerchanged = new Promise(function(resolve) {
15         oncontrollerchanged = function(e) {
16             resolve(e);
17           };
18         })
19       .then(function(e) {
20           assert_equals(e.type, 'controllerchange',
21                         'Event name should be "controllerchange"');
22           assert_true(
23               e.target instanceof frame.contentWindow.ServiceWorkerContainer,
24               'Event target should be a ServiceWorkerContainer');
25           assert_equals(e.target.controller.state, 'activating',
26                         'Controller state should be activating');
27           assert_equals(
28               frame_sw.controller.scriptURL, normalizeURL(url2),
29               'Controller scriptURL should change to the second one');
30         });
31
32     return service_worker_unregister_and_register(t, url1, scope)
33       .then(function(registration) {
34           return wait_for_state(t, registration.installing, 'activated');
35         })
36       .then(function() {
37           return with_iframe(scope);
38         })
39       .then(function(f) {
40           t.add_cleanup(function() {
41               f.remove();
42             });
43           frame = f;
44           frame_sw = f.contentWindow.navigator.serviceWorker;
45           assert_equals(
46               frame_sw.controller.scriptURL, normalizeURL(url1),
47               'Document controller scriptURL should equal to the first one');
48           frame_sw.oncontrollerchange = t.step_func(oncontrollerchanged);
49           return navigator.serviceWorker.register(url2, {scope: scope});
50         })
51       .then(function(registration) {
52           sw_registration = registration;
53           return saw_controllerchanged;
54         })
55       .then(function() {
56           assert_not_equals(sw_registration.active, null,
57                             'Registration active worker should not be null');
58           fetch_tests_from_worker(sw_registration.active);
59         });
60   }, 'Test skipWaiting while a client is using the registration');
61
62 </script>