<html>
<head>
<script>
if (window.layoutTestController) {
    layoutTestController.dumpAsText();
    layoutTestController.waitUntilDone();
}

function beginTests() {
    if (window.layoutTestController) {    // Totaly different test in DRT (see feed.html)
        var result = document.getElementById("result");
        result.innerHTML = "Test Finished.";
        done();
        return;
    }

    var myIframe = document.getElementById("myIframe");

    setTimeout(function() {
        if (!finished) {
            var result = document.getElementById("result");
            result.innerHTML = "Test Failed! Feed URL not followed.";
            done();
        }
    }, 2000);

    checkFeedLinkFollowed();
}

function checkFeedLinkFollowed() {
    var result = document.getElementById("result");

    if (myIframe.document) {
        setTimeout(checkFeedLinkFollowed, 1);
    } else {
        result.innerHTML = "Test Passed! Feed URL followed";
        done();
    }
}

var finished = false;
function done() {
    finished = true;
    if (window.layoutTestController)
        layoutTestController.notifyDone();
}

</script>

</head>
<body>
    <div id="div0">
        < rdar://problem/5329440> REGRESSION: Clicking links with the feed:// protocol in Safari 3 does nothing
        <br/>
        This test is to see if a feed URL can be followed from a link on a page.
    </div>
    </br>
    <div id="result">
        Test not completed.
    </div>

    <iframe id="myIframe" src="resources/feed.html" onLoad="beginTests()"></iframe>
</body>
</html>
