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

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: rebase 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\uD800this'),
74 'setHeaderValue() should throw if passed surrogates');
75 })
76 .then(() => {
77 return promise_rejects(t,
78 new TypeError,
79 np.setHeaderValue('zer\0o'),
80 'setHeaderValue() should throw if passed \\0');
81 })
82 .then(() => {
83 return promise_rejects(t,
84 new TypeError,
85 np.setHeaderValue('\rcarriage'),
86 'setHeaderValue() should throw if passed \\r');
87 })
88 .then(() => {
89 return promise_rejects(t,
90 new TypeError,
91 np.setHeaderValue('newline\n'),
92 'setHeaderValue() should throw if passed \\n');
93 })
94 .then(() => np.enable().then(() => np.getState()))
95 .then(state => {
96 expect_state(state, true, 'null', 'enable() should not change header');
42 }); 97 });
43 }, 'getState'); 98 }, 'getState');
44 99
45 // This test sends commands to a worker to call enable()/disable()/getState(). 100 // 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 101 // It checks the results from the worker and verifies that they match the
47 // navigation preload state accessible from the page. 102 // navigation preload state accessible from the page.
48 promise_test(t => { 103 promise_test(t => {
49 const scope = 'resources/getState-worker'; 104 const scope = 'resources/get-state-worker';
50 const script = 'resources/get-state-worker.js'; 105 const script = 'resources/get-state-worker.js';
51 var worker; 106 var worker;
52 var registration; 107 var registration;
53 108
54 return service_worker_unregister_and_register(t, script, scope) 109 return service_worker_unregister_and_register(t, script, scope)
55 .then(r => { 110 .then(r => {
56 registration = r; 111 registration = r;
57 add_completion_callback(() => registration.unregister()); 112 add_completion_callback(() => registration.unregister());
58 worker = registration.installing; 113 worker = registration.installing;
59 // Call getState(). 114 // Call getState().
60 return post_and_wait_for_reply(worker, 'getState'); 115 return post_and_wait_for_reply(worker, 'getState');
61 }) 116 })
62 .then(data => { 117 .then(data => {
63 return Promise.all([data, registration.navigationPreload.getState()]); 118 return Promise.all([data, registration.navigationPreload.getState()]);
64 }) 119 })
65 .then(states => { 120 .then(states => {
66 assert_equals(states[0].enabled, false, 121 expect_state(states[0], false, 'true',
67 '.enabled should be false by default (from worker)'); 122 'default state (from worker)');
68 assert_equals(states[1].enabled, false, 123 expect_state(states[1], false, 'true',
69 '.enabled should be false by default (from page)'); 124 'default state (from page)');
70 // Call enable() and then getState(). 125 // Call enable() and then getState().
71 return post_and_wait_for_reply(worker, 'enable'); 126 return post_and_wait_for_reply(worker, 'enable');
72 }) 127 })
73 .then(data => { 128 .then(data => {
74 assert_equals(data, undefined, 'enable() should resolve to undefined'); 129 assert_equals(data, undefined, 'enable() should resolve to undefined');
75 return Promise.all([ 130 return Promise.all([
76 post_and_wait_for_reply(worker, 'getState'), 131 post_and_wait_for_reply(worker, 'getState'),
77 registration.navigationPreload.getState() 132 registration.navigationPreload.getState()
78 ]); 133 ]);
79 }) 134 })
80 .then(states => { 135 .then(states => {
81 assert_equals(states[0].enabled, true, 136 expect_state(states[0], true, 'true',
82 '.enabled should be true after enable() (from worker)'); 137 'state after enable() (from worker)');
83 assert_equals(states[1].enabled, true, 138 expect_state(states[1], true, 'true',
84 '.enabled should be true after enable() (from page)'); 139 'state after enable() (from page)');
85 // Call disable() and then getState(). 140 // Call disable() and then getState().
86 return post_and_wait_for_reply(worker, 'disable'); 141 return post_and_wait_for_reply(worker, 'disable');
87 }) 142 })
88 .then(data => { 143 .then(data => {
89 assert_equals(data, undefined, 144 assert_equals(data, undefined,
90 '.disable() should resolve to undefined'); 145 '.disable() should resolve to undefined');
91 return Promise.all([ 146 return Promise.all([
92 post_and_wait_for_reply(worker, 'getState'), 147 post_and_wait_for_reply(worker, 'getState'),
93 registration.navigationPreload.getState() 148 registration.navigationPreload.getState()
94 ]); 149 ]);
95 }) 150 })
96 .then(states => { 151 .then(states => {
97 assert_equals(states[0].enabled, false, 152 expect_state(states[0], false, 'true',
98 '.enabled should be false after disable() (from worker)'); 153 'state after disable() (from worker)');
99 assert_equals(states[1].enabled, false, 154 expect_state(states[1], false, 'true',
100 '.enabled should be false after disable() (from page)'); 155 'state after disable() (from page)');
156 return post_and_wait_for_reply(worker, 'setHeaderValue');
157 })
158 .then(data => {
159 assert_equals(data, undefined,
160 '.setHeaderValue() should resolve to undefined');
161 return Promise.all([
162 post_and_wait_for_reply(worker, 'getState'),
163 registration.navigationPreload.getState()]);
164 })
165 .then(states => {
166 expect_state(states[0], false, 'insightful',
167 'state after setHeaderValue() (from worker)');
168 expect_state(states[1], false, 'insightful',
169 'state after setHeaderValue() (from page)');
101 }); 170 });
102 }, 'getState from a worker'); 171 }, 'getState from a worker');
103 </script> 172 </script>
104 </body> 173 </body>
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698