<html>
  <head>
    <script>
      if (window.testRunner) {
        testRunner.dumpAsText();
        testRunner.waitUntilDone();
      }

      function runTest()
      {
        document.getElementById("textField").focus();
        if (window.eventSender) {
          eventSender.mouseMoveTo(document.body.clientWidth + 8, 40);
          eventSender.mouseDown();
          eventSender.mouseUp();
          finished();
        }
      }

      function finished()
      {
        if (document.activeElement.getAttribute("id") == "textField")
            document.getElementById('console').innerHTML = "PASS";
        else
            document.getElementById('console').innerHTML = "FAIL";

        if (window.testRunner)
          testRunner.notifyDone();
      }

      window.onload = runTest;
    </script>
  </head>
  <body>
    <div id="console" style="width:200%;height:200%;">
      <input id="textField" type="text"><br><br>
      <div style="border:2px solid black;width:25%;" onclick="finished();"> This test checks that right clicking the scroll bars doesn't trigger a blur event in content (See <a href="https://bugs.webkit.org/show_bug.cgi?id=16809">Bug 16809</a>). If the test passes, the output will be a single line that says PASS. To run the tests manually, click each of the scroll bars, and focus shoulds remain in the input field above</div>
    </div>
</body>
</html>
