This should be covered by a green overlay.

Two squares should be visible and fully covered by green overlays.

This test ensures that changing visibility of a non-fast scrollable area correctly updates list of non-fast scrollable areas (See http://crbug.com/434982). Two types of non-fast scrollable regions are covered: div, and iframe.

On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".


running tests for non-fast scrollable div
PASS document.getElementById("div").style.display is "block"
PASS nonFastScrollableRects.length is 1
PASS rectToString(nonFastScrollableRects[0]) is "[0, 350, 200, 200]"
PASS window.internals.needsLayoutCount() is 0
PASS nonFastScrollableRects.length is 2
PASS rectToString(nonFastScrollableRects[0]) is "[0, 50, 200, 200]"
PASS rectToString(nonFastScrollableRects[1]) is "[0, 350, 200, 200]"
PASS window.internals.needsLayoutCount() is 0
PASS nonFastScrollableRects.length is 1
PASS rectToString(nonFastScrollableRects[0]) is "[0, 50, 200, 200]"
running tests for non-fast scrollable iframe
PASS document.getElementById("iframe").style.display is "block"
PASS nonFastScrollableRects.length is 1
PASS rectToString(nonFastScrollableRects[0]) is "[0, 350, 222, 222]"
PASS window.internals.needsLayoutCount() is 0
PASS nonFastScrollableRects.length is 2
PASS rectToString(nonFastScrollableRects[0]) is "[0, 50, 222, 222]"
PASS rectToString(nonFastScrollableRects[1]) is "[0, 350, 222, 222]"
PASS window.internals.needsLayoutCount() is 0
PASS nonFastScrollableRects.length is 1
PASS rectToString(nonFastScrollableRects[0]) is "[0, 50, 222, 222]"
PASS successfullyParsed is true

TEST COMPLETE

