tor-browser

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

start-skip-start.html (2436B)


      1 <!DOCTYPE html>
      2 <html>
      3 <head>
      4  <meta charset="utf-8">
      5  <meta name="viewport" content="width=device-width, initial-scale=1">
      6  <title>Test start skip and then start on a view transition</title>
      7  <link rel="help" href="https://www.w3.org/TR/css-view-transitions-1/">
      8 </head>
      9 
     10 <script src="/resources/testharness.js"></script>
     11 <script src="/resources/testharnessreport.js"></script>
     12 
     13 <style>
     14  :root {
     15    view-transition-name: none;
     16  }
     17  #target {
     18    width: 100px;
     19    height: 100px;
     20    background: blue;
     21    contain: paint;
     22    view-transition-name: target;
     23  }
     24  #target.update-1 {
     25    height: 150px;
     26  }
     27  #target.update-2 {
     28    height: 200px;
     29  }
     30 </style>
     31 
     32 <body>
     33  <div id="target"></div>
     34 </body>
     35 <script>
     36  promise_test(async t => {
     37    let rejected_promise_tally = 0;
     38    const target = document.getElementById("target");
     39    assert_implements(document.startViewTransition,
     40                      "Missing document.startViewTransition");
     41 
     42    const verifyAbortedTransition = (promise) => {
     43      return promise.then(
     44        () => { assert_not_reached('transition aborted') },
     45        (reason) => {
     46          assert_true(reason instanceof DOMException);
     47          assert_equals(reason.code, DOMException.ABORT_ERR);
     48          rejected_promise_tally++;
     49        });
     50    };
     51 
     52    const vt1 = document.startViewTransition(() => {
     53      target.className = 'update-1';
     54    });
     55 
     56    vt1.skipTransition();
     57    const vt2 = document.startViewTransition(() => {
     58      assert_equals(target.className, 'update-1');
     59      target.className = 'update-2';
     60    });
     61 
     62    vt2.skipTransition();
     63    const vt3 = document.startViewTransition(() => {
     64      assert_equals(target.className, 'update-2');
     65    });
     66 
     67    await verifyAbortedTransition(vt1.ready);
     68    await verifyAbortedTransition(vt2.ready);
     69    await vt3.ready;
     70 
     71    assert_equals(rejected_promise_tally, 2,
     72                  'first 2 transitions were skipped');
     73    const sizeTransformAnimations = document.getAnimations().filter(a => {
     74      return 'height' in a.effect.getKeyframes()[0];
     75    });
     76    assert_equals(sizeTransformAnimations.length, 1);
     77    const startingHeight =
     78        sizeTransformAnimations[0].effect.getKeyframes()[0].height;
     79 
     80    assert_equals(startingHeight, '200px',
     81                  'Height change applied before capture');
     82 
     83  }, 'Synchronously starting a view transition blocks on DOM callback for ' +
     84     'previously skipped transitions');
     85 
     86 </script>
     87 </html>