| <!DOCTYPE html> |
| <title>PerformanceNavigationTiming's activationStart in prerendered page</title> |
| <meta name="timeout" content="long"> |
| <script src="/resources/testharness.js"></script> |
| <script src="/resources/testharnessreport.js"></script> |
| <script src="/common/utils.js"></script> |
| <script src="/common/dispatcher/dispatcher.js"></script> |
| <script src="/html/browsers/browsing-the-web/remote-context-helper/resources/remote-context-helper.js"></script> |
| <script src="../resources/utils.js"></script> |
| <script src="resources/utils.js"></script> |
| |
| <body> |
| <script> |
| setup(() => assertSpeculationRulesIsSupported()); |
| |
| promise_test(async t => { |
| const ACTIVATION_DELAY = 10; |
| |
| const rcHelper = new PrerenderingRemoteContextHelper(); |
| const referrerRC = await rcHelper.addWindow(undefined, { features: 'noopener' }); |
| const prerenderedRC = await referrerRC.addPrerender(); |
| const iframeRC = await prerenderedRC.addIframe(); |
| |
| assert_equals( |
| await getActivationStart(prerenderedRC), |
| 0, |
| 'activationStart must be 0 while prerendering' |
| ); |
| |
| assert_equals( |
| await getActivationStart(iframeRC), |
| 0, |
| 'activationStart must be 0 while prerendering the iframe' |
| ); |
| |
| // Wait ACTIVATION_DELAY ms before activation. |
| await new Promise(resolve => t.step_timeout(resolve, ACTIVATION_DELAY)); |
| |
| await referrerRC.navigateExpectingPrerenderingActivation(prerenderedRC); |
| |
| assert_greater_than_equal( |
| await getActivationStart(prerenderedRC), |
| ACTIVATION_DELAY, |
| 'activationStart after activation must be greater than or equal to ' + |
| 'ACTIVATION_DELAY' |
| ); |
| |
| assert_greater_than_equal( |
| await getActivationStart(iframeRC), |
| ACTIVATION_DELAY, |
| 'activationStart after activation must be greater than or equal to ' + |
| 'ACTIVATION_DELAY in the iframe' |
| ); |
| }); |
| |
| // A utility to both extract activationStart from the prerendered |
| // RemoteContextWrapper, and also check that it shows up in toJSON(). |
| async function getActivationStart(prerenderedRC) { |
| const [activationStart, activationStartInToJSON] = await prerenderedRC.executeScript(() => { |
| const entry = performance.getEntriesByType("navigation")[0]; |
| return [entry.activationStart, entry.toJSON().activationStart]; |
| }); |
| |
| assert_equals( |
| activationStart, |
| activationStartInToJSON, |
| "activationStart value must be available in the result of toJSON()" |
| ); |
| |
| return activationStart; |
| } |
| </script> |