<!doctype html>
<html>
<head>
<script src="inspector-test.js"></script>
<script src="resources-test.js"></script>

<script>

var test = function()
{
    function step1()
    {
        var hadNavigation = false;

        function onRequestFinished(event)
        {
            var request = event.data;
            if (/\/har-pages-navigation-target\.html$/.test(request.url))
                hadNavigation = true;
            if (hadNavigation && /\/resource-har-pages\.html$/.test(request.url)) {
                WebInspector.networkManager.removeEventListener(WebInspector.NetworkManager.EventTypes.RequestFinished, onRequestFinished)
                step2();
            }
        }
        WebInspector.showPanel("network");
        var networkLogView = WebInspector.panel("network")._networkLogView;
        // networkLogView.clear();
        networkLogView._preserveLogToggle.toggled = true;
        WebInspector.networkManager.addEventListener(WebInspector.NetworkManager.EventTypes.RequestFinished, onRequestFinished);
        InspectorTest.evaluateInPage("location.href = '/resources/redirect.php?url=/inspector/resources/har-pages-navigation-target.html';");
    }

    function step2()
    {
        var log = (new WebInspector.HARLog(WebInspector.panel("network")._networkLogView._requests)).build();
        InspectorTest.addObject(log.pages, InspectorTest.HARPropertyFormattersWithSize);

        // Filter out favicon.ico requests that only appear on certain platforms.
        log.entries = log.entries.filter(function(entry) {
            return !/favicon\.ico$/.test(entry.request.url);
        });
        log.entries.sort(InspectorTest.requestURLComparer);
        for (var i = 0; i < log.entries.length; ++i) {
            var entry = log.entries[i];
            InspectorTest.addResult("page: " + entry.pageref + " url: " + entry.request.url);
        }
        InspectorTest.completeTest();
    }

    step1();
}

</script>


</head>

<body onload="runTest()">
<p>
Tests conversion of Inspector's resource representation into HAR format.
</p>

</body>
</html>
