chromium/third_party/blink/web_tests/fast/canvas/draw-focus-if-needed-scrolls-horiz.html

<script src="../../resources/testharness.js"></script>
<script src="../../resources/testharnessreport.js"></script>

<div style="width: 6500px;">
  <div style="float: left; border: 1px solid #000; width: 1000px; height: 300px">
      1000-pixel box
  </div>
  <canvas id="canvas" width="5000" height="300" style="float: left;">
      <button id="left_button"></button>
      <button id="right_button"></button>
  </canvas>
</div>

<script>
test(function(t) {

    var canvas = document.getElementById("canvas");
    var context = canvas.getContext("2d");
  
    var LEFT_BUTTON_X_POS = 50;
    var RIGHT_BUTTON_X_POS = 4750;

    function draw() {
        context.beginPath();
        context.rect(LEFT_BUTTON_X_POS, 50, 200, 100);
        context.fillStyle = "#ccf";
        context.fill();
        context.drawFocusIfNeeded(document.getElementById("left_button"));
    
        context.beginPath();
        context.rect(RIGHT_BUTTON_X_POS, 50, 200, 100);
        context.fillStyle = "#fcc";
        context.fill();
        context.drawFocusIfNeeded(document.getElementById("right_button"));
    }

    document.getElementById("right_button").focus();
    window.scrollTo(0, 0);
    assert_true(window.pageXOffset == 0);
    draw();

    var minXOffset = RIGHT_BUTTON_X_POS + canvas.offsetLeft - window.innerWidth;
    var maxXOffset = RIGHT_BUTTON_X_POS + canvas.offsetLeft;
    assert_true(window.pageXOffset >= minXOffset);
    assert_true(maxXOffset >= window.pageXOffset);

    document.getElementById("left_button").focus();
    assert_true(window.pageXOffset >= minXOffset);
    assert_true(maxXOffset >= window.pageXOffset);

    draw();
    minXOffset = LEFT_BUTTON_X_POS + canvas.offsetLeft - window.innerWidth;
    maxXOffset = LEFT_BUTTON_X_POS + canvas.offsetLeft;
    assert_true(window.pageXOffset >= minXOffset);
    assert_true(maxXOffset >= window.pageXOffset);

}, 'Canvas test: drawFocusIfNeeded scrolls');
</script>
</body>