<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)
          window.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>
