<head>
<script>
if (window.testRunner && window.internals) {
    testRunner.dumpAsText();
    testRunner.dumpChildFramesAsText();
    internals.settings.setHyperlinkAuditingEnabled(true);
    testRunner.waitUntilDone();
}

function loadLinkWithPing() {
    var iframe = document.getElementById("link_frame");
    var iframeDoc = iframe.contentDocument || iframe.contentWindow.document;
    iframeDoc.write('' +
        '<img src="resources/delete-ping.php?test=contentextensions-block-ping" ' + 
            'onerror="parent.clickOnLinkWithPing();">' +
        '<a id="a" ' +
            'href="resources/check-ping.html" ' + // check-ping.html calls showPingResult()
            'ping="resources/save-ping.php?test=contentextensions-block-ping"> ' +
            'Link with ping' +
        '</a>'
        
    );
}

function clickOnLinkWithPing() {
    var iframe = document.getElementById("link_frame");
    var iframeDoc = iframe.contentDocument;
    if (window.eventSender) {
        var a = iframeDoc.getElementById("a");
        var x = iframe.offsetLeft + a.offsetLeft + 2;
        var y = iframe.offsetTop + a.offsetTop + 2;
        eventSender.mouseMoveTo(x, y);
        eventSender.mouseDown();
        eventSender.mouseUp();
    }
}

function showPingResult() {
    var iframe = document.getElementById("result_frame");
    iframe.onload = function() {
        if (window.testRunner) { testRunner.notifyDone(); }
    }
    iframe.src = "resources/get-ping-data.php?test=contentextensions-block-ping&timeout_ms=1000";
    // Why timeout_ms=1000:
    // To pass the test, the ping shouldn't arrive, so we need to
    // timeout at some point. We don't have to wait too long because
    // the console message can tell us whether the ping was blocked.
}
</script>
</head>

<body onload="loadLinkWithPing();">
This test follows a link with a ping attribute where the ping URL matches a 'block' rule.
<iframe id="link_frame" name="link_frame"><!-- Will contain link with ping --></iframe>
<iframe id="result_frame" name="result_frame"><!-- Will contain ping data received by server --></iframe>
</body>

