<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
        "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
    <title>Test for bug 4233558</title>
<script type="text/javascript" charset="utf-8">
    if (window.layoutTestController) {
        layoutTestController.dumpAsText();
        layoutTestController.waitUntilDone();
    }

    function clickBody(event) {
        var resultsDiv = document.getElementById("resultsDiv");
        
        resultsDiv.innerHTML +=  "event.view :<br/>";
        try {
            resultsDiv.innerHTML +=  "document: " + event.view.document + "<br/>";
            resultsDiv.innerHTML +=  "proto: " + event.view.__proto__ + "<br/>";
            resultsDiv.innerHTML +=  " Success getting " + event.view + "<br/>";
        }
        catch(e) {
            resultsDiv.innerHTML +=  " ERROR (" + e + ") getting value!<br/>";
        }
        if (window.layoutTestController) {
            layoutTestController.notifyDone();
        }
    }

    function loadHandler() {
        var resultsDiv = document.getElementById("resultsDiv");
        if (window.eventSender) {
            eventSender.mouseMoveTo(50, 50);
            eventSender.mouseDown();
            eventSender.mouseUp();
        } else {
            resultsDiv.innerHTML += "Manual test mode.<br/>";
        }
    }
</script>
</head>
<body onLoad="loadHandler()" onmousedown="clickBody(event)">
<p>Test for toString on event.view.  This test simulates a click when run via DumpRenderTree.  Otherwise, click below and you should see "Success":</p>
<div  id="resultsDiv" />
</body>
</html>
