<html>
<head>
<script src="../inspector-test.js"></script>
<script src="../network-test.js"></script>
<script>
function test()
{
    // Since this test could be run together with other inspector backend cache
    // tests, we need to reset size limits to default ones.
    InspectorTest.resetInspectorResourcesData(step1);

    function step1()
    {
        InspectorTest.makeSimpleXHR("GET", "resources/resource.php", true, step2);
    }

    function step2()
    {
        NetworkAgent.disable(step3);
    }

    function step3()
    {
        var request1 = WebInspector.panel("network").requests[WebInspector.panel("network").requests.length - 1];
        request1.requestContent(step4);
    }

    function step4()
    {
        var request1 = WebInspector.panel("network").requests[WebInspector.panel("network").requests.length - 1];
        InspectorTest.addResult("resource.content after disabling network domain: " + request1.content);
        NetworkAgent.enable(step5);
    }

    function step5()
    {
        InspectorTest.completeTest();
    }
}
</script>
</head>
<body onload="runTest()">
 <p>
 Tests that after disabling network domain, content saved on backend is removed.
<a href="https://bugs.webkit.org/show_bug.cgi?id=67995">Bug 67995</a>
</p>
</body>
</html>
