| <!DOCTYPE html> | |
| <title>prerendered page calls to registerProtocolHandler should validate input synchronously</title> | |
| <meta name="timeout" content="long"> | |
| <script src="/resources/testharness.js"></script> | |
| <script src="/resources/testharnessreport.js"></script> | |
| <script src="/common/utils.js"></script> | |
| <script src="/common/dispatcher/dispatcher.js"></script> | |
| <script src="../resources/utils.js"></script> | |
| <script src="resources/utils.js"></script> | |
| <script> | |
| // Create a prerender page that attempts to use either registerProtocolHandler | |
| // or unregisterProtocolHandler with either an invalid scheme or an invalid | |
| // URL template. Validation of invalid parameters for both should happen | |
| // synchronously in prerendered pages. | |
| async function registerProtocolHandlerTestHelper( | |
| t, fn_name, scheme, url_template, expected_result) { | |
| const {exec} = await create_prerendered_page(t); | |
| const result = await exec((fn_name, scheme, url_template) => { | |
| try { | |
| navigator[fn_name](scheme, url_template); | |
| } catch (registerProtocolHandlerException) { | |
| return `failed with '${registerProtocolHandlerException.name}'`; | |
| } | |
| return 'success'; | |
| }, [fn_name, scheme, url_template]); | |
| assert_equals(result, expected_result); | |
| } | |
| setup(() => assertSpeculationRulesIsSupported()); | |
| promise_test(async t => { | |
| await registerProtocolHandlerTestHelper( | |
| t, 'registerProtocolHandler', 'notallowed', 'https://example.com/?%s', | |
| 'failed with \'SecurityError\''); | |
| }, 'prerendering page registerProtocolHandler calls with invalid URI scheme should fail synchronously.'); | |
| promise_test(async t => { | |
| await registerProtocolHandlerTestHelper( | |
| t, 'registerProtocolHandler', 'news', 'https://example.com/?', | |
| 'failed with \'SyntaxError\''); | |
| }, 'prerendering page registerProtocolHandler calls with invalid URI template should fail synchronously.'); | |
| promise_test(async t => { | |
| await registerProtocolHandlerTestHelper( | |
| t, 'unregisterProtocolHandler', 'notallowed', 'https://example.com/?%s', | |
| 'failed with \'SecurityError\''); | |
| }, 'prerendering page unregisterProtocolHandler calls with invalid URI scheme should fail synchronously.'); | |
| promise_test(async t => { | |
| await registerProtocolHandlerTestHelper( | |
| t, 'unregisterProtocolHandler', 'news', 'https://example.com/?', | |
| 'failed with \'SyntaxError\''); | |
| }, 'prerendering page unregisterProtocolHandler calls with invalid URI template should fail synchronously.'); | |
| </script> |