<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN"
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">

<!--

   Licensed to the Apache Software Foundation (ASF) under one or more
   contributor license agreements.  See the NOTICE file distributed with
   this work for additional information regarding copyright ownership.
   The ASF licenses this file to You under the Apache License, Version 2.0
   (the "License"); you may not use this file except in compliance with
   the License.  You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.

-->
<!-- ========================================================================= -->
<!-- This test checks that scripts can properly invoke the Window object       -->
<!-- methods but that they cannot access data through getURL.                  -->
<!--                                                                           -->
<!-- @author vincent.hardy@sun.com                                             -->
<!-- @version $Id$   -->
<!-- ========================================================================= -->
<?xml-stylesheet type="text/css" href="../../resources/style/test.css" ?>

<svg xmlns="http://www.w3.org/2000/svg" 
     xmlns:xlink="http://www.w3.org/1999/xlink" 
     width="450" height="500" viewBox="0 0 450 500"
     onload="windowTest()">

    <text x="225" y="30" class="title">
        ECMA Script Secure Access to the Window Object
    </text>

    <style type="text/css"><![CDATA[
        .cellLabel {
            fill: white;
            stroke: black;
            shape-rendering: crispEdges;
        }

        .cellStatus {
            stroke: black;
            fill: white;
            shape-rendering: crispEdges;
        }

        .label {
            font-size: 12;
            font-family: sans-serif;
            fill: black;
            text-anchor: start;
        }

        .passedTest {
            fill: rgb(0,200,50);
            stroke: none;
            shape-rendering: crispEdges;
        }

        .failedTest {
            fill: crimson;
            stroke: none;
            shape-rendering: crispEdges;
        }

        #table {
            stroke: black;
        }

        .untested {
            fill: gray;
            stroke: none;
            shapeRendering: crispEdges;
        }

        .tableCell {
            fill: none;
            stroke: black;
            shapeRendering: crispEdges;
        }
    ]]>
    </style>

    <script type="text/ecmascript" ><![CDATA[

function windowTest() {
    evalTest();
    setIntervalTest();
    setTimeoutTest();
    getURLTest();
    alertTest();
    confirmTest();
    promptTest();
}

function evalTest() {
    var t = document.getElementById("eval");
    try {
        eval("dummyGetURL()");
        t.setAttributeNS(null, "class", "passedTest");
    } catch (e) {
        t.setAttributeNS(null, "class", "failedTest");
    }
}

function dummyGetURL(){
    alert('dummyGetURL');
    getURL('security3Include.svg', dummyFunction);
}

function dummyFunction() {
    System.out.println("===>> dummyFunction called");
}

function setIntervalTest(){
    var t = document.getElementById("setInterval");
    var intervalId;
   
    try {
        intervalId = setInterval(dummyFunction, 10000);
        t.setAttributeNS(null, "class", "passedTest");
    } catch (e) {
        t.setAttributeNS(null, "class", "failedTest");
        return; // Cannot test clearInterval
    }

    t = document.getElementById("clearInterval");

    try {
        window.clearInterval(intervalId);
        t.setAttributeNS(null, "class", "passedTest");
    } catch (e) {
        System.out.println("Got exception : " + e);
        t.setAttributeNS(null, "class", "failedTest");
    }
}

function setTimeoutTest(){
    var t = document.getElementById("setTimeout");
    var timeoutId = null;
   
    try {
        timeoutId = window.setTimeout(dummyFunction, 10000);
        t.setAttributeNS(null, "class", "passedTest");
    } catch (e) {
        t.setAttributeNS(null, "class", "failedTest");
        return; // Cannot test clearTimeout
    }

    t = document.getElementById("clearTimeout");

    try {
        window.clearTimeout(timeoutId);
        t.setAttributeNS(null, "class", "passedTest");
    } catch (e) {
        t.setAttributeNS(null, "class", "failedTest");
    }
}


function getURLTest(){
    var t = document.getElementById("getURL");
    try {
        getURL("security3Include.svg", processGetURL);
    } catch (e) {
        t.setAttributeNS(null, "class", "failedTest");
        return;
    }
}

function processGetURL(status){
    var t = document.getElementById("getURL");
    alert("status.success : " + status.success);
    if (status.success == false) {
        t.setAttributeNS(null, "class", "failedTest");
        return;
    }

    t.setAttributeNS(null, "class", "passedTest");

    t = document.getElementById("parseXML");
    try {
        var root = parseXML(status.content, document);
        if (root == null){
            t.setAttributeNS(null, "class", "failedTest");
        } else {
            t.setAttributeNS(null, "class", "passedTest");
        }
    } catch (e) {
        t.setAttributeNS(null, "class", "failedTest");
    }

}

function dummyProcessGetURL(status){
}

function alertTest(){
    var t = document.getElementById("alert");
    try {
        alert("alert() test");
        t.setAttributeNS(null, "class", "passedTest");
    } catch (e) {
        t.setAttributeNS(null, "class", "failedTest");
    }
}

function confirmTest(){
    var t = document.getElementById("confirm");
    try {
        confirm("confirm() test");
        t.setAttributeNS(null, "class", "passedTest");
    } catch (e) {
        t.setAttributeNS(null, "class", "failedTest");
    }
}

function promptTest(){
    var t = document.getElementById("prompt");
    try {
        prompt("prompt() test");
        t.setAttributeNS(null, "class", "passedTest");
    } catch (e) {
        t.setAttributeNS(null, "class", "failedTest");
    }
}

    ]]></script>


    <g id="testTable" transform="translate(125, 150)">

        <g id="setIntervalTest">
            <rect class="cellLabel" width="200" height="20" />
            <rect class="cellStatus" x="200" width="20" height="20" />
            <rect id="setInterval" class="untested" x="203" y="3" width="14" height="14" />
            <text x="5" y="15" class="label">setInterval</text>
        </g>

        <g id="clearIntervalTest" transform="translate(0, 20)">
            <rect class="cellLabel" width="200" height="20" />
            <rect class="cellStatus" x="200" width="20" height="20" />
            <rect id="clearInterval" class="untested" x="203" y="3" width="14" height="14" />
            <text x="5" y="15" class="label">clearInterval</text>
        </g>

        <g id="setTimeoutTest" transform="translate(0, 40)">
            <rect class="cellLabel" width="200" height="20" />
            <rect class="cellStatus" x="200" width="20" height="20" />
            <rect id="setTimeout" class="untested" x="203" y="3" width="14" height="14" />
            <text x="5" y="15" class="label">setTimeout</text>
        </g>

        <g id="clearTimeoutTest" transform="translate(0, 60)">
            <rect class="cellLabel" width="200" height="20" />
            <rect class="cellStatus" x="200" width="20" height="20" />
            <rect id="clearTimeout" class="untested" x="203" y="3" width="14" height="14" />
            <text x="5" y="15" class="label">clearTimeout</text>
        </g>

        <g id="parseXMLTest" transform="translate(0, 80)">
            <rect class="cellLabel" width="200" height="20" />
            <rect class="cellStatus" x="200" width="20" height="20" />
            <rect id="parseXML" class="untested" x="203" y="3" width="14" height="14" />
            <text x="5" y="15" class="label">parseXML</text>
        </g>

        <g id="getURLTest" transform="translate(0, 100)">
            <rect class="cellLabel" width="200" height="20" />
            <rect class="cellStatus" x="200" width="20" height="20" />
            <rect id="getURL" class="untested" x="203" y="3" width="14" height="14" />
            <text x="5" y="15" class="label">getURL</text>
        </g>

        <g id="alertTest" transform="translate(0, 120)">
            <rect class="cellLabel" width="200" height="20" />
            <rect class="cellStatus" x="200" width="20" height="20" />
            <rect id="alert" class="untested" x="203" y="3" width="14" height="14" />
            <text x="5" y="15" class="label">alert</text>
        </g>

        <g id="confirmTest" transform="translate(0, 140)">
            <rect class="cellLabel" width="200" height="20" />
            <rect class="cellStatus" x="200" width="20" height="20" />
            <rect id="confirm" class="untested" x="203" y="3" width="14" height="14" />
            <text x="5" y="15" class="label">confirm</text>
        </g>

        <g id="promptTest" transform="translate(0, 160)">
            <rect class="cellLabel" width="200" height="20" />
            <rect class="cellStatus" x="200" width="20" height="20" />
            <rect id="prompt" class="untested" x="203" y="3" width="14" height="14" />
            <text x="5" y="15" class="label">prompt</text>
        </g>

        <g id="evalTest" transform="translate(0, 160)">
            <rect class="cellLabel" width="200" height="20" />
            <rect class="cellStatus" x="200" width="20" height="20" />
            <rect id="eval" class="untested" x="203" y="3" width="14" height="14" />
            <text x="5" y="15" class="label">eval</text>
        </g>

        
    </g>


    <script type="text/ecmascript"><![CDATA[
function onDone() {
    if (!(regardTestInstance == null)) {
        regardTestInstance.scriptDone();   
    } else {
        alert("This button only works when run in the regard framework");
    }
}
    ]]></script>
    <g id="done" transform="translate(195, 468)" cursor="pointer" onclick="onDone()">
        <rect rx="5" ry="5" width="60" height="25" fill="#eeeeee" stroke="black" />
        <text x="30" y="18" font-size="14" font-weight="bold" text-anchor="middle">Done</text>
    </g>

</svg>
