<html>
<head>
<script src="../../http/tests/inspector/inspector-test.js"></script>
<script>

function createDynamicElements()
{
    var frameDoc = window.frames[0].document;

    var el = frameDoc.createElement("article");
    el.style.webkitFlowInto = "flow4";
    frameDoc.body.appendChild(el);

    el = frameDoc.createElement("div");
    el.style.webkitFlowFrom = "flow4";
    frameDoc.body.appendChild(el);

    runTest();
}

function createNamedFlow()
{
    var article = document.createElement("article");
    var div = document.createElement("div");

    article.id = "tmpArticle";
    article.style["-webkit-flow-into"] = "tmpNamedFlow";
    article.textContent = "This text is from CSS Named Flow \"tmpNamedFlow\"";

    div.id = "tmpDiv";
    div.style["-webkit-flow-from"] = "tmpNamedFlow";
    div.style["height"] = "5px";
    div.style["width"] = "20px";

    document.body.appendChild(article);
    document.body.appendChild(div);
}

function removeNamedFlow()
{
    document.body.removeChild(document.getElementById("tmpArticle"));
    document.body.removeChild(document.getElementById("tmpDiv"));
}

function test()
{
    WebInspector.showPanel("elements");
    InspectorTest.runTestSuite([
        function testGetNamedFlowCollection(next)
        {
            WebInspector.domAgent.requestDocument(documentCallback);

            function documentCallback(document)
            {
                WebInspector.cssModel.getNamedFlowCollectionAsync(document.id, namedFlowCallback);
            }

            function namedFlowCallback(namedFlowCollection)
            {
                InspectorTest.addResult("=== CSS Named Flows in main document ===");

                if (!namedFlowCollection) {
                    InspectorTest.addResult("[!] Failed to get Named Flows");
                    InspectorTest.completeTest();
                    return;
                }

                var namedFlowMap = namedFlowCollection.namedFlowMap;
                var namedFlows = [];
                for (var flowName in namedFlowMap)
                    namedFlows.push(namedFlowMap[flowName]);

                namedFlows.sort(function (nf1, nf2) {
                    return ((nf1.name == nf2.name) ? 0 : ((nf1.name > nf2.name) ? 1 : -1));
                });

                for (var i = 0; i < namedFlows.length; ++i)
                    printNamedFlow(namedFlows[i]);

                next();
            }
        },

        function testGetNamedFlowCollectionWithInvalidDocument(next)
        {
            WebInspector.domAgent.requestDocument(documentCallback);

            function documentCallback(document)
            {
                WebInspector.domAgent.querySelector(document.id, "#fake-document", querySelectorCallback);
            }

            function querySelectorCallback(nodeId)
            {
                WebInspector.cssModel.getNamedFlowCollectionAsync(nodeId, namedFlowCallback);
            }

            function namedFlowCallback(namedFlowCollection)
            {
                InspectorTest.addResult("=== CSS Named Flows in #fake-document ===");

                if (namedFlowCollection) {
                    InspectorTest.addResult("[!] Failed");
                    InspectorTest.completeTest();
                    return;
                }

                InspectorTest.addResult("#fake-document is not a document")
                next();
            }
        },

        function testGetFlowByName(next)
        {
            WebInspector.domAgent.requestDocument(documentCallback);

            function documentCallback(document)
            {
                WebInspector.cssModel.getFlowByNameAsync(document.id, "flow2", namedFlowCallback);
            }

            function namedFlowCallback(namedFlow)
            {
                InspectorTest.addResult("=== Named Flow \"flow2\" from main document ===");

                if (!namedFlow) {
                    InspectorTest.addResult("[!] Failed to get Named Flow");
                    InspectorTest.completeTest();
                    return;
                }

                printNamedFlow(namedFlow);

                next();
            }
        },

        function testGetFlowByNameWithInvalidName(next)
        {
            WebInspector.domAgent.requestDocument(documentCallback);

            function documentCallback(document)
            {
                WebInspector.cssModel.getFlowByNameAsync(document.id, "flow4", namedFlowCallback);
            }

            function namedFlowCallback(namedFlow)
            {
                InspectorTest.addResult("=== Name Flow \"flow4\" from main document ===");

                if (namedFlow) {
                    InspectorTest.addResult("[!] Failed")
                    InspectorTest.completeTest();
                    return;
                }

                InspectorTest.addResult("There is no Named Flow \"flow4\" in the main document");
                next();
            }
        },

        function testNamedFlowCreated(next)
        {
            WebInspector.cssModel.addEventListener(WebInspector.CSSStyleModel.Events.NamedFlowCreated, callback, this);
            InspectorTest.evaluateInPage("createNamedFlow()");

            function callback(event)
            {
                if (event.data.name !== "tmpNamedFlow")
                    return;

                WebInspector.cssModel.removeEventListener(WebInspector.CSSStyleModel.Events.NamedFlowCreated, callback, this);

                InspectorTest.addResult("NamedFlowCreated: \"tmpNamedFlow\"");
                next();
            }
        },

        function testRegionOversetChanged(next)
        {
            WebInspector.cssModel.addEventListener(WebInspector.CSSStyleModel.Events.RegionOversetChanged, callback, this);
            InspectorTest.evaluateInPage("window.document.getElementById(\"region3\").style.webkitFlowFrom=\"flow3\"");

            function callback(event)
            {
                if (event.data.name !== "flow3")
                    return;

                WebInspector.cssModel.removeEventListener(WebInspector.CSSStyleModel.Events.RegionOversetChanged, callback, this);

                InspectorTest.addResult("RegionOversetChanged: \"flow3\"");
                next();
            }
        },

        function testNamedFlowRemoved(next)
        {
            WebInspector.cssModel.addEventListener(WebInspector.CSSStyleModel.Events.NamedFlowRemoved, callback, this);
            InspectorTest.evaluateInPage("removeNamedFlow()");

            function callback(event)
            {
                if (event.data.flowName !== "tmpNamedFlow")
                    return;

                WebInspector.cssModel.removeEventListener(WebInspector.CSSStyleModel.Events.NamedFlowRemoved, callback, this);

                InspectorTest.addResult("NamedFlowRemoved: \"tmpNamedFlow\"");
                next();
            }
        }
    ]);

    function printNamedFlow(namedFlow)
    {
        InspectorTest.addResult("* Named Flow \"" + namedFlow.name + "\"");
        InspectorTest.addResult("Content Elements: " + namedFlow.content.length);
        InspectorTest.addResult("Regions: " + namedFlow.regions.length);
    }
}
</script>
</head>

<body onload="createDynamicElements()">
<p>
Tests the following commands and events:
<ul>
    <li>getNamedFlowCollection <a href="https://bugs.webkit.org/show_bug.cgi?id=91607">Bug 91607</a></li>
    <li>getFlowByName <a href="https://bugs.webkit.org/show_bug.cgi?id=91855">Bug 91855</a></li>
    <li>namedFlowCreated <a href="https://bugs.webkit.org/show_bug.cgi?id=92739">Bug 92739</a></li>
    <li>namedFlowRemoved <a href="https://bugs.webkit.org/show_bug.cgi?id=92739">Bug 92739</a></li>
    <li>regionOversetChanged <a href="https://bugs.webkit.org/show_bug.cgi?id=117833">Bug 117833</a></li>
</ul>
</p>

<article style="-webkit-flow-into: flow1"></article>
<div style="-webkit-flow-from: flow1"></div>
<div style="-webkit-flow-from: flow1"></div>
<div style="-webkit-flow-from: flow1"></div>

<article style="-webkit-flow-into: flow2"></article>
<div style="-webkit-flow-from: flow2"></div>
<div style="-webkit-flow-from: flow2"></div>

<article style="-webkit-flow-into: flow3">
    This text is from CSS Named Flow "flow3".
</article>
<div id="region3" style="-webkit-flow-from: none; height: 20px; width: 5px"></div>

<div id="fake-document"></div>

<iframe></iframe>

</body>
</html>
