[Web GPU] GPURenderPassEncoder updates: setBlendColor, setViewport, setScissorRect
[WebKit-https.git] / LayoutTests / accessibility / scroll-to-make-visible-iframe-offscreen.html
1 <!DOCTYPE html>
2 <head>
3 <script src="../resources/js-test.js"></script>
4 </head>
5 <body>
6
7 <p id="description"></p>
8
9 <div style='border: 1px solid #000; height: 5000px;'>5000-pixel box</div>
10
11 <iframe id="frame" src="data:text/html,<body><button id='upper_target'>Upper Target</button><div style='border: 1px solid #000; height: 5000px;'>5000-pixel box</div><button id='lower_target'>Lower Target</button></body>"></iframe>
12
13 <br>
14 <iframe id="frame2" src="./resources/iframe.html"></iframe>
15
16 <div id="console"></div>
17
18 <script>
19 description("This tests that scrolling to make an element visible works properly when there's an iframe off screen.");
20
21 window.jsTestIsAsync = true;
22
23 function runTest() {
24
25     window.frame = document.getElementById("frame");
26     window.frameWindow = frame.contentWindow;
27
28     var upperTarget = frameWindow.document.getElementById("upper_target");
29     var lowerTarget = frameWindow.document.getElementById("lower_target");
30
31     var lowerTargetAccessibleObject;
32     var upperTargetAccessibleObject;
33     if (frameWindow.accessibilityController) {
34         lowerTargetAccessibleObject = frameWindow.accessibilityController.accessibleElementById("lower_target");
35         upperTargetAccessibleObject = frameWindow.accessibilityController.accessibleElementById("upper_target");
36     }
37
38     // Initial state
39     debug("Test scrolling an offscreen iframe.");
40     window.scrollTo(0, 0);
41     shouldBeZero("window.pageYOffset");
42
43     // Scroll to make lower target visible and check.
44     debug("\nScroll lower target to visible.");
45     if (frameWindow.accessibilityController)
46         lowerTargetAccessibleObject.scrollToMakeVisible();
47     // The iframe should be scrolled into view.
48     debug("The iframe should be scrolled into view");
49     window.scrolledYOffset = window.pageYOffset;
50     shouldBeTrue("scrolledYOffset > 0");
51     // The content inside the iframe should be scrolled into view too
52     testScrolledIntoView(lowerTarget, frameWindow, "Test the lower target should be scrolled into view.")
53
54     // Scroll to make upper target visible and check.
55     debug("\nScroll upper target to visible.");
56     if (frameWindow.accessibilityController)
57         upperTargetAccessibleObject.scrollToMakeVisible();
58     // The iframe should be visible already
59     debug("The main window shouldn't scroll.");
60     shouldBeTrue("window.pageYOffset == scrolledYOffset");
61     // The content inside the iframe should be scrolled into view too
62     testScrolledIntoView(upperTarget, frameWindow, "Test the upper target should be scrolled into view.")
63
64     // Reset and test iframe inside iframe
65     debug("\nReset scrolling. Test scrolling in nested iframes.");
66     window.scrollTo(0, 0);
67     shouldBeZero("window.pageYOffset");
68
69     window.innerFrame = document.getElementById("frame2").contentWindow.document.getElementById("iframe");
70     window.innerFrameWindow = innerFrame.contentWindow;
71     var button = innerFrameWindow.document.getElementById("button");
72     var buttonAccessibleObject;
73     debug("\nScroll inner button to visible.");
74     if (innerFrameWindow.accessibilityController) {
75         buttonAccessibleObject = innerFrameWindow.accessibilityController.accessibleElementById("button");
76         buttonAccessibleObject.scrollToMakeVisible();
77     }
78     // The content inside the inner iframe should be scrolled into view too
79     testScrolledIntoView(button, innerFrameWindow, "Test the button inside the inner frame should be scrolled into view");
80     // Use outter frame to determine the inner frame is scrolled into view.
81     window.outterFrame = document.getElementById("frame2");
82     window.outterFrameWindow = outterFrame.contentWindow;
83     debug("The inner iframe should be scrolled into view");
84     shouldBeTrue("outterFrameWindow.pageYOffset > 0");
85
86     // Now make sure we can scroll back to the outter text above the inner iframe
87     var text = outterFrameWindow.document.getElementById("box").firstChild;
88     var textAccessibleObject;
89     debug("\nScroll outter text element to visible.");
90     if (outterFrameWindow.accessibilityController) {
91         textAccessibleObject = outterFrameWindow.accessibilityController.accessibleElementById("box").childAtIndex(0);
92         textAccessibleObject.scrollToMakeVisible();
93     }
94     debug("The Y offset of the outter iframe should be reset.")
95     shouldBeZero("outterFrameWindow.pageYOffset");
96
97     finishJSTest();
98 }
99
100 function testScrolledIntoView(object, testWindow, description) {
101     debug(description);
102     window.frameMinYOffset = object.offsetTop + object.offsetHeight - testWindow.innerHeight;
103     window.frameMaxYOffset = object.offsetTop;
104     window.scrolledIntoView = testWindow.pageYOffset >= frameMinYOffset && testWindow.pageYOffset <= frameMaxYOffset;
105     shouldBeTrue("scrolledIntoView");
106 }
107
108 window.addEventListener("load", function() {
109     setTimeout(runTest, 0);
110 }, false);
111
112 </script>
113
114 </body>
115 </html>