# Copyright (c) 2020 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.

# For experimental features:
# The type should be boolean.
# They must include a humanReadableName and humanReadableDescription. This is
#   the text exposed to the user from the WebKit client.

AccessibilityObjectModelEnabled:
  type: bool
  humanReadableName: "Accessibility Object Model"
  humanReadableDescription: "Accessibility Object Model support"
  webcoreBinding: RuntimeEnabledFeatures
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false

AspectRatioEnabled:
  type: bool
  humanReadableName: "CSS Aspect Ratio"
  humanReadableDescription: "Enable aspect-ratio CSS property"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

# FIXME: This is on by default in WebKit2. Perhaps we should consider turning it on for WebKitLegacy as well.
AspectRatioOfImgFromWidthAndHeightEnabled:
  type: bool
  humanReadableName: "Aspect ratio of <img> from width and height"
  humanReadableDescription: "Map HTML attributes width/height to the default aspect ratio of <img>"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: true
    WebCore:
      default: false

# FIXME: This is on by default in WebKit2 PLATFORM(COCOA). Perhaps we should consider turning it on for WebKitLegacy as well.
AsyncClipboardAPIEnabled:
  type: bool
  humanReadableName: "Async clipboard API"
  humanReadableDescription: "Enable the async clipboard API"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      "PLATFORM(COCOA)" : true
      default: false
    WebCore:
      default: false

AudioWorkletEnabled:
  type: bool
  humanReadableName: "WebAudio AudioWorklet API"
  humanReadableDescription: "WebAudio AudioWorklet API"
  condition: ENABLE(WEB_AUDIO)
  defaultValue:
    WebKitLegacy:
      "PLATFORM(IOS_FAMILY)" : true
      default: false
    WebKit:
      default: true
    WebCore:
      default: false

BlankAnchorTargetImpliesNoOpenerEnabled:
  type: bool
  humanReadableName: "Blank anchor target implies rel=noopener"
  humanReadableDescription: "target=_blank on anchor elements implies rel=noopener"
  defaultValue:
    WebKitLegacy:
      default: true
    WebKit:
      default: true
    WebCore:
      default: true

CSSCustomPropertiesAndValuesEnabled:
  type: bool
  humanReadableName: "CSS Custom Properties and Values API"
  humanReadableDescription: "Enable CSS Custom Properties and Values API"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

# FIXME: This is enabled when ENABLE(EXPERIMENTAL_FEATURES) is true in WebKit2. Perhaps we should consider using that for WebKitLegacy as well.
CSSIndividualTransformPropertiesEnabled:
  type: bool
  humanReadableName: "CSS Individual Transform Properties"
  humanReadableDescription: "Support for the translate, scale and rotate CSS properties"
  defaultValue:
    WebKitLegacy:
      default: true
    WebKit:
      default: true
    WebCore:
      default: true

CSSOMViewSmoothScrollingEnabled:
  type: bool
  humanReadableName: "CSSOM View Smooth Scrolling"
  humanReadableDescription: "Enable DOM API and CSS property for 'smooth' scroll behavior"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

CSSPaintingAPIEnabled:
  type: bool
  humanReadableName: "CSS Painting API"
  humanReadableDescription: "Enable the CSS Painting API"
  webcoreBinding: RuntimeEnabledFeatures
  condition: ENABLE(CSS_PAINTING_API)
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      "ENABLE(EXPERIMENTAL_FEATURES) && (PLATFORM(GTK) || PLATFORM(WPE))": true
      default: false

CSSTypedOMEnabled:
  type: bool
  humanReadableName: "CSS Typed OM"
  humanReadableDescription: "Enable the CSS Typed OM"
  webcoreBinding: RuntimeEnabledFeatures
  condition: ENABLE(CSS_TYPED_OM)
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      "ENABLE(EXPERIMENTAL_FEATURES) && (PLATFORM(GTK) || PLATFORM(WPE))": true
      default: false

ContactPickerAPIEnabled:
  type: bool
  humanReadableName: "Contact Picker API"
  humanReadableDescription: "Enable the Contact Picker API"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

CoreImageAcceleratedFilterRenderEnabled:
  type: bool
  webcoreOnChange: setNeedsRelayoutAllFrames
  humanReadableName: "CoreImage-Accelerated Filter Rendering"
  humanReadableDescription: "Accelerated CSS and SVG filter rendering using CoreImage"
  condition: ENABLE(CORE_IMAGE_ACCELERATED_FILTER_RENDER)
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

CoreMathMLEnabled:
  type: bool
  webcoreOnChange: setNeedsRecalcStyleInAllFrames
  humanReadableName: "MathML Core"
  humanReadableDescription: "Disable features removed from the MathML Core spec."
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      "PLATFORM(GTK) || PLATFORM(WPE)": true
      default: false
    WebCore:
      default: false

DialogElementEnabled:
  type: bool
  humanReadableName: "Dialog Element"
  humanReadableDescription: "Enable the Dialog Element"
  webKitLegacyPreferenceKey: WebKitDialogElementEnabledPreferenceKey
  webcoreBinding: RuntimeEnabledFeatures
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false

# FIXME: Starting the preference name with "Disable" is inconsistent with most other preferences and should be changed.
DisableMediaExperiencePIDInheritance:
  type: bool
  webcoreBinding: RuntimeEnabledFeatures
  humanReadableName: "Disable Media Experience PID Inheritance"
  humanReadableDescription: "Disable Media Experience PID Inheritance"
  condition: HAVE(CELESTIAL)
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false

DisallowSyncXHRDuringPageDismissalEnabled:
  type: bool
  humanReadableName: "Disallow sync XHR during page dismissal"
  humanReadableDescription: "Disallow synchronous XMLHttpRequest during page dismissal"
  defaultValue:
    WebKitLegacy:
      default: true
    WebKit:
      "PLATFORM(MAC) || PLATFORM(IOS_FAMILY)": WebKit::defaultDisallowSyncXHRDuringPageDismissalEnabled()
      default: true
    WebCore:
      default: true

# FIXME: Is this implemented for WebKitLegacy? If not, this should be excluded from WebKitLegacy entirely.
ExposeSpeakersEnabled:
  type: bool
  humanReadableName: "Allow speaker device selection"
  humanReadableDescription: "Allow speaker device selection"
  condition: ENABLE(MEDIA_STREAM)
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

# FIXME: This seems to be accidentally enabled for WebKit1 right now due to the old code using the
# wrong preference key in some places. We should identify whether it really makes sense to keep this
# enabled.
FetchAPIKeepAliveEnabled:
  type: bool
  humanReadableName: "Fetch API Request KeepAlive"
  humanReadableDescription: "Enable Fetch API Request KeepAlive"
  webcoreBinding: RuntimeEnabledFeatures
  defaultValue:
    WebKitLegacy:
      default: true
    WebKit:
      default: true

# FIXME: This is on by default in WebKit2. Perhaps we should consider turning it on for WebKitLegacy as well.
GenericCueAPIEnabled:
  type: bool
  condition: ENABLE(VIDEO)
  humanReadableName: "Generic Text Track Cue API"
  humanReadableDescription: "Enable Generic Text Track Cue API"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: true
    WebCore:
      default: false

GoogleAntiFlickerOptimizationQuirkEnabled:
  type: bool
  humanReadableName: "Quirk to prevent delayed initial painting on sites using Google's Anti-Flicker optimization"
  humanReadableDescription: "Quirk to prevent delayed initial painting on sites using Google's Anti-Flicker optimization"
  defaultValue:
    WebKitLegacy:
      default: true
    WebKit:
      default: true
    WebCore:
      default: true

# FIXME: This is on by default in WebKit2. Perhaps we should consider turning it on for WebKitLegacy as well.
HDRMediaCapabilitiesEnabled:
  type: bool
  humanReadableName: "HDR Media Capabilities"
  humanReadableDescription: "HDR Media Capabilities"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: true
    WebCore:
      default: false

HTTP3Enabled:
  type: bool
  humanReadableName: "HTTP/3"
  humanReadableDescription: "Enable HTTP/3"
  webcoreBinding: none
  condition: HAVE(CFNETWORK_ALTERNATIVE_SERVICE)
  exposed: [ WebKit ]
  defaultValue:
    WebKit:
      default: false

# FIXME: This is not implemented for WebKitLegacy, so should be excluded from WebKitLegacy entirely.
HTTPSUpgradeEnabled:
  type: bool
  humanReadableName: "Automatic HTTPS upgrade"
  humanReadableDescription: "Automatic HTTPS upgrade for known supported sites"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

HighlightAPIEnabled:
  type: bool
  humanReadableName: "Highlight API"
  humanReadableDescription: "Highlight API support"
  webcoreBinding: RuntimeEnabledFeatures
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false

# FIXME: This is enabled when ENABLE(EXPERIMENTAL_FEATURES) is true in WebKit2. Perhaps we should consider using that for WebKitLegacy as well.
ImageBitmapEnabled:
  type: bool
  humanReadableName: "ImageBitmap"
  humanReadableDescription: "Support for the ImageBitmap APIs"
  webcoreBinding: RuntimeEnabledFeatures
  defaultValue:
    WebKitLegacy:
      default: true
    WebKit:
      "ENABLE(EXPERIMENTAL_FEATURES)" : true
      default: false

# FIXME: This is not relevent for WebKitLegacy, so should be excluded from WebKitLegacy entirely.
InProcessCookieCacheEnabled:
  type: bool
  humanReadableName: "In-Process Cookie Cache"
  humanReadableDescription: "In-Process DOM Cookie Cache"
  defaultValue:
    WebKitLegacy:
      default: true
    WebKit:
      default: true
    WebCore:
      default: false

IncrementalPDFLoadingEnabled:
  type: bool
  humanReadableName: "Incremental PDF Loading"
  humanReadableDescription: "Enable Incremental PDF Loading on supported platforms"
  condition: HAVE(INCREMENTAL_PDF_APIS)
  webcoreBinding: RuntimeEnabledFeatures
  defaultValue:
    WebKitLegacy:
      default: WebKit::defaultIncrementalPDFEnabled()
    WebKit:
      default: WebKit::defaultIncrementalPDFEnabled()

# FIXME: This is on by default in WebKit2. Perhaps we should consider turning it on for WebKitLegacy as well.
IntersectionObserverEnabled:
  type: bool
  humanReadableName: "Intersection Observer"
  humanReadableDescription: "Enable Intersection Observer support"
  condition: ENABLE(INTERSECTION_OBSERVER)
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: true
    WebCore:
      default: false

# FIXME: The 'Is' prefix is inconsistent with most other preferences and should be removed.
IsFirstPartyWebsiteDataRemovalDisabled:
  type: bool
  humanReadableName: "Disable Removal of Non-Cookie Data After 7 Days of No User Interaction (ITP)"
  humanReadableDescription: "Disable removal of all non-cookie website data after seven days of no user interaction when Intelligent Tracking Prevention is enabled"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

# FIXME: The 'Is' prefix is inconsistent with most other preferences and should be removed.
IsLoggedInAPIEnabled:
  type: bool
  humanReadableName: "IsLoggedIn web API"
  humanReadableDescription: "Enable the proposed IsLoggedIn web API"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

# FIXME: The 'Is' prefix is inconsistent with most other preferences and should be removed.
# FIXME: This is not implemented for WebKitLegacy, so should be excluded from WebKitLegacy entirely.
IsNSURLSessionWebSocketEnabled:
  type: bool
  humanReadableName: "NSURLSession WebSocket"
  humanReadableDescription: "Use NSURLSession WebSocket API"
  webcoreBinding: RuntimeEnabledFeatures
  condition: HAVE(NSURLSESSION_WEBSOCKET)
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false

# FIXME: The 'Is' prefix is inconsistent with most other preferences and should be removed.
IsSameSiteStrictEnforcementEnabled:
  type: bool
  humanReadableName: "SameSite strict enforcement (ITP)"
  humanReadableDescription: "Enable SameSite strict enforcement to mitigate bounce tracking"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

# FIXME: The 'Is' prefix is inconsistent with most other preferences and should be removed.
IsThirdPartyCookieBlockingDisabled:
  type: bool
  humanReadableName: "Disable Full 3rd-Party Cookie Blocking (ITP)"
  humanReadableDescription: "Disable full third-party cookie blocking when Intelligent Tracking Prevention is enabled"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

LazyIframeLoadingEnabled:
  type: bool
  humanReadableName: "Lazy iframe loading"
  humanReadableDescription: "Enable lazy iframe loading support"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

LazyImageLoadingEnabled:
  type: bool
  humanReadableName: "Lazy image loading"
  humanReadableDescription: "Enable lazy image loading support"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

LinkPrefetchEnabled:
  type: bool
  humanReadableName: "LinkPrefetch"
  humanReadableDescription: "Enable LinkedPrefetch"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

LinkPreloadResponsiveImagesEnabled:
  type: bool
  humanReadableName: "Link preload responsive images"
  humanReadableDescription: "Enable link preload responsive images"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

MaskWebGLStringsEnabled:
  type: bool
  humanReadableName: "Mask WebGL Strings"
  humanReadableDescription: "Mask WebGL Vendor, Renderer, Shader Language Strings"
  webcoreBinding: RuntimeEnabledFeatures
  condition: ENABLE(WEBGL) || ENABLE(WEBGL2)
  defaultValue:
    WebKitLegacy:
      default: true
    WebKit:
      default: true

# FIXME: This is on by default in WebKit2. Perhaps we should consider turning it on for WebKitLegacy as well.
MediaCapabilitiesExtensionsEnabled:
  type: bool
  humanReadableName: "Media Capabilities Extensions"
  humanReadableDescription: "Media Capabilities Extensions"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: true
    WebCore:
      default: false

# FIXME: Is this implemented for WebKitLegacy? If not, this should be excluded from WebKitLegacy entirely.
MediaRecorderEnabled:
  type: bool
  humanReadableName: "MediaRecorder"
  humanReadableDescription: "MediaRecorder"
  condition: ENABLE(MEDIA_STREAM)
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      "HAVE(AVASSETWRITERDELEGATE)": true
      default: false
    WebCore:
      default: false

MediaSessionEnabled:
  type: bool
  humanReadableName: "Media Session API"
  humanReadableDescription: "Media Session API"
  condition: ENABLE(MEDIA_SESSION)
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

ModelElementEnabled:
  type: bool
  humanReadableName: "HTML <model> element"
  humanReadableDescription: "HTML <model> element"
  condition: ENABLE(MODEL_ELEMENT)
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

ModernUnprefixedWebAudioEnabled:
  type: bool
  humanReadableName: "Modern WebAudio API"
  humanReadableDescription: "Modern and unprefixed WebAudio API"
  condition: ENABLE(WEB_AUDIO)
  defaultValue:
    WebKitLegacy:
      "PLATFORM(IOS_FAMILY)" : true
      default: false
    WebKit:
      default: true
    WebCore:
      default: false

OverscrollBehaviorEnabled:
  type: bool
  humanReadableName: "CSS Overscroll Behavior"
  humanReadableDescription: "Enable CSS overscroll-behavior"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

PageAtRuleSupportEnabled:
  type: bool
  humanReadableName: "@page CSS at-rule support"
  humanReadableDescription: "Enable @page support"
  webcoreBinding: RuntimeEnabledFeatures
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false

# FIXME: This is on by default in WebKit2. Perhaps we should consider turning it on for WebKitLegacy as well.
PaintTimingEnabled:
  type: bool
  humanReadableName: "Paint Timing"
  humanReadableDescription: "Enable PaintTiming API"
  webcoreBinding: RuntimeEnabledFeatures
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: true

PassiveWheelListenersAsDefaultOnDocument:
  type: bool
  humanReadableName: "Wheel Event listeners on the root made passive"
  humanReadableDescription: "Force wheel event listeners registered on the window, document or body to be passive"
  defaultValue:
    WebKitLegacy:
      "PLATFORM(MAC)": WebKit::defaultPassiveWheelListenersAsDefaultOnDocument()
      default: true
    WebKit:
      "PLATFORM(MAC)": WebKit::defaultPassiveWheelListenersAsDefaultOnDocument()
      default: true
    WebCore:
      default: true

# FIXME: Is this implemented for WebKitLegacy? If not, this should be excluded from WebKitLegacy entirely.
PerElementSpeakerSelectionEnabled:
  type: bool
  humanReadableName: "Allow per media element speaker device selection"
  humanReadableDescription: "Allow per media element speaker device selection"
  condition: ENABLE(MEDIA_STREAM)
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

PrivateClickMeasurementDebugModeEnabled:
  type: bool
  humanReadableName: "Private Click Measurement Debug Mode"
  humanReadableDescription: "Enable Private Click Measurement Debug Mode"
  webcoreBinding: RuntimeEnabledFeatures
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false

ProcessSwapOnCrossSiteNavigationEnabled:
  type: bool
  humanReadableName: "Swap Processes on Cross-Site Navigation"
  humanReadableDescription: "Swap WebContent Processes on cross-site navigations"
  webcoreBinding: none
  exposed: [ WebKit ]
  defaultValue:
    WebKit:
      "PLATFORM(MAC) || PLATFORM(IOS) || PLATFORM(GTK) || PLATFORM(WPE)": true
      default: false

ReadableByteStreamAPIEnabled:
  type: bool
  humanReadableName: "ReadableByteStream"
  humanReadableDescription: "Enable Readable Byte Streams"
  webcoreBinding: RuntimeEnabledFeatures
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false

# FIXME: This is on by default in WebKit2. Perhaps we should consider turning it on for WebKitLegacy as well.
ReferrerPolicyAttributeEnabled:
  type: bool
  humanReadableName: "Referrer Policy attribute"
  humanReadableDescription: "Enable Referrer Policy attribute"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: true
    WebCore:
      default: true

# FIXME: This is on by default in WebKit2. Perhaps we should consider turning it on for WebKitLegacy as well.
RemotePlaybackEnabled:
  type: bool
  humanReadableName: "Remote Playback API"
  humanReadableDescription: "Enable Remote Playback API"
  condition: ENABLE(WIRELESS_PLAYBACK_TARGET)
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: true
    WebCore:
      default: true

RequestIdleCallbackEnabled:
  type: bool
  humanReadableName: "requestIdleCallback"
  humanReadableDescription: "Enable requestIdleCallback support"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

# FIXME: This is on by default in WebKit2. Perhaps we should consider turning it on for WebKitLegacy as well.
ResizeObserverEnabled:
  type: bool
  humanReadableName: "Resize Observer"
  humanReadableDescription: "Enable Resize Observer support"
  condition: ENABLE(RESIZE_OBSERVER)
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: true
    WebCore:
      default: false

# FIXME: Is this implemented for WebKitLegacy? If not, this should be excluded from WebKitLegacy entirely.
# FIXME: This should have it's own ENABLE.
ScreenCaptureEnabled:
  type: bool
  condition: ENABLE(MEDIA_STREAM)
  humanReadableName: "ScreenCapture"
  humanReadableDescription: "Enable ScreenCapture"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      "PLATFORM(MAC)": true
      default: false
    WebCore:
      default: false

ServerTimingEnabled:
  type: bool
  humanReadableName: "Server Timing"
  humanReadableDescription: "Enable Server Timing API"
  webcoreBinding: RuntimeEnabledFeatures
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      "ENABLE(EXPERIMENTAL_FEATURES) && (PLATFORM(GTK) || PLATFORM(WPE))": true
      default: false

ShouldDeferAsynchronousScriptsUntilAfterDocumentLoadOrFirstPaint:
  type: bool
  humanReadableName: "Defer async scripts until DOMContentLoaded or first-paint"
  humanReadableDescription: "Defer async scripts until DOMContentLoaded or first-paint"
  defaultValue:
    WebKitLegacy:
      default: true
    WebKit:
      default: true
    WebCore:
      default: true

SpeechRecognitionEnabled:
  type: bool
  humanReadableName: "SpeechRecognition API"
  humanReadableDescription: "Enable SpeechRecognition of WebSpeech API"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      "HAVE(SPEECHRECOGNIZER) && ENABLE(MEDIA_STREAM)": true
      default: false
    WebCore:
      default: false

# FIXME: This is enabled when ENABLE(EXPERIMENTAL_FEATURES) is true in WebKit2. Perhaps we should consider using that for WebKitLegacy as well.
SpringTimingFunctionEnabled:
  type: bool
  humanReadableName: "CSS Spring Animations"
  humanReadableDescription: "CSS Spring Animation prototype"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      "ENABLE(EXPERIMENTAL_FEATURES)" : true
      default: false
    WebCore:
      default: false

SyntheticEditingCommandsEnabled:
  type: bool
  humanReadableName: "Synthetic Editing Commands"
  humanReadableDescription: "Enable Synthetic Editing Commands"
  defaultValue:
    WebKitLegacy:
      default: true
    WebKit:
      default: true
    WebCore:
      default: true

ThirdPartyIframeRedirectBlockingEnabled:
  type: bool
  humanReadableName: "Block top-level redirects by third-party iframes"
  humanReadableDescription: "Block top-level redirects by third-party iframes"
  defaultValue:
    WebKitLegacy:
      default: true
    WebKit:
      default: true
    WebCore:
      default: true

TransformStreamAPIEnabled:
  type: bool
  humanReadableName: "TransformStream API"
  humanReadableDescription: "Enable Transform Stream API"
  webcoreBinding: RuntimeEnabledFeatures
  defaultValue:
    WebKitLegacy:
      default: true
    WebKit:
      default: true

UserGesturePromisePropagationEnabled:
  type: bool
  humanReadableName: "UserGesture Promise Propagation"
  humanReadableDescription: "UserGesture Promise Propagation"
  webcoreBinding: RuntimeEnabledFeatures
  defaultValue:
    WebKitLegacy:
      default: true
    WebKit:
      default: true

VP8DecoderEnabled:
  type: bool
  humanReadableName: "VP8 decoder"
  humanReadableDescription: "Enable VP8 decoder"
  webcoreBinding: none
  condition: ENABLE(VP9)
  defaultValue:
    WebKit:
      default: WebKit::defaultVP8DecoderEnabled()

# FIXME: Is this implemented for WebKitLegacy? If not, this should be excluded from WebKitLegacy entirely.
VP9DecoderEnabled:
  type: bool
  humanReadableName: "VP9 decoder"
  humanReadableDescription: "Enable VP9 decoder"
  condition: ENABLE(VP9)
  defaultValue:
    WebCore:
      default: false
    WebKitLegacy:
      default: false
    WebKit:
      default: WebKit::defaultVP9DecoderEnabled()

# FIXME: Is this implemented for WebKitLegacy? If not, this should be excluded from WebKitLegacy entirely.
VP9SWDecoderEnabledOnBattery:
  type: bool
  humanReadableName: "VP9 SW decoder on battery"
  humanReadableDescription: "Enable VP9 SW decoder on battery"
  webcoreBinding: none
  condition: ENABLE(VP9)
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: WebKit::defaultVP9SWDecoderEnabledOnBattery()

VisualViewportAPIEnabled:
  type: bool
  humanReadableName: "Visual Viewport API"
  humanReadableDescription: "Enable Visual Viewport API"
  defaultValue:
    WebKitLegacy:
      "PLATFORM(IOS_FAMILY)" : false
      default: true
    WebKit:
      default: true
    WebCore:
      default: false

VorbisDecoderEnabled:
  type: bool
  humanReadableName: "Vorbis audio decoder"
  humanReadableDescription: "Enable Vorbis audio decoder"
  condition: ENABLE(VORBIS)
  webcoreBinding: RuntimeEnabledFeatures
  defaultValue:
    WebKitLegacy:
      default: true
    WebKit:
      default: true

# FIXME: This is enabled when ENABLE(EXPERIMENTAL_FEATURES) is true in WebKit2. Perhaps we should consider using that for WebKitLegacy as well.
WebAnimationsCompositeOperationsEnabled:
  type: bool
  humanReadableName: "Web Animations composite operations"
  humanReadableDescription: "Support for the CompositeOperation enum and properties consuming it"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      "ENABLE(EXPERIMENTAL_FEATURES)" : true
      default: false
    WebCore:
      default: false

# FIXME: This is enabled when ENABLE(EXPERIMENTAL_FEATURES) is true in WebKit2. Perhaps we should consider using that for WebKitLegacy as well.
WebAnimationsMutableTimelinesEnabled:
  type: bool
  humanReadableName: "Web Animations mutable timelines"
  humanReadableDescription: "Support for setting the timeline property of an Animation object"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      "ENABLE(EXPERIMENTAL_FEATURES)" : true
      default: false
    WebCore:
      default: false

# FIXME: Is this implemented for WebKitLegacy? If not, this should be excluded from WebKitLegacy entirely.
WebAuthenticationEnabled:
  type: bool
  humanReadableName: "Web Authentication"
  humanReadableDescription: "Enable Web Authentication support"
  condition: ENABLE(WEB_AUTHN)
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

# FIXME: Is this implemented for WebKitLegacy? If not, this should be excluded from WebKitLegacy entirely.
WebAuthenticationModernEnabled:
  type: bool
  humanReadableName: "Web Authentication Modern"
  humanReadableDescription: "Enable Modern Web Authentication support"
  condition: ENABLE(WEB_AUTHN)
  webcoreBinding: RuntimeEnabledFeatures
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      "PLATFORM(IOS)" : true
      default: false
    WebCore:
      default: false

WebGL2Enabled:
  type: bool
  humanReadableName: "WebGL 2.0"
  humanReadableDescription: "WebGL 2 prototype"
  webcoreBinding: RuntimeEnabledFeatures
  condition: ENABLE(WEBGL2)
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false

WebGPUEnabled:
  type: bool
  humanReadableName: "WebGPU"
  humanReadableDescription: "WebGPU Sketch prototype"
  webcoreBinding: RuntimeEnabledFeatures
  condition: ENABLE(WEBGPU)
  defaultValue:
    WebKitLegacy:
      default: WebKit::defaultWebGPUEnabled()
    WebKit:
      default: WebKit::defaultWebGPUEnabled()

WebMFormatReaderEnabled:
  type: bool
  webcoreBinding: RuntimeEnabledFeatures
  humanReadableName: "WebM format reader"
  humanReadableDescription: "Enable MediaToolbox format reader plug-in for WebM"
  condition: ENABLE(WEBM_FORMAT_READER)
  defaultValue:
    WebKit:
      default: WebKit::defaultWebMFormatReaderEnabled()

# FIXME: Is this implemented for WebKitLegacy? If not, this should be excluded from WebKitLegacy entirely.
WebMParserEnabled:
  type: bool
  webcoreBinding: RuntimeEnabledFeatures
  humanReadableName: "WebM MSE parser"
  humanReadableDescription: "Enable WebM MSE parser"
  condition: ENABLE(MEDIA_SOURCE) && ENABLE(VP9)
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: WebKit::defaultWebMParserEnabled()

# FIXME: Is this implemented for WebKitLegacy? If not, this should be excluded from WebKitLegacy entirely.
WebRTCH264LowLatencyEncoderEnabled:
  type: bool
  humanReadableName: "WebRTC H264 LowLatency encoder"
  humanReadableDescription: "Enable H264 LowLatency encoder"
  webcoreBinding: RuntimeEnabledFeatures
  condition: ENABLE(WEB_RTC)
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: true

# FIXME: Is this implemented for WebKitLegacy? If not, this should be excluded from WebKitLegacy entirely.
WebRTCH265CodecEnabled:
  type: bool
  webcoreBinding: RuntimeEnabledFeatures
  condition: ENABLE(WEB_RTC)
  humanReadableName: "WebRTC H265 codec"
  humanReadableDescription: "Enable WebRTC H265 codec"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false

WebRTCInsertableStreamsEnabled:
  type: bool
  condition: ENABLE(WEB_RTC)
  humanReadableName: "WebRTC Insertable Streams API"
  humanReadableDescription: "Enable WebRTC Insertable Streams API"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

# FIXME: This is not relevent for WebKitLegacy, so should be excluded from WebKitLegacy entirely.
WebRTCPlatformCodecsInGPUProcessEnabled:
  type: bool
  humanReadableName: "WebRTC Platform Codecs in GPU Process"
  humanReadableDescription: "Enable WebRTC Platform Codecs in GPU Process"
  webcoreBinding: RuntimeEnabledFeatures
  condition: ENABLE(WEB_RTC)
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: WebKit::defaultWebRTCCodecsInGPUProcess()

WebRTCPlatformSocketsEnabled:
  type: bool
  humanReadableName: "WebRTC Platform Sockets"
  humanReadableDescription: "Enable WebRTC Platform Sockets"
  webcoreBinding: RuntimeEnabledFeatures
  condition: ENABLE(WEB_RTC)
  defaultValue:
    WebKit:
      default: true

WebRTCVP9Profile0CodecEnabled:
  type: bool
  humanReadableName: "WebRTC VP9 profile 0 codec"
  humanReadableDescription: "Enable WebRTC VP9 profile 0 codec"
  webcoreBinding: RuntimeEnabledFeatures
  condition: ENABLE(WEB_RTC)
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false

WebRTCVP9Profile2CodecEnabled:
  type: bool
  humanReadableName: "WebRTC VP9 profile 2 codec"
  humanReadableDescription: "Enable WebRTC VP9 profile 2 codec"
  webcoreBinding: RuntimeEnabledFeatures
  condition: ENABLE(WEB_RTC)
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false

WebSQLDisabled:
  type: bool
  humanReadableName: "Disable WebSQL"
  humanReadableDescription: "Disable WebSQL"
  webcoreBinding: RuntimeEnabledFeatures
  exposed: [ WebKit ]
  defaultValue:
    WebKit:
      default: true

# FIXME: WebKitLegacy has an existing preference called 'WebSQLEnabled'. We should reconcile it with WebSQLDisabled.
WebSQLEnabled:
  type: bool
  humanReadableName: "Enable WebSQL"
  humanReadableDescription: "Enable WebSQL"
  webcoreBinding: custom
  exposed: [ WebKitLegacy ]
  defaultValue:
    WebKitLegacy:
      "PLATFORM(IOS_FAMILY)": WebKit::defaultWebSQLEnabled()
      default: true

WebShareFileAPIEnabled:
  type: bool
  humanReadableName: "Web Share API Level 2"
  humanReadableDescription: "Enable level 2 of Web Share API"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

WebXREnabled:
  type: bool
  humanReadableName: "WebXR Device API"
  humanReadableDescription: "Adds support for accessing virtual reality (VR) and augmented reality (AR) devices, including sensors and head-mounted displays, on the Web"
  webcoreBinding: RuntimeEnabledFeatures
  condition: ENABLE(WEBXR)
  defaultValue:
    WebKitLegacy:
      default: WebKit::defaultWebXREnabled()
    WebKit:
      default: WebKit::defaultWebXREnabled()

WheelEventGesturesBecomeNonBlocking:
  type: bool
  humanReadableName: "Wheel Event gestures become non-blocking"
  humanReadableDescription: "preventDefault() is only allowed on the first wheel event in a gesture"
  defaultValue:
    WebKitLegacy:
      "PLATFORM(MAC)": WebKit::defaultWheelEventGesturesBecomeNonBlocking()
      default: true
    WebKit:
      "PLATFORM(MAC)": WebKit::defaultWheelEventGesturesBecomeNonBlocking()
      default: true
    WebCore:
      default: true

WritableStreamAPIEnabled:
  type: bool
  humanReadableName: "WritableStream API"
  humanReadableDescription: "Enable Writable Stream API"
  webcoreBinding: RuntimeEnabledFeatures
  defaultValue:
    WebKitLegacy:
      default: true
    WebKit:
      default: true

