<!DOCTYPE html>
<html>
<head>
<script type="text/javascript">
if (window.testRunner) {
    testRunner.dumpAsText();
    testRunner.waitUntilDone();
}

function log(msg) {
    document.getElementById('console').innerHTML += '<li>' + msg + '</li>';
}

function runTest() {
    var div = document.getElementById('container');

    var plugin = document.createElement('object');
    plugin.type = 'application/x-webkit-test-netscape';
    // Plugin takes up the full available space inside the ShadowRoot.
    plugin.style.width = '100%';
    plugin.style.height = '100%';

    var shadowRoot = div.createShadowRoot();
    shadowRoot.appendChild(plugin);

    // Start logging once plugin sees a mousedown.
    var startLogging = false;

    plugin.addEventListener('mousedown', function(e) {
        startLogging = true;
        log('plugin.mousedown');
    });
    plugin.addEventListener('mouseup', function(e) {
        if (startLogging)
            log('plugin.mouseup');
    });
    plugin.addEventListener('mousemove', function(e) {
        if (startLogging) {
            log('plugin.mousemove');
            if (window.testRunner)
                testRunner.notifyDone();
        }
    });

    eventSender.mouseMoveTo(20, 20);  // Within the plugin bounds.
    eventSender.mouseDown();
    eventSender.leapForward(100);
    eventSender.mouseMoveTo(220, 120);  // Outside of the plugin bounds.
    eventSender.mouseUp();

}
</script>
</head>
<body onload="runTest()">
  <div id="container" style="width: 200px; height: 100px;"></div>
  <div>This tests that mousedown captures the mouse correctly for a plugin object and continues to send events even if the mouse moves outside of the bounds of the plugin. On a successful run, plugin will see mousedown, followed by a mousemove, followed by a mouseup.</div>
  <ul id="console"><li>Console</li></ul>
</body>
</html>

