<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.testRunner) {
            testRunner.setUseDashboardCompatibilityMode(true);
            testRunner.dumpAsText();
        }
    </script>
    <body>
        <p>This test makes sure we can 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("PASS: Managed to insert SVG element into tree");
                document.getElementById('targetDiv').appendChild(importedNode);
            } else {
                debug("FAIL: Could not insert SVG element into tree");
            }
        </script>
    </body>
</html>
