| <!DOCTYPE html> | 
 | <title>View transitions: pagereveal event provides viewTransition</title> | 
 | <link rel="help" href="https://drafts.csswg.org/css-view-transitions-2/"> | 
 | <link rel="author" href="mailto:bokan@chromium.org"> | 
 | <script src="/resources/testharness.js"></script> | 
 | <script src="/resources/testharnessreport.js"></script> | 
 | <style> | 
 | @view-transition { | 
 |   navigation: auto; | 
 | } | 
 | </style> | 
 | <script> | 
 | const params = new URLSearchParams(location.search); | 
 |  | 
 | switch (params.get("mode") || "test") { | 
 | case "test": | 
 |   promise_test(async t => { | 
 |     const event = await new Promise(resolve => { | 
 |       window.did_reveal = e => { resolve(e) }; | 
 |       const popup = window.open("?mode=old"); | 
 |       t.add_cleanup(() => popup.close()); | 
 |     }); | 
 |  | 
 |     assert_not_equals(event.viewTransition, null, | 
 |         'Navigation with transition must have a viewTransition.'); | 
 |  | 
 |     assert_true('skipTransition' in event.viewTransition, | 
 |         'skipTransition in viewTransition'); | 
 |     assert_true('finished' in event.viewTransition, 'finished in viewTransition'); | 
 |     assert_true('ready' in event.viewTransition, 'ready in viewTransition'); | 
 |     assert_true('updateCallbackDone' in event.viewTransition, | 
 |         'updateCallbackDone in viewTransition'); | 
 |   }); | 
 |   break; | 
 | case "old": | 
 |   onload = () => requestAnimationFrame(() => requestAnimationFrame(() => { | 
 |       location.replace('?mode=new'); | 
 |   })); | 
 |   break; | 
 | case "new": | 
 |   onpagereveal = e => window.opener.did_reveal(e); | 
 |   break; | 
 | } | 
 | </script> |