tor-browser

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

multiple-observers-with-mutation-crash.html (1863B)


      1 <!doctype html>
      2 <html class="test-wait">
      3 <!--
      4  This test is for crbug.com/1368458 which is a crash where we expected
      5  up-to-date style&layout when delivering resize observations. We would crash
      6  if a resize observer in one frame caused a modification in the presence of a
      7  resize observer in another frame.
      8 -->
      9 <iframe id="iframe" style="border: none;" srcdoc="
     10  <!doctype html>
     11  <style>body { margin: 0; }</style>
     12  <div id='inner_element'>hello</div>
     13  <script>
     14    const resizeObserver = new ResizeObserver((entries) => {
     15      const size = entries[0].borderBoxSize[0].inlineSize;
     16      const event = new CustomEvent('onIframeResizeObserved', {detail: size});
     17      parent.document.dispatchEvent(event);
     18    });
     19    resizeObserver.observe(inner_element);
     20  </script>
     21 "></iframe>
     22 <div id="outer_element" style="width: 200px;">world</div>
     23 
     24 <script>
     25  const onInnerElementInitialResize = (event) => {
     26    // `inner_element` should result in an initial observation of width 300px.
     27    window.document.removeEventListener(
     28        'onIframeResizeObserved', onInnerElementInitialResize, false);
     29 
     30    const resizeObserver = new ResizeObserver((entries) => {
     31      // `outer_element` should result in an initial observation of width 200px.
     32 
     33      // Modify styles so that inner_element is resized.
     34      iframe.contentDocument.body.style.width = "200px";
     35    });
     36    resizeObserver.observe(outer_element);
     37 
     38    const onInnerElementSecondResize = (event) => {
     39      // `inner_element` should result in a second observation of width 100px.
     40 
     41      // Finish the test.
     42      document.documentElement.classList.remove('test-wait');
     43    };
     44    window.document.addEventListener(
     45        'onIframeResizeObserved', onInnerElementSecondResize, false);
     46  };
     47  window.document.addEventListener(
     48      'onIframeResizeObserved', onInnerElementInitialResize, false);
     49 </script>