<!-- webkit-test-runner [ UsesBackForwardCache=true ] -->
<head>
<style>
html {
    font-size: 32pt;
}
</style>
<script src="resources/swipe-test.js"></script>
<script>
function runTest()
{
    playEventStream(`[{
        "relativeTimeMS" : 0,
        "kCGEventScrollGestureFlagBits" : 1,
        "kCGEventGestureHIDType" : 6,
        "kCGSEventTypeField" : 29,
        "kCGEventGesturePhase" : 128,
        "windowLocation" : "{400, 300}"
      },
      {
        "relativeTimeMS" : 8,
        "kCGEventGestureHIDType" : 61,
        "kCGSEventTypeField" : 29,
        "kCGEventGestureStartEndSeriesType" : 6,
        "windowLocation" : "{0, 0}"
      },
      {
        "kCGEventGestureHIDType" : 6,
        "relativeTimeMS" : 8,
        "windowLocation" : "{400, 300}",
        "kCGEventGesturePhase" : 1,
        "kCGEventScrollGestureFlagBits" : 1,
        "kCGSEventTypeField" : 29,
        "kCGEventGestureScrollX" : 2
      },
      {
        "relativeTimeMS" : 8,
        "windowLocation" : "{400, 300}",
        "kCGScrollWheelEventScrollPhase" : 1,
        "kCGScrollWheelEventIsContinuous" : 1,
        "kCGScrollWheelEventPointDeltaAxis2" : 1,
        "kCGSEventTypeField" : 22
      }]`, goBack);
}

function goBack()
{
    window.history.back();

    setTimeout(continueTest, 0);
}

function continueTest()
{
    playEventStream(`[
      {
        "relativeTimeMS" : 0,
        "windowLocation" : "{400, 300}",
        "kCGScrollWheelEventScrollPhase" : 1,
        "kCGScrollWheelEventIsContinuous" : 1,
        "kCGScrollWheelEventPointDeltaAxis2" : 20,
        "kCGSEventTypeField" : 22
      }]`, function () {
        completeTest();
      });
}

function completeTest()
{
    completeSwipeGesture(testComplete);
}

function didBeginSwipeCallback()
{
    log("Failed. Should not begin swipe; we've already navigated away from the item where the swipe started, and there is no other back item.");
}

function isFirstPage()
{
    return window.location.href.indexOf("second") == -1;
}

function updateContent()
{
    document.body.innerHTML = isFirstPage() ? "first" : "second";
}

window.onload = function () {
    if (!window.eventSender || !window.testRunner) {
        document.body.innerHTML = "This test must be run in WebKitTestRunner.";
        return;
    }

    updateContent();

    initializeSwipeTest();

    testRunner.installDidBeginSwipeCallback(didBeginSwipeCallback);

    testRunner.dumpAsText();
    testRunner.waitUntilDone();

    window.addEventListener("popstate", function(e) {
        updateContent();
    });

    setTimeout(function () { 
        history.pushState(null, null, "/second");
        updateContent();

        setTimeout(function () {
            runTest();
        }, 0);
    }, 0);
};
</script>
</head>
<body>
</body>
