<!DOCTYPE html>
<html>
<head>
<script src="../../../resources/js-test-pre.js"></script>
</head>
<body>
<p>This test makes sure that navigator.isProtocolHandlerRegistered throws the proper exceptions and returns the default state of handler.</p>
<pre id="console"></pre>
<script>
if (window.testRunner)
    testRunner.dumpAsText();

if (window.navigator.isProtocolHandlerRegistered)
    debug('PASS window.navigator.isProtocolHandlerRegistered is defined.');
else
    debug('FAIL window.navigator.isProtocolHandlerRegistered is not defined.');

var invalidUrl = "%S";
var succeeded = false;
try {
    window.navigator.isProtocolHandlerRegistered(protocol, invalidUrl);
    succeeded = false;
} catch (e) {
    succeeded = true;
}
if (succeeded)
    debug('PASS Invalid url "' + invalidUrl + '" threw SyntaxError exception.');
else
    debug('FAIL Invalid url "' + invalidUrl + '" allowed.');

var invalid_schemes = ['mailto:', 'ssh:/', 'magnet:+', 'tel:sip'];
invalid_schemes.forEach(function (scheme) {
    var succeeded = false;
    try {
        window.navigator.isProtocolHandlerRegistered(scheme, 'invalid scheme uri=%s');
    } catch (e) {
        succeeded = true;
    }

    if (succeeded)
        debug('PASS Invalid scheme "' + scheme + '" failed.');
    else
        debug('FAIL Invalid scheme "' + scheme + '" allowed.');
});

try {
    var state = window.navigator.isProtocolHandlerRegistered("bitcoin", "valid protocol %s");
    if (state == "registered")
        debug('PASS window.navigator.isProtocolHandlerRegistered returns "registered" state');
    else
        debug("FAIL window.navigator.isProtocolHandlerRegistered doesn't return the default state.");
} catch (e) {
    debug('FAIL window.navigator.isProtocolHandlerRegistered call is failed: "' + e.message + '".');
}
</script>
</body>
</html>
