Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(867)

Side by Side Diff: third_party/WebKit/LayoutTests/http/tests/serviceworker/navigation-preload/get-state.html

Issue 2451373003: service worker: Implement NavigationPreloadManager.setHeaderValue (Closed)
Patch Set: revise Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 <!DOCTYPE html> 1 <!DOCTYPE html>
2 <meta charset="utf-8"> 2 <meta charset="utf-8">
3 <title>NavigationPreloadManager.getState</title> 3 <title>NavigationPreloadManager.getState</title>
4 <script src="../../resources/testharness.js"></script> 4 <script src="../../resources/testharness.js"></script>
5 <script src="../../resources/testharnessreport.js"></script> 5 <script src="../../resources/testharnessreport.js"></script>
6 <script src="../resources/test-helpers.js"></script> 6 <script src="../resources/test-helpers.js"></script>
7 <body> 7 <body>
8 <script> 8 <script>
9 function post_and_wait_for_reply(worker, message) { 9 function post_and_wait_for_reply(worker, message) {
10 return new Promise(resolve => { 10 return new Promise(resolve => {
11 navigator.serviceWorker.onmessage = e => { resolve(e.data); }; 11 navigator.serviceWorker.onmessage = e => { resolve(e.data); };
12 worker.postMessage(message); 12 worker.postMessage(message);
13 }); 13 });
14 } 14 }
15 15
16 function expect_state(state, enabled, header, desc) {
17 assert_equals(Object.keys(state).length, 2, desc + ': # of keys');
18 assert_equals(state.enabled, enabled, desc + ': enabled');
19 assert_equals(state.headerValue, header, desc + ': header');
20 }
21
16 promise_test(t => { 22 promise_test(t => {
17 const scope = '../resources/getState'; 23 const scope = '../resources/get-state';
18 const script = '../resources/empty-worker.js'; 24 const script = '../resources/empty-worker.js';
19 var registration; 25 var np;
20 26
21 return service_worker_unregister_and_register(t, script, scope) 27 return service_worker_unregister_and_register(t, script, scope)
22 .then(r => { 28 .then(r => {
23 registration = r; 29 np = r.navigationPreload;
24 add_completion_callback(() => registration.unregister()); 30 add_completion_callback(() => r.unregister());
25 return registration.navigationPreload.getState(); 31 return np.getState();
26 }) 32 })
27 .then(state => { 33 .then(state => {
28 assert_equals(state.enabled, false, 34 expect_state(state, false, 'true', 'default state');
29 '.enabled should be false by default'); 35 return np.enable();
30 return registration.navigationPreload.enable();
31 }) 36 })
32 .then(() => registration.navigationPreload.getState()) 37 .then(result => {
38 assert_equals(result, undefined,
39 'enable() should resolve to undefined');
40 return np.getState();
41 })
33 .then(state => { 42 .then(state => {
34 assert_equals(state.enabled, true, 43 expect_state(state, true, 'true', 'state after enable()');
35 '.enabled should be true after enable()'); 44 return np.disable();
36 return registration.navigationPreload.disable();
37 }) 45 })
38 .then(() => registration.navigationPreload.getState()) 46 .then(result => {
47 assert_equals(result, undefined,
48 'disable() should resolve to undefined');
49 return np.getState();
50 })
39 .then(state => { 51 .then(state => {
40 assert_equals(state.enabled, false, 52 expect_state(state, false, 'true', 'state after disable()');
41 '.enabled should be false after disable()'); 53 return np.setHeaderValue('dreams that cannot be');
54 })
55 .then(result => {
56 assert_equals(result, undefined,
57 'setHeaderValue() should resolve to undefined');
58 return np.getState();
59 })
60 .then(state => {
61 expect_state(state, false, 'dreams that cannot be',
62 'state after setHeaderValue()');
63 return np.setHeaderValue('').then(() => np.getState());
64 })
65 .then(state => {
66 expect_state(state, false, '', 'after setHeaderValue to empty string');
67 return np.setHeaderValue(null).then(() => np.getState());
68 })
69 .then(state => {
70 expect_state(state, false, 'null', 'after setHeaderValue to null');
71 return promise_rejects(t,
72 new TypeError,
73 np.setHeaderValue('what\uDC00\u0000\uD800this'),
74 'setHeaderValue() should throw if not passed a ByteString');
75 })
76 .then(() => np.enable().then(() => np.getState()))
77 .then(state => {
78 expect_state(state, true, 'null', 'enable() should not change header');
42 }); 79 });
43 }, 'getState'); 80 }, 'getState');
44 81
45 // This test sends commands to a worker to call enable()/disable()/getState(). 82 // This test sends commands to a worker to call enable()/disable()/getState().
46 // It checks the results from the worker and verifies that they match the 83 // It checks the results from the worker and verifies that they match the
47 // navigation preload state accessible from the page. 84 // navigation preload state accessible from the page.
48 promise_test(t => { 85 promise_test(t => {
49 const scope = 'resources/getState-worker'; 86 const scope = 'resources/get-state-worker';
50 const script = 'resources/get-state-worker.js'; 87 const script = 'resources/get-state-worker.js';
51 var worker; 88 var worker;
52 var registration; 89 var registration;
53 90
54 return service_worker_unregister_and_register(t, script, scope) 91 return service_worker_unregister_and_register(t, script, scope)
55 .then(r => { 92 .then(r => {
56 registration = r; 93 registration = r;
57 add_completion_callback(() => registration.unregister()); 94 add_completion_callback(() => registration.unregister());
58 worker = registration.installing; 95 worker = registration.installing;
59 // Call getState(). 96 // Call getState().
60 return post_and_wait_for_reply(worker, 'getState'); 97 return post_and_wait_for_reply(worker, 'getState');
61 }) 98 })
62 .then(data => { 99 .then(data => {
63 return Promise.all([data, registration.navigationPreload.getState()]); 100 return Promise.all([data, registration.navigationPreload.getState()]);
64 }) 101 })
65 .then(states => { 102 .then(states => {
66 assert_equals(states[0].enabled, false, 103 expect_state(states[0], false, 'true',
67 '.enabled should be false by default (from worker)'); 104 'default state (from worker)');
68 assert_equals(states[1].enabled, false, 105 expect_state(states[1], false, 'true',
69 '.enabled should be false by default (from page)'); 106 'default state (from page)');
70 // Call enable() and then getState(). 107 // Call enable() and then getState().
71 return post_and_wait_for_reply(worker, 'enable'); 108 return post_and_wait_for_reply(worker, 'enable');
72 }) 109 })
73 .then(data => { 110 .then(data => {
74 assert_equals(data, undefined, 'enable() should resolve to undefined'); 111 assert_equals(data, undefined, 'enable() should resolve to undefined');
75 return Promise.all([ 112 return Promise.all([
76 post_and_wait_for_reply(worker, 'getState'), 113 post_and_wait_for_reply(worker, 'getState'),
77 registration.navigationPreload.getState() 114 registration.navigationPreload.getState()
78 ]); 115 ]);
79 }) 116 })
80 .then(states => { 117 .then(states => {
81 assert_equals(states[0].enabled, true, 118 expect_state(states[0], true, 'true',
82 '.enabled should be true after enable() (from worker)'); 119 'state after enable() (from worker)');
83 assert_equals(states[1].enabled, true, 120 expect_state(states[1], true, 'true',
84 '.enabled should be true after enable() (from page)'); 121 'state after enable() (from page)');
85 // Call disable() and then getState(). 122 // Call disable() and then getState().
86 return post_and_wait_for_reply(worker, 'disable'); 123 return post_and_wait_for_reply(worker, 'disable');
87 }) 124 })
88 .then(data => { 125 .then(data => {
89 assert_equals(data, undefined, 126 assert_equals(data, undefined,
90 '.disable() should resolve to undefined'); 127 '.disable() should resolve to undefined');
91 return Promise.all([ 128 return Promise.all([
92 post_and_wait_for_reply(worker, 'getState'), 129 post_and_wait_for_reply(worker, 'getState'),
93 registration.navigationPreload.getState() 130 registration.navigationPreload.getState()
94 ]); 131 ]);
95 }) 132 })
96 .then(states => { 133 .then(states => {
97 assert_equals(states[0].enabled, false, 134 expect_state(states[0], false, 'true',
98 '.enabled should be false after disable() (from worker)'); 135 'state after disable() (from worker)');
99 assert_equals(states[1].enabled, false, 136 expect_state(states[1], false, 'true',
100 '.enabled should be false after disable() (from page)'); 137 'state after disable() (from page)');
138 return post_and_wait_for_reply(worker, 'setHeaderValue');
139 })
140 .then(data => {
141 assert_equals(data, undefined,
142 '.setHeaderValue() should resolve to undefined');
143 return Promise.all([
144 post_and_wait_for_reply(worker, 'getState'),
145 registration.navigationPreload.getState()]);
146 })
147 .then(states => {
148 expect_state(states[0], false, 'insightful',
149 'state after setHeaderValue() (from worker)');
150 expect_state(states[1], false, 'insightful',
151 'state after setHeaderValue() (from page)');
101 }); 152 });
102 }, 'getState from a worker'); 153 }, 'getState from a worker');
103 </script> 154 </script>
104 </body> 155 </body>
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698