chromium/third_party/blink/web_tests/animations/stability/animate-remove-iframe-crash.html

<!DOCTYPE html>
<script src="../../resources/testharness.js"></script>
<script src="../../resources/testharnessreport.js"></script>
<body></body>
<script>
  test(function() {
    const iframe = document.createElement('iframe');
    document.body.appendChild(iframe);
    const element = iframe.contentDocument.createElement("div");
    const keyframes = [];
    keyframes.__defineGetter__(0,()=>{
      document.body.removeChild(iframe);
      return { transform: 'translate3D(0, -300px, 0)' };
    });
    const animation = element.animate(keyframes, {
      duration: 3000,
      iterations: Infinity,
      timeline: null
    });
    assert_equals(animation, null);
  }, "Check that removing a parent iframe during keyframe parsing " +
     "doesn't crash when calling animate with options");

  test(function() {
    const iframe = document.createElement('iframe');
    document.body.appendChild(iframe);
    const element = iframe.contentDocument.createElement("div");
    const options = {
      iterations: Infinity,
      timeline: null
    };
    let getterCalled = false;
    options.__defineGetter__('duration', () => {
      document.body.removeChild(iframe);
      getterCalled = true;
      return 3000;
    });
    assert_false(getterCalled);
    const animation = element.animate(
      { transform: 'translate3D(0, -300px, 0)' }, options);
    assert_true(getterCalled);
    assert_equals(animation, null);
  }, "Check that removing a parent iframe during options parsing " +
     "doesn't crash");

  test(function() {
    const iframe = document.createElement('iframe');
    document.body.appendChild(iframe);
    const element = iframe.contentDocument.createElement("div");
    const keyframes = [];
    keyframes.__defineGetter__(0,()=>{
      document.body.removeChild(iframe);
      return { transform: 'translate3D(0, -300px, 0)' };
    });
    const animation = element.animate(keyframes);
    assert_equals(animation, null);
  }, "Check that removing a parent iframe during keyframe parsing " +
     "doesn't crash when calling animate without options");

</script>