tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

helper_zoomToFocusedInput_iframe.html (3606B)


      1 <!DOCTYPE>
      2 <html>
      3  <head>
      4  <meta name="viewport" content="width=device-width, initial-scale=1.0">
      5  <title>Checking zoomToFocusedInput scrolls that focused element is into iframe</title>
      6  <script type="application/javascript" src="apz_test_utils.js"></script>
      7  <script type="application/javascript" src="apz_test_native_event_utils.js"></script>
      8  <script src="/tests/SimpleTest/paint_listener.js"></script>
      9  </head>
     10 <body>
     11 <div style="height: 8000px;">ABC</div>
     12 <iframe style="height: 30em;"></iframe>
     13 </div>
     14 <!-- Leave additional room below the element so it can be scrolled to the center -->
     15 <div style="height: 1000px;">ABC</div>
     16 <script type="application/javascript">
     17 async function test() {
     18  let isCrossOrigin = (location.search == "?cross-origin");
     19  let iframeURL =
     20    SimpleTest.getTestFileURL("helper_iframe_textarea.html")
     21  if (isCrossOrigin) {
     22    iframeURL.replace(window.location.origin, "https://example.com/");
     23  }
     24 
     25  let iframe = document.querySelector("iframe");
     26  const iframeLoadPromise = promiseOneEvent(iframe, "load", null);
     27  iframe.src = iframeURL;
     28  await iframeLoadPromise;
     29 
     30  await SpecialPowers.spawn(iframe, [], async () => {
     31    await content.wrappedJSObject.waitUntilApzStable();
     32  });
     33 
     34  iframe.focus();
     35 
     36  await SpecialPowers.spawn(iframe, [], async () => {
     37    let textarea = content.document.querySelector("textarea");
     38    for (let i = 0; i < 20; i++) {
     39      textarea.value += "foo\n";
     40    }
     41    textarea.focus();
     42  });
     43 
     44  await SpecialPowers.spawn(iframe, [], async () => {
     45    await content.wrappedJSObject.waitToClearOutAnyPotentialScrolls(content.window);
     46  });
     47 
     48  await SpecialPowers.spawn(iframe, [], async () => {
     49    let textarea = content.document.querySelector("textarea");
     50    textarea.setSelectionRange(0, 0);
     51  });
     52 
     53  window.scrollTo(0, 0);
     54  await SpecialPowers.spawn(iframe, [], async () => {
     55    await content.wrappedJSObject.waitToClearOutAnyPotentialScrolls(content.window);
     56  });
     57  is(0, window.scrollY, "scroll position is reset");
     58 
     59  let scrollendPromise = promiseScrollend();
     60  await SpecialPowers.spawn(iframe, [], async () => {
     61    SpecialPowers.DOMWindowUtils.zoomToFocusedInput();
     62  });
     63  await promiseApzFlushedRepaints();
     64 
     65  ok(window.scrollY > 0, "scroll position isn't top");
     66  let iframeWindowScrollY = await SpecialPowers.spawn(iframe, [], () => {
     67    return content.window.scrollY;
     68  });
     69  ok(iframeWindowScrollY > 0, "scroll position into iframe isn't top");
     70  await scrollendPromise;
     71  let prevPosY = window.scrollY;
     72  await promiseApzFlushedRepaints();
     73 
     74  window.scrollTo(0, 0);
     75  await SpecialPowers.spawn(iframe, [], async () => {
     76    await content.wrappedJSObject.waitToClearOutAnyPotentialScrolls(content.window);
     77  });
     78  is(0, window.scrollY, "scroll position is reset");
     79 
     80  SpecialPowers.spawn(iframe, [], async () => {
     81    let textarea = content.document.querySelector("textarea");
     82    textarea.setSelectionRange(textarea.value.length, textarea.value.length);
     83  });
     84 
     85  scrollendPromise = promiseScrollend();
     86  await SpecialPowers.spawn(iframe, [], async () => {
     87    SpecialPowers.DOMWindowUtils.zoomToFocusedInput();
     88  });
     89  await scrollendPromise;
     90  await promiseApzFlushedRepaints();
     91 
     92  ok(window.scrollY > 0, "scroll position isn't top");
     93  iframeWindowScrollY = await SpecialPowers.spawn(iframe, [], () => {
     94    return content.window.scrollY;
     95  });
     96  ok(iframeWindowScrollY > 0, "scroll position into iframe isn't top");
     97  ok(prevPosY < window.scrollY,
     98     "scroll position is different from first line of textarea");
     99 }
    100 
    101 waitUntilApzStable().then(test).then(subtestDone, subtestFailed);
    102 </script>
    103 </body>
    104 </html>