<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <title>Make sure embedded SVG is turned off in dashboard</title>
    </head>
    <script>
        function debug(str) {
            var c = document.getElementById('console')
            c.appendChild(document.createTextNode(str + '\n'));
        }
        
        if (window.layoutTestController) {
            layoutTestController.setUseDashboardCompatibilityMode(true);
            layoutTestController.dumpAsText();
        }
    </script>
    <body>
        <p>This test makes sure we can't add manually parsed SVG to the document when in dashboard compatibility mode.  It can not be tested manually.</p>
        <div id="targetDiv"></div>
        <pre id="console"></pre> 
        <script>
            var documentString = '<html xmlns="http://www.w3.org/1999/xhtml">' +
                                 '<body>' +
                                 '<svg xmlns="http://www.w3.org/2000/svg" width="400" height="400">' +
                                 '<circle id="svgCircle" cx="50" cy="50" r="50" fill="red"/></svg>' +
                                 '</body></html>'; 

            // Use DOMParser interface to create a SVGDocument datastructure from SVG content string
            var parser = new DOMParser();
            var xhtmlDocument = parser.parseFromString(documentString, "application/xhtml+xml");
         
            debug("Parsing of the document isn't prevented and produces a " + xhtmlDocument);
            debug("The circle element is of type " + xhtmlDocument.getElementById('svgCircle'));
            
            // Import SVG element into tree.
            var importedNode = null;
            try {
                importedNode = document.importNode(xhtmlDocument.firstChild, true);
            } catch(e) {
            }
            
            if (importedNode) {
                debug("FAIL: Managed to insert SVG element into tree");
                document.getElementById('targetDiv').appendChild(importedNode);
            } else {
                debug("PASS: Could not insert SVG element into tree");
            }
        </script>
    </body>
</html>
