same-document-away-and-back-navigation-api.html (2193B)
1 <!doctype html> 2 <script src="/resources/testharness.js"></script> 3 <script src="/resources/testharnessreport.js"></script> 4 <script> 5 async_test(t => { 6 // Wait for after the load event so that the navigation doesn't get converted 7 // into a replace navigation. 8 window.onload = () => t.step_timeout(async () => { 9 let start_length = navigation.entries().length; 10 let entry0 = navigation.currentEntry; 11 let start_index = entry0.index; 12 13 let navState = { statevar: "state" }; 14 await navigation.navigate("#1", { state: navState }).committed; 15 let entry1 = navigation.currentEntry; 16 17 navState.startvar2 = "otherstate"; 18 await navigation.navigate("#2", { state: navState }).committed; 19 let entry2 = navigation.currentEntry; 20 21 t.step_func(() => { 22 assert_equals(navigation.entries().length, start_length + 2); 23 assert_equals(entry0, navigation.entries()[start_index]); 24 assert_equals(entry1, navigation.entries()[start_index + 1]); 25 assert_equals(entry2, navigation.entries()[start_index + 2]); 26 27 assert_equals(entry0.getState(), undefined); 28 29 let state1 = entry1.getState(); 30 assert_not_equals(state1, undefined); 31 assert_not_equals(state1, navState); 32 assert_equals(state1.statevar, "state"); 33 assert_equals(state1.startvar2, undefined); 34 35 let state2 = entry2.getState(); 36 assert_not_equals(state2, undefined); 37 assert_not_equals(state2, navState); 38 assert_equals(state2.statevar, "state"); 39 assert_equals(state2.startvar2, "otherstate"); 40 41 navigation.back(); 42 window.onpopstate = t.step_func_done(() => { 43 assert_equals(navigation.entries().length, start_length + 2); 44 let back_entry = navigation.currentEntry; 45 assert_equals(back_entry, navigation.entries()[start_index + 1]); 46 let back_state = back_entry.getState(); 47 assert_not_equals(back_state, state1); 48 assert_not_equals(back_state, state2); 49 assert_equals(back_state.statevar, "state"); 50 assert_equals(back_state.startvar2, undefined); 51 }); 52 })(); 53 }, 0); 54 }, "entry.getState() behavior after navigating away using the navigation API, then back"); 55 </script>