/*
 * Copyright (C) 2019 Sony Interactive Entertainment Inc.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 *
 * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
 * THE POSSIBILITY OF SUCH DAMAGE.
 */

#pragma once

#include <WebKit/WKBase.h>

#ifdef __cplusplus
extern "C" {
#endif

typedef void (*WKPageStateClientWillChangeCallback)(const void* clientInfo);
typedef void (*WKPageStateClientDidChangeCallback)(const void* clientInfo);

typedef struct WKPageStateClientBase {
    int                                                                 version;
    const void *                                                        clientInfo;
} WKPageStateClientBase;

typedef struct WKPageStateClientV0 {
    WKPageStateClientBase                                               base;

    // Version 0.
    WKPageStateClientWillChangeCallback                                 willChangeIsLoading;
    WKPageStateClientDidChangeCallback                                  didChangeIsLoading;
    WKPageStateClientWillChangeCallback                                 willChangeTitle;
    WKPageStateClientDidChangeCallback                                  didChangeTitle;
    WKPageStateClientWillChangeCallback                                 willChangeActiveURL;
    WKPageStateClientDidChangeCallback                                  didChangeActiveURL;
    WKPageStateClientWillChangeCallback                                 willChangeHasOnlySecureContent;
    WKPageStateClientDidChangeCallback                                  didChangeHasOnlySecureContent;
    WKPageStateClientWillChangeCallback                                 willChangeEstimatedProgress;
    WKPageStateClientDidChangeCallback                                  didChangeEstimatedProgress;
    WKPageStateClientWillChangeCallback                                 willChangeCanGoBack;
    WKPageStateClientDidChangeCallback                                  didChangeCanGoBack;
    WKPageStateClientWillChangeCallback                                 willChangeCanGoForward;
    WKPageStateClientDidChangeCallback                                  didChangeCanGoForward;
    WKPageStateClientWillChangeCallback                                 willChangeNetworkRequestsInProgress;
    WKPageStateClientDidChangeCallback                                  didChangeNetworkRequestsInProgress;
    WKPageStateClientWillChangeCallback                                 willChangeCertificateInfo;
    WKPageStateClientDidChangeCallback                                  didChangeCertificateInfo;
    WKPageStateClientWillChangeCallback                                 willChangeWebProcessIsResponsive;
    WKPageStateClientDidChangeCallback                                  didChangeWebProcessIsResponsive;
    WKPageStateClientDidChangeCallback                                  didSwapWebProcesses;

} WKPageStateClientV0;

#ifdef __cplusplus
}
#endif
