<html>
<body>
<p>This test makes sure that navigator.unregisterProtocolHandler 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.unregisterProtocolHandler)
    debug('Pass: window.navigator.unregisterProtocolHandler is defined.');
else
    debug('Fail: window.navigator.unregisterProtocolHandler is not defined.');

var invalid_protocols = ['http', 'https', 'file', 'web+'];
invalid_protocols.forEach(function (protocol) {
    var succeeded = false;
    try {
        window.navigator.unregisterProtocolHandler(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.unregisterProtocolHandler(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.unregisterProtocolHandler('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.unregisterProtocolHandler('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>
