<!DOCTYPE html>
<script src="../resources/testharness.js"></script>
<script src="../resources/testharnessreport.js"></script>
<style>
    #container {
        display: inline-block;
        background-color: black;
    }
    .roundedBox {
        width: 200px;
        height: 200px;
        border-radius: 100px;
        background-color: red;
        border: 50px solid green;
        display: inline-block;
    }
    .roundedBox:hover {
        border-color: red;
    }
    .roundedBoxChild {
        width: 200px;
        height: 200px;
        background-color: orange;
    }
    .roundedBoxChild:hover {
        background-color: blue;
    }
    #roundedBoxWithoutScrollbars {
        overflow: auto;
    }
    #roundedBoxWithScrollbars {
        overflow: scroll;
    }
</style>
<p>The inner border radius clip should be respected for hit testing.</p>
<div id="container">
    <div id="roundedBoxWithoutScrollbars" class="roundedBox">
        <div id="roundedBoxChildWithoutScrollbars" class="roundedBoxChild"></div>
    </div>
    <div id="roundedBoxWithScrollbars" class="roundedBox">
        <div id="roundedBoxWithScrollbarsChild" class="roundedBoxChild"></div>
    </div>
</div>
<div id="console"></div>
<script>
test(function(t)
{
    var rectWithoutScrollbars = roundedBoxWithoutScrollbars.getBoundingClientRect();
    var x = rectWithoutScrollbars.left;
    var y = rectWithoutScrollbars.top;
    // At top-left corner, outside the outer border radius.
    assert_equals(document.elementFromPoint(x + 20, y + 20).id, "container");
    // At top-left corner, inside outer border radius.
    assert_equals(document.elementFromPoint(x + 35, y + 35).id, "roundedBoxWithoutScrollbars");
    assert_equals(document.elementFromPoint(x + 60, y + 60).id, "roundedBoxWithoutScrollbars");
    // At top-left corner, inside inner border radius.
    assert_equals(document.elementFromPoint(x + 68, y + 68).id, "roundedBoxChildWithoutScrollbars");
    // At top-left corner, fully inside border.
    assert_equals(document.elementFromPoint(x + 80, y + 80).id, "roundedBoxChildWithoutScrollbars");
    // At bottom-right corner, inside inner border radius.
    assert_equals(document.elementFromPoint(x + 230, y + 230).id, "roundedBoxChildWithoutScrollbars");
    // At bottom-right corner, inside inner border radius.
    assert_equals(document.elementFromPoint(x + 240, y + 240).id, "roundedBoxWithoutScrollbars");
    assert_equals(document.elementFromPoint(x + 265, y + 265).id, "roundedBoxWithoutScrollbars");
    // At bottom-right corner, outside the outer border radius.
    assert_equals(document.elementFromPoint(x + 275, y + 275).id, "container");

    var rectWithScrollbars = roundedBoxWithScrollbars.getBoundingClientRect();
    x = rectWithScrollbars.left;
    y = rectWithScrollbars.top;
    // At top-left corner with scrollbars, outside the outer border radius.
    assert_equals(document.elementFromPoint(x + 20, y + 20).id, "container");
    // At top-left corner with scrollbars, inside outer border radius.
    assert_equals(document.elementFromPoint(x + 35, y + 35).id, "roundedBoxWithScrollbars");
    assert_equals(document.elementFromPoint(x + 60, y + 60).id, "roundedBoxWithScrollbars");
    // At top-left corner with scrollbars, inside inner border radius.
    assert_equals(document.elementFromPoint(x + 68, y + 68).id, "roundedBoxWithScrollbarsChild");
    // At top-left corner with scrollbars, fully inside border.
    assert_equals(document.elementFromPoint(x + 80, y + 80).id, "roundedBoxWithScrollbarsChild");
    // At bottom-right corner with scrollbars, inside inner border radius.
    assert_equals(document.elementFromPoint(x + 230, y + 230).id, "roundedBoxWithScrollbarsChild");
    // At bottom-right corner with scrollbars, inside inner border radius.
    assert_equals(document.elementFromPoint(x + 265, y + 265).id, "roundedBoxWithScrollbars");
    // At bottom-right corner with scrollbars, outside the outer border radius.
    assert_equals(document.elementFromPoint(x + 275, y + 275).id, "container");
    // At bottom-center on scrollbar and inside inner border radius.
    assert_equals(document.elementFromPoint(x + 150, y + 240).id, "roundedBoxWithScrollbars");
    // At center-right on scrollbar and inside inner border radius.
    assert_equals(document.elementFromPoint(x + 240, y + 150).id, "roundedBoxWithScrollbars");
}, "The inner border radius clip should be respected for hit testing.");
</script>
