Source code

Revision control

Copy as Markdown

Other Tools

Test Info:

<!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>