<!DOCTYPE html>
<html>
<head>
<style>
.test-row {
    display: -webkit-flex;
    margin-bottom: 5px;
}
.test-row > div {
    -webkit-flex: none;
}

.container {
    margin-right: 5px;
    border: 5px solid lightgreen;
    width: 100px;
}

.flexbox {
    display: block;
    height: 100px;
    width: 100px;
    overflow: auto;
}

.flexbox > div {
    width: 200px;
    height: 200px;
    background: -webkit-radial-gradient(center, ellipse cover, rgba(30,87,153,1) 0%,rgba(89,148,202,1) 62%,rgba(95,154,207,0.7) 68%,rgba(125,185,232,0) 100%);
}
</style>
</head>
<body>
    <p>Scrollbars should work in all the flexboxes.</p>
</body>
<script>
// The -almost values are cases where we don't scroll all the way because of
// https://bugs.webkit.org/show_bug.cgi?id=76129 .
var results = [
    'left top', 'left top', 'right top', 'left bottom',
    'left bottom-almost', 'left bottom-almost', 'right bottom-almost', 'left top',
    'right-almost top', 'right-almost top', 'right-almost bottom', 'left top',
    'left top', 'left top', 'left bottom', 'right top'];

var testContents = '';
for (var i = 0; i < results.length; ++i) {
    if (!(i % 4))
        testContents += "<div class='test-row'>";

    var containerClass = 'container ' + results[i];
    testContents +=
        "<div class='" + containerClass + "'>" +
        "<div class='flexbox'>" +
        "<div></div>" +
        "</div>" +
        "</div>";
    if (i % 4 == 3)
        testContents += "</div>";
}

document.body.innerHTML += testContents;

Array.prototype.forEach.call(document.querySelectorAll(".right"), function(element) {
    element.firstChild.scrollLeft = 1000;
});

Array.prototype.forEach.call(document.querySelectorAll(".bottom"), function(element) {
    element.firstChild.scrollTop = 1000;
});

Array.prototype.forEach.call(document.querySelectorAll(".right-almost"), function(element) {
    element.firstChild.scrollLeft = element.firstChild.scrollWidth - element.firstChild.offsetWidth;
});

Array.prototype.forEach.call(document.querySelectorAll(".bottom-almost"), function(element) {
    element.firstChild.scrollTop = element.firstChild.scrollHeight - element.firstChild.offsetHeight;
});

</script>
</body>
</html>
