| <!DOCTYPE html> |
| <p>Check that setting a custom getter for history.state works correctly and that PopStateEvent.state still has a correct value.</p> |
| <pre id=log></pre> |
| <script> |
| function log(msg) { |
| document.querySelector("#log").innerHTML += msg + "<br>"; |
| } |
| |
| if (window.testRunner) { |
| testRunner.clearBackForwardList(); |
| testRunner.dumpAsText(); |
| testRunner.waitUntilDone(); |
| } |
| |
| function test() { |
| if (!("state" in history)) { |
| log("FAIL: history.state is not defined"); |
| return; |
| } |
| |
| try { |
| Object.defineProperty(history, "state", { get: function () { return "oh hai" } }); |
| } catch (e) { |
| // history.state is not configurable in JSC. |
| log(e.name == "TypeError" ? "PASS" : ("FAIL: unexpected exception: " + e)); |
| testRunner.notifyDone(); |
| return; |
| } |
| |
| if (history.state !== "oh hai") { |
| log('FAIL: history.state != "oh hai"'); |
| } |
| |
| history.pushState(42, "", ""); |
| history.pushState(43, "", ""); |
| |
| window.onpopstate = function(e) { |
| if (e.state !== 42) |
| log("FAIL: e.state expected 42, was " + e.state + " (of type " + typeof e.state + ")"); |
| else |
| log("PASS"); |
| if (window.testRunner) |
| testRunner.notifyDone(); |
| } |
| |
| history.back(); |
| } |
| |
| test(); |
| </script> |