<!DOCTYPE html>
<html>
<head>
<script>
if (window.testRunner) {
    testRunner.dumpAsText();
    testRunner.waitUntilDone();
}

if (window.internals && internals.settings)
    internals.settings.setShouldRestrictBaseURLSchemes(true);

function done()
{
    if (window.testRunner)
        testRunner.notifyDone();
}

function testFailed()
{
    document.getElementById("result").textContent = "FAIL";
    done();
}

function testPassed()
{
    document.getElementById("result").textContent = "PASS";
    done();
} 
</script>
<base href="data:/,testFailed()/">
</head>
<body>
<p>This tests that setting a base URL to a data URL is denied and hence there is no script execution.</p>
<p id="result"></p>
<script src="./non-existent-file.js" onerror="testPassed()"></script>
</body>
</html>
