<html>
<body>
<p>This test makes sure that navigator.registerProtocolHandler throws the proper exceptions and has no-op default implementation.</p>
<pre id="console"></pre>
<script>
if (window.testRunner)
    testRunner.dumpAsText();

function debug(str)
{
    var c = document.getElementById('console')
    c.appendChild(document.createTextNode(str + '\n'));
}

if (window.navigator.registerProtocolHandler)
    debug('Pass: window.navigator.registerProtocolHandler is defined.');
else
    debug('Fail: window.navigator.registerProtocolHandler is not defined.');

var invalid_protocols = ['http', 'https', 'file'];
invalid_protocols.forEach(function (protocol) {
    var succeeded = false;
    try {
        window.navigator.registerProtocolHandler(protocol, "invalid protocol %s", "title");
    } catch (e) {
        succeeded = 'SecurityError' == e.name;
    }

    if (succeeded)
        debug('Pass: Invalid protocol "' + protocol + '" threw SecurityError exception.');
    else
        debug('Fail: Invalid protocol "' + protocol + '" allowed.');
});

var valid_protocols = ['bitcoin', 'irc', 'geo', 'mailto', 'magnet', 'mms', 'news', 'nntp', 'sip', 'sms', 'smsto', 'ssh', 'tel', 'urn', 'webcal', 'xmpp'];
valid_protocols.forEach(function (protocol) {
    var succeeded = false;
    try {
        window.navigator.registerProtocolHandler(protocol, "valid protocol %s", "title");
        succeeded = true;
    } catch (e) {
        succeeded = false;
    }

    if (succeeded)
        debug('Pass: Valid protocol "' + protocol + '" allowed.');
    else
        debug('Fail: Valid protocol "' + protocol + '" failed.');
});

var invalid_urls = ["", "%S"];
invalid_urls.forEach(function (url) {
   var succeeded = false;
   try {
        window.navigator.registerProtocolHandler('web+myprotocol', url, 'title');
    } catch (e) {
        succeeded = 'SyntaxError' == e.name;
    }

    if (succeeded)
        debug('Pass: Invalid url "' + url + '" threw SyntaxError exception.');
    else
        debug('Fail: Invalid url "' + url + '" allowed.');
});

// Test that the API has default no-op implementation.
var succeeded = true;
try {
    window.navigator.registerProtocolHandler('web+myprotocol', "%s", "title");
} catch (e) {
    succeeded = false;
}

if (succeeded)
    debug('Pass: Valid call succeeded.');
else
    debug('Fail: Invalid call did not succeed.');
</script>
</body>
</html>
