4 <script src=
"../../../resources/js-test.js"></script>
8 description("Make sure the same deserialization of the state object is used every time (both in the history object and popstate events).");
10 window
.jsTestIsAsync
= true;
11 if (window
.testRunner
) {
12 testRunner
.clearBackForwardList();
13 testRunner
.waitUntilDone();
16 shouldBeDefined("history.state");
18 // Create a new object.
19 var stateObject
= ["a"];
21 // Use it as the state object in a replaceState. This clones the object.
22 history
.replaceState(stateObject
, null, null);
24 shouldBeTrue("history.state === history.state");
26 // Since the actual history.state is a structured clone, it should not match our original object.
27 shouldBeTrue("history.state !== stateObject");
29 // Now let's refetch a copy of history.state to store;
30 stateObject
= history
.state
;
32 // Our reference and the history.state itself should be the same. This is now Adam's original assertion.
33 shouldBeTrue("history.state === stateObject");
35 // Now let's do a pushstate to add a history entry.
36 history
.pushState(null, null, null);
38 // Now add a handler for the popstate event.
40 window
.onpopstate = function(e
) {
41 debug("\nInside popstate event\n");
43 // Our stored reference to stateObject will not match the current state object, as it is a structured clone of the history item's state object.
44 shouldBeTrue("history.state !== stateObject");
45 // Our stored reference to stateObject will not match the state object in this pop state event, as it is the same as history.state which is a structured clone of the history item's state object.
46 shouldBeTrue("popStateEvent.state !== stateObject");
47 // The event's state object and the current state object should match.
48 shouldBeTrue("popStateEvent.state === history.state");
50 setTimeout(finishJSTest
, 0);
53 // Now let's go back to our original history entry which has a state object that we've stored a reference to already.
54 // This will fire our popstate event handler above.
55 window
.onload = function() {