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