tor-browser

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

scrollIntoView-iframes.html (2586B)


      1 <!DOCTYPE html>
      2 <meta charset="utf-8">
      3 <title>CSSOM View Test: scrollIntoView in iframes</title>
      4 <link rel="author" title="Oriol Brufau" href="mailto:obrufau@igalia.com">
      5 <link rel="author" title="Martin Robinson" href="mailto:mrobinson@igalia.com">
      6 <link rel="help" href="https://drafts.csswg.org/cssom-view/#dom-element-scrollintoview">
      7 <meta name="assert" content="Checks that scrollIntoView inside and iframe can scroll in the parent document if it has the same origin.">
      8 
      9 <style>
     10 .scroller {
     11  overflow: hidden;
     12  height: 500px;
     13  border: solid;
     14 }
     15 .scroller::before {
     16  content: "";
     17  display: block;
     18  height: 500px;
     19 }
     20 .scroller::after {
     21  content: "";
     22  display: block;
     23  height: 300px;
     24 }
     25 iframe {
     26  height: 1000px;
     27  border: none;
     28 }
     29 </style>
     30 
     31 <div id="log"></div>
     32 
     33 <div class="scroller">
     34  <iframe id="same-origin-iframe"></iframe>
     35 </div>
     36 <div class="scroller">
     37  <iframe id="cross-origin-iframe" sandbox="allow-scripts"></iframe>
     38 </div>
     39 
     40 <script src="/resources/testharness.js"></script>
     41 <script src="/resources/testharnessreport.js"></script>
     42 <script>
     43 let sameOriginIframe = document.getElementById("same-origin-iframe");
     44 let crossOriginIframe = document.getElementById("cross-origin-iframe");
     45 let sameOriginWindow = sameOriginIframe.contentWindow;
     46 let crossOriginWindow = crossOriginIframe.contentWindow;
     47 
     48 promise_setup(() => Promise.all([
     49  new Promise(resolve => {
     50    sameOriginIframe.addEventListener("load", resolve);
     51    sameOriginIframe.src = "support/scrollIntoView-iframes-child.html";
     52  }),
     53  new Promise(resolve => {
     54    crossOriginIframe.addEventListener("load", resolve);
     55    crossOriginIframe.src = "support/scrollIntoView-iframes-child.html";
     56  })
     57 ]));
     58 
     59 promise_test(async () => {
     60  assert_equals(sameOriginWindow.scrollY, 100, "scrollY");
     61 }, "scrollIntoView in same-origin iframe can scroll in inner window");
     62 
     63 promise_test(async () => {
     64  assert_equals(sameOriginIframe.parentElement.scrollTop, 1200, "scrollTop");
     65 }, "scrollIntoView in same-origin iframe can scroll in parent window");
     66 
     67 promise_test(async () => {
     68  let scrollY = await new Promise(resolve => {
     69    addEventListener("message", event => {
     70      if (event.source === crossOriginWindow) {
     71        resolve(event.data);
     72      }
     73    });
     74    crossOriginWindow.postMessage("scrollY", "*");
     75  });
     76  assert_equals(scrollY, 100, "scrollY");
     77 }, "scrollIntoView in cross-origin iframe can scroll in inner window");
     78 
     79 promise_test(async () => {
     80  assert_equals(crossOriginIframe.parentElement.scrollTop, 0, "scrollTop");
     81 }, "scrollIntoView in cross-origin iframe can't scroll in parent window");
     82 </script>