Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 <!DOCTYPE html> | 1 <!DOCTYPE html> |
| 2 <title>Service Worker: WindowClient.navigate() tests</title> | 2 <title>Service Worker: WindowClient.navigate() tests</title> |
| 3 <script src="../resources/testharness.js"></script> | 3 <script src="../resources/testharness.js"></script> |
| 4 <script src="../resources/testharnessreport.js"></script> | 4 <script src="../resources/testharnessreport.js"></script> |
| 5 <script src="../resources/get-host-info.js"></script> | 5 <script src="../resources/get-host-info.js"></script> |
| 6 <script src="resources/test-helpers.js"></script> | 6 <script src="resources/test-helpers.js"></script> |
| 7 <body> | |
| 7 <script> | 8 <script> |
| 8 | 9 |
| 9 var scope = 'resources/blank.html?windowclient-navigate'; | 10 const SCOPE = 'resources/blank.html'; |
| 10 var script_url = 'resources/windowclient-navigate-worker.js'; | 11 const SCRIPT_URL = 'resources/windowclient-navigate-worker.js'; |
| 11 var client_frame; | 12 const SCRIPT_URL_ON_INSTALL = 'resources/navigate-on-install-worker.js'; |
| 12 var worker; | 13 const URL_PREFIX = location.origin + '/serviceworker/'; |
| 13 var test; | 14 const FULL_SCOPE_URL = URL_PREFIX + SCOPE; |
| 15 const FULL_SCRIPT_URL = URL_PREFIX + SCRIPT_URL; | |
| 16 const CROSS_ORIGIN_URL = get_host_info()['HTTP_REMOTE_ORIGIN'] + | |
| 17 '/serviceworker/resources/blank.html'; | |
| 14 | 18 |
| 15 var current_index = 0; | 19 navigate_test({ |
| 16 var test_list = [ | 20 description: 'normal test', |
| 17 { url : 'blank.html' }, | 21 dest_url: 'blank.html?navigate', |
| 18 { url : '' }, | 22 expected: FULL_SCOPE_URL + '?navigate', |
|
nhiroki
2016/01/25 09:50:31
normalizeURL() defined in http/tests/serviceworker
zino
2016/01/29 05:36:38
Done.
| |
| 19 { url : 'blank.html', init : 'uncontrolled/blank.html' }, | 23 }); |
| 20 { url : get_host_info()['HTTP_REMOTE_ORIGIN'] + | |
| 21 '/serviceworker/resources/blank.html' }, | |
| 22 { url : 'http://[example].com' }, | |
| 23 { url : 'view-source://example.com' }, | |
| 24 { url : 'file:///' }, | |
| 25 { url : 'about:blank' }, | |
| 26 { url : 'about:crash' } | |
| 27 ]; | |
| 28 | 24 |
| 29 var expected = [ | 25 navigate_test({ |
| 30 location.origin + '/serviceworker/resources/blank.html', | 26 description: 'blank url test', |
| 31 location.origin + '/serviceworker/' + script_url, | 27 dest_url: '', |
| 32 'TypeError', | 28 expected: FULL_SCRIPT_URL |
| 33 null, | 29 }); |
| 34 'TypeError', | |
| 35 'TypeError', | |
| 36 'TypeError', | |
| 37 'TypeError', | |
| 38 'TypeError' | |
| 39 ]; | |
| 40 | 30 |
| 41 var actual = []; | 31 navigate_test({ |
| 32 description: 'in scope but not controlled test', | |
| 33 dest_url: 'blank.html?navigate', | |
| 34 expected: 'TypeError', | |
| 35 wait_state: 'installing', | |
| 36 script_url: 'resources/navigate-on-install-worker.js' | |
|
nhiroki
2016/01/25 09:50:31
SCRIPT_URL_ON_INSTALL
zino
2016/01/29 05:36:38
Done.
| |
| 37 }); | |
| 42 | 38 |
| 43 async_test(function(t) { | 39 navigate_test({ |
| 44 test = t; | 40 description: 'out scope test', |
| 45 return service_worker_unregister_and_register(test, script_url, scope) | 41 src_url: 'out_scope/blank.html', |
| 46 .then(function(registration) { | 42 dest_url: 'blank.html?navigate', |
| 47 worker = registration.installing; | 43 expected: 'TypeError', |
| 48 return wait_for_state(test, worker, 'activated'); | 44 }); |
| 49 }) | |
| 50 .then(function() { | |
| 51 var channel = new MessageChannel(); | |
| 52 channel.port1.onmessage = test.step_func(function(e) { | |
| 53 on_message(e, channel.port1); | |
| 54 }); | |
| 55 worker.postMessage({ port : channel.port2 }, [channel.port2]); | |
| 56 }) | |
| 57 .catch(unreached_rejection(t)); | |
| 58 }, 'WindowClient.navigate() test'); | |
| 59 | 45 |
| 60 function on_message(e, port) { | 46 navigate_test({ |
| 61 var message = e.data; | 47 description : 'cross orgin url test', |
|
nhiroki
2016/01/25 09:50:31
There is a whitespace before ':'.
zino
2016/01/29 05:36:38
Done.
| |
| 48 dest_url: CROSS_ORIGIN_URL, | |
| 49 expected: null | |
| 50 }); | |
| 62 | 51 |
| 63 message == 'ready' || actual.push(message); | 52 navigate_test({ |
| 64 if (expected.length == actual.length) { | 53 description: 'invalid url(http://[eaxmple.com]) test', |
| 65 assert_array_equals(actual, expected); | 54 dest_url: 'http://[example].com', |
| 66 service_worker_unregister_and_done(test, scope); | 55 expected: 'TypeError' |
| 67 } else { | 56 }); |
| 68 client_frame && client_frame.remove(); | 57 |
| 69 var init_url = test_list[current_index].init || scope; | 58 navigate_test({ |
| 70 with_iframe(init_url).then(function(f) { | 59 description: 'invalid url(view-source://example.com) test', |
| 71 client_frame = f; | 60 dest_url: 'view-source://example.com', |
| 72 port.postMessage(test_list[current_index++].url); | 61 expected: 'TypeError' |
| 73 }); | 62 }); |
| 74 } | 63 |
| 64 navigate_test({ | |
| 65 description: 'invalid url(file:///) test', | |
| 66 dest_url: 'file:///', | |
| 67 expected: 'TypeError' | |
| 68 }); | |
| 69 | |
| 70 navigate_test({ | |
| 71 description: 'invalid url(about:blank) test', | |
| 72 dest_url: 'about:blank', | |
| 73 expected: 'TypeError' | |
| 74 }); | |
| 75 | |
| 76 function navigate_test(override_parameters) { | |
| 77 // default parameters | |
| 78 var parameters = { | |
| 79 description : null, | |
| 80 src_url : SCOPE, | |
| 81 dest_url : null, | |
| 82 expected : null, | |
| 83 wait_state : 'activated', | |
| 84 scope : SCOPE, | |
| 85 script_url : SCRIPT_URL | |
|
nhiroki
2016/01/25 09:50:31
ditto(whitespaces)
zino
2016/01/29 05:36:38
Done.
| |
| 86 }; | |
| 87 | |
| 88 for (key in override_parameters) | |
| 89 parameters[key] = override_parameters[key]; | |
| 90 | |
| 91 promise_test(function(test) { | |
| 92 var service_worker; | |
| 93 var client_frame; | |
| 94 return service_worker_unregister_and_register( | |
| 95 test, parameters.script_url, parameters.scope) | |
| 96 .then(function(registration) { | |
| 97 service_worker = registration.installing; | |
| 98 return wait_for_state(test, service_worker, parameters.wait_state); | |
| 99 }) | |
| 100 .then(function(state) { | |
| 101 return with_iframe(parameters.src_url); | |
| 102 }) | |
| 103 .then(function(frame) { | |
| 104 client_frame = frame; | |
| 105 return new Promise(function(resolve) { | |
| 106 var channel = new MessageChannel(); | |
| 107 channel.port1.onmessage = test.step_func(resolve); | |
| 108 service_worker.postMessage({ | |
| 109 port: channel.port2, | |
| 110 url: parameters.dest_url | |
| 111 }, [channel.port2]); | |
| 112 }); | |
| 113 }) | |
| 114 .then(function(response) { | |
| 115 client_frame && client_frame.remove() | |
| 116 assert_equals(response.data, parameters.expected); | |
| 117 return service_worker_unregister_and_done(test, parameters.scope); | |
| 118 }) | |
| 119 .catch(unreached_rejection(test)); | |
|
nhiroki
2016/01/25 09:50:31
Can you remove this 'cache' because 'promise_test'
zino
2016/01/29 05:36:38
Done.
| |
| 120 }, parameters.description); | |
| 75 } | 121 } |
| 76 | 122 |
| 77 </script> | 123 </script> |
| 124 </body> | |
| OLD | NEW |