navigation-api.https.html (3063B)
1 <!DOCTYPE html> 2 <meta name="timeout" content="long"> 3 <script src="/resources/testharness.js"></script> 4 <script src="/resources/testharnessreport.js"></script> 5 <script src="/common/utils.js"></script> 6 <script src="/common/dispatcher/dispatcher.js"></script> 7 <script src="/html/browsers/browsing-the-web/remote-context-helper/resources/remote-context-helper.js"></script> 8 <script src="../resources/utils.js"></script> 9 <script src="resources/utils.js"></script> 10 11 <body> 12 <script> 13 setup(() => assertSpeculationRulesIsSupported()); 14 15 promise_test(async t => { 16 const rcHelper = new PrerenderingRemoteContextHelper(); 17 const referrerRC = await rcHelper.addWindow(undefined, { features: 'noopener' }); 18 assert_equals(await referrerRC.executeScript(() => navigation.entries().length), 1); 19 let referrerRCCurrentId = await referrerRC.executeScript(() => navigation.currentEntry.id); 20 21 const prerenderedRC = await referrerRC.addPrerender(); 22 let activationStateBeforeActivation = await prerenderedRC.executeScript(() => { 23 return { 24 entries: navigation.entries().map(e => ({ id: e.id, })), 25 activationEntryId: navigation.activation.entry?.id, 26 activationFromId: navigation.activation.from?.id, 27 activationNavigationType : navigation.activation.navigationType, 28 } 29 }); 30 assert_equals(activationStateBeforeActivation.entries.length, 1); 31 assert_equals(activationStateBeforeActivation.activationFromId, referrerRCCurrentId); 32 assert_equals(activationStateBeforeActivation.activationEntryId, activationStateBeforeActivation.entries[0].id); 33 assert_equals(activationStateBeforeActivation.activationNavigationType, "push"); 34 35 // Save the current entry before activation. 36 await prerenderedRC.executeScript(() => window.currentEntryBeforeActivation = navigation.currentEntry); 37 38 await referrerRC.navigateExpectingPrerenderingActivation(prerenderedRC); 39 40 let activationStateAfterActivation = await prerenderedRC.executeScript(() => { 41 return { 42 entries: navigation.entries().map(e => ({ id: e.id, })), 43 activationEntryId: navigation.activation.entry?.id, 44 activationFromId: navigation.activation.from?.id, 45 activationNavigationType : navigation.activation.navigationType, 46 } 47 }); 48 assert_equals(activationStateAfterActivation.entries.length, 2); 49 assert_equals(activationStateAfterActivation.activationFromId, activationStateAfterActivation.entries[0].id); 50 assert_equals(activationStateAfterActivation.activationFromId, referrerRCCurrentId); 51 assert_equals(activationStateAfterActivation.activationEntryId, activationStateAfterActivation.entries[1].id); 52 assert_equals(activationStateAfterActivation.activationNavigationType, "push"); 53 54 let currentEntryIdentity = await prerenderedRC.executeScript(() => { 55 return window.currentEntryBeforeActivation === navigation.currentEntry && 56 navigation.currentEntry === navigation.entries()[navigation.entries().length - 1]; 57 }); 58 assert_true(currentEntryIdentity); 59 },`navigation.entries() and navigation.activation should be updated on activation`); 60 </script>