# Copyright (C) 2023 Apple Inc. All rights reserved.
#
# 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.

enum class WebKit::AllowsCellularAccess : bool;

[RValue] struct WebKit::NetworkSessionCreationParameters {
    PAL::SessionID sessionID;
    Markable<WTF::UUID> dataStoreIdentifier;
    String boundInterfaceIdentifier;
    WebKit::AllowsCellularAccess allowsCellularAccess;
#if PLATFORM(COCOA)
    RetainPtr<CFDictionaryRef> proxyConfiguration;
    String sourceApplicationBundleIdentifier;
    String sourceApplicationSecondaryIdentifier;
    bool shouldLogCookieInformation;
    URL httpProxy;
    URL httpsProxy;
#endif
#if HAVE(ALTERNATIVE_SERVICE)
    String alternativeServiceDirectory;
    WebKit::SandboxExtensionHandle alternativeServiceDirectoryExtensionHandle;
#endif
    String hstsStorageDirectory;
    WebKit::SandboxExtensionHandle hstsStorageDirectoryExtensionHandle;
#if USE(SOUP)
    String cookiePersistentStoragePath;
    WebKit::SoupCookiePersistentStorageType cookiePersistentStorageType;
    bool persistentCredentialStorageEnabled;
    bool ignoreTLSErrors;
    WebCore::SoupNetworkProxySettings proxySettings;
    WebCore::HTTPCookieAcceptPolicy cookieAcceptPolicy;
#endif
#if USE(CURL)
    String cookiePersistentStorageFile;
    WebCore::CurlProxySettings proxySettings;
#endif
    bool deviceManagementRestrictionsEnabled;
    bool allLoadsBlockedByDeviceManagementRestrictionsForTesting;
    WebKit::WebPushD::WebPushDaemonConnectionConfiguration webPushDaemonConnectionConfiguration;

    String networkCacheDirectory;
    WebKit::SandboxExtensionHandle networkCacheDirectoryExtensionHandle;
    String dataConnectionServiceType;
    bool fastServerTrustEvaluationEnabled;
    bool networkCacheSpeculativeValidationEnabled;
    bool shouldUseTestingNetworkSession;
    bool staleWhileRevalidateEnabled;
    unsigned testSpeedMultiplier;
    bool suppressesConnectionTerminationOnSystemChange;
    bool allowsServerPreconnect;
    bool requiresSecureHTTPSProxyConnection;
    bool shouldRunServiceWorkersOnMainThreadForTesting;
    std::optional<unsigned> overrideServiceWorkerRegistrationCountTestingValue;
    bool preventsSystemHTTPProxyAuthentication;
    std::optional<bool> useNetworkLoader;
    bool allowsHSTSWithUntrustedRootCertificate;
    String pcmMachServiceName;
    String webPushMachServiceName;
    String webPushPartitionString;
    bool enablePrivateClickMeasurementDebugMode;
    bool isBlobRegistryTopOriginPartitioningEnabled;
    bool shouldSendPrivateTokenIPCForTesting;

    WebKit::UnifiedOriginStorageLevel unifiedOriginStorageLevel;
    uint64_t perOriginStorageQuota;
    std::optional<double> originQuotaRatio;
    std::optional<double> totalQuotaRatio;
    std::optional<uint64_t> standardVolumeCapacity;
    std::optional<uint64_t> volumeCapacityOverride;
    String localStorageDirectory;
    WebKit::SandboxExtensionHandle localStorageDirectoryExtensionHandle;
    String indexedDBDirectory;
    WebKit::SandboxExtensionHandle indexedDBDirectoryExtensionHandle;
    String cacheStorageDirectory;
    WebKit::SandboxExtensionHandle cacheStorageDirectoryExtensionHandle;
    String generalStorageDirectory;
    WebKit::SandboxExtensionHandle generalStorageDirectoryHandle;
    String serviceWorkerRegistrationDirectory;
    WebKit::SandboxExtensionHandle serviceWorkerRegistrationDirectoryExtensionHandle;
    bool serviceWorkerProcessTerminationDelayEnabled;
    bool inspectionForServiceWorkersAllowed;
    bool storageSiteValidationEnabled;
#if ENABLE(DECLARATIVE_WEB_PUSH)
    bool isDeclarativeWebPushEnabled;
#endif
#if HAVE(NW_PROXY_CONFIG)
    std::optional<Vector<std::pair<Vector<uint8_t>, WTF::UUID>>> proxyConfigData;
#endif
    WebKit::ResourceLoadStatisticsParameters resourceLoadStatisticsParameters;
};
