<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', 'web+'];
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', 'geo', 'im', 'irc', 'ircs', 'magnet', 'mailto', 'mms', 'news', 'nntp', 'sip', 'sms', 'smsto', 'ssh', 'tel', 'urn', 'webcal', 'wtai', '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>
