<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<html>
<head>
<script src="../../../resources/js-test-pre.js"></script>
</head>
<body>
<script>
description("Tests that when a request is made on a Geolocation object, permission is denied and its Frame is disconnected before a callback is made, the error callback is invoked with PERMISSION_DENIED.");

// Prime the Geolocation instance by denying permission. This makes sure that we execute the
// same code path for both preemptive and non-preemtive permissions policies.
if (window.testRunner) {
    testRunner.setGeolocationPermission(false);
    testRunner.setMockGeolocationPosition(51.478, -0.166, 100);
} else
    debug('This test can not be run without the testRunner');

window.successCallbackInvoked = false;
function onIframeLoaded() {
    iframeGeolocation = iframe.contentWindow.navigator.geolocation;
    iframeGeolocation.getCurrentPosition(function() {
        window.successCallbackInvoked = true;
    }, function(e) {
        window.secondPositionError = e;
        debug('');
        iframe.src = 'data:text/html,This frame should be visible when the test completes';
    });
}

function onIframeUnloaded() {
    // Make another request, with permission already denied.
    iframeGeolocation.getCurrentPosition(function () {
        window.successCallbackInvoked = true;
    }, function(e) {
        window.firstPositionError = e;
    });
    setTimeout(function() {
        shouldBe("successCallbackInvoked", "false");
        shouldBe("firstPositionError.code", "GeolocationPositionError.PERMISSION_DENIED");
        shouldBe("firstPositionError.message", "'User denied Geolocation'");
        shouldBe("secondPositionError.code", "GeolocationPositionError.PERMISSION_DENIED");
        shouldBe("secondPositionError.message", "'User denied Geolocation'");
        finishJSTest();
    }, 1000);
}

var iframe = document.createElement('iframe');
iframe.src = 'resources/disconnected-frame-inner.html';
document.body.appendChild(iframe);

window.jsTestIsAsync = true;
</script>
<script src="../../../resources/js-test-post.js"></script>
</body>
</html>
