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

# Web preferences are assigned a `status` which implies a default value and
# controls the interfaces where the preference is declared.
#
# == Web Platform Features ==
# unstable::
#   Feature in active development. Unfinished, no promise it is usable or safe.
#   OFF by default.
# testable::
#   Feature in active development. Stable enough for testing, but not ready to ship.
#   OFF by default. Enabled in test infrastructure only.
# preview::
#   Ready to be used in beta contexts like Safari Technology Preview.
#   ON by default in Safari Technology Preview and test infrastructure.
#   OFF by default elsewhere. May be enabled automatically by clients.
# stable::
#   Ready for general use, but should be able to be toggled to support
#   debugging, A/B testing.
#   ON by default. Some platforms may deviate from default behavior due to
#   support or needed dependencies.
# mature::
#   Already in general use, with no UI to toggle. Features in this status may be
#   cleaned up and removed altogether.
#   ON by default. Some platforms may deviate from default behavior due to
#   support or needed dependencies.
#
# == Developer Features ==
# developer::
#   Tools for web developers, not part of a feature that will ever be enabled
#   for end users.
#   OFF by default.
# internal::
#   Tools for debugging the WebKit engine. Not generally useful to web developers.
#   OFF by default.
#
# == Embedder Controls ==
# embedder::
#   Adjusts WebKit behavior for embedding application needs. Not part of a
#   web platform feature or a "mature" feature intended to be always-on.
#   ANY default value.
#
# == Defaults Overridable ==
#  When features are declared with "defaultsOverridable: true", platform user
#  defaults may override a default value at runtime, using the preference
#  name prefixed with "WebKitDebug".

AVFoundationEnabled:
  type: bool
  status: embedder
  getter: isAVFoundationEnabled
  humanReadableName: "AVFoundation"
  humanReadableDescription: "Enable AVFoundation"
  webcoreBinding: DeprecatedGlobalSettings
  condition: USE(AVFOUNDATION)
  defaultValue:
    WebKitLegacy:
      default: true
    WebKit:
      "PLATFORM(WATCHOS)": false
      default: true

AVKitContentSourceEnabled:
  type: bool
  status: unstable
  getter: isAVKitContentSourceEnabled
  humanReadableName: "AVKit Content Source"
  humanReadableDescription: "Enable AVKit Content Source"
  condition: HAVE(AVKIT_CONTENT_SOURCE)
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

AcceleratedCompositingEnabled:
  type: bool
  status: embedder
  webcoreOnChange: setNeedsRecalcStyleInAllFrames
  defaultValue:
    WebKitLegacy:
      default: true
    WebKit:
      default: true
    WebCore:
      default: true

AcceleratedCompositingForFixedPositionEnabled:
  type: bool
  status: embedder
  defaultValue:
    WebKitLegacy:
      default: true
    WebKit:
      PLATFORM(IOS_FAMILY): true
      default: false
    WebCore:
      PLATFORM(IOS_FAMILY): true
      default: false

AcceleratedDrawingEnabled:
  type: bool
  status: internal
  defaultsOverridable: true
  humanReadableName: "GraphicsLayer accelerated drawing"
  humanReadableDescription: "Enable GraphicsLayer accelerated drawing"
  defaultValue:
    WebKitLegacy:
      "PLATFORM(IOS_FAMILY) && !PLATFORM(IOS_FAMILY_SIMULATOR)": true
      default: false
    WebKit:
      default: true
    WebCore:
      default: false

AcceleratedFiltersEnabled:
  type: bool
  status: unstable
  webcoreOnChange: setNeedsRelayoutAllFrames
  humanReadableName: "Accelerated Filter Rendering"
  humanReadableDescription: "Accelerated CSS and SVG filter rendering"
  condition: USE(CORE_IMAGE)
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

AccentColorEnabled:
  type: bool
  status: stable
  category: css
  humanReadableName: "CSS Accent Color"
  humanReadableDescription: "Enable accent-color CSS property"
  defaultValue:
    WebKitLegacy:
      "PLATFORM(COCOA)" : true
      default: false
    WebKit:
      "PLATFORM(COCOA) || USE(THEME_ADWAITA)": true
      default: false
    WebCore:
      "PLATFORM(COCOA) || USE(THEME_ADWAITA)": true
      default: false

AccessHandleEnabled:
  type: bool
  status: mature
  category: dom
  humanReadableName: "AccessHandle API"
  humanReadableDescription: "Enable AccessHandle API"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      "PLATFORM(COCOA)" : true
      default: false
    WebCore:
      "PLATFORM(COCOA)" : true
      default: false

AccessibilityThreadTextApisEnabled:
  type: bool
  status: embedder
  humanReadableName: "Off Main-Thread Accessibility Text APIs"
  humanReadableDescription: "Serve accessibility text APIs off the main-thread"
  webcoreBinding: DeprecatedGlobalSettings
  condition: ENABLE(AX_THREAD_TEXT_APIS)
  defaultValue:
    WebKitLegacy:
      default: true
    WebKit:
      default: true
    WebCore:
      default: true

AggressiveTileRetentionEnabled:
  type: bool
  status: embedder
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

AllowContentSecurityPolicySourceStarToMatchAnyProtocol:
  type: bool
  status: embedder
  defaultValue:
    WebKitLegacy:
      PLATFORM(IOS_FAMILY): WebKit::defaultAllowContentSecurityPolicySourceStarToMatchAnyProtocol()
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

AllowDisplayOfInsecureContent:
  type: bool
  status: embedder
  defaultValue:
    WebKitLegacy:
      default: WebKit::defaultAllowDisplayOfInsecureContent()
    WebKit:
      default: false
    WebCore:
      default: false

AllowFileAccessFromFileURLs:
  type: bool
  status: embedder
  defaultValue:
    WebKitLegacy:
      default: true
    WebKit:
      default: false
    WebCore:
      default: true

AllowMediaContentTypesRequiringHardwareSupportAsFallback:
  type: bool
  status: embedder
  humanReadableName: "Allow Media Content Types Requirining Hardware As Fallback"
  humanReadableDescription: "Allow Media Content Types Requirining Hardware As Fallback"
  defaultValue:
    WebKitLegacy:
      default: true
    WebKit:
      "PLATFORM(COCOA)": true
      default: false
    WebCore:
      default: false

AllowMultiElementImplicitSubmission:
  type: bool
  status: embedder
  webKitLegacyPreferenceKey: WebKitAllowMultiElementImplicitFormSubmissionPreferenceKey
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

AllowPrivacySensitiveOperationsInNonPersistentDataStores:
  type: bool
  status: embedder
  humanReadableName: "Allow Privacy-Sensitive Operations in Non-Persistent Data Stores"
  humanReadableDescription: "Allow Privacy-Sensitive Operations in Non-Persistent Data Stores"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false
  sharedPreferenceForWebProcess: true

AllowRunningOfInsecureContent:
  type: bool
  status: embedder
  defaultValue:
    WebKitLegacy:
      default: WebKit::defaultAllowRunningOfInsecureContent()
    WebKit:
      default: false
    WebCore:
      default: false

AllowTestOnlyIPC:
  type: bool
  status: embedder
  exposed: [ WebKit ]
  webcoreBinding: none
  defaultValue:
    WebKit:
      default: false
  sharedPreferenceForWebProcess: true

AllowTopNavigationToDataURLs:
  type: bool
  humanReadableName: "Allow top navigation to data: URLs"
  status: embedder
  defaultValue:
    WebKitLegacy:
      default: true
    WebKit:
      default: false
    WebCore:
      default: false

AllowUniversalAccessFromFileURLs:
  type: bool
  humanReadableName: "Allow universal access from file: URLs"
  status: developer
  category: security
  defaultValue:
    WebKitLegacy:
      default: true
    WebKit:
      default: false
    WebCore:
      default: true

# FIXME: This is not relevent for WebKitLegacy, so should be excluded from WebKitLegacy entirely.
AllowViewportShrinkToFitContent:
  type: bool
  status: internal
  humanReadableName: "Allow Viewport Shrink to Fit Content"
  humanReadableDescription: "Allow the viewport shrink to fit content heuristic when appropriate"
  condition: PLATFORM(IOS_FAMILY)
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: true
    WebCore:
      default: true

AllowWebGLInWorkers:
  type: bool
  status: stable
  category: dom
  humanReadableName: "Allow WebGL in Web Workers"
  condition: ENABLE(WEBGL)
  defaultValue:
    WebKitLegacy:
      "ENABLE(WEBGL_IN_WORKERS)": true
      default: false
    WebKit:
      "ENABLE(WEBGL_IN_WORKERS)": true
      default: false
    WebCore:
      "ENABLE(WEBGL_IN_WORKERS)": true
      default: false

AllowsAirPlayForMediaPlayback:
  type: bool
  status: embedder
  webKitLegacyPreferenceKey: WebKitMediaPlaybackAllowsAirPlay
  condition: ENABLE(WIRELESS_PLAYBACK_TARGET)
  defaultValue:
    WebKitLegacy:
      default: true
    WebKit:
      default: true
    WebCore:
      default: true

AllowsInlineMediaPlayback:
  type: bool
  status: embedder
  webKitLegacyPreferenceKey: WebKitMediaPlaybackAllowsInline
  defaultValue:
    WebKitLegacy:
      "PLATFORM(IOS_FAMILY)": WebKit::defaultAllowsInlineMediaPlayback()
      default: true
    WebKit:
      "PLATFORM(IOS_FAMILY)": false
      default: true
    WebCore:
      "PLATFORM(IOS_FAMILY)": false
      default: true

AllowsInlineMediaPlaybackAfterFullscreen:
  type: bool
  status: embedder
  defaultValue:
    WebKitLegacy:
      "PLATFORM(IOS_FAMILY)": WebKit::defaultAllowsInlineMediaPlaybackAfterFullscreen()
      default: false
    WebKit:
      "PLATFORM(IOS_FAMILY)": true
      default: false
    WebCore:
      default: true

AllowsPictureInPictureMediaPlayback:
  type: bool
  status: embedder
  defaultValue:
    WebKitLegacy:
      "PLATFORM(VISION)": false
      "PLATFORM(IOS_FAMILY)": WebKit::defaultAllowsPictureInPictureMediaPlayback()
      default: false
    WebKit:
      "PLATFORM(VISION)": false
      "PLATFORM(IOS_FAMILY)": true
      default: false
    WebCore:
      "PLATFORM(VISION)": false
      default: true
  disableInLockdownMode: true

AlternateFullScreenControlDesignEnabled:
  type: bool
  status: embedder
  condition: PLATFORM(IOS_FAMILY)
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      "PLATFORM(VISION)": true
      default: false
    WebCore:
      default: false

AltitudeAngleEnabled:
  type: bool
  status: stable
  category: dom
  humanReadableName: "altitudeAngle PointerEvent Property"
  humanReadableDescription: "Enable the `altitudeAngle` property of the PointerEvents API"
  defaultValue:
    WebKitLegacy:
     default: false
    WebKit:
      "PLATFORM(COCOA)": true
      default: false
    WebCore:
      "PLATFORM(COCOA)": true
      default: false

AlwaysAllowLocalWebarchive:
  type: bool
  status: internal
  category: dom
  humanReadableName: "Always allow loading local Web Archive"
  humanReadableDescription: "Enable always allowing loading local Web Archive"
  condition: ENABLE(WEB_ARCHIVE)
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

AlwaysZoomOnDoubleTap:
  type: bool
  status: internal
  humanReadableName: "DTTZ always"
  humanReadableDescription: "Double taps zoom, even if we dispatched a click anywhere"
  webcoreBinding: none
  condition: PLATFORM(IOS_FAMILY)
  exposed: [ WebKit ]
  defaultValue:
    WebKit:
      default: false

AnimatedImageAsyncDecodingEnabled:
  type: bool
  status: embedder
  defaultValue:
    WebKitLegacy:
      default: true
    WebKit:
      default: true
    WebCore:
      default: true

AppBadgeEnabled:
  type: bool
  status: unstable
  category: dom
  humanReadableName: "App Badge"
  humanReadableDescription: "Enable App Badge"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false
  sharedPreferenceForWebProcess: true
  richJavaScript: true

AppHighlightsEnabled:
  type: bool
  status: unstable
  category: css
  humanReadableName: "App Highlights"
  humanReadableDescription: "Enable App Highlights"
  condition: ENABLE(APP_HIGHLIGHTS)
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

AppleMailPaginationQuirkEnabled:
  type: bool
  status: embedder
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      PLATFORM(MAC): WebKit::defaultAppleMailPaginationQuirkEnabled()
      default: false
    WebCore:
      default: false

# FIXME: Is this implemented for WebKitLegacy? If not, this should be excluded from WebKitLegacy entirely (though we should still set the default value to false when initializing settings).
ApplePayCapabilityDisclosureAllowed:
  type: bool
  status: embedder
  condition: ENABLE(APPLE_PAY)
  defaultValue:
    WebKitLegacy:
      default: true
    WebKit:
      default: true
    WebCore:
      default: true

# FIXME: Is this implemented for WebKitLegacy? If not, this should be excluded from WebKitLegacy entirely (though we should still set the default value to false when initializing settings).
ApplePayEnabled:
  type: bool
  status: embedder
  condition: ENABLE(APPLE_PAY)
  defaultValue:
    WebKitLegacy:
      "ENABLE(APPLE_PAY_REMOTE_UI)": true
      default: false
    WebKit:
      "ENABLE(APPLE_PAY_REMOTE_UI)": true
      default: false
    WebCore:
      "ENABLE(APPLE_PAY_REMOTE_UI)": true
      default: false
  sharedPreferenceForWebProcess: true
  richJavaScript: true

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

AsyncFrameScrollingEnabled:
  type: bool
  status: internal
  webcoreOnChange: setNeedsRelayoutAllFrames
  humanReadableName: "Async Frame Scrolling"
  humanReadableDescription: "Perform frame scrolling off the main thread"
  exposed: [ WebKit ]
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      "USE(COORDINATED_GRAPHICS)": true
      "PLATFORM(COCOA)": true
      default: false
    WebCore:
      default: false

AsyncOverflowScrollingEnabled:
  type: bool
  status: internal
  webcoreOnChange: setNeedsRelayoutAllFrames
  humanReadableName: "Async Overflow Scrolling"
  humanReadableDescription: "Perform overflow scrolling off the main thread"
  exposed: [ WebKit ]
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      "USE(COORDINATED_GRAPHICS)": true
      "PLATFORM(COCOA)": true
      default: false
    WebCore:
      default: false

AsynchronousSpellCheckingEnabled:
  type: bool
  status: embedder
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

AttachmentElementEnabled:
  type: bool
  status: embedder
  humanReadableName: "Attachment Element"
  humanReadableDescription: "Allow the insertion of attachment elements"
  webcoreBinding: DeprecatedGlobalSettings
  condition: ENABLE(ATTACHMENT_ELEMENT)
  defaultValue:
    WebKitLegacy:
      default: WebKit::defaultAttachmentElementEnabled()
    WebKit:
      default: false
  sharedPreferenceForWebProcess: true

AttachmentWideLayoutEnabled:
  type: bool
  status: embedder
  humanReadableName: "Attachment wide-layout styling"
  humanReadableDescription: "Use horizontal wide-layout attachment style, requires Attachment Element"
  condition: ENABLE(ATTACHMENT_ELEMENT)
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

AudioControlsScaleWithPageZoom:
  type: bool
  status: embedder
  category: media
  defaultValue:
    WebKitLegacy:
      "PLATFORM(VISION)": true
      "PLATFORM(IOS_FAMILY)": false
      default: true
    WebKit:
      "PLATFORM(VISION)": true
      "PLATFORM(IOS_FAMILY)": false
      default: true
    WebCore:
      "PLATFORM(VISION)": true
      "PLATFORM(IOS_FAMILY)": false
      default: true

AudioDescriptionsEnabled:
  type: bool
  status: preview
  category: media
  condition: ENABLE(VIDEO)
  humanReadableName: "Audio descriptions for video - Standard"
  humanReadableDescription: "Enable standard audio descriptions for video"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

AuthorAndUserStylesEnabled:
  type: bool
  status: embedder
  webKitLegacyPreferenceKey: WebKitAuthorAndUserStylesEnabledPreferenceKey
  webcoreOnChange: setNeedsRecalcStyleInAllFrames
  inspectorOverride: true
  defaultValue:
    WebKitLegacy:
      default: true
    WebKit:
      default: true
    WebCore:
      default: true

AutomaticLiveResizeEnabled:
  type: bool
  status: internal
  humanReadableName: "Enable Automatic Live Resize"
  humanReadableDescription: "Automatically synchronize web view resize with painting"
  webcoreBinding: none
  exposed: [ WebKit ]
  condition: PLATFORM(IOS_FAMILY)
  defaultValue:
    WebKit:
      default: WebKit::defaultAutomaticLiveResizeEnabled()

AutomaticallyAdjustsViewScaleUsingMinimumEffectiveDeviceWidth:
  type: bool
  status: internal
  humanReadableName: "Automatically Adjust View Scale"
  humanReadableDescription: "Automatically Adjust View Scale to Fit Min. Effective Device Width"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      "ENABLE(FLEXIBLE_VIEW_SCALE_FACTOR)": true
      default: false
    WebCore:
      default: false

AuxclickEventEnabled:
  type: bool
  status: stable
  category: dom
  humanReadableName: "Enable `auxclick` event"
  humanReadableDescription: "Enable the `auxclick` UI event"
  defaultValue:
    WebKitLegacy:
      default: true
    WebKit:
      default: true
    WebCore:
      default: true

AzimuthAngleEnabled:
  type: bool
  status: stable
  category: dom
  humanReadableName: "azimuthAngle PointerEvent Property"
  humanReadableDescription: "Enable the `azimuthAngle` property of the PointerEvents API"
  defaultValue:
    WebKitLegacy:
     default: false
    WebKit:
      "PLATFORM(COCOA)": true
      default: false
    WebCore:
      "PLATFORM(COCOA)": true
      default: false

BackgroundFetchAPIEnabled:
  type: bool
  status: testable
  category: networking
  humanReadableName: "Enable background-fetch API"
  humanReadableDescription: "Enable background-fetch API"
  exposed: [ WebKit ]
  defaultValue:
    WebCore:
      default: false
    WebKit:
      default: false
  sharedPreferenceForWebProcess: true

BackgroundWebContentRunningBoardThrottlingEnabled:
  type: bool
  status: unstable
  category: networking
  humanReadableName: "Enable background web content throttling via RunningBoard"
  humanReadableDescription: "Enable background web content throttling via RunningBoard"
  exposed: [ WebKit ]
  condition: PLATFORM(MAC) && USE(RUNNINGBOARD)
  defaultValue:
    WebCore:
      default: false
    WebKitLegacy:
      default: false
    WebKit:
      default: WebKit::defaultRunningBoardThrottlingEnabled()

BackspaceKeyNavigationEnabled:
  type: bool
  status: embedder
  defaultValue:
    WebKitLegacy:
      "PLATFORM(IOS_FAMILY)": false
      default: true
    WebKit:
      "PLATFORM(IOS_FAMILY)": false
      default: true
    WebCore:
      default: true

# FIXME: This is on by default in WebKit2. Perhaps we should consider turning it on for WebKitLegacy as well.
BeaconAPIEnabled:
  type: bool
  status: mature
  humanReadableName: "Beacon API"
  humanReadableDescription: "Beacon API"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: true
    WebCore:
      default: false

BidiContentAwarePasteEnabled:
  type: bool
  status: internal
  humanReadableName: "Bidi Content Aware Paste"
  humanReadableDescription: "Bidi content aware paste"
  defaultValue:
    WebKit:
      "PLATFORM(IOS_FAMILY)": WebKit::defaultBidiContentAwarePasteEnabled()
      default: false
    WebKitLegacy:
      default: false
    WebCore:
      default: false

BlobFileAccessEnforcementEnabled:
  type: bool
  status: embedder
  category: security
  humanReadableName: "Enforce blob backed file access valid for web process"
  humanReadableDescription: "Validate file backed blobs were created by the correct web process"
  sharedPreferenceForWebProcess: true
  defaultValue:
    WebKitLegacy:
      "PLATFORM(COCOA)": true
      default: false
    WebKit:
      "PLATFORM(COCOA)": true
      default: false
    WebCore:
      "PLATFORM(COCOA)": true
      default: false

BlockFontServiceInWebContentSandbox:
  type: bool
  status: internal
  category: networking
  humanReadableName: "Block Font service in the WebContent sandbox"
  humanReadableDescription: "Block Font service in the WebContent sandbox"
  webcoreBinding: none
  condition: HAVE(SANDBOX_STATE_FLAGS) && PLATFORM(MAC)
  exposed: [ WebKit ]
  defaultValue:
    WebKit:
      "ENABLE(REMOVE_XPC_AND_MACH_SANDBOX_EXTENSIONS_IN_WEBCONTENT)": true
      default: false

BlockIOKitInWebContentSandbox:
  type: bool
  status: internal
  category: networking
  humanReadableName: "IOKit blocking in the WebContent sandbox"
  humanReadableDescription: "Block IOKit access in the WebContent sandbox"
  webcoreBinding: none
  condition: HAVE(SANDBOX_STATE_FLAGS)
  exposed: [ WebKit ]
  defaultValue:
    WebKit:
      default: true

BlockIconServicesInWebContentSandbox:
  type: bool
  status: internal
  category: networking
  humanReadableName: "Block Icon services in the WebContent sandbox"
  humanReadableDescription: "Block Icon services in the WebContent sandbox"
  webcoreBinding: none
  condition: HAVE(SANDBOX_STATE_FLAGS) && PLATFORM(MAC)
  exposed: [ WebKit ]
  defaultValue:
    WebKit:
      "ENABLE(REMOVE_XPC_AND_MACH_SANDBOX_EXTENSIONS_IN_WEBCONTENT)": true
      default: false

BlockMediaLayerRehostingInWebContentProcess:
  type: bool
  status: internal
  category: media
  humanReadableName: "GPU Process: Block Media Layer Re-hosting"
  humanReadableDescription: "GPU Process: Block Media Layer Re-hosting in WebContent process"
  condition: ENABLE(GPU_PROCESS)
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: true
    WebCore:
      default: false

BlockMobileAssetInWebContentSandbox:
  type: bool
  status: internal
  category: networking
  humanReadableName: "Block MobileAsset service in the WebContent sandbox"
  humanReadableDescription: "Block MobileAsset service in the WebContent sandbox"
  webcoreBinding: none
  condition: HAVE(SANDBOX_STATE_FLAGS)
  exposed: [ WebKit ]
  defaultValue:
    WebKit:
      "ENABLE(REMOVE_XPC_AND_MACH_SANDBOX_EXTENSIONS_IN_WEBCONTENT)": true
      default: false

BlockMobileGestaltInWebContentSandbox:
  type: bool
  status: internal
  category: networking
  humanReadableName: "Block MobileGestalt service in the WebContent sandbox"
  humanReadableDescription: "Block MobileGestalt service in the WebContent sandbox"
  webcoreBinding: none
  condition: HAVE(SANDBOX_STATE_FLAGS) && PLATFORM(IOS)
  exposed: [ WebKit ]
  defaultValue:
    WebKit:
      "ENABLE(REMOVE_XPC_AND_MACH_SANDBOX_EXTENSIONS_IN_WEBCONTENT)": true
      default: false

BlockOpenDirectoryInWebContentSandbox:
  type: bool
  status: internal
  category: networking
  humanReadableName: "Block OpenDirectory service in the WebContent sandbox"
  humanReadableDescription: "Block OpenDirectory service in the WebContent sandbox"
  webcoreBinding: none
  condition: HAVE(SANDBOX_STATE_FLAGS) && PLATFORM(MAC)
  exposed: [ WebKit ]
  defaultValue:
    WebKit:
      "ENABLE(REMOVE_XPC_AND_MACH_SANDBOX_EXTENSIONS_IN_WEBCONTENT)": true
      default: false

BlockWebInspectorInWebContentSandbox:
  type: bool
  status: internal
  category: networking
  humanReadableName: "Block WebInspector service in the WebContent sandbox"
  humanReadableDescription: "Block WebInspector service in the WebContent sandbox"
  webcoreBinding: none
  condition: HAVE(SANDBOX_STATE_FLAGS)
  exposed: [ WebKit ]
  defaultValue:
    WebKit:
      default: false

# We would have to partition BroadcastChannel based on PageGroups if we wanted to enable this for WebKitLegacy.
BroadcastChannelEnabled:
  type: bool
  status: stable
  category: dom
  humanReadableName: "BroadcastChannel API"
  humanReadableDescription: "BroadcastChannel API"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: true
    WebCore:
      default: true
  sharedPreferenceForWebProcess: true

BuiltInNotificationsEnabled:
  type: bool
  status: unstable
  category: dom
  humanReadableName: "Built-In Web Notifications"
  humanReadableDescription: "Enable built-in WebKit managed notifications"
  webcoreBinding: DeprecatedGlobalSettings
  condition: ENABLE(WEB_PUSH_NOTIFICATIONS)
  defaultValue:
    WebCore:
      default: false
    WebKit:
      default: defaultBuiltInNotificationsEnabled()
  sharedPreferenceForWebProcess: true

CFNetworkNetworkLoaderEnabled:
  type: bool
  status: testable
  category: networking
  humanReadableName: "Enable experimental network loader"
  humanReadableDescription: "Enable experimental network loader"
  webcoreBinding: none
  condition: HAVE(NETWORK_LOADER)
  exposed: [ WebKit ]
  defaultValue:
    WebKit:
      default: false

CSS3DTransformBackfaceVisibilityInteroperabilityEnabled:
  type: bool
  status: preview
  category: css
  humanReadableName: "CSS 3D Transform Interoperability for backface-visibility"
  humanReadableDescription: "Enable 3D transform behavior for backface-visibility that is specification-compliant but backwards incompatible"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

CSSAnchorPositioningEnabled:
  type: bool
  status: stable
  category: css
  humanReadableName: "CSS Anchor Positioning"
  humanReadableDescription: "Enable CSS Anchor Positioning (except position-visibility)"
  defaultValue:
    WebKitLegacy:
      default: true
    WebKit:
      default: true
    WebCore:
      default: true

CSSAnchorPositioningPositionVisibilityEnabled:
  type: bool
  status: testable
  category: css
  humanReadableName: "CSS Anchor Positioning: position-visibility"
  humanReadableDescription: "Enable position-visibility specified in CSS Anchor Positioning"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

CSSAppearanceBaseEnabled:
  type: bool
  status: testable
  category: css
  humanReadableName: "CSS appearance: base"
  humanReadableDescription: "Enable base value for CSS appearance"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

CSSAxisRelativePositionKeywordsEnabled:
  type: bool
  category: css
  status: stable
  humanReadableName: "CSS axis relative keywords in <position>"
  humanReadableDescription: "Enable support for CSS Values and Units Module Level 5 axis relative keywords in <position>"
  defaultValue:
    WebKitLegacy:
      default: true
    WebKit:
      default: true
    WebCore:
      default: true

CSSBackgroundClipBorderAreaEnabled:
  type: bool
  status: stable
  category: css
  humanReadableName: "CSS background-clip: border-area"
  humanReadableDescription: "Enable the border-area value for background-clip"
  defaultValue:
    WebKitLegacy:
      default: true
    WebKit:
      default: true
    WebCore:
      default: true

CSSColorLayersEnabled:
  type: bool
  category: css
  status: preview
  humanReadableName: "CSS color-layers()"
  humanReadableDescription: "Enable support for CSS color-layers()"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

CSSConstrainedDynamicRangeLimitEnabled:
  type: bool
  category: css
  status: testable
  humanReadableName: "CSS dynamic-range-limit: constrained"
  humanReadableDescription: "Enable support for CSS dynamic-range-limit value constrained"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

CSSContrastColorEnabled:
  type: bool
  category: css
  status: stable
  humanReadableName: "CSS contrast-color()"
  humanReadableDescription: "Enable support for CSS Color Module Level 5 contrast-color()"
  defaultValue:
    WebKitLegacy:
      default: true
    WebKit:
      default: true
    WebCore:
      default: true

CSSCornerShapeEnabled:
  type: bool
  category: css
  status: testable
  humanReadableName: "CSS corner-shape property"
  humanReadableDescription: "Enable support for CSS corner-shape property"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

CSSCounterStyleAtRuleImageSymbolsEnabled:
  type: bool
  status: testable
  category: css
  humanReadableName: "CSS @counter-style <image> symbols"
  humanReadableDescription: "Enable support for <image> symbols in CSS @counter-style rules"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

CSSDPropertyEnabled:
  type: bool
  status: preview
  category: css
  humanReadableName: "CSS d property"
  humanReadableDescription: "Enable support for the CSS d property and SVG d presentation attribute"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

CSSDynamicRangeLimitMixEnabled:
  type: bool
  category: css
  status: testable
  humanReadableName: "CSS dynamic-range-limit-mix()"
  humanReadableDescription: "Enable support for CSS dynamic-range-limit-mix(), but animation stays unsupported"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

CSSFieldSizingEnabled:
  type: bool
  status: preview
  category: css
  humanReadableName: "CSS field-sizing property"
  humanReadableDescription: "Enable field-sizing CSS property"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

CSSFontVariantEmojiEnabled:
  type: bool
  status: testable
  category: css
  humanReadableName: "CSS font-variant-emoji property"
  humanReadableDescription: "Enable the font-variant-emoji CSS property"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      "PLATFORM(GTK) || PLATFORM(WPE)": true
      default: false
    WebCore:
      default: false

CSSInputSecurityEnabled:
  type: bool
  status: testable
  category: css
  humanReadableName: "CSS Input Security"
  humanReadableDescription: "Enable input-security CSS property"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

CSSLineClampEnabled:
  type: bool
  status: preview
  category: css
  humanReadableName: "CSS line-clamp"
  humanReadableDescription: "Enable CSS line-clamp"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

CSSLineFitEdgeEnabled:
  type: bool
  status: unstable
  category: css
  humanReadableName: "CSS line-fit-edge"
  humanReadableDescription: "Enable CSS line-fit-edge"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

CSSPaintingAPIEnabled:
  type: bool
  status: testable
  category: css
  humanReadableName: "CSS Painting API"
  humanReadableDescription: "Enable the CSS Painting API"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      "ENABLE(EXPERIMENTAL_FEATURES)": true
      default: false
    WebCore:
      default: false

CSSProgressFunctionEnabled:
  type: bool
  category: css
  status: stable
  humanReadableName: "CSS progress()"
  humanReadableDescription: "Enable support for CSS Values and Units Module Level 5 progress()"
  defaultValue:
    WebKitLegacy:
      default: true
    WebKit:
      default: true
    WebCore:
      default: true

CSSRandomFunctionEnabled:
  type: bool
  category: css
  status: preview
  humanReadableName: "CSS random()"
  humanReadableDescription: "Enable support for CSS Values and Units Module Level 5 random()"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

CSSRhythmicSizingEnabled:
  type: bool
  status: testable
  category: css
  humanReadableName: "CSS Rhythmic Sizing"
  humanReadableDescription: "Enable CSS Rhythmic Sizing properties"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

CSSRubyAlignEnabled:
  type: bool
  status: stable
  category: css
  humanReadableName: "CSS ruby-align property"
  humanReadableDescription: "Enable ruby-align"
  defaultValue:
    WebKitLegacy:
      default: true
    WebKit:
      default: true
    WebCore:
      default: true

CSSRubyOverhangEnabled:
  type: bool
  status: stable
  category: css
  humanReadableName: "CSS ruby-overhang property"
  humanReadableDescription: "Enable ruby-overhang"
  defaultValue:
    WebKitLegacy:
      default: true
    WebKit:
      default: true
    WebCore:
      default: true

CSSScrollAnchoringEnabled:
  type: bool
  status: testable
  category: css
  humanReadableName: "CSS Scroll Anchoring"
  humanReadableDescription: "Enable CSS Scroll Anchoring"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

CSSScrollbarColorEnabled:
  type: bool
  status: testable
  category: css
  humanReadableName: "CSS scrollbar-color property"
  humanReadableDescription: "Enable scrollbar-color CSS property"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

CSSScrollbarGutterEnabled:
  type: bool
  status: stable
  category: css
  humanReadableName: "CSS scrollbar-gutter property"
  humanReadableDescription: "Enable scrollbar-gutter CSS property"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: true
    WebCore:
      default: true

CSSScrollbarWidthEnabled:
  type: bool
  status: stable
  category: css
  humanReadableName: "CSS scrollbar-width property"
  humanReadableDescription: "Enable scrollbar-width CSS property"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: true
    WebCore:
      default: true

CSSShapeFunctionEnabled:
  type: bool
  status: stable
  category: css
  humanReadableName: "CSS shape() function"
  humanReadableDescription: "Enable the CSS shape() function"
  defaultValue:
    WebKitLegacy:
      default: true
    WebKit:
      default: true
    WebCore:
      default: true

CSSTextAutospaceEnabled:
  type: bool
  status: stable
  category: css
  humanReadableName: "CSS text-autospace property"
  humanReadableDescription: "Enable the property text-autospace, defined in CSS Text 4"
  defaultValue:
    WebKitLegacy:
      default: true
    WebKit:
      default: true
    WebCore:
      default: true

CSSTextBoxTrimEnabled:
  type: bool
  status: stable
  category: css
  humanReadableName: "CSS text-box-trim property"
  humanReadableDescription: "Enable text-box-trim"
  defaultValue:
    WebKitLegacy:
      default: true
    WebKit:
      default: true
    WebCore:
      default: true

CSSTextGroupAlignEnabled:
  type: bool
  status: testable
  category: css
  humanReadableName: "CSS text-group-align property"
  humanReadableDescription: "Enable text-group-align CSS property"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

CSSTextJustifyEnabled:
  type: bool
  status: testable
  category: css
  humanReadableName: "CSS text-justify property"
  humanReadableDescription: "Enable the property text-justify, defined in CSS Text 3"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

CSSTextSpacingTrimEnabled:
  type: bool
  status: testable
  category: css
  humanReadableName: "CSS text-spacing-trim property"
  humanReadableDescription: "Enable the property text-spacing-trim, defined in CSS Text 4"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

CSSTextUnderlinePositionLeftRightEnabled:
  type: bool
  status: stable
  category: css
  humanReadableName: "CSS text-underline-position: left right"
  humanReadableDescription: "Enable the property text-underline-position left and right value support"
  defaultValue:
    WebKitLegacy:
      default: true
    WebKit:
      default: true
    WebCore:
      default: true
      
CSSTextWrapPrettyEnabled:
   type: bool
   status: stable
   category: css
   humanReadableName: "CSS text-wrap: pretty"
   humanReadableDescription: "Enable the pretty value for text-wrap-style"
   defaultValue:
     WebKitLegacy:
       default: true
     WebKit:
       default: true
     WebCore:
       default: true

CSSTransformStyleSeparatedEnabled:
  type: bool
  status: testable
  category: css
  humanReadableName: "CSS transform-style: separated"
  humanReadableDescription: "Enable transform-style: separated property to access the separated graphics layer"
  condition: HAVE(CORE_ANIMATION_SEPARATED_LAYERS)
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

CSSTreeCountingFunctionsEnabled:
  type: bool
  category: css
  status: stable
  humanReadableName: "CSS Tree Counting Functions"
  humanReadableDescription: "Enable support for CSS Values and Units Module Level 5 tree counting functions sibling-count() and sibling-index()"
  defaultValue:
    WebKitLegacy:
      default: true
    WebKit:
      default: true
    WebCore:
      default: true

CSSTypedOMColorEnabled:
  type: bool
  status: testable
  category: css
  humanReadableName: "CSS Typed OM: Color Support"
  humanReadableDescription: "Enable the CSS Typed OM Color support"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

CSSURLIntegrityModifierEnabled:
  type: bool
  status: testable
  category: css
  humanReadableName: "CSS URL Modifiers: integrity()"
  humanReadableDescription: "Enable support for CSS Values and Units Module Level 5 URL integrity() modifier"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

CSSURLModifiersEnabled:
  type: bool
  status: stable
  category: css
  humanReadableName: "CSS URL Modifiers"
  humanReadableDescription: "Enable support for CSS Values and Units Module Level 5 URL modifiers"
  defaultValue:
    WebKitLegacy:
      default: true
    WebKit:
      default: true
    WebCore:
      default: true

CSSUnprefixedBackdropFilterEnabled:
  type: bool
  status: Backdropfilter_feature_status
  category: css
  humanReadableName: "CSS Unprefixed Backdrop Filter"
  humanReadableDescription: "Enable unprefixed backdrop-filter CSS property"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      "ENABLE(UNPREFIXED_BACKDROP_FILTER)": true
      default: false
    WebCore:
      "ENABLE(UNPREFIXED_BACKDROP_FILTER)": true
      default: false

CSSWordBreakAutoPhraseEnabled:
  type: bool
  status: testable
  category: css
  webcoreOnChange: setNeedsRecalcStyleInAllFrames
  humanReadableName: "word-break: auto-phrase enabled"
  humanReadableDescription: "Enables the auto-phrase value of the word-break CSS property"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

# FIXME: This is not relevent for WebKitLegacy, so should be excluded from WebKitLegacy entirely (though we should still set the default value to false when initializing settings).
CacheAPIEnabled:
  type: bool
  status: embedder
  humanReadableName: "Cache API"
  humanReadableDescription: "Cache API"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: true
    WebCore:
      default: false
  disableInLockdownMode: true

CanvasColorSpaceEnabled:
  type: bool
  status: stable
  category: dom
  humanReadableName: "Canvas Color Spaces"
  humanReadableDescription: "Enable use of predefined canvas color spaces"
  defaultValue:
    WebKitLegacy:
      "PLATFORM(COCOA)": true
      default: false
    WebKit:
      "PLATFORM(COCOA)": true
      default: false
    WebCore:
      default: false

CanvasFiltersEnabled:
  type: bool
  status: testable
  category: dom
  webcoreOnChange: setNeedsRelayoutAllFrames
  humanReadableName: "Canvas Filters"
  humanReadableDescription: "Canvas Filters"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

CanvasFingerprintingQuirkEnabled:
  type: bool
  status: stable
  category: dom
  humanReadableName: "Enable Canvas fingerprinting-related quirk"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: true
    WebCore:
      default: true

CanvasLayersEnabled:
  type: bool
  status: testable
  category: dom
  humanReadableName: "Canvas Layers"
  humanReadableDescription: "Enable Canvas Layers"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

CanvasPixelFormatEnabled:
  type: bool
  status: unstable
  category: dom
  humanReadableName: "CanvasRenderingContext2DSettings.pixelFormat"
  humanReadableDescription: "Allow different pixel formats in 2D canvas"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false
  disableInLockdownMode: true
  sharedPreferenceForWebProcess: true

CanvasUsesAcceleratedDrawing:
  type: bool
  status: embedder
  humanReadableName: "Canvas uses accelerated drawing"
  condition: USE(CA) || USE(SKIA)
  defaultValue:
    WebKitLegacy:
      "PLATFORM(IOS_FAMILY) && !PLATFORM(IOS_FAMILY_SIMULATOR)": true
      default: false
    WebKit:
      default: true
    WebCore:
      default: false

CaptureAudioInGPUProcessEnabled:
  type: bool
  status: internal
  category: media
  humanReadableName: "GPU Process: Audio Capture"
  humanReadableDescription: "Enable audio capture in GPU Process"
  webcoreBinding: none
  condition: ENABLE(MEDIA_STREAM)
  exposed: [ WebKit ]
  defaultValue:
    WebKit:
      default: WebKit::defaultCaptureAudioInGPUProcessEnabled()

CaptureVideoInGPUProcessEnabled:
  type: bool
  status: internal
  category: media
  humanReadableName: "GPU Process: Video Capture"
  humanReadableDescription: "Enable video capture in GPU Process"
  webcoreBinding: none
  condition: ENABLE(MEDIA_STREAM)
  exposed: [ WebKit ]
  defaultValue:
    WebKit:
      "ENABLE(GPU_PROCESS_BY_DEFAULT)": true
      default: false

CaretBrowsingEnabled:
  type: bool
  status: embedder
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

CaretPositionFromPointEnabled:
  type: bool
  status: testable
  category: dom
  humanReadableName: "document.caretPositionFromPoint() API"
  humanReadableDescription: "Enable document.caretPositionFromPoint() API"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

ChildProcessDebuggabilityEnabled:
  comment: Disables GPU process IPC timeouts
  type: bool
  status: internal
  humanReadableName: "Child Process Debuggability"
  humanReadableDescription: "Enable stopping child processes with a debugger"
  exposed: [ WebKit ]
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

ClearSiteDataExecutionContextsSupportEnabled:
  type: bool
  status: testable
  category: networking
  humanReadableName: "Clear-Site-Data: 'executionContexts' support"
  humanReadableDescription: "Enable Clear-Site-Data: 'executionContexts' support"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

ClearSiteDataHTTPHeaderEnabled:
  type: bool
  status: stable
  category: networking
  humanReadableName: "Clear-Site-Data HTTP Header"
  humanReadableDescription: "Enable Clear-Site-Data HTTP Header support"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: true
    WebCore:
      default: false

CloseWatcherEnabled:
  type: bool
  status: testable
  category: html
  humanReadableName: "Close Watcher API"
  humanReadableDescription: "Enable Close Watcher API"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

ColorFilterEnabled:
  type: bool
  status: embedder
  webcoreOnChange: setNeedsRecalcStyleInAllFrames
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

CommandAttributesEnabled:
  type: bool
  status: preview
  category: html
  humanReadableName: "HTML command & commandfor attributes"
  humanReadableDescription: "Enable HTML command & commandfor attribute support"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

# FIXME: WebKit has an alternate name for this called 'ShowDebugBorders'. We should standardize on one name.
CompositingBordersVisible:
  type: bool
  status: internal
  defaultsOverridable: true
  humanReadableName: "Compositing borders visible"
  webKitLegacyPreferenceKey: WebKitShowDebugBorders
  webcoreName: showDebugBorders
  webcoreOnChange: setNeedsRecalcStyleInAllFrames
  inspectorOverride: true
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

# FIXME: WebKit has an alternate name for this called 'ShowRepaintCounter'. We should standardize on one name.
CompositingRepaintCountersVisible:
  type: bool
  status: internal
  defaultsOverridable: true
  humanReadableName: "Compositing repaint counters visible"
  webKitLegacyPreferenceKey: WebKitShowRepaintCounter
  webcoreName: showRepaintCounter
  webcoreOnChange: setNeedsRecalcStyleInAllFrames
  inspectorOverride: true
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

CompressionStreamEnabled:
  type: bool
  status: stable
  category: dom
  humanReadableName: "Compression Stream API"
  humanReadableDescription: "Enable Compression Stream API"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: true
    WebCore:
      default: false

ContactPickerAPIEnabled:
  type: bool
  status: testable
  category: dom
  humanReadableName: "Contact Picker API"
  humanReadableDescription: "Enable the Contact Picker API"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false
  sharedPreferenceForWebProcess: true

ContentChangeObserverEnabled:
  type: bool
  status: embedder
  condition: ENABLE(CONTENT_CHANGE_OBSERVER)
  defaultValue:
    WebKitLegacy:
      default: true
    WebKit:
      default: true
    WebCore:
      "PLATFORM(IOS_FAMILY) && !PLATFORM(MACCATALYST)": true
      default: false

ContentDispositionAttachmentSandboxEnabled:
  comment: 'Some ports (e.g. iOS) might choose to display attachments inline, regardless
    of whether the response includes the HTTP header \"Content-Disposition: attachment\".
    This setting enables a sandbox around these attachments. The sandbox enforces
    all frame sandbox flags (see enum SandboxFlag in SecurityContext.h), and also
    disables <meta http-equiv> processing and subframe loading.'
  type: bool
  status: embedder
  defaultValue:
    WebKitLegacy:
      default: true
    WebKit:
      PLATFORM(COCOA): true
      default: false
    WebCore:
      default: false

ContentInsetBackgroundFillEnabled:
  type: bool
  status: internal
  humanReadableName: "Content Inset Background Fill"
  humanReadableDescription: "Fill content insets with background colors"
  defaultValue:
    WebKit:
      default: WebKit::defaultContentInsetBackgroundFillEnabled()
    WebKitLegacy:
      default: false
    WebCore:
      default: false

ContextMenuQRCodeDetectionEnabled:
  type: bool
  status: embedder
  condition: ENABLE(CONTEXT_MENU_QR_CODE_DETECTION)
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

CookieConsentAPIEnabled:
  type: bool
  status: unstable
  category: dom
  humanReadableName: "Cookie Consent API"
  humanReadableDescription: "Enable cookie consent API"
  exposed: [ WebKit ]
  defaultValue:
    WebCore:
      default: false
    WebKitLegacy:
      default: false
    WebKit:
      default: false
  sharedPreferenceForWebProcess: true

# FIXME: This is handled via WebView SPI rather than WebPreferences for WebKitLegacy. We should change the SPI to lookup the WebPreferences value instead.
CookieEnabled:
  type: bool
  status: embedder
  humanReadableName: "Cookies Enabled"
  webKitLegacyBinding: custom
  defaultValue:
    WebKit:
      default: true
    WebKitLegacy:
      default: true
    WebCore:
      default: true

CookieStoreAPIEnabled:
  type: bool
  category: dom
  status: stable
  humanReadableName: "Cookie Store API"
  humanReadableDescription: "Enable Cookie Store API"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: defaultCookieStoreAPIEnabled()
    WebCore:
      default: true

CookieStoreAPIExtendedAttributesEnabled:
  type: bool
  category: dom
  status: testable
  humanReadableName: "Cookie Store API Extended Attributes"
  humanReadableDescription: "Enable Extended Attributes of the Cookie Store API"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

CookieStoreManagerEnabled:
  type: bool
  category: dom
  status: testable
  humanReadableName: "Cookie Store API CookieStoreManager"
  humanReadableDescription: "Enable Cookie Store API CookieStoreManager which controls cookie change subscriptions for Service Workers"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false
  sharedPreferenceForWebProcess: true

CoreMathMLEnabled:
  type: bool
  status: unstable
  category: dom
  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

CrossDocumentViewTransitionsEnabled:
  type: bool
  status: stable
  category: css
  humanReadableName: "Cross document view-transitions"
  humanReadableDescription: "Enable support for view-transitions cross-document"
  defaultValue:
    WebKitLegacy:
      default: true
    WebKit:
      default: true
    WebCore:
      default: true

CrossOriginEmbedderPolicyEnabled:
  type: bool
  status: stable
  category: security
  humanReadableName: "Cross-Origin-Embedder-Policy (COEP) header"
  humanReadableDescription: "Support for Cross-Origin-Embedder-Policy (COEP) header"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: true
    WebCore:
      default: false

CrossOriginOpenerPolicyEnabled:
  type: bool
  status: stable
  category: security
  humanReadableName: "Cross-Origin-Opener-Policy (COOP) header"
  humanReadableDescription: "Support for Cross-Origin-Opener-Policy (COOP) header"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: true
    WebCore:
      default: false

CursiveFontFamily:
  type: String
  status: embedder
  webKitLegacyPreferenceKey: WebKitCursiveFont
  webcoreImplementation: custom
  defaultValue:
    WebKitLegacy:
      "PLATFORM(IOS_FAMILY)": '"Snell Roundhand"_str'
      default: '"Apple Chancery"_str'
    WebKit:
      "PLATFORM(COCOA) && PLATFORM(IOS_FAMILY)": '"Snell Roundhand"_str'
      "PLATFORM(COCOA) && !PLATFORM(IOS_FAMILY)": '"Apple Chancery"_str'
      default: '"Comic Sans MS"_str'
    WebCore:
      default: '""_str'

CustomPasteboardDataEnabled:
  type: bool
  status: embedder
  humanReadableName: "Custom pasteboard data"
  humanReadableDescription: "Enable custom clipboard types and better security model for clipboard API."
  webcoreBinding: DeprecatedGlobalSettings
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      "PLATFORM(COCOA) || PLATFORM(GTK) || PLATFORM(WPE) || PLATFORM(WIN)": true
      default: false

DOMAudioSessionEnabled:
  type: bool
  status: mature
  category: media
  humanReadableName: "AudioSession API"
  humanReadableDescription: "Enable AudioSession API"
  condition: ENABLE(DOM_AUDIO_SESSION)
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: true
    WebCore:
      default: true

DOMAudioSessionFullEnabled:
  type: bool
  status: testable
  category: media
  humanReadableName: "AudioSession full API"
  humanReadableDescription: "Enable AudioSession full API"
  condition: ENABLE(DOM_AUDIO_SESSION)
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

DOMPasteAccessRequestsEnabled:
  type: bool
  status: internal
  category: dom
  humanReadableName: "DOM Paste Access Requests"
  humanReadableDescription: "Enable DOM Paste Access Requests"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      "PLATFORM(IOS) || PLATFORM(MAC) || PLATFORM(GTK) || PLATFORM(WPE) || PLATFORM(VISION)": true
      default: false
    WebCore:
      default: false

DOMPasteAllowed:
  type: bool
  status: embedder
  webKitLegacyPreferenceKey: WebKitDOMPasteAllowedPreferenceKey
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

DOMTestingAPIsEnabled:
  type: bool
  status: internal
  category: dom
  humanReadableName: "Additional Testing APIs for DOM Objects"
  humanReadableDescription: "Enable additional testing APIs for DOM objects"
  defaultValue:
    WebCore:
      default: false
    WebKit:
      default: false
    WebKitLegacy:
      default: false

DOMTimersThrottlingEnabled:
  type: bool
  status: embedder
  humanReadableName: "DOM timer throttling enabled"
  webKitLegacyPreferenceKey: WebKitDOMTimersThrottlingEnabledPreferenceKey
  defaultValue:
    WebKitLegacy:
      default: true
    WebKit:
      default: true
    WebCore:
      default: true

DataDetectorTypes:
  type: uint32_t
  refinedType: WebCore::DataDetectorType
  status: embedder
  condition: ENABLE(DATA_DETECTION)
  defaultValue:
    WebKitLegacy:
      default: static_cast<DataDetectorType>(0)
    WebKit:
      default: static_cast<DataDetectorType>(0)
    WebCore:
      default: static_cast<DataDetectorType>(0)

# FIXME: This is on by default in WebKit2 (for everything but WatchOS). Perhaps we should consider turning it on for WebKitLegacy as well.
DataListElementEnabled:
  type: bool
  status: mature
  humanReadableName: "DataList Element"
  humanReadableDescription: "Enable datalist elements"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      "(PLATFORM(COCOA) && !PLATFORM(WATCHOS)) || PLATFORM(GTK)": true
      default: false
    WebCore:
      "(PLATFORM(COCOA) && !PLATFORM(WATCHOS)) || PLATFORM(GTK)": true
      default: false
  sharedPreferenceForWebProcess: true

DataTransferItemsEnabled:
  type: bool
  status: embedder
  humanReadableName: "Data Transfer Items"
  humanReadableDescription: "Enables DataTransferItem in the clipboard API"
  defaultValue:
    WebKitLegacy:
      default: true
    WebKit:
      "PLATFORM(COCOA) || PLATFORM(GTK) || PLATFORM(WPE)": true
      default: false
    WebCore:
      default: false

DatabasesEnabled:
  type: bool
  status: embedder
  webKitLegacyPreferenceKey: WebKitDatabasesEnabledPreferenceKey
  webcoreBinding: custom
  defaultValue:
    WebKitLegacy:
      default: true
    WebKit:
      default: true

# FIXME: This is on by default in WebKit2 (for macOS at least). Perhaps we should consider turning it on for WebKitLegacy as well.
DateTimeInputsEditableComponentsEnabled:
  type: bool
  status: embedder
  humanReadableName: "Date/Time inputs have editable components"
  humanReadableDescription: "Enable multiple editable components in date/time inputs"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      "PLATFORM(MAC) || PLATFORM(GTK)": true
      default: false
    WebCore:
      default: false

DeclarativeWebPush:
  type: bool
  status: stable
  category: dom
  defaultsOverridable: true
  condition: ENABLE(DECLARATIVE_WEB_PUSH)
  humanReadableName: "Declarative Web Push"
  humanReadableDescription: "Enable Declarative Web Push"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: true
    WebCore:
      default: false

DefaultFixedFontSize:
  type: double
  status: embedder
  webcoreOnChange: setNeedsRecalcStyleInAllFrames
  defaultValue:
    WebKitLegacy:
      default: 13
    WebKit:
      default: 13
    WebCore:
      default: 13

DefaultFontSize:
  type: double
  status: embedder
  webcoreOnChange: setNeedsRecalcStyleInAllFrames
  defaultValue:
    WebKitLegacy:
      default: 16
    WebKit:
      default: 16
    WebCore:
      default: 16

DefaultTextEncodingName:
  type: String
  status: embedder
  defaultValue:
    WebKitLegacy:
      default: '"ISO-8859-1"_str'
    WebKit:
      default: PAL::defaultTextEncodingNameForSystemLanguage()
    WebCore:
      default: '{ }'

DeprecationReportingEnabled:
  type: bool
  status: testable
  category: dom
  humanReadableName: "Deprecation Reporting"
  humanReadableDescription: "Enable Deprecation Reporting"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

DetachableMediaSourceEnabled:
  type: bool
  status: developer
  category: media
  humanReadableName: "Detachable Media Source"
  humanReadableDescription: "Detachable Media Source API"
  condition: ENABLE(MEDIA_SOURCE)
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

DetailsAutoExpandEnabled:
  type: bool
  status: stable
  category: html
  humanReadableName: "HTML auto-expanding <details>"
  humanReadableDescription: "Enable HTML auto-expanding <details>"
  defaultValue:
    WebKitLegacy:
      default: true
    WebKit:
      default: true
    WebCore:
      default: true

DeveloperExtrasEnabled:
  type: bool
  status: embedder
  defaultsOverridable: true
  webKitLegacyPreferenceKey: WebKitDeveloperExtrasEnabledPreferenceKey
  webKitLegacyBinding: custom
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

DeviceHeight:
  type: uint32_t
  status: embedder
  defaultValue:
    WebKitLegacy:
      default: 0
    WebKit:
      default: 0
    WebCore:
      default: 0

DeviceOrientationEventEnabled:
  type: bool
  status: embedder
  condition: ENABLE(DEVICE_ORIENTATION)
  defaultValue:
    WebKitLegacy:
      default: true
    WebKit:
      default: true
    WebCore:
      default: true
  sharedPreferenceForWebProcess: true
  richJavaScript: true


DeviceOrientationPermissionAPIEnabled:
  type: bool
  status: embedder
  condition: ENABLE(DEVICE_ORIENTATION)
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: defaultDeviceOrientationPermissionAPIEnabled()
    WebCore:
      default: false
  sharedPreferenceForWebProcess: true

DeviceWidth:
  type: uint32_t
  status: embedder
  defaultValue:
    WebKitLegacy:
      default: 0
    WebKit:
      default: 0
    WebCore:
      default: 0
      
DevolvableWidgetsEnabled:
  type: bool
  status: stable
  category: css
  humanReadableName: "CSS Devolvable Widgets"
  humanReadableDescription: "Enable support for devolvable widgets"
  defaultValue:
    WebKitLegacy:
      default: true
    WebKit:
      default: true
    WebCore:
      default: true

DiagnosticLoggingEnabled:
  type: bool
  status: embedder
  humanReadableName: "Diagnostic logging enabled"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

DigitalCredentialsEnabled:
  type: bool
  status: stable
  category: dom
  humanReadableName: "Digital Credentials API"
  humanReadableDescription: "Enable the Digital Credentials API"
  condition: ENABLE(WEB_AUTHN)
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: WebKit::defaultDigitalCredentialsEnabled()
    WebCore:
      default: false
  sharedPreferenceForWebProcess: true
  disableInLockdownMode: true
  richJavaScript: true

DirectoryUploadEnabled:
  type: bool
  status: embedder
  humanReadableName: "Directory Upload"
  humanReadableDescription: "input.webkitdirectory / dataTransferItem.webkitGetAsEntry()"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      "PLATFORM(COCOA) || PLATFORM(GTK) || PLATFORM(WPE)": true
      default: false
    WebCore:
      default: false

# FIXME: Starting the preference name with "Disable" is inconsistent with most other preferences and should be changed.
DisableScreenSizeOverride:
  type: bool
  status: internal
  defaultsOverridable: true
  humanReadableName: "Disable screen size override"
  webcoreBinding: DeprecatedGlobalSettings
  condition: PLATFORM(IOS_FAMILY)
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

DisabledAdaptationsMetaTagEnabled:
  type: bool
  status: embedder
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      "PLATFORM(WATCHOS)": true
      default: false
    WebCore:
      default: false

# FIXME: This is on by default in WebKit2. Perhaps we should consider turning it on for WebKitLegacy as well.
DownloadAttributeEnabled:
  type: bool
  status: embedder
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: true
    WebCore:
      default: false

DynamicSiteInterventionsEnabled:
  type: bool
  status: unstable
  category: none
  humanReadableName: "Dynamic Site Interventions"
  humanReadableDescription: "Enable dynamic site interventions for broken websites"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

EditableLinkBehavior:
  type: uint32_t
  refinedType: WebCore::EditableLinkBehavior
  status: embedder
  defaultValue:
    WebKitLegacy:
      default: WebKitEditableLinkDefaultBehavior
    WebKit:
      default: WebCore::EditableLinkBehavior::NeverLive
    WebCore:
      default: EditableLinkBehavior::Default

EmbedElementEnabled:
  type: bool
  status: mature
  humanReadableName: "Embed Element"
  humanReadableDescription: "Embed Element"
  defaultValue:
    WebKitLegacy:
      default: true
    WebKit:
      default: true
    WebCore:
      default: true
  disableInLockdownMode: true

EnableAccessibilityOnDemand:
  type: bool
  status: internal
  category: networking
  humanReadableName: "Enable Accessibility On Demand"
  humanReadableDescription: "Enable Accessibility On Demand"
  webcoreBinding: none
  condition: PLATFORM(MAC)
  exposed: [ WebKit ]
  defaultValue:
    WebKit:
      "ENABLE(INITIALIZE_ACCESSIBILITY_ON_DEMAND)": true
      default: false

EnableDebuggingFeaturesInSandbox:
  type: bool
  status: internal
  category: security
  humanReadableName: "Enable debugging features in sandbox"
  humanReadableDescription: "Enable debugging features in sandbox"
  condition: HAVE(SANDBOX_STATE_FLAGS)
  defaultsOverridable: true
  webcoreBinding: none
  exposed: [ WebKit ]
  defaultValue:
    WebKit:
      default: false

EnableElementCurrentCSSZoom:
  type: bool
  status: preview
  category: dom
  humanReadableName: "Enable Element.currentCSSZoom"
  humanReadableDescription: "Enable Element.currentCSSZoom"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

EnableInheritURIQueryComponent:
  type: bool
  status: embedder
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

EnableOpaqueLoadingForMedia:
  type: bool
  status: internal
  category: media
  humanReadableName: "Opaque loading for media"
  humanReadableDescription: "Enable opaque loading for media"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: true
    WebCore:
      default: false

EncryptedMediaAPIEnabled:
  type: bool
  status: embedder
  condition: ENABLE(ENCRYPTED_MEDIA)
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      "PLATFORM(GTK) || PLATFORM(WPE)": false
      default: true
    WebCore:
      default: false
  sharedPreferenceForWebProcess: true
  mediaPlaybackRelated: true

EnterKeyHintEnabled:
  type: bool
  status: internal
  category: dom
  humanReadableName: "Enter Key Hint"
  humanReadableDescription: "Enable the enterKeyHint HTML attribute"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      "PLATFORM(COCOA)": true
      default: false
    WebCore:
      default: false

EnumeratingAllNetworkInterfacesEnabled:
  type: bool
  status: internal
  humanReadableName: "Enable Enumerating All Network Interfaces"
  webcoreBinding: none
  exposed: [ WebKit ]
  defaultValue:
    WebKit:
      default: false

EnumeratingVisibleNetworkInterfacesEnabled:
  type: bool
  status: internal
  humanReadableName: "Enable Enumerating Visible Network Interfaces"
  webcoreBinding: none
  exposed: [ WebKit ]
  defaultValue:
    WebKit:
      default: true

EventHandlerDrivenSmoothKeyboardScrollingEnabled:
  type: bool
  status: internal
  category: dom
  humanReadableName: "EventHandler driven smooth keyboard scrolling"
  humanReadableDescription: "Enable EventHandler driven smooth keyboard scrolling"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      "PLATFORM(MAC)": WebKit::defaultScrollAnimatorEnabled()
      default: false
    WebCore:
      default: false

EventTimingEnabled:
  type: bool
  status: testable
  category: dom
  humanReadableName: "Event Timing API"
  humanReadableDescription: "Enable the Event Timing API and supporting instrumentation"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

ExperimentalSandboxEnabled:
  type: bool
  status: internal
  category: security
  humanReadableName: "Enable experimental sandbox features"
  humanReadableDescription: "Enable experimental sandbox features"
  condition: HAVE(MACH_BOOTSTRAP_EXTENSION) || HAVE(SANDBOX_STATE_FLAGS)
  webcoreBinding: none
  exposed: [ WebKit ]
  defaultValue:
    WebKit:
      default: false

ExposeCaptureDevicesAfterCaptureEnabled:
  type: bool
  status: internal
  category: media
  humanReadableName: "Expose all capture devices when one is used"
  humanReadableDescription: "Expose all capture devices when one is used"
  condition: ENABLE(MEDIA_STREAM)
  defaultValue:
    WebKit:
      default: true
    WebCore:
      default: false

ExposeDefaultSpeakerAsSpecificDeviceEnabled:
  type: bool
  status: internal
  category: media
  humanReadableName: "Expose the system default speaker as a specific device"
  humanReadableDescription: "Expose the system default speaker as a specific device"
  condition: ENABLE(MEDIA_STREAM)
  defaultValue:
    WebKit:
      default: true
    WebCore:
      default: true

ExposeSpeakersEnabled:
  type: bool
  status: internal
  category: media
  humanReadableName: "Allow speaker device selection"
  humanReadableDescription: "Allow speaker device selection"
  condition: ENABLE(MEDIA_STREAM)
  defaultValue:
    WebKit:
      "PLATFORM(COCOA)": true
      default: false
    WebCore:
      default: false

ExposeSpeakersWithoutMicrophoneEnabled:
  type: bool
  status: internal
  category: media
  humanReadableName: "Allow selection of speaker device without related microphone"
  humanReadableDescription: "Allow selection of speaker device without related microphone"
  condition: ENABLE(MEDIA_STREAM)
  defaultValue:
    WebKit:
      "PLATFORM(COCOA)": true
      default: false
    WebCore:
      default: false

# FIXME: Is this implemented for WebKitLegacy? If not, this should be excluded from WebKitLegacy entirely.
ExtendedAudioDescriptionsEnabled:
  type: bool
  status: preview
  category: media
  condition: ENABLE(VIDEO)
  humanReadableName: "Audio descriptions for video - Extended"
  humanReadableDescription: "Enable extended audio descriptions for video"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

ExtensibleSSOEnabled:
  type: bool
  status: embedder
  getter: isExtensibleSSOEnabled
  webcoreBinding: none
  condition: HAVE(APP_SSO)
  exposed: [ WebKit ]
  defaultValue:
    WebKit:
      default: true

FTPDirectoryTemplatePath:
  type: String
  status: embedder
  defaultValue:
    WebKitLegacy:
      default: '""_str'
    WebKit:
      default: '""_str'
    WebCore:
      default: '""_str'

FTPEnabled:
  type: bool
  status: developer
  category: networking
  humanReadableName: "FTP support enabled"
  humanReadableDescription: "FTP support enabled"
  defaultValue:
    WebCore:
      default: false
    WebKit:
      default: false
    WebKitLegacy:
      default: false

FantasyFontFamily:
  type: String
  status: embedder
  webKitLegacyPreferenceKey: WebKitFantasyFont
  webcoreImplementation: custom
  defaultValue:
    WebKitLegacy:
      default: '"Papyrus"_str'
    WebKit:
      "PLATFORM(COCOA)": '"Papyrus"_str'
      default: '"Impact"_str'
    WebCore:
      default: '""_str'

FasterClicksEnabled:
  type: bool
  status: internal
  category: dom
  humanReadableName: "Fast clicks"
  humanReadableDescription: "Support faster clicks on zoomable pages"
  webcoreBinding: none
  condition: PLATFORM(IOS_FAMILY)
  exposed: [ WebKit ]
  defaultValue:
    WebKit:
      default: true

FileReaderAPIEnabled:
  type: bool
  status: embedder
  humanReadableName: "FileReader API"
  humanReadableDescription: "FileReader API"
  defaultValue:
    WebKitLegacy:
      default: true
    WebKit:
      default: true
    WebCore:
      default: true
  disableInLockdownMode: true

FileSystemEnabled:
  type: bool
  status: mature
  category: dom
  humanReadableName: "File System API"
  humanReadableDescription: "Enable File System API"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      "PLATFORM(COCOA)" : true
      default: false
    WebCore:
      "PLATFORM(COCOA)" : true
      default: false
  disableInLockdownMode: true
  sharedPreferenceForWebProcess: true

FileSystemWritableStreamEnabled:
  type: bool
  status: stable
  category: dom
  humanReadableName: "File System WritableStream"
  humanReadableDescription: "Enable File System WritableStream API"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      "PLATFORM(COCOA)" : true
      default: false
    WebCore:
      "PLATFORM(COCOA)" : true
      default: false
  disableInLockdownMode: true
  sharedPreferenceForWebProcess: true

FilterLinkDecorationByDefaultEnabled:
  type: bool
  status: preview
  category: networking
  humanReadableName: "Filter Link Decoration"
  humanReadableDescription: "Enable Filtering Link Decoration"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

FixedFontFamily:
  type: String
  status: embedder
  webKitLegacyPreferenceKey: WebKitFixedFont
  webcoreImplementation: custom
  defaultValue:
    WebKitLegacy:
      default: '"Courier"_str'
    WebKit:
      "PLATFORM(COCOA)": '"Courier"_str'
      default: '"Courier New"_str'
    WebCore:
      default: '""_str'

FlexFormattingContextIntegrationEnabled:
  type: bool
  status: stable
  category: dom
  humanReadableName: "Next-generation flex layout integration (FFC)"
  humanReadableDescription: "Enable next-generation flex layout integration (FFC)"
  defaultValue:
    WebKitLegacy:
      default: true
    WebKit:
      default: true
    WebCore:
      default: true

ForceAlwaysUserScalable:
  type: bool
  status: internal
  defaultsOverridable: true
  humanReadableName: "Force always user-scalable"
  webcoreBinding: none
  condition: PLATFORM(IOS_FAMILY)
  exposed: [ WebKit ]
  defaultValue:
    WebKit:
      default: false

ForceCompositingMode:
  type: bool
  status: embedder
  webcoreBinding: none
  exposed: [ WebKit ]
  defaultValue:
    WebKit:
      default: false

ForceFTPDirectoryListings:
  type: bool
  status: embedder
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

ForceLockdownFontParserEnabled:
  type: bool
  status: internal
  humanReadableName: "Force Lockdown Mode Safe Font Parser"
  humanReadableDescription: "Forcing the Lockdown Mode Safe Font Parser independently from Lockdown Mode state"
  exposed: [ WebKit ]
  category: security
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false
  sharedPreferenceForWebProcess: true

ForceWebGLUsesLowPower:
  type: bool
  status: embedder
  defaultValue:
    WebKitLegacy:
      default: true
    WebKit:
      default: false
    WebCore:
      default: false

FormControlRefreshEnabled:
  type: bool
  status: internal
  humanReadableName: "Form control refresh for Cocoa platforms"
  humanReadableDescription: "Enable form control refresh for Cocoa platforms"
  condition: ENABLE(FORM_CONTROL_REFRESH)
  defaultValue:
    WebKit:
      default: true
    WebKitLegacy:
      default: true
    WebCore:
      default: false

FullScreenEnabled:
  type: bool
  status: embedder
  humanReadableName: "Fullscreen API"
  humanReadableDescription: "Fullscreen API"
  condition: ENABLE(FULLSCREEN_API)
  hidden: EXPERIMENTAL_FULLSCREEN_API_HIDDEN
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      "PLATFORM(GTK) || PLATFORM(WPE)": true
      default: false
    WebCore:
      "PLATFORM(GTK) || PLATFORM(WPE)": true
      default: false
  sharedPreferenceForWebProcess: true

FullScreenKeyboardLock:
  type: bool
  status: testable
  category: dom
  humanReadableName: "Fullscreen API based Keyboard Lock"
  humanReadableDescription: "Fullscreen API based Keyboard Lock"
  condition: ENABLE(FULLSCREEN_API)
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

FullscreenRequirementForScreenOrientationLockingEnabled:
  type: bool
  status: embedder
  humanReadableName: "Require being in Fullscreen to lock screen orientation"
  humanReadableDescription: "Require being in Fullscreen to lock screen orientation"
  defaultValue:
    WebKitLegacy:
      default: true
    WebKit:
      default: true
    WebCore:
      default: true

FullscreenSceneAspectRatioLockingEnabled:
  type: bool
  status: internal
  humanReadableName: "Fullscreen scene aspect ratio locking"
  humanReadableDescription: "Enable scene aspect ratio locking in Fullscreen"
  condition: PLATFORM(VISION)
  defaultValue:
    WebKitLegacy:
      default: true
    WebKit:
      default: true
    WebCore:
      default: true

FullscreenSceneDimmingEnabled:
  type: bool
  status: internal
  humanReadableName: "Fullscreen scene dimming"
  humanReadableDescription: "Enable scene dimming in Fullscreen"
  condition: PLATFORM(VISION)
  defaultValue:
    WebKitLegacy:
      default: true
    WebKit:
      default: true
    WebCore:
      default: true

GStreamerEnabled:
  type: bool
  status: embedder
  getter: isGStreamerEnabled
  webcoreBinding: DeprecatedGlobalSettings
  condition: USE(GSTREAMER)
  exposed: [ WebKit ]
  defaultValue:
    WebKit:
      default: true

GamepadTriggerRumbleEnabled:
  type: bool
  status: testable
  category: dom
  humanReadableName: "Gamepad trigger vibration support"
  humanReadableDescription: "Support for Gamepad trigger vibration"
  condition: ENABLE(GAMEPAD)
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

GamepadVibrationActuatorEnabled:
  type: bool
  status: stable
  category: dom
  humanReadableName: "Gamepad.vibrationActuator support"
  humanReadableDescription: "Support for Gamepad.vibrationActuator"
  condition: ENABLE(GAMEPAD)
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: defaultGamepadVibrationActuatorEnabled()
    WebCore:
      default: false

GamepadsEnabled:
  type: bool
  status: embedder
  humanReadableName: "Gamepads"
  humanReadableDescription: "Web Gamepad API support"
  condition: ENABLE(GAMEPAD)
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: true
    WebCore:
      default: false
  disableInLockdownMode: true
  sharedPreferenceForWebProcess: true
  richJavaScript: true

# FIXME: This is on by default in WebKit2. Perhaps we should consider turning it on for WebKitLegacy as well.
GenericCueAPIEnabled:
  type: bool
  status: mature
  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

GeolocationAPIEnabled:
  type: bool
  status: embedder
  humanReadableName: "Geolocation API"
  humanReadableDescription: "Enable Geolocation API"
  defaultValue:
    WebKitLegacy:
      default: true
    WebKit:
      default: true
    WebCore:
      default: true
  sharedPreferenceForWebProcess: true
  richJavaScript: true

GetCoalescedEventsEnabled:
  type: bool
  status: stable
  category: dom
  humanReadableName: "Pointer Events getCoalescedEvents API"
  humanReadableDescription: "Enable the `getCoalescedEvents` function of the Pointer Events API"
  defaultValue:
    WebKitLegacy:
      default: true
    WebKit:
      default: true
    WebCore:
      default: true

GetPredictedEventsEnabled:
  type: bool
  status: stable
  category: dom
  humanReadableName: "Pointer Events getPredictedEvents API"
  humanReadableDescription: "Enable the `getPredictedEvents` function of the Pointer Events API"
  defaultValue:
    WebKitLegacy:
      default: true
    WebKit:
      default: true
    WebCore:
      default: true

GetUserMediaRequiresFocus:
  type: bool
  status: internal
  category: media
  humanReadableName: "Require focus to start getUserMedia"
  humanReadableDescription: "Require focus to start getUserMedia"
  condition: ENABLE(MEDIA_STREAM)
  defaultValue:
    WebKitLegacy:
      default: true
    WebKit:
      default: true
    WebCore:
      default: true

GoogleAntiFlickerOptimizationQuirkEnabled:
  type: bool
  status: mature
  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

GraphicsContextFiltersEnabled:
   type: bool
   status: mature
   category: media
   webcoreOnChange: setNeedsRelayoutAllFrames
   humanReadableName: "GraphicsContext Filter Rendering"
   humanReadableDescription: "GraphicsContext Filter Rendering"
   condition: USE(GRAPHICS_CONTEXT_FILTERS)
   defaultValue:
     WebKitLegacy:
       default: true
     WebKit:
       default: true
     WebCore:
       default: true

HTMLLegacyAttributeValueSerializationEnabled:
   type: bool
   status: internal
   category: dom
   humanReadableName: "HTML legacy attribute value serialization"
   humanReadableDescription: "Enable HTML legacy attribute value serialization"
   defaultValue:
     WebKitLegacy:
       default: false
     WebKit:
       default: false
     WebCore:
       default: false

HTTPEquivEnabled:
  type: bool
  status: mature
  humanReadableName: "http-equiv"
  humanReadableDescription: "Enable http-equiv attribute"
  webcoreName: httpEquivEnabled
  defaultValue:
    WebKitLegacy:
      default: true
    WebKit:
      default: true
    WebCore:
      default: true

HTTPSByDefaultEnabled:
  type: bool
  status: testable
  category: security
  humanReadableName: "HTTPS-by-default (HTTPS-First)"
  humanReadableDescription: "Enable HTTPS-by-default (HTTPS-First)"
  webcoreName: httpsByDefault
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

HiddenPageCSSAnimationSuspensionEnabled:
  type: bool
  status: embedder
  webcoreOnChange: hiddenPageCSSAnimationSuspensionEnabledChanged
  defaultValue:
    WebKitLegacy:
      default: true
    WebKit:
      "PLATFORM(COCOA) || PLATFORM(GTK)": true
      default: false
    WebCore:
      default: false

HiddenPageDOMTimerThrottlingAutoIncreases:
  type: bool
  status: embedder
  humanReadableName: "Hidden page DOM timer throttling auto-increases"
  webcoreOnChange: hiddenPageDOMTimerThrottlingStateChanged
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

HiddenPageDOMTimerThrottlingEnabled:
  type: bool
  status: embedder
  humanReadableName: "Hidden page DOM timer throttling"
  humanReadableDescription: "Enable hidden page DOM timer throttling"
  webcoreOnChange: hiddenPageDOMTimerThrottlingStateChanged
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      "PLATFORM(COCOA) || PLATFORM(GTK)": true
      default: false
    WebCore:
      default: false

HiddenUntilFoundEnabled:
   type: bool
   status: stable
   category: html
   humanReadableName: "hidden=until-found"
   humanReadableDescription: "Enable support for hidden=until-found"
   defaultValue:
     WebKitLegacy:
       default: true
     WebKit:
       default: true
     WebCore:
       default: true

HostedBlurMaterialInMediaControlsEnabled:
  type: bool
  status: internal
  humanReadableName: "Hosted blur material in media controls"
  humanReadableDescription: "Enable hosted blur material in media controls"
  condition: HAVE(MATERIAL_HOSTING)
  defaultValue:
    WebKit:
      default: defaultHostedBlurMaterialInMediaControlsEnabled()
    WebKitLegacy:
      default: false
    WebCore:
      default: false

ICECandidateFilteringEnabled:
  type: bool
  status: internal
  category: dom
  webcoreOnChange: iceCandidateFilteringEnabledChanged
  inspectorOverride: true
  humanReadableName: "Enable ICE Candidate Filtering"
  humanReadableDescription: "Enable ICE Candidate Filtering"
  defaultValue:
    WebKitLegacy:
      default: true
    WebKit:
      default: true
    WebCore:
      default: true

IFrameResourceMonitoringEnabled:
  type: bool
  status: internal
  category: networking
  condition: ENABLE(CONTENT_EXTENSIONS)
  defaultsOverridable: true
  humanReadableName: "Frame Resource Monitoring Support"
  humanReadableDescription: "Enable Usage Monitoring of Frame Resource Support"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

IFrameResourceMonitoringTestingSettingsEnabled:
  type: bool
  status: internal
  category: networking
  condition: ENABLE(CONTENT_EXTENSIONS)
  defaultsOverridable: true
  humanReadableName: "Frame Resource Monitoring Settings For Testing"
  humanReadableDescription: "Use Resource Monitoring Settings for testing"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

IOSurfaceLosslessCompressionEnabled:
  type: bool
  status: internal
  humanReadableName: "IOSurface Lossless Compression"
  humanReadableDescription: "Use losslessly compressed IOSurfaces"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      "HAVE(LOSSLESS_COMPRESSED_IOSURFACE_CG_SUPPORT)": defaultIOSurfaceLosslessCompressionEnabled()
      default: false
    WebCore:
      default: false

IPAddressAndLocalhostMixedContentUpgradeTestingEnabled:
  type: bool
  status: testable
  category: security
  humanReadableName: "Upgrade IP addresses and localhost in mixed content"
  humanReadableDescription: "Enable Upgrading IP addresses and localhost in mixed content"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

IPCTestingAPIEnabled:
  type: bool
  status: internal
  category: security
  humanReadableName: "IPC Testing API"
  humanReadableDescription: "Enable IPC Testing API for JavaScript"
  webcoreBinding: none
  condition: ENABLE(IPC_TESTING_API)
  exposed: [ WebKit ]
  defaultValue:
    WebKit:
      default: false

IgnoreIframeEmbeddingProtectionsEnabled:
  type: bool
  status: internal
  category: security
  humanReadableName: "Ignore iframe Embedding Protections"
  humanReadableDescription: "Ignores X-Frame-Options and CSP ancestors"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false
  sharedPreferenceForWebProcess: true

IgnoreInvalidMessageWhenIPCTestingAPIEnabled:
  type: bool
  status: internal
  category: security
  humanReadableName: "Ignore Invalid IPC Messages For Testing"
  humanReadableDescription: "Prevents invalid IPC messages from terminating the caller"
  webcoreBinding: none
  condition: ENABLE(IPC_TESTING_API)
  exposed: [ WebKit ]
  defaultValue:
    WebKit:
      default: true

ImageAnalysisDuringFindInPageEnabled:
  type: bool
  status: unstable
  humanReadableName: "Image Analysis for Find-in-Page"
  humanReadableDescription: "Trigger image analysis when performing Find-in-Page"
  condition: ENABLE(IMAGE_ANALYSIS)
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

ImageAnimationControlEnabled:
  type: bool
  status: stable
  category: animation
  humanReadableName: "Image Animation Control"
  humanReadableDescription: "Enable controls for image animations"
  condition: ENABLE(ACCESSIBILITY_ANIMATION_CONTROL)
  defaultValue:
    WebKitLegacy:
      default: true
    WebKit:
      default: true
    WebCore:
      default: true

ImageCaptureEnabled:
  type: bool
  status: stable
  category: media
  humanReadableName: "Image Capture API"
  humanReadableDescription: "Enable Image Capture API"
  condition: ENABLE(MEDIA_STREAM)
  defaultValue:
    WebKit:
      "PLATFORM(COCOA)": true
      default: false
    WebCore:
      "PLATFORM(COCOA)": true
      default: false

ImageControlsEnabled:
  type: bool
  status: unstable
  category: dom
  humanReadableName: "Image Controls"
  humanReadableDescription: "Enable image controls"
  condition: ENABLE(SERVICE_CONTROLS)
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

InWindowFullscreenEnabled:
  type: bool
  status: internal
  category: media
  humanReadableName: "In-Window Fullscreen"
  humanReadableDescription: "Enable In-Window Fullscreen"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

InactiveMediaCaptureStreamRepromptIntervalInMinutes:
  type: double
  status: embedder
  webcoreBinding: none
  exposed: [ WebKit ]
  defaultValue:
    WebKit:
      "PLATFORM(IOS_FAMILY)": 1
      default: 10

IncludeIgnoredInCoreAXTree:
  type: bool
  status: internal
  condition: ENABLE(INCLUDE_IGNORED_IN_CORE_AX_TREE)
  humanReadableName: "Include ignored elements in core accessibility tree"
  humanReadableDescription: "When true, accessibility-is-ignored is not used to build the core, platform-agnostic accessibility tree, and instead is expected to be applied at any platform-exposed layer."
  defaultValue:
    WebKitLegacy:
      default: true
    WebKit:
      default: true
    WebCore:
      default: true

IncompleteImageBorderEnabled:
  type: bool
  status: embedder
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

IncrementalPDFLoadingEnabled:
  type: bool
  status: embedder
  condition: HAVE(INCREMENTAL_PDF_APIS)
  defaultValue:
    WebKitLegacy:
      "PLATFORM(MAC)": true
      default: false
    WebKit:
      "PLATFORM(MAC)": true
      default: false
    WebCore:
      "PLATFORM(MAC)": true
      default: false

IncrementalRenderingSuppressionTimeout:
  type: double
  status: embedder
  webKitLegacyPreferenceKey: WebKitIncrementalRenderingSuppressionTimeoutInSeconds
  webcoreName: incrementalRenderingSuppressionTimeoutInSeconds
  defaultValue:
    WebKitLegacy:
      default: 5
    WebKit:
      default: 5
    WebCore:
      default: 5

IndexedDBAPIEnabled:
  type: bool
  status: embedder
  humanReadableName: "IndexedDB API"
  humanReadableDescription: "IndexedDB API"
  defaultValue:
    WebKitLegacy:
      default: true
    WebKit:
      default: true
    WebCore:
      default: true
  disableInLockdownMode: true
  sharedPreferenceForWebProcess: true

InlineMediaPlaybackRequiresPlaysInlineAttribute:
  type: bool
  status: embedder
  defaultValue:
    WebKitLegacy:
      "PLATFORM(IOS_FAMILY)": WebKit::defaultInlineMediaPlaybackRequiresPlaysInlineAttribute()
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

InputMethodUsesCorrectKeyEventOrder:
  type: bool
  status: testable
  category: dom
  humanReadableName: "Correct key event ordering with composition events"
  condition: PLATFORM(MAC)
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false
  sharedPreferenceForWebProcess: true

InputTypeColorEnabled:
  type: bool
  status: mature
  humanReadableName: "Color Inputs"
  humanReadableDescription: "Enable input elements of type color"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      "PLATFORM(COCOA) && !PLATFORM(WATCHOS) || PLATFORM(GTK)": true
      default: false
    WebCore:
      default: false
  sharedPreferenceForWebProcess: true

InputTypeColorEnhancementsEnabled:
  type: bool
  status: stable
  category: html
  humanReadableName: "HTML alpha and colorspace attribute support for color inputs"
  humanReadableDescription: "Enable HTML alpha and colorspace attribute support for input elements of type color"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      "PLATFORM(COCOA) && !PLATFORM(WATCHOS)": true
      default: false
    WebCore:
      "PLATFORM(COCOA) && !PLATFORM(WATCHOS)": true
      default: false
  sharedPreferenceForWebProcess: true

InputTypeDateEnabled:
  type: bool
  status: mature
  humanReadableName: "Date Input"
  humanReadableDescription: "Enable input elements of type date"
  defaultValue:
    WebKitLegacy:
      "PLATFORM(IOS_FAMILY)": true
      default: false
    WebKit:
      "PLATFORM(COCOA) || PLATFORM(GTK)": true
      default: false
    WebCore:
      default: false
  sharedPreferenceForWebProcess: true

InputTypeDateTimeLocalEnabled:
  type: bool
  status: mature
  humanReadableName: "datetime-local Inputs"
  humanReadableDescription: "Enable input elements of type datetime-local"
  defaultValue:
    WebKitLegacy:
      "PLATFORM(IOS_FAMILY)": true
      default: false
    WebKit:
      "PLATFORM(COCOA) || PLATFORM(GTK)": true
      default: false
    WebCore:
      default: false
  sharedPreferenceForWebProcess: true

InputTypeMonthEnabled:
  type: bool
  status: embedder
  humanReadableName: "Month Input"
  humanReadableDescription: "Enable input elements of type month"
  defaultValue:
    WebKitLegacy:
      "PLATFORM(IOS_FAMILY)": true
      default: false
    WebKit:
      "PLATFORM(IOS_FAMILY) || PLATFORM(GTK)": true
      default: false
    WebCore:
      default: false
  sharedPreferenceForWebProcess: true

InputTypeTimeEnabled:
  type: bool
  status: mature
  humanReadableName: "Time Input"
  humanReadableDescription: "Enable input elements of type time"
  defaultValue:
    WebKitLegacy:
      "PLATFORM(IOS_FAMILY)": true
      default: false
    WebKit:
      "PLATFORM(COCOA) || PLATFORM(GTK)": true
      default: false
    WebCore:
      default: false
  sharedPreferenceForWebProcess: true

InputTypeWeekEnabled:
  type: bool
  status: embedder
  humanReadableName: "Week Input"
  humanReadableDescription: "Enable input elements of type week"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      "PLATFORM(IOS_FAMILY) && !PLATFORM(APPLETV) || PLATFORM(GTK)": true
      default: false
    WebCore:
      default: false
  sharedPreferenceForWebProcess: true

InspectorAttachedHeight:
  type: uint32_t
  status: embedder
  webcoreBinding: none
  exposed: [ WebKit ]
  defaultValue:
    WebKit:
      default: 500

InspectorAttachedWidth:
  type: uint32_t
  status: embedder
  webcoreBinding: none
  exposed: [ WebKit ]
  defaultValue:
    WebKit:
      default: 750

InspectorAttachmentSide:
  type: uint32_t
  status: embedder
  webcoreBinding: none
  exposed: [ WebKit ]
  defaultValue:
    WebKit:
      default: 0

InspectorMaximumResourcesContentSize:
  type: uint32_t
  status: embedder
  defaultValue:
    WebKitLegacy:
      default: 200
    WebKit:
      "PLATFORM(WPE)": 50
      default: 200
    WebCore:
      "PLATFORM(WPE)": 50
      default: 200

InspectorStartsAttached:
  type: bool
  status: embedder
  webcoreBinding: none
  exposed: [ WebKit ]
  defaultValue:
    WebKit:
      default: true

InspectorSupportsShowingCertificate:
  type: bool
  status: embedder
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      "PLATFORM(COCOA) || PLATFORM(WIN)": true
      default: false
    WebCore:
      "PLATFORM(COCOA) || PLATFORM(WIN)": true
      default: false

InspectorWindowFrame:
  type: String
  status: embedder
  webcoreBinding: none
  exposed: [ WebKit ]
  defaultValue:
    WebKit:
      default: '""_str'

InteractionRegionInlinePadding:
  type: double
  status: embedder
  defaultValue:
    WebKitLegacy:
      default: 4
    WebKit:
      default: 4
    WebCore:
      default: 4

InteractionRegionMinimumCornerRadius:
  type: double
  status: embedder
  defaultValue:
    WebKitLegacy:
      default: 8
    WebKit:
      default: 8
    WebCore:
      default: 8

InteractionRegionsEnabled:
  type: bool
  status: internal
  category: dom
  humanReadableName: "Interaction Regions"
  humanReadableDescription: "Generate and visualize interaction regions"
  condition: ENABLE(INTERACTION_REGIONS_IN_EVENT_REGION)
  defaultValue:
    WebKit:
      default: true
    WebKitLegacy:
      default: false
    WebCore:
      default: false

# FIXME: This is handled via WebView SPI rather than WebPreferences for WebKitLegacy. We should change the SPI to lookup the WebPreferences value instead.
InteractiveFormValidationEnabled:
  type: bool
  status: embedder
  humanReadableName: "HTML Interactive Form Validation"
  humanReadableDescription: "HTML interactive form validation"
  webKitLegacyBinding: custom
  defaultValue:
    WebKit:
      default: true
    WebKitLegacy:
      default: false
    WebCore:
      default: false

# FIXME: Is this implemented for WebKitLegacy? If not, this should be excluded from WebKitLegacy entirely (though we should still set the default value to false when initializing settings).
InterruptAudioOnPageVisibilityChangeEnabled:
  type: bool
  status: embedder
  condition: ENABLE(MEDIA_STREAM)
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      "PLATFORM(IOS_FAMILY)": true
      default: false
    WebCore:
      default: false

InterruptVideoOnPageVisibilityChangeEnabled:
  type: bool
  status: embedder
  condition: ENABLE(MEDIA_STREAM)
  defaultValue:
    WebKitLegacy:
      "PLATFORM(IOS_FAMILY)": true
      default: false
    WebKit:
      "PLATFORM(IOS_FAMILY)": true
      default: false
    WebCore:
      default: false

InvisibleAutoplayNotPermitted:
  type: bool
  status: embedder
  webKitLegacyPreferenceKey: InvisibleAutoplayNotPermitted
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      "PLATFORM(IOS_FAMILY)": true
      default: false
    WebCore:
      default: false

IsAccessibilityIsolatedTreeEnabled:
  type: bool
  status: embedder
  humanReadableName: "Isolated Accessibility Tree Mode"
  humanReadableDescription: "Enable an accessibility hierarchy for VoiceOver that can be accessed on a secondary thread for improved performance"
  webcoreBinding: DeprecatedGlobalSettings
  condition: ENABLE(ACCESSIBILITY_ISOLATED_TREE)
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      "USE(ATSPI)": true
      default: false
    WebCore:
      default: false

# FIXME: The 'Is' prefix is inconsistent with most other preferences and should be removed.
IsFirstPartyWebsiteDataRemovalDisabled:
  type: bool
  status: developer
  category: privacy
  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: This is not relevent for WebKitLegacy, so should be excluded from WebKitLegacy entirely.
IsFirstPartyWebsiteDataRemovalLiveOnTestingEnabled:
  type: bool
  status: developer
  category: privacy
  humanReadableName: "[ITP Live-On] 1 Hour Timeout For Non-Cookie Data Removal"
  humanReadableDescription: "Remove all non-cookie website data after just one hour of no user interaction when Intelligent Tracking Prevention is enabled"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

# FIXME: This is not relevent for WebKitLegacy, so should be excluded from WebKitLegacy entirely.
IsFirstPartyWebsiteDataRemovalReproTestingEnabled:
  type: bool
  status: developer
  category: privacy
  humanReadableName: "[ITP Repro] 30 Second Timeout For Non-Cookie Data Removal"
  humanReadableDescription: "Remove all non-cookie website data after just 30 seconds 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.
IsSameSiteStrictEnforcementEnabled:
  type: bool
  status: unstable
  category: privacy
  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
  status: developer
  category: privacy
  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

# FIXME: This is not relevent for WebKitLegacy, so should be excluded from WebKitLegacy entirely (though we should still set the default value to false when initializing settings).
ItpDebugModeEnabled:
  type: bool
  status: developer
  category: privacy
  humanReadableName: "ITP Debug Mode"
  humanReadableDescription: "Intelligent Tracking Prevention Debug Mode"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

JavaScriptCanAccessClipboard:
  type: bool
  status: embedder
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

JavaScriptCanOpenWindowsAutomatically:
  type: bool
  status: embedder
  defaultValue:
    WebKitLegacy:
      "PLATFORM(IOS_FAMILY)": false
      default: true
    WebKit:
      "PLATFORM(IOS_FAMILY) || PLATFORM(GTK) || PLATFORM(WPE)": false
      default: true
    WebCore:
      default: false

JavaScriptEnabled:
  type: bool
  status: mature
  humanReadableName: "JavaScript"
  humanReadableDescription: "Enable JavaScript"
  inspectorOverride: true
  webcoreGetter: isScriptEnabled
  webcoreName: scriptEnabled
  defaultValue:
    WebKitLegacy:
      default: true
    WebKit:
      default: true
    WebCore:
      default: false

# NOTE: Clients should use per-navigation "allowsContentJavaScript" policies instead
JavaScriptMarkupEnabled:
  type: bool
  status: embedder
  webcoreName: scriptMarkupEnabled
  defaultValue:
    WebKitLegacy:
      default: true
    WebKit:
      default: true
    WebCore:
      default: true

JavaScriptRuntimeFlags:
  type: uint32_t
  refinedType: JSC::RuntimeFlags
  status: embedder
  webKitLegacyPreferenceKey: WebKitJavaScriptRuntimeFlagsPreferenceKey
  defaultValue:
    WebKitLegacy:
      default: 0
    WebKit:
      default: 0
    WebCore:
      default: '{ }'

KeyboardDismissalGestureEnabled:
  type: bool
  status: internal
  webcoreBinding: none
  condition: PLATFORM(IOS_FAMILY)
  humanReadableName: "Keyboard Dismissal Gesture"
  humanReadableDescription: "Enable the keyboard dismissal gesture"
  defaultValue:
    WebKit:
      "PLATFORM(APPLETV)" : true
      default: false

LargeImageAsyncDecodingEnabled:
  type: bool
  status: embedder
  defaultValue:
    WebKitLegacy:
      default: true
    WebKit:
      default: true
    WebCore:
      default: true

LayerBasedSVGEngineEnabled:
  type: bool
  status: unstable
  humanReadableName: "Layer-based SVG Engine (LBSE)"
  humanReadableDescription: "Enable next-generation layer-based SVG Engine (LBSE)"
  webcoreOnChange: layerBasedSVGEngineEnabledChanged
  defaultValue:
    WebCore:
      default: false
    WebKitLegacy:
      default: false
    WebKit:
      default: false

LayoutFallbackWidth:
  type: uint32_t
  status: embedder
  defaultValue:
    WebKitLegacy:
      default: 980
    WebKit:
      default: 980
    WebCore:
      default: 980

LayoutViewportHeightExpansionFactor:
  type: double
  status: embedder
  webcoreOnChange: setNeedsRecalcStyleInAllFrames
  defaultValue:
    WebKitLegacy:
      default: 0
    WebKit:
      "PLATFORM(WATCHOS) || ENABLE(FLEXIBLE_VIEW_SCALE_FACTOR)" : 1
      default: 0
    WebCore:
      default: 0

LazyIframeLoadingEnabled:
  type: bool
  status: mature
  category: html
  humanReadableName: "Lazy iframe loading"
  humanReadableDescription: "Enable lazy iframe loading support"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: true
    WebCore:
      default: false

LazyImageLoadingEnabled:
  type: bool
  status: stable
  category: html
  humanReadableName: "Lazy image loading"
  humanReadableDescription: "Enable lazy image loading support"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: true
    WebCore:
      default: false

LegacyEncryptedMediaAPIEnabled:
  type: bool
  status: embedder
  humanReadableName: "Enable Legacy EME API"
  humanReadableDescription: "Enable legacy EME API"
  condition: ENABLE(LEGACY_ENCRYPTED_MEDIA)
  defaultValue:
    WebKitLegacy:
      default: true
    WebKit:
      default: true
    WebCore:
      default: true
  sharedPreferenceForWebProcess: true
  mediaPlaybackRelated: true

LegacyLineLayoutVisualCoverageEnabled:
  type: bool
  status: internal
  category: dom
  defaultsOverridable: true
  humanReadableName: "Legacy line layout visual coverage"
  humanReadableDescription: "Enable legacy line layout visual coverage"
  webcoreOnChange: setNeedsRecalcStyleInAllFrames
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

LegacyOverflowScrollingTouchEnabled:
  type: bool
  status: internal
  webcoreOnChange: setNeedsRelayoutAllFrames
  humanReadableName: "Legacy -webkit-overflow-scrolling property"
  humanReadableDescription: "Support the legacy -webkit-overflow-scrolling CSS property"
  condition: ENABLE(WEBKIT_OVERFLOW_SCROLLING_CSS_PROPERTY)
  defaultValue:
    WebKitLegacy:
      default: true
    WebKit:
      default: true
    WebCore:
      default: true

LegacyPluginQuirkForMailSignaturesEnabled:
  type: bool
  status: internal
  humanReadableName: "Quirk to get Mail to load signatures correctly with WebKitLegacy"
  humanReadableDescription: "Quirk to get Mail to load signatures correctly with WebKitLegacy"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

LegacyWebRTCOfferOptionsEnabled:
  type: bool
  status: embedder
  humanReadableName: "WebRTC Peer Connection Legacy Offer options"
  humanReadableDescription: "Enable RTCPeerConnection Legacy offer options (offerToReceiveAudio, offerToReceiveVideo)"
  condition: ENABLE(WEB_RTC)
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      "PLATFORM(GTK) || PLATFORM(WPE)": true
      default: false
    WebCore:
      default: false

LimitedMatroskaSupportEnabled:
  type: bool
  status: developer
  category: media
  humanReadableName: "Limited Matroska Support"
  humanReadableDescription: "Enable H264 and PCM with WebM Player and MediaRecorder"
  condition: ENABLE(MEDIA_RECORDER_WEBM)
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

LinearMediaPlayerEnabled:
  type: bool
  status: internal
  category: media
  humanReadableName: "Linear Media Player"
  humanReadableDescription: "Enable LinearMediaPlayer for fullscreen video"
  condition: ENABLE(LINEAR_MEDIA_PLAYER)
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: WebKit::defaultLinearMediaPlayerEnabled()
    WebCore:
      default: false

LinkDNSPrefetchEnabled:
  type: bool
  status: stable
  category: networking
  humanReadableName: "<link rel=dns-prefetch>"
  humanReadableDescription: "Enable <link rel=dns-prefetch>"
  defaultValue:
    WebKitLegacy:
      default: true
    WebKit:
      default: true
    WebCore:
      default: true

LinkPreconnect:
  type: bool
  status: embedder
  webcoreName: linkPreconnectEnabled
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      "ENABLE(SERVER_PRECONNECT)": true
      default: false
    WebCore:
      default: false

LinkPreconnectEarlyHintsEnabled:
  type: bool
  status: stable
  category: networking
  humanReadableName: "Link rel=preconnect via HTTP early hints"
  humanReadableDescription: "Enable link rel=preconnect via early hints"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      "ENABLE(SERVER_PRECONNECT)": true
      default: false
    WebCore:
      default: false

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

LinkPreloadEnabled:
  type: bool
  status: embedder
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: true
    WebCore:
      default: true

LinkSanitizerEnabled:
  type: bool
  status: unstable
  category: networking
  humanReadableName: "Link Sanitizer"
  humanReadableDescription: "Enable link sanitizer"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

LoadDeferringEnabled:
  type: bool
  status: embedder
  defaultValue:
    WebKitLegacy:
      PLATFORM(MAC): WebKit::defaultLoadDeferringEnabled()
      default: true
    WebKit:
      default: true
    WebCore:
      default: true

LoadWebArchiveWithEphemeralStorageEnabled:
  type: bool
  status: stable
  category: dom
  humanReadableName: "Load Web Archive with ephemeral storage"
  humanReadableDescription: "Enable loading web archive with ephemeral storage"
  condition: ENABLE(WEB_ARCHIVE)
  defaultValue:
    WebKitLegacy:
      default: true
    WebKit:
      default: true
    WebCore:
      default: true

# This only suppresses the network load of the image URL. A cached image will still be rendered if requested.
LoadsImagesAutomatically:
  type: bool
  status: embedder
  webcoreOnChange: imagesEnabledChanged
  webKitLegacyPreferenceKey: WebKitDisplayImagesKey
  defaultValue:
    WebKitLegacy:
      default: true
    WebKit:
      default: true
    WebCore:
      default: false

LocalFileContentSniffingEnabled:
  type: bool
  status: internal
  category: networking
  humanReadableName: "Local File Content Sniffing"
  humanReadableDescription: "Enable Local File Content Sniffing"
  webKitLegacyPreferenceKey: WebKitLocalFileContentSniffingEnabledPreferenceKey
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false
      
LocalNetworkAccessEnabled:
  type: bool
  status: unstable
  humanReadableName: "Local Network Access"
  humanReadableDescription: "Enable Local Network Access"
  webKitLegacyPreferenceKey: WebKitLocalNetworkAccessEnabledPreferenceKey
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

LocalStorageEnabled:
  type: bool
  status: mature
  humanReadableName: "Local Storage"
  humanReadableDescription: "Enable Local Storage"
  webKitLegacyPreferenceKey: WebKitLocalStorageEnabledPreferenceKey
  defaultValue:
    WebKitLegacy:
      default: true
    WebKit:
      default: true
    WebCore:
      default: false

LockdownFontParserEnabled:
  type: bool
  status: stable
  humanReadableName: "Lockdown Mode Safe Fonts"
  humanReadableDescription: "Try parsing Web fonts with safe font parser in Lockdown Mode"
  exposed: [ WebKit ]
  category: security
  defaultValue:
    WebKitLegacy:
      default: true
    WebKit:
      default: true
    WebCore:
      default: true
  sharedPreferenceForWebProcess: true

LoginStatusAPIEnabled:
  type: bool
  status: testable
  category: dom
  humanReadableName: "Login Status API"
  humanReadableDescription: "Enable the proposed Login Status API"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

LoginStatusAPIRequiresWebAuthnEnabled:
  type: bool
  status: internal
  category: dom
  humanReadableName: "Require WebAuthn with the Login Status API"
  humanReadableDescription: "Require a recent WebAuthn authentication to set login status"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false
  sharedPreferenceForWebProcess: true

LogsPageMessagesToSystemConsoleEnabled:
  type: bool
  status: internal
  category: dom
  defaultsOverridable: true
  humanReadableName: "Log page messages to system console"
  humanReadableDescription: "Enable logging page messages to system console"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

LongRunningMediaCaptureStreamRepromptIntervalInHours:
  type: double
  status: embedder
  webcoreBinding: none
  exposed: [ WebKit ]
  defaultValue:
    WebKit:
      default: 24

LowPowerVideoAudioBufferSizeEnabled:
  type: bool
  status: embedder
  webcoreBinding: DeprecatedGlobalSettings
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: true

MainContentUserGestureOverrideEnabled:
  type: bool
  status: embedder
  humanReadableName: "Main content user gesture override"
  humanReadableDescription: "Enable main content user gesture override"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

ManageCaptureStatusBarInGPUProcessEnabled:
  type: bool
  status: internal
  category: media
  humanReadableName: "GPU Process: Capture Status Bar management"
  humanReadableDescription: "Enable Capture Status Bar management in GPU Process"
  condition: ENABLE(MEDIA_STREAM) && PLATFORM(IOS_FAMILY)
  defaultValue:
    WebKit:
      default: WebKit::defaultManageCaptureStatusBarInGPUProcessEnabled()
    WebKitLegacy:
      default: false
    WebCore:
      default: false

ManagedMediaSourceEnabled:
  type: bool
  status: mature
  category: media
  humanReadableName: "Managed Media Source API"
  humanReadableDescription: "Managed Media Source API"
  condition: ENABLE(MEDIA_SOURCE)
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: WebKit::defaultManagedMediaSourceEnabled()
    WebCore:
      default: true
  sharedPreferenceForWebProcess: true
  mediaPlaybackRelated: true

ManagedMediaSourceHighThreshold:
  type: double
  status: embedder
  condition: ENABLE(MEDIA_SOURCE)
  defaultValue:
    WebKit:
      default: 30
    WebCore:
      default: 30

ManagedMediaSourceLowThreshold:
  type: double
  status: embedder
  condition: ENABLE(MEDIA_SOURCE)
  defaultValue:
    WebKit:
      default: 10
    WebCore:
      default: 10

ManagedMediaSourceNeedsAirPlay:
  type: bool
  status: mature
  category: media
  humanReadableName: "Managed Media Source Requires AirPlay source"
  humanReadableDescription: "Managed Media Source Requires AirPlay source"
  condition: ENABLE(MEDIA_SOURCE) && ENABLE(WIRELESS_PLAYBACK_TARGET)
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: WebKit::defaultManagedMediaSourceNeedsAirPlay()
    WebCore:
      default: false

MasonryEnabled:
  type: bool
  status: preview
  category: css
  humanReadableName: "CSS Masonry Layout"
  humanReadableDescription: "Enable Masonry Layout for CSS Grid"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

MathMLEnabled:
  type: bool
  status: embedder
  condition: ENABLE(MATHML)
  defaultValue:
    WebKitLegacy:
      default: true
    WebKit:
      default: true
    WebCore:
      default: true
  disableInLockdownMode: true

MaxParseDuration:
  type: double
  status: embedder
  webKitLegacyPreferenceKey: WebKitMaxParseDurationPreferenceKey
  defaultValue:
    WebKitLegacy:
      default: -1
    WebKit:
      default: -1
    WebCore:
      default: -1

MediaAudioCodecIDsAllowedInLockdownMode:
  type: String
  status: embedder
  webcoreBinding: none
  exposed: [ WebKit ]
  defaultValue:
    WebKit:
      default: '"aac ,zaac,qaac,caac,.mp3,mp4a"_str'

MediaCapabilitiesEnabled:
  type: bool
  status: embedder
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: true
    WebCore:
      default: false

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

MediaCapabilityGrantsEnabled:
  type: bool
  status: embedder
  condition: ENABLE(EXTENSION_CAPABILITIES)
  humanReadableName: "Media Capability Grants"
  humanReadableDescription: "Enable granting and revoking of media capabilities"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      "PLATFORM(IOS_FAMILY_SIMULATOR)": false
      default: true
    WebCore:
      "PLATFORM(IOS_FAMILY_SIMULATOR)": false
      default: true
  sharedPreferenceForWebProcess: true

MediaCaptionFormatTypesAllowedInLockdownMode:
  type: String
  status: embedder
  webcoreBinding: none
  exposed: [ WebKit ]
  defaultValue:
    WebKit:
      default: '"c608,wvtt"_str'

MediaCaptureRequiresSecureConnection:
  type: bool
  status: internal
  category: media
  inspectorOverride: true
  humanReadableName: "Limit Media Capture to Secure Sites"
  humanReadableDescription: "Limit Media Capture to Secure Sites"
  condition: ENABLE(MEDIA_STREAM)
  defaultValue:
    WebKitLegacy:
      default: true
    WebKit:
      default: true
    WebCore:
      default: true

MediaCodecTypesAllowedInLockdownMode:
  type: String
  status: embedder
  webcoreBinding: none
  exposed: [ WebKit ]
  defaultValue:
    WebKit:
      default: '"mp4a.40,avc1"_str'

MediaContainerTypesAllowedInLockdownMode:
  type: String
  status: embedder
  webcoreBinding: none
  exposed: [ WebKit ]
  defaultValue:
    WebKit:
      default: '"video/mp4,audio/mp4,video/x-m4v,audio/x-m4a,audio/mp3,application/x-mpegURL,application/vnd.apple.mpegURL,video/mp2t,video/iso.segment,audio/aac,audio/mpeg,audio/ac3,audio/eac3,video/mpeg2,text/vtt"_str'

MediaContentTypesRequiringHardwareSupport:
  type: String
  status: embedder
  webcoreExcludeFromInternalSettings: true
  webcoreImplementation: custom
  defaultValue:
    WebKitLegacy:
      default: '""_str'
    WebKit:
      default: '""_str'
    WebCore:
      default: '""_str'

MediaControlsContextMenusEnabled:
  type: bool
  status: embedder
  condition: ENABLE(MEDIA_CONTROLS_CONTEXT_MENUS)
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: true
    WebCore:
      default: false
  sharedPreferenceForWebProcess: true
  mediaPlaybackRelated: true

MediaControlsScaleWithPageZoom:
  type: bool
  status: embedder
  defaultValue:
    WebKitLegacy:
      "PLATFORM(IOS_FAMILY)": false
      default: true
    WebKit:
      "PLATFORM(IOS_FAMILY)": false
      default: true
    WebCore:
      default: true

MediaDataLoadsAutomatically:
  type: bool
  status: embedder
  defaultValue:
    WebKitLegacy:
      "PLATFORM(IOS_FAMILY)": false
      default: true
    WebKit:
      "PLATFORM(IOS_FAMILY)": false
      default: true
    WebCore:
      "PLATFORM(IOS_FAMILY)": false
      default: true

# FIXME: Is this implemented for WebKitLegacy? If not, this should be excluded from WebKitLegacy entirely (though we should still set the default value to false when initializing settings).
MediaDevicesEnabled:
  type: bool
  status: embedder
  humanReadableName: "Media devices"
  humanReadableDescription: "Enable media devices"
  condition: ENABLE(MEDIA_STREAM)
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      "PLATFORM(GTK) || PLATFORM(WPE)": true
      default: false
    WebCore:
      "PLATFORM(GTK) || PLATFORM(WPE)": true
      default: false
  disableInLockdownMode: true

MediaEnabled:
  type: bool
  status: embedder
  humanReadableName: "HTML Media Elements"
  humanReadableDescription: "Enable HTML media elements <audio>, <video> and <track>"
  condition: ENABLE(VIDEO)
  defaultValue:
    WebKitLegacy:
      default: true
    WebKit:
      default: true
    WebCore:
      default: true

MediaPlaybackEnabled:
  type: bool
  status: embedder
  humanReadableName: "Media Playback Functionalities"
  humanReadableDescription: "Enable media playback functionalities"
  defaultValue:
    WebKitLegacy:
      default: true
    WebKit:
      default: true
    WebCore:
      default: true
  sharedPreferenceForWebProcess: true
  mediaPlaybackRelated: true

MediaPreferredFullscreenWidth:
  type: double
  status: embedder
  defaultValue:
    WebKitLegacy:
      default: 960
    WebKit:
      default: 960
    WebCore:
      default: 960

MediaPreloadingEnabled:
  type: bool
  status: embedder
  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.
MediaRecorderEnabled:
  type: bool
  status: mature
  category: media
  humanReadableName: "MediaRecorder"
  humanReadableDescription: "MediaRecorder"
  condition: ENABLE(MEDIA_RECORDER)
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      "PLATFORM(COCOA)": true
      "USE(GSTREAMER)": true
      default: false
    WebCore:
      default: false
  sharedPreferenceForWebProcess: true
  mediaPlaybackRelated: true

MediaRecorderEnabledWebM:
  type: bool
  status: stable
  category: media
  humanReadableName: "MediaRecorder WebM"
  humanReadableDescription: "Enable WebM support with MediaRecorder"
  condition: ENABLE(MEDIA_RECORDER_WEBM)
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      "PLATFORM(COCOA)": true
      default: false
    WebCore:
      default: false
  sharedPreferenceForWebProcess: true

MediaSessionCaptureToggleAPIEnabled:
  type: bool
  status: stable
  category: media
  humanReadableName: "MediaSession capture related API"
  humanReadableDescription: "Enable MediaSession capture related API"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      "PLATFORM(COCOA)": true
      default: false
    WebCore:
      default: false

MediaSessionCoordinatorEnabled:
  type: bool
  status: mature
  category: media
  humanReadableName: "Experimental MediaSession coordinator API"
  humanReadableDescription: "Enable experimental MediaSession coordinator API"
  condition: ENABLE(MEDIA_SESSION_COORDINATOR)
  defaultValue:
    WebKitLegacy:
      default: true
    WebKit:
      default: WebKit::defaultMediaSessionCoordinatorEnabled()
    WebCore:
      default: true
  sharedPreferenceForWebProcess: true
  mediaPlaybackRelated: true

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

MediaSessionPlaylistEnabled:
  type: bool
  status: mature
  category: media
  humanReadableName: "Experimental MediaSession playlist API"
  humanReadableDescription: "Enable experimental MediaSession playlist API"
  condition: ENABLE(MEDIA_SESSION_COORDINATOR) && ENABLE(MEDIA_SESSION_PLAYLIST)
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: WebKit::defaultMediaSessionCoordinatorEnabled()
    WebCore:
      default: true

MediaSourceEnabled:
  type: bool
  status: embedder
  category: media
  humanReadableName: "Media Source API"
  humanReadableDescription: "Media Source API"
  defaultValue:
    WebKitLegacy:
      "ENABLE(MEDIA_SOURCE) && PLATFORM(IOS_FAMILY)": WebKit::defaultMediaSourceEnabled()
      "ENABLE(MEDIA_SOURCE) && !PLATFORM(IOS_FAMILY)": true
      default: false
    WebKit:
      "ENABLE(MEDIA_SOURCE) && PLATFORM(IOS_FAMILY)": WebKit::defaultMediaSourceEnabled()
      "ENABLE(MEDIA_SOURCE) && !PLATFORM(IOS_FAMILY)": true
      default: false
    WebCore:
      "ENABLE(MEDIA_SOURCE)": true
      default: false
  sharedPreferenceForWebProcess: true
  mediaPlaybackRelated: true

MediaSourceInWorkerEnabled:
  type: bool
  status: stable
  category: media
  humanReadableName: "MediaSource in a Worker"
  humanReadableDescription: "MediaSource in a Worker"
  condition: ENABLE(MEDIA_SOURCE_IN_WORKERS)
  exposed: [ WebCore, WebKit ]
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: true
    WebCore:
      default: true
  mediaPlaybackRelated: true

MediaSourcePrefersDecompressionSession:
  type: bool
  status: stable
  category: media
  humanReadableName: "MediaSource prefers DecompressionSession"
  humanReadableDescription: "MediaSource prefers DecompressionSession"
  condition: ENABLE(MEDIA_SOURCE) && USE(AVFOUNDATION)
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: true
    WebCore:
      default: true
  sharedPreferenceForWebProcess: true

MediaStreamTrackProcessingEnabled:
  type: bool
  status: mature
  category: media
  humanReadableName: "MediaStreamTrack Processing"
  humanReadableDescription: "Enable MediaStreamTrack Processing"
  condition: ENABLE(MEDIA_STREAM)
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      "PLATFORM(COCOA)": true
      default: false
    WebCore:
      "PLATFORM(COCOA)": true
      default: false

MediaUserGestureInheritsFromDocument:
  type: bool
  status: embedder
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

MediaVideoCodecIDsAllowedInLockdownMode:
  type: String
  status: embedder
  webcoreBinding: none
  exposed: [ WebKit ]
  defaultValue:
    WebKit:
      default: '"avc1,zavc,qavc,cavc"_str'

MetaViewportInteractiveWidgetEnabled:
  type: bool
  status: testable
  category: css
  humanReadableName: "Meta Viewport Interactive Widget"
  humanReadableDescription: "Enable the interactive-widget attribute on the viewport meta element"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

MinimumFontSize:
  type: double
  status: embedder
  webcoreOnChange: setNeedsRecalcStyleInAllFrames
  defaultValue:
    WebKitLegacy:
      default: 0
    WebKit:
      default: 0
    WebCore:
      default: 0

MinimumLogicalFontSize:
  type: double
  status: embedder
  webcoreOnChange: setNeedsRecalcStyleInAllFrames
  defaultValue:
    WebKitLegacy:
      default: 9
    WebKit:
      default: 9
    WebCore:
      default: 0

MinimumZoomFontSize:
  type: double
  status: embedder
  webKitLegacyPreferenceKey: WebKitMinimumZoomFontSizePreferenceKey
  condition: ENABLE(TEXT_AUTOSIZING)
  defaultValue:
    WebKitLegacy:
      default: 15
    WebKit:
      "PLATFORM(WATCHOS)": 30
      default: 15
    WebCore:
      "PLATFORM(WATCHOS)": 30
      default: 15

MockCaptureDevicesEnabled:
  type: bool
  status: internal
  category: media
  webcoreOnChange: mockCaptureDevicesEnabledChanged
  inspectorOverride: true
  condition: ENABLE(MEDIA_STREAM)
  humanReadableName: "Enable Mock Capture Devices"
  humanReadableDescription: "Enable Mock Capture Devices"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      "PLATFORM(IOS_FAMILY_SIMULATOR)": true
      default: false
    WebCore:
      default: false

MockCaptureDevicesPromptEnabled:
  type: bool
  status: embedder
  webcoreBinding: none
  exposed: [ WebKit ]
  defaultValue:
    WebKit:
      default: true

MockScrollbarsControllerEnabled:
  type: bool
  status: embedder
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

MockScrollbarsEnabled:
  type: bool
  status: embedder
  webcoreBinding: DeprecatedGlobalSettings
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false

ModelDocumentEnabled:
  type: bool
  status: testable
  category: html
  humanReadableName: "HTML <model> elements for stand-alone document"
  humanReadableDescription: "Enable HTML <model> element for model documents"
  condition: ENABLE(MODEL_ELEMENT)
  webcoreBinding: DeprecatedGlobalSettings
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false

ModelElementEnabled:
  type: bool
  status: Modelelement_feature_status
  category: html
  humanReadableName: "HTML <model> element"
  humanReadableDescription: "Enable HTML <model> element"
  condition: ENABLE(MODEL_ELEMENT)
  defaultValue:
    WebKitLegacy:
      "PLATFORM(VISION) && ENABLE(MODEL_ELEMENT)": true
      default: false
    WebKit:
      "PLATFORM(VISION) && ENABLE(MODEL_ELEMENT)": true
      default: false
    WebCore:
      "PLATFORM(VISION) && ENABLE(MODEL_ELEMENT)": true
      default: false
  disableInLockdownMode: true
  sharedPreferenceForWebProcess: true

ModelNoPortalAttributeEnabled:
  type: bool
  status: unstable
  condition: PLATFORM(VISION) && ENABLE(MODEL_PROCESS)
  humanReadableName: "Model noportal attribute"
  humanReadableDescription: "Enable Model noportal attribute support"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false
  disableInLockdownMode: true

ModelProcessEnabled:
  type: bool
  status: stable
  category: dom
  condition: ENABLE(MODEL_PROCESS)
  humanReadableName: "Enable Model Process"
  humanReadableDescription: "Load <model> content in a separate process"
  defaultValue:
    WebKitLegacy:
      default: true
    WebKit:
      default: true
    WebCore:
      default: true
  disableInLockdownMode: true
  sharedPreferenceForWebProcess: true

MomentumScrollingAnimatorEnabled:
  type: bool
  status: internal
  humanReadableName: "Momentum Scrolling Animator"
  humanReadableDescription: "Generate momentum events in WebKit instead of using those delivered by the system"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: true
    WebCore:
      default: false

MouseEventsSimulationEnabled:
  type: bool
  status: internal
  category: dom
  humanReadableName: "Mouse events simulation"
  humanReadableDescription: "Enable mouse events dispatch along with touch events on iOS"
  condition: ENABLE(TOUCH_EVENTS)
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

MutationEventsEnabled:
  type: bool
  status: testable
  category: dom
  humanReadableName: "DOM mutation events"
  defaultValue:
    WebKitLegacy:
      default: WebKit::defaultMutationEventsEnabled()
    WebKit:
      default: WebKit::defaultMutationEventsEnabled()
    WebCore:
      default: false

MuteCameraOnMicrophoneInterruptionEnabled:
  type: bool
  status: internal
  category: media
  humanReadableName: "Mute Camera on Microphone Interruption"
  humanReadableDescription: "Mute Camera on Microphone Interruption"
  condition: ENABLE(MEDIA_STREAM)
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      "PLATFORM(IOS_FAMILY)": true
      default: false
    WebCore:
      default: false

NavigationAPIEnabled:
  type: bool
  status: testable
  category: dom
  humanReadableName: "Navigation API"
  humanReadableDescription: "Enable Navigation API"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

NavigatorUserAgentDataJavaScriptAPIEnabled:
  type: bool
  status: unstable
  category: dom
  humanReadableName: "Enable the navigator.userAgentData JavaScript API"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

NeedsAdobeFrameReloadingQuirk:
  comment: 'FIXME: This quirk is needed because of Radar 4674537 and 5211271. We need
    to phase it out once Adobe can fix the bug from their end.'
  type: bool
  status: embedder
  webcoreGetter: needsAcrobatFrameReloadingQuirk
  defaultValue:
    WebKitLegacy:
      PLATFORM(MAC): WebKit::defaultNeedsAdobeFrameReloadingQuirk()
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

NeedsFrameNameFallbackToIdQuirk:
  type: bool
  status: embedder
  defaultValue:
    WebKitLegacy:
      PLATFORM(MAC): WebKit::defaultNeedsFrameNameFallbackToIdQuirk()
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

NeedsInAppBrowserPrivacyQuirks:
  type: bool
  status: internal
  category: dom
  defaultsOverridable: true
  humanReadableName: "Needs In-App Browser Privacy Quirks"
  humanReadableDescription: "Enable quirks needed to support In-App Browser privacy"
  webcoreBinding: none
  exposed: [ WebKit ]
  condition: ENABLE(APP_BOUND_DOMAINS)
  defaultValue:
    WebKit:
      default: false

NeedsKeyboardEventDisambiguationQuirks:
  comment: This is a quirk we are pro-actively applying to old applications. It changes
    keyboard event dispatching, making keyIdentifier available on keypress events,
    making charCode available on keydown/keyup events, and getting keypress dispatched
    in more cases.
  type: bool
  status: embedder
  defaultValue:
    WebKitLegacy:
      PLATFORM(MAC): WebKit::defaultNeedsKeyboardEventDisambiguationQuirks()
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

NeedsSiteSpecificQuirks:
  type: bool
  status: embedder
  humanReadableName: "Needs Site-Specific Quirks"
  humanReadableDescription: "Enable site-specific quirks"
  webKitLegacyPreferenceKey: WebKitUseSiteSpecificSpoofing
  inspectorOverride: true
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: true
    WebCore:
      default: false

NeedsStorageAccessFromFileURLsQuirk:
  type: bool
  status: embedder
  humanReadableName: "Needs storage access from file URLs quirk"
  defaultValue:
    WebKitLegacy:
      default: true
    WebKit:
      default: true
    WebCore:
      default: true

NotificationEventEnabled:
  type: bool
  status: internal
  category: dom
  humanReadableName: "NotificationEvent support"
  humanReadableDescription: "NotificationEvent and ServiceWorkerRegistration.showNotification() support"
  condition: ENABLE(NOTIFICATION_EVENT)
  defaultValue:
    WebCore:
      "ENABLE(NOTIFICATION_EVENT) && !PLATFORM(IOS_FAMILY)": true
      default: false
    WebKit:
      "ENABLE(NOTIFICATION_EVENT) && !PLATFORM(IOS_FAMILY)": true
      default: false
  sharedPreferenceForWebProcess: true

NotificationsEnabled:
  type: bool
  status: stable
  category: dom
  humanReadableName: "Notifications"
  humanReadableDescription: "Enable the Notifications API"
  condition: ENABLE(NOTIFICATIONS)
  defaultValue:
    WebKitLegacy:
      "PLATFORM(IOS_FAMILY)": false
      default: true
    WebKit:
      "PLATFORM(IOS_FAMILY)": false
      default: true
    WebCore:
      "PLATFORM(IOS_FAMILY)": false
      default: true
  disableInLockdownMode: true
  sharedPreferenceForWebProcess: true
  richJavaScript: true

ObservableEnabled:
  type: bool
  status: testable
  category: dom
  humanReadableName: "Observable API"
  humanReadableDescription: "Support for the Observable API"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

OffscreenCanvasEnabled:
  type: bool
  status: stable
  category: dom
  humanReadableName: "OffscreenCanvas"
  humanReadableDescription: "Support for the OffscreenCanvas APIs"
  condition: ENABLE(OFFSCREEN_CANVAS)
  defaultValue:
    WebKitLegacy:
      "PLATFORM(COCOA)": true
      default: false
    WebKit:
      "PLATFORM(COCOA) || PLATFORM(GTK) || PLATFORM(WPE)": true
      default: false
    WebCore:
      "PLATFORM(COCOA) || PLATFORM(GTK) || PLATFORM(WPE)": true
      default: false

OffscreenCanvasInWorkersEnabled:
  type: bool
  status: stable
  category: dom
  humanReadableName: "OffscreenCanvas in Workers"
  humanReadableDescription: "Support for the OffscreenCanvas APIs in Workers"
  condition: ENABLE(OFFSCREEN_CANVAS_IN_WORKERS)
  defaultValue:
    WebKitLegacy:
      "PLATFORM(COCOA)": true
      default: false
    WebKit:
      "PLATFORM(COCOA) || PLATFORM(GTK) || PLATFORM(WPE)": true
      default: false
    WebCore:
      "PLATFORM(COCOA) || PLATFORM(GTK) || PLATFORM(WPE)": true
      default: false

# FIXME: Reenable this on iOS once we can mitigate impact on memory use.
OpportunisticSweepingAndGarbageCollectionEnabled:
  type: bool
  status: internal
  humanReadableName: "Opportunistic Sweeping and GC"
  humanReadableDescription: "Enable Opportunistic Sweeping and GC"
  category: javascript
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      "PLATFORM(IOS_FAMILY)": false
      default: true
    WebCore:
      default: false

OptInPartitionedCookiesEnabled:
  type: bool
  status: testable
  category: dom
  humanReadableName: "Opt-in partitioned cookies (CHIPS)"
  humanReadableDescription: "Enable opt-in partitioned cookies"
  condition: HAVE(ALLOW_ONLY_PARTITIONED_COOKIES) && 0
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

OverlappingBackingStoreProvidersEnabled:
  type: bool
  status: stable
  humanReadableName: "Overlapping backing stores"
  humanReadableDescription: "Enable overlapping backing stores compositor optimization"
  category: css
  defaultValue:
    WebKitLegacy:
      default: true
    WebKit:
      default: true
    WebCore:
      default: true

OverlayRegionsEnabled:
  type: bool
  status: testable
  category: dom
  humanReadableName: "Overlay Regions"
  humanReadableDescription: "Generate and visualize overlay regions"
  condition: ENABLE(OVERLAY_REGIONS_IN_EVENT_REGION)
  webcoreBinding: none
  exposed: [ WebKit ]
  defaultValue:
    WebKit:
      default: false

OverscrollBehaviorEnabled:
  type: bool
  status: stable
  category: css
  humanReadableName: "CSS Overscroll Behavior"
  humanReadableDescription: "Enable CSS overscroll-behavior"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      "PLATFORM(WIN)": false
      default: true
    WebCore:
      "PLATFORM(WIN)": false
      default: true

PDFJSViewerEnabled:
  type: bool
  status: testable
  category: html
  humanReadableName: "Enable PDF.js viewer"
  humanReadableDescription: "Enable PDF.js viewer"
  condition: ENABLE(PDFJS)
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      "PLATFORM(GTK) || PLATFORM(WPE)": true
      default: false
    WebCore:
      default: false
  disableInLockdownMode: true

PDFPluginEnabled:
  type: bool
  status: embedder
  condition: PLATFORM(COCOA)
  exposed: [ WebKit ]
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      "PLATFORM(IOS_FAMILY)": false
      default: true
    WebCore:
      default: false

PDFPluginHUDEnabled:
  type: bool
  status: embedder
  condition: PLATFORM(COCOA)
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      "PLATFORM(IOS_FAMILY)": false
      default: true
    WebCore:
      default: false

PDFPluginPageNumberIndicatorEnabled:
  type: bool
  status: embedder
  condition: ENABLE(PDF_PAGE_NUMBER_INDICATOR)
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: true
    WebCore:
      default: false

PageAtRuleMarginDescriptorsEnabled:
  type: bool
  status: stable
  category: css
  humanReadableName: "@page CSS at-rule margin descriptors"
  humanReadableDescription: "Enable support for @page margin descriptors"
  defaultValue:
    WebKitLegacy:
      default: true
    WebKit:
      default: true
    WebCore:
      default: true

PageVisibilityBasedProcessSuppressionEnabled:
  type: bool
  status: internal
  category: dom
  humanReadableName: "Page visibility-based process suppression"
  humanReadableDescription: "Enable page visibility-based process suppression"
  webcoreBinding: none
  exposed: [ WebKit ]
  defaultValue:
    WebKit:
      default: true

PassiveTouchListenersAsDefaultOnDocument:
  type: bool
  status: embedder
  defaultValue:
    WebKitLegacy:
      "PLATFORM(IOS_FAMILY)": WebKit::defaultPassiveTouchListenersAsDefaultOnDocument()
      default: true
    WebKit:
      "PLATFORM(IOS_FAMILY)": WebKit::defaultPassiveTouchListenersAsDefaultOnDocument()
      default: true
    WebCore:
      default: true

PassiveWheelListenersAsDefaultOnDocument:
  type: bool
  status: embedder
  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

PasswordEchoDuration:
  type: double
  status: embedder
  webKitLegacyPreferenceKey: WebKitPasswordEchoDurationPreferenceKey
  webcoreName: passwordEchoDurationInSeconds
  defaultValue:
    WebKitLegacy:
      "PLATFORM(IOS_FAMILY)": 2
      default: 1
    WebKit:
      default: 2
    WebCore:
      default: 1

PasswordEchoEnabled:
  type: bool
  status: embedder
  webKitLegacyPreferenceKey: WebKitEnablePasswordEchoPreferenceKey
  defaultValue:
    WebKitLegacy:
      "PLATFORM(IOS_FAMILY)": true
      default: false
    WebKit:
      "PLATFORM(IOS_FAMILY) && !PLATFORM(MACCATALYST)": true
      default: false
    WebCore:
      default: false

PeerConnectionEnabled:
  type: bool
  status: embedder
  humanReadableName: "WebRTC Peer Connection"
  humanReadableDescription: "Enable RTCPeerConnection"
  condition: ENABLE(WEB_RTC)
  defaultValue:
    WebKitLegacy:
      default: true
    WebKit:
      "USE(LIBWEBRTC)": WebKit::defaultPeerConnectionEnabledAvailable()
      "USE(GSTREAMER_WEBRTC)": true
      default: false
    WebCore:
      default: true
  disableInLockdownMode: true
  sharedPreferenceForWebProcess: true
  richJavaScript: true
  mediaPlaybackRelated: true

PeerConnectionVideoScalingAdaptationDisabled:
  type: bool
  status: embedder
  humanReadableName: "WebRTC Peer Connection Video Scaling Adaptation"
  humanReadableDescription: "Disable RTCPeerConnection Video Scaling Adaptation"
  condition: ENABLE(WEB_RTC)
  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.
PerElementSpeakerSelectionEnabled:
  type: bool
  status: internal
  category: media
  humanReadableName: "Allow per media element speaker device selection"
  humanReadableDescription: "Allow per media element speaker device selection"
  condition: ENABLE(MEDIA_STREAM)
  defaultValue:
    WebKit:
      "PLATFORM(COCOA)": true
      default: false
    WebCore:
      default: false

PermissionsAPIEnabled:
  type: bool
  status: stable
  category: dom
  humanReadableName: "Permissions API"
  humanReadableDescription: "Enable Permissions API"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      "PLATFORM(COCOA) || PLATFORM(GTK) || PLATFORM(WPE)" : true
      default: false
    WebCore:
      default: false
  sharedPreferenceForWebProcess: true

PhotoPickerPrefersOriginalImageFormat:
  type: bool
  status: internal
  humanReadableName: "Photo Picker Prefers Original Image Format"
  humanReadableDescription: "Prefer the original image format when selecting photos for file upload"
  webcoreBinding: none
  condition: HAVE(PHOTOS_UI)
  exposed: [ WebKit ]
  defaultValue:
    WebKit:
      default: false

PictographFontFamily:
  type: String
  status: embedder
  webKitLegacyPreferenceKey: WebKitPictographFont
  webcoreImplementation: custom
  defaultValue:
    WebKitLegacy:
      "PLATFORM(IOS_FAMILY)": '"AppleColorEmoji"_str'
      default: '"Apple Color Emoji"_str'
    WebKit:
      "PLATFORM(COCOA) && PLATFORM(IOS_FAMILY)": '"AppleColorEmoji"_str'
      "PLATFORM(COCOA) && !PLATFORM(IOS_FAMILY)": '"Apple Color Emoji"_str'
      default: '"Times"_str'
    WebCore:
      default: '""_str'

PictureInPictureAPIEnabled:
  type: bool
  status: embedder
  condition: ENABLE(PICTURE_IN_PICTURE_API)
  defaultValue:
    WebKitLegacy:
      "PLATFORM(VISION)": false
      default: false
    WebKit:
      "PLATFORM(VISION)": false
      default: true
    WebCore:
      "PLATFORM(VISION)": false
      default: true
  disableInLockdownMode: true

PictureInPicturePlaybackStateEnabled:
  type: bool
  status: internal
  humanReadableName: "Picture-in-Picture Playback State Enabled"
  humanReadableDescription: "Picture-in-Picture Playback State Enabled"
  condition: HAVE(PIP_SKIP_PREROLL)
  defaultValue:
    WebKitLegacy:
      default: true
    WebKit:
      default: true
    WebCore:
      default: false
  disableInLockdownMode: true

PitchCorrectionAlgorithm:
  type: uint32_t
  refinedType: WebCore::MediaPlayerEnums::PitchCorrectionAlgorithm
  status: embedder
  defaultValue:
    WebKitLegacy:
      "PLATFORM(COCOA)": static_cast<uint32_t>(WebCore::MediaPlayerEnums::PitchCorrectionAlgorithm::BestForSpeech)
      default: static_cast<uint32_t>(WebCore::MediaPlayerEnums::PitchCorrectionAlgorithm::BestAllAround)
    WebKit:
      "PLATFORM(COCOA)": static_cast<uint32_t>(WebCore::MediaPlayerEnums::PitchCorrectionAlgorithm::BestForSpeech)
      default: static_cast<uint32_t>(WebCore::MediaPlayerEnums::PitchCorrectionAlgorithm::BestAllAround)
    WebCore:
      default: MediaPlayerEnums::PitchCorrectionAlgorithm::BestAllAround

PointerLockEnabled:
  type: bool
  status: internal
  category: dom
  condition: ENABLE(POINTER_LOCK)
  humanReadableName: "Pointer Lock API"
  humanReadableDescription: "Enable the Pointer Lock API"
  defaultValue:
    WebKitLegacy:
      "PLATFORM(IOS_FAMILY)": false
      default: true
    WebKit:
      "PLATFORM(IOS_FAMILY)": false
      default: true
    WebCore:
      default: false

PointerLockOptionsEnabled:
  type: bool
  status: stable
  category: dom
  condition: ENABLE(POINTER_LOCK)
  humanReadableName: "Pointer Lock Options"
  humanReadableDescription: "Element.requestPointerLock(options) and promise support."
  defaultValue:
    WebKitLegacy:
      default: true
    WebKit:
      default: true
    WebCore:
      default: true

PopoverAttributeEnabled:
  type: bool
  status: stable
  category: html
  humanReadableName: "HTML popover attribute"
  humanReadableDescription: "Enable HTML popover attribute support"
  defaultValue:
    WebKitLegacy:
      default: WebKit::defaultPopoverAttributeEnabled()
    WebKit:
      default: WebKit::defaultPopoverAttributeEnabled()
    WebCore:
      default: true

PreferFasterClickOverDoubleTap:
  type: bool
  status: internal
  category: dom
  humanReadableName: "Fast clicks beat DTTZ"
  humanReadableDescription: "Prefer a faster click over a double tap"
  webcoreBinding: none
  condition: PLATFORM(IOS_FAMILY)
  exposed: [ WebKit ]
  defaultValue:
    WebKit:
      "PLATFORM(IOS_FAMILY) && !PLATFORM(WATCHOS)": true
      default: false

PreferPageRenderingUpdatesNear60FPSEnabled:
  type: bool
  status: stable
  category: dom
  humanReadableName: "Prefer Page Rendering Updates near 60fps"
  humanReadableDescription: "Prefer page rendering updates near 60 frames per second rather than using the display's refresh rate"
  defaultValue:
    WebKitLegacy:
      "PLATFORM(VISION)": false
      default: true
    WebKit:
      "PLATFORM(VISION)": false
      default: true
    WebCore:
      "PLATFORM(VISION)": false
      default: true

PreferSpatialAudioExperience:
  type: bool
  status: internal
  category: media
  condition: HAVE(SPATIAL_AUDIO_EXPERIENCE)
  humanReadableName: "Prefer Spatial Audio Experience over Spatial Tracking Labels"
  humanReadableDescription: "Prefer Spatial Audio Experience over Spatial Tracking Labels"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: WebKit::defaultPreferSpatialAudioExperience()
    WebCore:
      default: false
  defaultsOverridable: true
  sharedPreferenceForWebProcess: true

PrivateClickMeasurementDebugModeEnabled:
  type: bool
  status: developer
  category: privacy
  humanReadableName: "Private Click Measurement Debug Mode"
  humanReadableDescription: "Enable Private Click Measurement Debug Mode"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

PrivateClickMeasurementEnabled:
  type: bool
  status: embedder
  humanReadableName: "Private Click Measurement"
  humanReadableDescription: "Enable Private Click Measurement for Cross-Site Link Navigations"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: true
    WebCore:
      default: true

PrivateClickMeasurementFraudPreventionEnabled:
  type: bool
  status: stable
  category: privacy
  humanReadableName: "Private Click Measurement Fraud Prevention"
  humanReadableDescription: "Enable Private Click Measurement Fraud Prevention"
  defaultValue:
    WebKit:
      "HAVE(RSA_BSSA)": true
      default: false
    WebCore:
      "HAVE(RSA_BSSA)": true
      default: false

PrivateTokenUsageByThirdPartyEnabled:
  type: bool
  status: stable
  category: privacy
  humanReadableName: "Private Token usage by third party"
  humanReadableDescription: "Enable private token usage by third party"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: true
    WebCore:
      default: true

ProcessSwapOnCrossSiteNavigationEnabled:
  type: bool
  status: stable
  category: networking
  humanReadableName: "Swap Processes on Cross-Site Navigation"
  humanReadableDescription: "Swap WebContent Processes on cross-site navigations"
  webcoreBinding: none
  exposed: [ WebKit ]
  defaultValue:
    WebKit:
      "PLATFORM(PLAYSTATION)": false
      default: true

PropagateDamagingInformation:
   type: bool
   status: testable
   category: dom
   humanReadableName: "Propagate Damaging Information"
   humanReadableDescription: "Propagate Damaging Information"
   condition: ENABLE(DAMAGE_TRACKING)
   defaultValue:
     WebKitLegacy:
       default: false
     WebKit:
       "PLATFORM(GTK)": true
       default: false
     WebCore:
       default: false

PunchOutWhiteBackgroundsInDarkMode:
  type: bool
  status: embedder
  webcoreOnChange: setNeedsRecalcStyleInAllFrames
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

PushAPIEnabled:
  type: bool
  status: embedder
  category: dom
  humanReadableName: "Push API"
  humanReadableDescription: "Enable Push API"
  defaultValue:
    WebCore:
      default: false
    WebKitLegacy:
      default: false
    WebKit:
      default: false
  disableInLockdownMode: true
  sharedPreferenceForWebProcess: true

ReadableByteStreamAPIEnabled:
  type: bool
  status: testable
  category: dom
  humanReadableName: "ReadableByteStream"
  humanReadableDescription: "Enable Readable Byte Streams"
  webcoreBinding: DeprecatedGlobalSettings
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false

RemoteMediaSessionManagerEnabled:
  type: bool
  status: unstable
  category: media
  humanReadableName: "Remote MediaSessionManager"
  humanReadableDescription: "Enable MediaSessionManager in the GPU process"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false
  disableInLockdownMode: true
  sharedPreferenceForWebProcess: true

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

RemoteSnapshottingEnabled:
   type: bool
   status: testable
   category: media
   humanReadableName: "Remote Snapshotting"
   defaultValue:
     WebKitLegacy:
       default: false
     WebKit:
       default: false
     WebCore:
       default: false

RemoveBackgroundEnabled:
  type: bool
  # FIXME: Change to "embedder" when there is a way to enable/disable embedder features from API tests.
  status: internal
  category: dom
  humanReadableName: "Remove Background"
  humanReadableDescription: "Enable Remove Background"
  condition: ENABLE(IMAGE_ANALYSIS_ENHANCEMENTS)
  exposed: [ WebKit ]
  defaultValue:
    WebCore:
      default: false
    WebKitLegacy:
      default: false
    WebKit:
      default: defaultRemoveBackgroundEnabled()

ReplayCGDisplayListsIntoBackingStore:
  type: bool
  status: internal
  humanReadableName: "Dynamic Content Scaling: Replay for Testing"
  humanReadableDescription: "Replay Dynamic Content Scaling Display Lists into layer contents for testing"
  webcoreBinding: none
  condition: ENABLE(RE_DYNAMIC_CONTENT_SCALING)
  exposed: [ WebKit ]
  defaultValue:
    WebKit:
      default: false

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

RequestStorageAccessThrowsExceptionUntilReload:
  type: bool
  status: unstable
  category: dom
  humanReadableName: "requestStorageAccess throws execption until reload"
  humanReadableDescription: "requestStorageAccess throws execption until reload"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

RequestVideoFrameCallbackEnabled:
  type: bool
  status: mature
  category: media
  humanReadableName: "RequestVideoFrameCallback"
  humanReadableDescription: "Enable RequestVideoFrameCallback API"
  defaultValue:
    WebKitLegacy:
      "PLATFORM(COCOA) && HAVE(AVSAMPLEBUFFERVIDEOOUTPUT)" : true
      default: false
    WebKit:
      "PLATFORM(COCOA) && HAVE(AVSAMPLEBUFFERVIDEOOUTPUT)" : true
      "USE(GSTREAMER)": true
      default: false
    WebCore:
      "PLATFORM(COCOA) && HAVE(AVSAMPLEBUFFERVIDEOOUTPUT)" : true
      "USE(GSTREAMER)": true
      default: false

RequireUAGetDisplayMediaPrompt:
  type: bool
  status: internal
  humanReadableName: "Require User Agent getDisplayMedia prompt"
  humanReadableDescription: "Require and use User Agent getDisplayMedia prompt"
  condition: HAVE(SC_CONTENT_SHARING_PICKER)
  defaultValue:
    WebKit:
      default: true
    WebCore:
      default: true

RequiresPageVisibilityForVideoToBeNowPlaying:
  type: bool
  status: embedder
  condition: ENABLE(REQUIRES_PAGE_VISIBILITY_FOR_NOW_PLAYING)
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: defaultRequiresPageVisibilityForVideoToBeNowPlaying()
    WebCore:
      default: false

RequiresPageVisibilityToPlayAudio:
  type: bool
  status: embedder
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

RequiresUserGestureForAudioPlayback:
  type: bool
  status: embedder
  webKitLegacyPreferenceKey: WebKitAudioPlaybackRequiresUserGesture
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      "PLATFORM(IOS_FAMILY)": true
      default: false
    WebCore:
      PLATFORM(IOS_FAMILY): true
      default: false

RequiresUserGestureForMediaPlayback:
  type: bool
  status: embedder
  webKitLegacyPreferenceKey: WebKitMediaPlaybackRequiresUserGesture
  webcoreBinding: none
  defaultValue:
    WebKitLegacy:
      "PLATFORM(IOS_FAMILY)": true
      default: false
    WebKit:
      default: false

RequiresUserGestureForVideoPlayback:
  type: bool
  status: embedder
  webKitLegacyPreferenceKey: WebKitVideoPlaybackRequiresUserGesture
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

RequiresUserGestureToLoadVideo:
  type: bool
  status: embedder
  defaultValue:
    WebKitLegacy:
      "PLATFORM(IOS_FAMILY)": WebKit::defaultRequiresUserGestureToLoadVideo()
      default: false
    WebKit:
      default: false
    WebCore:
      "PLATFORM(IOS_FAMILY)": true
      default: false

ResourceLoadSchedulingEnabled:
  type: bool
  status: internal
  category: networking
  humanReadableName: "Resource Load Scheduling"
  humanReadableDescription: "Network process side priority and visibility based resource load scheduling"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: true
    WebCore:
      default: true

ResourceUsageOverlayVisible:
  type: bool
  status: internal
  category: networking
  defaultsOverridable: true
  humanReadableName: "Resource usage overlay"
  humanReadableDescription: "Make resource usage overlay visible"
  condition: ENABLE(RESOURCE_USAGE)
  webcoreOnChange: resourceUsageOverlayVisibleChanged
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

RespondToThermalPressureAggressively:
  type: bool
  status: internal
  defaultsOverridable: true
  humanReadableName: "Respond to thermal pressure aggressively"
  humanReadableDescription: "Enable responding to thermal pressure aggressively"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

RubberBandingForSubScrollableRegionsEnabled:
  type: bool
  status: embedder
  condition: HAVE(RUBBER_BANDING)
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: true
    WebCore:
      default: true

SKAttributionEnabled:
  type: bool
  status: embedder
  humanReadableName: "SKAttribution"
  humanReadableDescription: "SKAttribution"
  defaultValue:
    WebCore:
      default: true
    WebKitLegacy:
      default: true
    WebKit:
      default: true

SWVPDecodersAlwaysEnabled:
  type: bool
  status: internal
  category: media
  humanReadableName: "Always enable VPx software decoders"
  humanReadableDescription: "Always enable VPx software decoders"
  webcoreBinding: none
  condition: ENABLE(VP9)
  defaultValue:
    WebKit:
      default: false

SafeBrowsingEnabled:
  type: bool
  status: embedder
  humanReadableName: "Safe Browsing"
  humanReadableDescription: "Enable Safe Browsing"
  webcoreBinding: none
  exposed: [ WebKit ]
  defaultValue:
    WebKit:
      default: true

SampledPageTopColorMaxDifference:
  type: double
  status: embedder
  defaultValue:
    WebKitLegacy:
      default: 0
    WebKit:
      default: 0
    WebCore:
      default: 0

SampledPageTopColorMinHeight:
  type: double
  status: embedder
  defaultValue:
    WebKitLegacy:
      default: 0
    WebKit:
      default: 0
    WebCore:
      default: 0

SansSerifFontFamily:
  type: String
  status: embedder
  webKitLegacyPreferenceKey: WebKitSansSerifFont
  webcoreImplementation: custom
  defaultValue:
    WebKitLegacy:
      default: '"Helvetica"_str'
    WebKit:
      default: '"Helvetica"_str'
    WebCore:
      default: '""_str'

ScopedCustomElementRegistryEnabled:
  type: bool
  status: stable
  category: dom
  humanReadableName: "Scoped custom element registry"
  humanReadableDescription: "Enable scoped custom element registry"
  defaultValue:
    WebKitLegacy:
      "PLATFORM(COCOA)": true
      default: false
    WebKit:
      "PLATFORM(COCOA)": true
      default: false
    WebCore:
      "PLATFORM(COCOA)": true
      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
  status: mature
  category: media
  condition: ENABLE(MEDIA_STREAM)
  humanReadableName: "ScreenCapture"
  humanReadableDescription: "Enable ScreenCapture"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      "PLATFORM(MAC) || USE(GSTREAMER)": true
      default: false
    WebCore:
      default: false

ScreenOrientationAPIEnabled:
  type: bool
  status: stable
  category: dom
  humanReadableName: "Screen Orientation API"
  humanReadableDescription: "Enable Screen Orientation API"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: WebKit::defaultShouldEnableScreenOrientationAPI()
    WebCore:
      default: false
  sharedPreferenceForWebProcess: true
  richJavaScript: true

ScreenOrientationLockingAPIEnabled:
  type: bool
  status: testable
  category: dom
  humanReadableName: "Screen Orientation API (Locking / Unlocking)"
  humanReadableDescription: "Enable Screen Orientation API (Locking / Unlocking)"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

ScreenTimeEnabled:
  type: bool
  status: internal
  condition: ENABLE(SCREEN_TIME)
  humanReadableName: "Screen Time"
  humanReadableDescription: "Enable Screen Time"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: defaultScreenTimeEnabled()
    WebCore:
      default: false

ScreenWakeLockAPIEnabled:
  type: bool
  status: stable
  category: dom
  humanReadableName: "Screen Wake Lock API"
  humanReadableDescription: "Enable Screen Wake Lock API"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: true
    WebCore:
      default: false

ScriptTrackingPrivacyLoggingEnabled:
  type: bool
  status: internal
  humanReadableName: "Script Tracking Privacy Logging"
  humanReadableDescription: "Script tracking privacy logging enabled"
  exposed: [ WebKit ]
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

ScriptTrackingPrivacyProtectionsEnabled:
  type: bool
  status: internal
  humanReadableName: "Script Tracking Privacy Protections"
  humanReadableDescription: "Script tracking privacy protections enabled"
  exposed: [ WebKit ]
  webcoreBinding: none
  defaultValue:
    WebKit:
      default: true

ScrollAnimatorEnabled:
  type: bool
  status: embedder
  humanReadableName: "Scroll animator"
  humanReadableDescription: "Enable scroll animator"
  defaultValue:
    WebKitLegacy:
      "PLATFORM(MAC)": WebKit::defaultScrollAnimatorEnabled()
      "PLATFORM(GTK) || PLATFORM(WPE)": true
      default: false
    WebKit:
      "PLATFORM(MAC)": WebKit::defaultScrollAnimatorEnabled()
      "PLATFORM(GTK) || PLATFORM(WPE)": true
      default: false
    WebCore:
      default: false

ScrollDrivenAnimationsEnabled:
  type: bool
  status: stable
  category: animation
  humanReadableName: "Scroll-driven Animations"
  humanReadableDescription: "Enable Scroll-driven Animations"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: true
    WebCore:
      default: true

ScrollToTextFragmentEnabled:
  type: bool
  status: stable
  category: dom
  humanReadableName: "Scroll To Text Fragment"
  humanReadableDescription: "Enable Scroll To Text Fragment"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: true
    WebCore:
      default: true

ScrollToTextFragmentFeatureDetectionEnabled:
  type: bool
  status: stable
  category: dom
  humanReadableName: "Scroll To Text Fragment Feature Detection"
  humanReadableDescription: "Enable Scroll To Text Fragment Feature Detection"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: true
    WebCore:
      default: true

ScrollToTextFragmentGenerationEnabled:
  type: bool
  status: stable
  category: dom
  humanReadableName: "Scroll To Text Fragment Generation"
  humanReadableDescription: "Enable Scroll To Text Fragment Generation Menu"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: true
    WebCore:
      default: true

ScrollToTextFragmentIndicatorEnabled:
  type: bool
  status: embedder
  humanReadableName: "Scroll To Text Fragment Indicator"
  humanReadableDescription: "Enable Scroll To Text Fragment Indicator"
  defaultValue:
    WebKit:
      default: true
    WebKitLegacy:
      default: true
    WebCore:
      default: true

ScrollToTextFragmentMarkingEnabled:
  type: bool
  status: embedder
  humanReadableName: "Scroll To Text Fragment Marking"
  humanReadableDescription: "Enable Scroll To Text Fragment Marking"
  defaultValue:
    WebKit:
      default: true
    WebKitLegacy:
      default: true
    WebCore:
      default: true
      
ScrollendEventEnabled:
  type: bool
  status: testable
  category: dom
  humanReadableName: "scrollend event"
  humanReadableDescription: "Enable scrollend event"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

ScrollingPerformanceTestingEnabled:
  type: bool
  status: internal
  humanReadableName: "Scroll Performance Testing Enabled"
  humanReadableDescription: "Enable behaviors used by scrolling performance tests"
  webcoreOnChange: scrollingPerformanceTestingEnabledChanged
  exposed: [ WebKit ]
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

SecureContextChecksEnabled:
  type: bool
  status: internal
  category: security
  humanReadableName: "Secure Context Checks"
  humanReadableDescription: "Allow access to HTTPS-only Web APIs over HTTP"
  defaultValue:
    WebKitLegacy:
      default: true
    WebKit:
      default: true
    WebCore:
      default: true

SelectShowPickerEnabled:
  type: bool
  status: testable
  category: dom
  humanReadableName: "<select> showPicker() method"
  humanReadableDescription: "Enable showPicker() method on <select>"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

# FIXME: This is handled via WebView SPI rather than WebPreferences for WebKitLegacy. We should change the SPI to lookup the WebPreferences value instead.
SelectTrailingWhitespaceEnabled:
  type: bool
  status: embedder
  webKitLegacyBinding: custom
  defaultValue:
    WebKit:
      default: false
    WebKitLegacy:
      default: false
    WebCore:
      default: false

SelectionFlippingEnabled:
  type: bool
  status: embedder
  humanReadableName: "Selection Flipping"
  humanReadableDescription: "Enable Selection Flipping"
  webcoreBinding: none
  defaultValue:
    WebKit:
      "PLATFORM(VISION)" : false
      default: true

SelectionHonorsOverflowScrolling:
  type: bool
  status: internal
  humanReadableName: "Selection Honors Overflow Scrolling"
  humanReadableDescription: "Selection honors overflow scrolling"
  condition: PLATFORM(IOS_FAMILY)
  exposed: [ WebKit ]
  defaultValue:
    WebKit:
      "ENABLE(SELECTION_HONORS_OVERFLOW_SCROLLING_BY_DEFAULT)" : true
      default: false
    WebKitLegacy:
      default: false
    WebCore:
      default: false

SerifFontFamily:
  type: String
  status: embedder
  webKitLegacyPreferenceKey: WebKitSerifFont
  webcoreImplementation: custom
  defaultValue:
    WebKitLegacy:
      default: '"Times"_str'
    WebKit:
      default: '"Times"_str'
    WebCore:
      default: '""_str'

ServiceControlsEnabled:
  type: bool
  status: embedder
  condition: ENABLE(SERVICE_CONTROLS)
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

ServiceWorkerEntitlementDisabledForTesting:
  type: bool
  status: embedder
  webcoreBinding: none
  exposed: [ WebKit ]
  defaultValue:
    WebKit:
      default: false

ServiceWorkerInstallEventEnabled:
  type: bool
  status: testable
  category: networking
  humanReadableName: "Service Worker Install Event"
  humanReadableDescription: "Enable Service Worker Install Event API"
  defaultValue:
    WebKit:
      default: false
    WebKitLegacy:
      default: false
    WebCore:
      default: false
  disableInLockdownMode: true

ServiceWorkerNavigationPreloadEnabled:
  type: bool
  status: stable
  category: networking
  humanReadableName: "Service Worker Navigation Preload"
  humanReadableDescription: "Enable Service Worker Navigation Preload API"
  defaultValue:
    WebCore:
      default: true
    WebKitLegacy:
      default: false
    WebKit:
      default: true
  sharedPreferenceForWebProcess: true
  disableInLockdownMode: true

ServiceWorkersEnabled:
  type: bool
  status: stable
  category: dom
  humanReadableName: "Service Workers"
  humanReadableDescription: "Enable Service Workers"
  exposed: [ WebKit ]
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: true
    WebCore:
      default: false
  sharedPreferenceForWebProcess: true
  disableInLockdownMode: true

ServiceWorkersUserGestureEnabled:
  type: bool
  status: internal
  category: dom
  humanReadableName: "Validate UserGesture requirements in Service Workers"
  humanReadableDescription: "Validate UserGesture requirements in Service Workers"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: true
    WebCore:
      default: true

ShadowRootReferenceTargetEnabled:
  type: bool
  status: testable
  category: dom
  humanReadableName: "referenceTarget"
  humanReadableDescription: "Enable setting a referenceTarget on shadow roots"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false
  sharedPreferenceForWebProcess: true

ShadowRootReferenceTargetEnabledForAriaOwns:
  type: bool
  status: testable
  category: dom
  humanReadableName: "referenceTarget support for aria-owns"
  humanReadableDescription: "Enable referenceTarget support for aria-owns and ariaOwnsElements"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false
  sharedPreferenceForWebProcess: true

# When enabling this, don't enable on watchOS or the macOS base system (which don't have Vision.framework).
# You can detect these by running isVisionFrameworkAvailable().
ShapeDetection:
  type: bool
  category: media
  status: testable
  humanReadableName: "Shape Detection API"
  humanReadableDescription: "Enable the Shape Detection API"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false
  sharedPreferenceForWebProcess: true
  richJavaScript: true

SharedWorkerEnabled:
  type: bool
  status: stable
  category: dom
  humanReadableName: "SharedWorker"
  humanReadableDescription: "Enabled SharedWorker API"
  defaultValue:
    WebCore:
      default: false
    WebKitLegacy:
      default: false
    WebKit:
      default: true
  sharedPreferenceForWebProcess: true

ShouldAllowUserInstalledFonts:
  type: bool
  status: embedder
  webcoreOnChange: setNeedsRecalcStyleInAllFrames
  defaultValue:
    WebKitLegacy:
      default: true
    WebKit:
      default: true
    WebCore:
      default: true

ShouldConvertInvalidURLsToBlank:
  type: bool
  status: embedder
  defaultValue:
    WebKitLegacy:
      default: WebKit::defaultShouldConvertInvalidURLsToBlank()
    WebKit:
      default: true
    WebCore:
      default: true

ShouldConvertPositionStyleOnCopy:
  type: bool
  status: embedder
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

ShouldDecidePolicyBeforeLoadingQuickLookPreview:
  type: bool
  status: embedder
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

ShouldDeferAsynchronousScriptsUntilAfterDocumentLoadOrFirstPaint:
  type: bool
  status: stable
  category: dom
  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

ShouldDisplayCaptions:
  type: bool
  status: embedder
  condition: ENABLE(VIDEO)
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

ShouldDisplaySubtitles:
  type: bool
  status: embedder
  condition: ENABLE(VIDEO)
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

ShouldDisplayTextDescriptions:
  type: bool
  status: embedder
  condition: ENABLE(VIDEO)
  defaultValue: 
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

ShouldDropNearSuspendedAssertionAfterDelay:
  type: bool
  status: internal
  humanReadableName: "Drop Near-Suspended Assertion After Delay"
  humanReadableDescription: "Causes processes to fully suspend after a delay"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: WebKit::defaultShouldDropNearSuspendedAssertionAfterDelay()
    WebCore:
      default: false

ShouldEnableTextAutosizingBoost:
  type: bool
  status: embedder
  webcoreOnChange: shouldEnableTextAutosizingBoostChanged
  condition: ENABLE(TEXT_AUTOSIZING)
  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 (though we should still set the default value to false when initializing settings).
ShouldIgnoreMetaViewport:
  type: bool
  status: embedder
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

ShouldPrintBackgrounds:
  type: bool
  status: embedder
  webKitLegacyPreferenceKey: WebKitShouldPrintBackgroundsPreferenceKey
  defaultValue:
    WebKitLegacy:
      "PLATFORM(IOS_FAMILY)": true
      default: false
    WebKit:
      "PLATFORM(IOS_FAMILY)": WebKit::defaultShouldPrintBackgrounds()
      "PLATFORM(GTK) || PLATFORM(WPE)": true
      default: false
    WebCore:
      default: false

ShouldRespectImageOrientation:
  type: bool
  status: embedder
  defaultValue:
    WebKitLegacy:
      "PLATFORM(IOS_FAMILY)": true
      default: false
    WebKit:
      "PLATFORM(IOS_FAMILY) || PLATFORM(GTK) || PLATFORM(WPE)": true
      default: false
    WebCore:
      "PLATFORM(IOS_FAMILY) || PLATFORM(GTK) || PLATFORM(WPE)": true
      default: false

ShouldRestrictBaseURLSchemes:
  type: bool
  status: embedder
  defaultValue:
    WebKitLegacy:
      default: WebKit::defaultShouldRestrictBaseURLSchemes()
    WebKit:
      default: false
    WebCore:
      default: true

ShouldSuppressTextInputFromEditingDuringProvisionalNavigation:
  type: bool
  status: embedder
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

ShouldTakeNearSuspendedAssertions:
  type: bool
  status: internal
  category: dom
  humanReadableName: "Take WebKit:NearSuspended assertions on background web content processes"
  humanReadableDescription: "Take WebKit:NearSuspended assertions on background web content processes"
  exposed: [ WebKit ]
  defaultValue:
    WebKitLegacy:
      default: true
    WebKit:
      default: defaultShouldTakeNearSuspendedAssertion()
    WebCore:
      default: true

ShouldUseModernAVContentKeySession:
  type: bool
  status: internal
  category: media
  humanReadableName: "Modern AVContentKeySession"
  humanReadableDescription: "Use modern AVContentKeySession"
  webcoreOnChange: shouldUseModernAVContentKeySessionChanged
  condition: USE(MODERN_AVCONTENTKEYSESSION)
  defaultValue:
    WebKitLegacy:
      default: true
    WebKit:
      default: true
    WebCore:
      default: true

# FIXME: This is not relevent for WebKitLegacy, so should be excluded from WebKitLegacy entirely (though we should still set the default value to false when initializing settings).
# FIXME: This is not used in WebCore, so should not have a binding to WebCore::Settings.
ShouldUseServiceWorkerShortTimeout:
  type: bool
  status: embedder
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

ShowFrameProcessBordersEnabled:
  type: bool
  status: internal
  defaultsOverridable: true
  humanReadableName: "Show frame process borders"
  webcoreName: showFrameProcessBorders
  webcoreOnChange: setNeedsRecalcStyleInAllFrames
  inspectorOverride: true
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

ShowMediaStatsContextMenuItemEnabled:
  type: bool
  status: developer
  category: media
  humanReadableName: "Show Media Stats"
  humanReadableDescription: "Adds a 'Media Stats' context menu item to <video> when the Develop menu is enabled"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

ShowModalDialogEnabled:
  type: bool
  status: developer
  category: dom
  humanReadableName: "Legacy showModalDialog() API"
  humanReadableDescription: "Legacy showModalDialog() API"
  defaultValue:
    WebKitLegacy:
      "PLATFORM(IOS_FAMILY)": WebKit::defaultShowModalDialogEnabled()
      default: false
    WebKit:
      default: WebKit::defaultShowModalDialogEnabled()
    WebCore:
      default: false

ShowsToolTipOverTruncatedText:
  type: bool
  status: embedder
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

ShowsURLsInToolTipsEnabled:
  type: bool
  status: embedder
  webKitLegacyPreferenceKey: WebKitShowsURLsInToolTips
  webcoreName: showsURLsInToolTips
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

ShrinksStandaloneImagesToFit:
  type: bool
  status: embedder
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: true
    WebCore:
      default: true

SidewaysWritingModesEnabled:
  type: bool
  status: stable
  category: css
  humanReadableName: "Sideways writing modes"
  humanReadableDescription: "Enable support for sideways writing modes"
  defaultValue:
    WebKitLegacy:
      default: true
    WebKit:
      default: true
    WebCore:
      default: true

SiteIsolationEnabled:
  type: bool
  status: unstable
  category: security
  humanReadableName: "Site Isolation"
  humanReadableDescription: "Put cross-origin iframes in a different process"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false
  sharedPreferenceForWebProcess: true

SiteIsolationSharedProcessEnabled:
  type: bool
  status: unstable
  category: security
  humanReadableName: "Shared process for Site Isolation"
  humanReadableDescription: "Put cross-site frames in a shared Web process"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false
  sharedPreferenceForWebProcess: true

# FIXME: This is handled via WebView SPI rather than WebPreferences for WebKitLegacy. We should change the SPI to lookup the WebPreferences value instead.
SmartInsertDeleteEnabled:
  type: bool
  status: embedder
  webKitLegacyBinding: custom
  defaultValue:
    WebKit:
      default: true
    WebKitLegacy:
      default: true
    WebCore:
      default: true

SourceBufferChangeTypeEnabled:
  type: bool
  status: embedder
  condition: ENABLE(MEDIA_SOURCE)
  defaultValue:
    WebKitLegacy:
      default: true
    WebKit:
      "USE(GSTREAMER)": false
      default: true
    WebCore:
      "USE(GSTREAMER)": false
      default: true

SpatialImageControlsEnabled:
  type: bool
  status: testable
  category: media
  condition: ENABLE(SPATIAL_IMAGE_CONTROLS)
  humanReadableName: "Spatial image controls API"
  humanReadableDescription: "Spatial image controls API"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

SpatialNavigationEnabled:
  type: bool
  status: embedder
  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.
SpeakerSelectionRequiresUserGesture:
  type: bool
  status: internal
  category: media
  humanReadableName: "Require a user gesture for speaker selection"
  humanReadableDescription: "Require a user gesture for speaker selection"
  condition: ENABLE(MEDIA_STREAM)
  defaultValue:
    WebKitLegacy:
      default: true
    WebKit:
      default: true
    WebCore:
      default: true

SpeechRecognitionEnabled:
  type: bool
  status: mature
  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
  disableInLockdownMode: true
  sharedPreferenceForWebProcess: true
  richJavaScript: true

SpeechSynthesisAPIEnabled:
  type: bool
  status: embedder
  humanReadableName: "SpeechSynthesis API"
  humanReadableDescription: "SpeechSynthesis API"
  defaultValue:
    WebKitLegacy:
      default: true
    WebKit:
      default: true
    WebCore:
      default: true
  disableInLockdownMode: true
  sharedPreferenceForWebProcess: true
  richJavaScript: true

SpringTimingFunctionEnabled:
  type: bool
  status: unstable
  category: css
  humanReadableName: "CSS Spring Animations"
  humanReadableDescription: "CSS Spring Animation prototype"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      "ENABLE(EXPERIMENTAL_FEATURES)" : true
      default: false
    WebCore:
      default: false

Standalone:
  type: bool
  status: embedder
  webKitLegacyPreferenceKey: WebKitStandalonePreferenceKey
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

StandardFontFamily:
  type: String
  status: embedder
  webKitLegacyPreferenceKey: WebKitStandardFont
  webcoreImplementation: custom
  defaultValue:
    WebKitLegacy:
      default: '"Times"_str'
    WebKit:
      "PLATFORM(WATCHOS)": '"system-ui"_str'
      default: '"Times"_str'
    WebCore:
      default: '""_str'

StorageAPIEnabled:
  type: bool
  status: stable
  category: dom
  humanReadableName: "Storage API"
  humanReadableDescription: "Enable Storage API"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      "PLATFORM(COCOA)" : true
      default: false
    WebCore:
      "PLATFORM(COCOA)" : true
      default: false

StorageAPIEstimateEnabled:
  type: bool
  status: stable
  category: dom
  humanReadableName: "Storage API Estimate"
  humanReadableDescription: "Enable Storage API Estimate"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      "PLATFORM(COCOA)" : true
      default: false
    WebCore:
      "PLATFORM(COCOA)" : true
      default: false

StorageBlockingPolicy:
  type: uint32_t
  humanReadableName: "Storage Blocking Policy"
  refinedType: WebCore::StorageBlockingPolicy
  status: embedder
  webcoreOnChange: storageBlockingPolicyChanged
  defaultValue:
    WebKitLegacy:
      default: WebAllowAllStorage
    WebKit:
      default: WebCore::StorageBlockingPolicy::BlockThirdParty
    WebCore:
      default: StorageBlockingPolicy::AllowAll

SupportHDRCompositorTonemappingEnabled:
  type: bool
  status: testable
  category: media
  webcoreOnChange: updateDisplayEDRHeadroom
  humanReadableName: "Support HDR Compositor tonemapping"
  humanReadableDescription: "Support HDR tonemapping during compositing"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

SupportHDRDisplayEnabled:
  type: bool
  status: Supporthdrdisplay_feature_status
  category: media
  webcoreOnChange: setNeedsRelayoutAllFrames
  humanReadableName: "Support HDR Display"
  humanReadableDescription: "Support HDR Display"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      "ENABLE(SUPPORT_HDR_DISPLAY_BY_DEFAULT)": true
      default: false
    WebCore:
      "ENABLE(SUPPORT_HDR_DISPLAY_BY_DEFAULT)": true
      default: false

SuppressesIncrementalRendering:
  type: bool
  status: embedder
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

SwitchControlEnabled:
  type: bool
  status: stable
  category: html
  humanReadableName: "HTML switch control"
  humanReadableDescription: "Enable HTML switch control"
  defaultValue:
    WebKitLegacy:
      "PLATFORM(COCOA)": true
      default: false
    WebKit:
      "PLATFORM(COCOA)": true
      default: false
    WebCore:
      "PLATFORM(COCOA)": true
      default: false

# FIXME: There is no custom binding implemented for WebKitLegacy.
SystemLayoutDirection:
  type: uint32_t
  refinedType: WebCore::TextDirection
  status: embedder
  defaultValue:
    WebKitLegacy:
      default: TextDirection::LTR
    WebKit:
      default: TextDirection::LTR
    WebCore:
      default: TextDirection::LTR

# FIXME: Is this implemented for WebKitLegacy? If not, this should be excluded from WebKitLegacy entirely (though we should still set the default value to false when initializing settings).
SystemPreviewEnabled:
  type: bool
  status: embedder
  condition: USE(SYSTEM_PREVIEW)
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false
  disableInLockdownMode: true
  sharedPreferenceForWebProcess: true

TabsToLinks:
  type: bool
  status: embedder
  webKitLegacyPreferenceKey: WebKitTabToLinksPreferenceKey
  webcoreBinding: none
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      "PLATFORM(GTK) || PLATFORM(WPE)": true
      default: false

TargetTextPseudoElementEnabled:
  type: bool
  status: stable
  category: css
  humanReadableName: "::target-text pseudo-element"
  humanReadableDescription: "Enable the ::target-text CSS pseudo-element"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: true
    WebCore:
      default: true

TelephoneNumberParsingEnabled:
  type: bool
  status: embedder
  webKitLegacyPreferenceKey: WebKitTelephoneParsingEnabledPreferenceKey
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

TemporaryTileCohortRetentionEnabled:
  type: bool
  status: embedder
  defaultValue:
    WebKitLegacy:
      default: true
    WebKit:
      "PLATFORM(IOS_FAMILY)": false
      default: true
    WebCore:
      default: true

TextAnimationsEnabled:
  type: bool
  status: internal
  humanReadableName: "Text Animations"
  humanReadableDescription: "Text Animations"
  condition: ENABLE(WRITING_TOOLS)
  defaultValue:
    WebKitLegacy:
      default: true
    WebKit:
      default: true
    WebCore:
      default: true

TextAreasAreResizable:
  type: bool
  status: embedder
  webcoreOnChange: setNeedsRecalcStyleInAllFrames
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      "PLATFORM(IOS_FAMILY)": false
      default: true
    WebCore:
      default: false

TextAutosizingEnabled:
  type: bool
  status: embedder
  webcoreOnChange: setNeedsRecalcStyleInAllFrames
  condition: ENABLE(TEXT_AUTOSIZING)
  defaultValue:
    WebKitLegacy:
      "PLATFORM(IOS_FAMILY)": true
      default: false
    WebKit:
      "PLATFORM(IOS_FAMILY)": true
      default: false
    WebCore:
      "PLATFORM(IOS_FAMILY)": true
      default: false

TextAutosizingEnabledAtLargeInitialScale:
  type: bool
  status: embedder
  webcoreOnChange: setNeedsRecalcStyleInAllFrames
  humanReadableName: "Enable Text Autosizing at Large Initial Scale"
  humanReadableDescription: "Enable Text Autosizing at Large Initial Scale"
  condition: ENABLE(TEXT_AUTOSIZING)
  defaultValue:
    WebCore:
      "ENABLE(TEXT_AUTOSIZING_BASED_ON_INITIAL_SCALE)": false
      default: true

# FIXME: Is this implemented for WebKitLegacy? If not, this should be excluded from WebKitLegacy entirely.
TextAutosizingUsesIdempotentMode:
  type: bool
  status: embedder
  webcoreOnChange: textAutosizingUsesIdempotentModeChanged
  humanReadableName: "Idempotent Text Autosizing"
  humanReadableDescription: "Use idempotent text autosizing mode"
  condition: ENABLE(TEXT_AUTOSIZING)
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      "PLATFORM(IOS_FAMILY) && !PLATFORM(VISION)": defaultTextAutosizingUsesIdempotentMode()
      default: false
    WebCore:
      default: false

TextExtractionEnabled:
  type: bool
  status: embedder
  webcoreBinding: none
  exposed: [ WebKit ]
  defaultValue:
    WebKit:
      "HAVE(UIINTELLIGENCESUPPORT_FRAMEWORK)": true
      default: false

TextInteractionEnabled:
  type: bool
  status: embedder
  defaultValue:
    WebKitLegacy:
      "PLATFORM(WATCHOS)": false
      default: true
    WebKit:
      "PLATFORM(WATCHOS)": false
      default: true
    WebCore:
      "PLATFORM(WATCHOS)": false
      default: true

TextRecognitionInVideosEnabled:
  type: bool
  # FIXME: Change to "embedder" when there is a way to enable/disable embedder features from API tests.
  status: internal
  category: media
  humanReadableName: "Text Recognition in Videos"
  humanReadableDescription: "Enable Text Recognition in Videos"
  condition: ENABLE(IMAGE_ANALYSIS) && ENABLE(VIDEO)
  exposed: [ WebKit ]
  defaultValue:
    WebCore:
      default: false
    WebKitLegacy:
      default: false
    WebKit:
      default: defaultTextRecognitionInVideosEnabled()
  sharedPreferenceForWebProcess: true
  mediaPlaybackRelated: true

TextTracksInMSEEnabled:
  type: bool
  status: testable
  category: media
  humanReadableName: "Text Tracks in MSE"
  humanReadableDescription: "Enable Text Tracks in Media Source Extension"
  condition: ENABLE(MEDIA_SOURCE)
  defaultValue:
    WebCore:
      default: false
    WebKitLegacy:
      default: false
    WebKit:
      default: false

ThreadedAnimationResolutionEnabled:
  type: bool
  status: unstable
  category: animation
  humanReadableName: "Threaded animation resolution"
  humanReadableDescription: "Run accelerated animations on a separate thread"
  condition: ENABLE(THREADED_ANIMATION_RESOLUTION)
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

ThreadedScrollingEnabled:
  type: bool
  status: embedder
  webcoreBinding: none
  exposed: [ WebKit ]
  defaultValue:
    WebKit:
      default: true

ThumbAndTrackPseudoElementsEnabled:
  type: bool
  status: testable
  category: css
  humanReadableName: "::thumb and ::track pseudo-elements"
  humanReadableDescription: "Enable support for CSS ::thumb and ::track pseudo-elements"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

# FIXME: This is not relevent for WebKitLegacy, so should be excluded from WebKitLegacy entirely.
TiledScrollingIndicatorVisible:
  type: bool
  status: internal
  defaultsOverridable: true
  humanReadableName: "Tiled scrolling indicator"
  humanReadableDescription: "Make tiled scrolling indicator visible"
  webcoreName: showTiledScrollingIndicator
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

TopContentInsetBackgroundCanChangeAfterScrolling:
  type: bool
  status: internal
  humanReadableName: "Top Content Inset Background Can Change After Scrolling"
  humanReadableDescription: "Top content inset background can change after scrolling"
  defaultValue:
    WebKit:
      default: WebKit::defaultTopContentInsetBackgroundCanChangeAfterScrolling()
    WebKitLegacy:
      default: false
    WebCore:
      default: false

TouchEventDOMAttributesEnabled:
  type: bool
  status: embedder
  humanReadableName: "Touch Event DOM Attributes"
  humanReadableDescription: "Enable Touch Event DOM Attributes"
  condition: ENABLE(TOUCH_EVENTS)
  defaultValue:
    WebCore:
      default: WebCore::screenHasTouchDevice()

TouchInputCompatibilityEnabled:
  type: bool
  status: testable
  category: dom
  humanReadableName: "Touch Input Compatibility"
  humanReadableDescription: "Touch Input Compatibility"
  condition: ENABLE(WEBXR)
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

TrackConfigurationEnabled:
  type: bool
  status: testable
  category: media
  humanReadableName: "Track Configuration API"
  humanReadableDescription: "Track Configuration API"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

TreatsAnyTextCSSLinkAsStylesheet:
  type: bool
  status: embedder
  defaultValue:
    WebKitLegacy:
      PLATFORM(MAC): WebKit::defaultTreatsAnyTextCSSLinkAsStylesheet()
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

TrustedTypesEnabled:
  type: bool
  status: stable
  category: dom
  humanReadableName: "Trusted Types"
  humanReadableDescription: "Enable Trusted Types"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: WebKit::defaultTrustedTypesEnabled()
    WebCore:
      default: true

UAVisualTransitionDetectionEnabled:
  type: bool
  status: stable
  category: dom
  humanReadableName: "Detect UA visual transitions"
  humanReadableDescription: "Enable detection of UA visual transitions"
  defaultValue:
    WebKitLegacy:
      default: true
    WebKit:
      default: true
    WebCore:
      default: true

URLPatternAPIEnabled:
  type: bool
  category: dom
  status: stable
  humanReadableName: "URL Pattern API"
  humanReadableDescription: "Enable URL Pattern API"
  defaultValue:
    WebKitLegacy:
      default: true
    WebKit:
      default: true
    WebCore:
      default: true

# FIXME: Is this implemented for WebKitLegacy? If not, this should be excluded from WebKitLegacy entirely.
UndoManagerAPIEnabled:
  type: bool
  status: unstable
  category: dom
  humanReadableName: "UndoManager DOM API"
  humanReadableDescription: "Enable the UndoManager DOM API"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

UnifiedPDFEnabled:
  type: bool
  status: mature
  category: security
  humanReadableName: "Unified PDF Viewer"
  humanReadableDescription: "Enable Unified PDF Viewer"
  condition: ENABLE(UNIFIED_PDF)
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: WebKit::defaultUnifiedPDFEnabled()
    WebCore:
      default: false

UnifyDamagedRegions:
   type: bool
   status: unstable
   category: dom
   humanReadableName: "Unify Damaged Regions"
   humanReadableDescription: "Unify Damaged Regions"
   condition: ENABLE(DAMAGE_TRACKING)
   defaultValue:
     WebKitLegacy:
       default: false
     WebKit:
       "PLATFORM(GTK)": true
       default: false
     WebCore:
       default: false

UpgradeKnownHostsToHTTPSEnabled:
  type: bool
  status: internal
  category: networking
  humanReadableName: "Upgrade known hosts to HTTPS"
  humanReadableDescription: "Upgrade known hosts to HTTPS"
  webcoreBinding: none
  exposed: [ WebKit ]
  defaultValue:
    WebKit:
      default: true

UpgradeMixedContentEnabled:
  type: bool
  status: stable
  category: networking
  humanReadableName: "Upgrade upgradable mixed content"
  humanReadableDescription: "Upgrade upgradable mixed content"
  defaultValue:
    WebKitLegacy:
      default: true
    WebKit:
      default: true
    WebCore:
      default: true

UseARKitForModel:
  type: bool
  status: internal
  humanReadableName: "Use ARKit for <model>"
  humanReadableDescription: "Use ARKit for <model>"
  webcoreBinding: none
  exposed: [ WebKit ]
  condition: ENABLE(ARKIT_INLINE_PREVIEW)
  defaultValue:
    WebKit:
      default: true

UseAVCaptureDeviceRotationCoordinatorAPI:
  type: bool
  status: internal
  humanReadableName: "Use AVCaptureDeviceRotationCoordinator API"
  humanReadableDescription: "Use AVCaptureDeviceRotationCoordinator API"
  webcoreBinding: none
  exposed: [ WebKit ]
  condition: HAVE(AVCAPTUREDEVICEROTATIONCOORDINATOR)
  defaultValue:
    WebKit:
      "PLATFORM(APPLETV)": true
      default: false
  sharedPreferenceForWebProcess: true

UseAsyncUIKitInteractions:
  type: bool
  status: internal
  humanReadableName: "Async UIKit Interactions"
  humanReadableDescription: "Use Async UIKit Interactions"
  condition: PLATFORM(IOS_FAMILY)
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: WebKit::defaultUseAsyncUIKitInteractions()
    WebCore:
      default: false

UseCGDisplayListsForDOMRendering:
  type: bool
  status: internal
  humanReadableName: "Dynamic Content Scaling: DOM Rendering"
  humanReadableDescription: "Use Dynamic Content Scaling for DOM rendering"
  webcoreBinding: none
  condition: ENABLE(RE_DYNAMIC_CONTENT_SCALING)
  exposed: [ WebKit ]
  defaultValue:
    WebKit:
      default: true
  sharedPreferenceForWebProcess: true

UseDamagingInformationForCompositing:
  type: bool
  status: testable
  category: dom
  humanReadableName: "Use the Damaging Information to optimize compositing"
  humanReadableDescription: "Use the Damaging Information to optimize compositing"
  condition: ENABLE(DAMAGE_TRACKING)
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

UseGPUProcessForCanvasRenderingEnabled:
  type: bool
  status: stable
  category: dom
  humanReadableName: "GPU Process: Canvas Rendering"
  humanReadableDescription: "Enable canvas rendering in GPU Process"
  webcoreBinding: none
  condition: ENABLE(GPU_PROCESS) && !(PLATFORM(GTK) || PLATFORM(WPE))
  exposed: [ WebKit ]
  defaultValue:
    WebKit:
      "ENABLE(GPU_PROCESS_BY_DEFAULT)": true
      "USE(GRAPHICS_LAYER_WC)": true
      default: false

UseGPUProcessForDOMRenderingEnabled:
  type: bool
  status: stable
  category: dom
  humanReadableName: "GPU Process: DOM Rendering"
  humanReadableDescription: "Enable DOM rendering in GPU Process"
  webcoreBinding: none
  condition: ENABLE(GPU_PROCESS)
  exposed: [ WebKit ]
  defaultValue:
    WebKit:
      default: defaultUseGPUProcessForDOMRenderingEnabled()
  sharedPreferenceForWebProcess: true

UseGPUProcessForDisplayCapture:
  type: bool
  status: mature
  category: media
  humanReadableName: "GPU Process: Screen and Window capture"
  humanReadableDescription: "Display capture in GPU Process"
  webcoreBinding: none
  condition: HAVE(SCREEN_CAPTURE_KIT)
  exposed: [ WebKit ]
  defaultValue:
    WebKit:
      default: true

UseGPUProcessForMediaEnabled:
  type: bool
  status: embedder
  humanReadableName: "GPU Process: Media"
  humanReadableDescription: "Do all media loading and playback in the GPU Process"
  webcoreBinding: none
  condition: ENABLE(GPU_PROCESS)
  exposed: [ WebKit ]
  defaultValue:
    WebKit:
      "ENABLE(GPU_PROCESS_BY_DEFAULT) && !USE(GSTREAMER)": true
      default: false
  sharedPreferenceForWebProcess: true
  mediaPlaybackRelated: true

UseGPUProcessForWebGLEnabled:
  type: bool
  status: internal
  humanReadableName: "GPU Process: WebGL"
  humanReadableDescription: "Process all WebGL operations in GPU Process"
  condition: ENABLE(GPU_PROCESS) && ENABLE(WEBGL)
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      "ENABLE(GPU_PROCESS_BY_DEFAULT) && ENABLE(GPU_PROCESS_WEBGL_BY_DEFAULT)": true
      "USE(GRAPHICS_LAYER_WC)": true
      default: false
    WebCore:
      "ENABLE(GPU_PROCESS_BY_DEFAULT) && ENABLE(GPU_PROCESS_WEBGL_BY_DEFAULT)": true
      "USE(GRAPHICS_LAYER_WC)": true
      default: false
  sharedPreferenceForWebProcess: true

UseGiantTiles:
  type: bool
  status: embedder
  humanReadableName: "Use giant tiles"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

UseIFCForSVGText:
  type: bool
  status: internal
  humanReadableName: "Use IFC for SVG text"
  humanReadableDescription: "Use IFC for SVG text rendering"
  defaultValue:
    WebCore:
      default: false
    WebKitLegacy:
      default: false
    WebKit:
      default: false

UseImageDocumentForSubframePDF:
  type: bool
  status: embedder
  defaultValue:
    WebKitLegacy:
      PLATFORM(IOS_FAMILY): true
      default: false
    WebKit:
      PLATFORM(IOS_FAMILY): true
      default: false
    WebCore:
      PLATFORM(IOS_FAMILY): true
      default: false

UseMicrophoneMuteStatusAPI:
  type: bool
  status: testable
  category: media
  humanReadableName: "Use Microphone Mute Status API"
  humanReadableDescription: "Use Microphone Mute Status API"
  condition: ENABLE(MEDIA_STREAM)
  defaultValue:
    WebKit:
      default: false
    WebCore:
      default: false

UsePreHTML5ParserQuirks:
  type: bool
  status: embedder
  defaultValue:
    WebKitLegacy:
      PLATFORM(MAC): WebKit::defaultUsePreHTML5ParserQuirks()
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

UseSceneKitForModel:
  type: bool
  status: unstable
  humanReadableName: "Use SceneKit for <model>"
  humanReadableDescription: "Use SceneKit for <model>"
  webcoreBinding: none
  exposed: [ WebKit ]
  condition: HAVE(SCENEKIT)
  defaultValue:
    WebKit:
      default: false

UseSystemAppearance:
  type: bool
  status: embedder
  webcoreOnChange: useSystemAppearanceChanged
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

UserActivationAPIEnabled:
  type: bool
  status: stable
  category: dom
  humanReadableName: "User Activation API"
  humanReadableDescription: "Enable User Activation API"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: true
    WebCore:
      default: false

UserGesturePromisePropagationEnabled:
  type: bool
  status: internal
  category: dom
  humanReadableName: "UserGesture Promise Propagation"
  humanReadableDescription: "UserGesture Promise Propagation"
  defaultValue:
    WebKitLegacy:
      default: true
    WebKit:
      default: true
    WebCore:
      default: true

# FIXME: There is no custom binding implemented for WebKitLegacy.
UserInterfaceDirectionPolicy:
  type: uint32_t
  refinedType: WebCore::UserInterfaceDirectionPolicy
  status: embedder
  defaultValue:
    WebKitLegacy:
      default: UserInterfaceDirectionPolicy::Content
    WebKit:
      default: UserInterfaceDirectionPolicy::Content
    WebCore:
      default: UserInterfaceDirectionPolicy::Content

UsesBackForwardCache:
  type: bool
  status: embedder
  webcoreOnChange: usesBackForwardCacheChanged
  webcoreExcludeFromInternalSettings: true
  webKitLegacyPreferenceKey: WebKitUsesPageCachePreferenceKey
  defaultValue:
    WebKitLegacy:
      default: true
    WebKit:
      default: true
    WebCore:
      default: true

UsesEncodingDetector:
  type: bool
  status: embedder
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

UsesSingleWebProcess:
  type: bool
  status: embedder
  exposed: [ WebKit ]
  webcoreBinding: none
  defaultValue:
    WebKit:
      default: false
  sharedPreferenceForWebProcess: true

UsesWebContentRestrictionsForFilter:
  type: bool
  status: internal
  condition: HAVE(WEBCONTENTRESTRICTIONS)
  defaultsOverridable: true
  humanReadableName: "Uses WebContentRestriction framework for content filter"
  webcoreBinding: DeprecatedGlobalSettings
  defaultValue:
    WebKitLegacy:
      "PLATFORM(IOS_FAMILY) && !PLATFORM(MACCATALYST)": true
      default: false
    WebKit:
      "PLATFORM(IOS_FAMILY) && !PLATFORM(MACCATALYST)": true
      default: false
    WebCore:
      "PLATFORM(IOS_FAMILY) && !PLATFORM(MACCATALYST)": true
      default: false
  sharedPreferenceForWebProcess: true

VP9DecoderEnabled:
  type: bool
  status: embedder
  condition: ENABLE(VP9)
  defaultValue:
    WebCore:
      default: false
    WebKitLegacy:
      default: false
    WebKit:
      default: true

VerifyWindowOpenUserGestureFromUIProcess:
  type: bool
  status: testable
  category: security
  humanReadableName: "Verify window.open user gesture"
  humanReadableDescription: "Verifies that the user gesture for window.open came from the UI process"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

VerticalFormControlsEnabled:
  type: bool
  status: stable
  category: html
  humanReadableName: "Vertical form control support"
  humanReadableDescription: "Enable support for form controls in vertical writing mode"
  defaultValue:
    WebKitLegacy:
      "PLATFORM(COCOA)": true
      default: false
    WebKit:
      "PLATFORM(COCOA)": true
      default: false
    WebCore:
      "PLATFORM(COCOA)": true
      default: false

VideoFullsceenPrefersMostVisibleHeuristic:
  type: bool
  status: testable
  category: media
  humanReadableName: "Prefers most visible video in element fullscreen."
  humanReadableDescription: "Prefers most visible video in element fullscreen."
  condition: ENABLE(FULLSCREEN_API)
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

VideoFullscreenRequiresElementFullscreen:
  type: bool
  status: embedder
  condition: ENABLE(FULLSCREEN_API)
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: defaultVideoFullscreenRequiresElementFullscreen()
    WebCore:
      default: false
  sharedPreferenceForWebProcess: true

VideoPresentationManagerEnabled:
  type: bool
  status: embedder
  defaultValue:
    WebKitLegacy:
      "PLATFORM(VISION)" : true
      default: false
    WebKit:
      "PLATFORM(VISION)" : true
      default: false
    WebCore:
      "PLATFORM(VISION)" : true
      default: false
  sharedPreferenceForWebProcess: true
  
VideoPresentationModeAPIEnabled:
  type: bool
  status: embedder
  defaultValue:
    WebKitLegacy:
      "PLATFORM(VISION)" : false
      default: true
    WebKit:
      "PLATFORM(VISION)" : false
      default: true
    WebCore:
      "PLATFORM(VISION)" : false
      default: true
  sharedPreferenceForWebProcess: true

VideoQualityIncludesDisplayCompositingEnabled:
  type: bool
  status: embedder
  condition: ENABLE(VIDEO)
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

VideoRendererProtectedFallbackDisabled:
  type: bool
  status: stable
  category: media
  humanReadableName: "VideoMediaSampleRenderer fallback to AVSBDL for protected content disabled"
  humanReadableDescription: "VideoMediaSampleRenderer fallback to AVSBDL for protected content disabled"
  condition: USE(MODERN_AVCONTENTKEYSESSION_WITH_VTDECOMPRESSIONSESSION)
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: true
    WebCore:
      default: true
  sharedPreferenceForWebProcess: true

VideoRendererUseDecompressionSessionForProtected:
  type: bool
  status: preview
  category: media
  humanReadableName: "VideoMediaSampleRenderer use DecompressionSession for protected content"
  humanReadableDescription: "VideoMediaSampleRenderer use DecompressionSession for protected content"
  condition: USE(MODERN_AVCONTENTKEYSESSION_WITH_VTDECOMPRESSIONSESSION)
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false
  sharedPreferenceForWebProcess: true

ViewGestureDebuggingEnabled:
  type: bool
  status: embedder
  humanReadableName: "View gesture debugging"
  humanReadableDescription: "Enable view gesture debugging"
  webcoreBinding: none
  exposed: [ WebKit ]
  defaultValue:
    WebKit:
      default: false

ViewTransitionClassesEnabled:
  type: bool
  category: animation
  status: stable
  humanReadableName: "View Transition Classes"
  humanReadableDescription: "Support specifying classes for view transitions"
  defaultValue:
    WebKitLegacy:
      default: true
    WebKit:
      default: true
    WebCore:
      default: true

ViewTransitionTypesEnabled:
  type: bool
  category: animation
  status: stable
  humanReadableName: "View Transition Types"
  humanReadableDescription: "Support specifying types for view transitions"
  defaultValue:
    WebKitLegacy:
      default: true
    WebKit:
      default: true
    WebCore:
      default: true

ViewTransitionsEnabled:
  type: bool
  category: animation
  status: stable
  humanReadableName: "View Transitions"
  humanReadableDescription: "Enable the View Transitions API"
  defaultValue:
    WebKitLegacy:
      default: true
    WebKit:
      default: true
    WebCore:
      default: true

VisibleDebugOverlayRegions:
  type: uint32_t
  status: embedder
  defaultsOverridable: true
  webcoreType: DebugOverlayRegions
  defaultValue:
    WebKitLegacy:
      default: 0
    WebKit:
      default: 0
    WebCore:
      default: 0

VisualTranslationEnabled:
  type: bool
  # FIXME: Change to "embedder" when there is a way to enable/disable embedder features from API tests.
  status: internal
  category: dom
  humanReadableName: "Visual Translation"
  humanReadableDescription: "Enable Visual Translation"
  condition: ENABLE(IMAGE_ANALYSIS)
  exposed: [ WebKit ]
  defaultValue:
    WebCore:
      default: false
    WebKitLegacy:
      default: false
    WebKit:
      default: defaultVisualTranslationEnabled()

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

VisualViewportEnabled:
  type: bool
  status: embedder
  webcoreOnChange: setNeedsRecalcStyleInAllFrames
  defaultValue:
    WebKitLegacy:
      PLATFORM(IOS_FAMILY): false
      default: true
    WebKit:
      default: true
    WebCore:
      default: true

VisuallyContiguousBidiTextSelectionEnabled:
  type: bool
  status: internal
  humanReadableName: "Visually Contiguous Bidi Selection"
  humanReadableDescription: "Visually contiguous bidi selection"
  condition: PLATFORM(IOS_FAMILY)
  defaultValue:
    WebKit:
      default: WebKit::defaultVisuallyContiguousBidiTextSelectionEnabled()
    WebKitLegacy:
      default: false
    WebCore:
      default: false

WantsBalancedSetDefersLoadingBehavior:
  type: bool
  status: embedder
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

WebAPIStatisticsEnabled:
  type: bool
  status: unstable
  category: dom
  humanReadableName: "Web API Statistics"
  humanReadableDescription: "Enable Web API Statistics"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

WebAPIsInShadowRealmEnabled:
  type: bool
  status: unstable
  category: dom
  humanReadableName: "Web APIs in ShadowRealm"
  humanReadableDescription: "Enable Web APIs to be exposed in ShadowRealm"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

WebAnimationsCustomEffectsEnabled:
  type: bool
  status: testable
  category: animation
  humanReadableName: "Web Animations custom effects"
  humanReadableDescription: "Support for the CustomEffect interface"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

WebAnimationsCustomFrameRateEnabled:
  type: bool
  status: testable
  category: animation
  humanReadableName: "Web Animations custom frame rate"
  humanReadableDescription: "Support for specifying a custom frame rate for Web Animations"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

WebAnimationsOverallProgressPropertyEnabled:
  type: bool
  status: stable
  category: animation
  humanReadableName: "Web Animations 'overallProgress' property"
  humanReadableDescription: "Support for Animation's overallProgress property"
  defaultValue:
    WebKitLegacy:
      default: true
    WebKit:
      default: true
    WebCore:
      default: true

WebArchiveDebugModeEnabled:
  type: bool
  status: embedder
  humanReadableName: "Web Archive debug mode"
  humanReadableDescription: "Enable web archive debug mode"
  webKitLegacyPreferenceKey: WebKitWebArchiveDebugModeEnabledPreferenceKey
  condition: ENABLE(WEB_ARCHIVE)
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

WebArchiveTestingModeEnabled:
  type: bool
  status: internal
  category: dom
  humanReadableName: "Web Archive testing mode"
  humanReadableDescription: "Enable web archive testing mode"
  condition: ENABLE(WEB_ARCHIVE)
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

WebAssemblyESMIntegrationEnabled:
  type: bool
  status: testable
  category: javascript
  humanReadableName: "WebAssembly ES module integration support"
  humanReadableDescription: "Support for allowing WebAssembly modules to integrate as ES modules"
  condition: ENABLE(WEBASSEMBLY)
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

WebAudioEnabled:
  type: bool
  status: embedder
  condition: ENABLE(WEB_AUDIO)
  defaultValue:
    WebKitLegacy:
      default: true
    WebKit:
      default: true
    WebCore:
      default: false
  sharedPreferenceForWebProcess: true
  disableInLockdownMode: true
  richJavaScript: true
  mediaPlaybackRelated: true

WebAuthenticationASEnabled:
  type: bool
  status: embedder
  humanReadableName: "Web Authentication AuthenticationServices"
  humanReadableDescription: "Enable Modern Web Authentication support though AuthenticationServices"
  condition: HAVE(WEB_AUTHN_AS_MODERN)
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: true
    WebCore:
      default: true

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

WebCodecsAV1Enabled:
  type: bool
  status: preview
  category: media
  humanReadableName: "WebCodecs AV1 codec"
  humanReadableDescription: "Enable WebCodecs AV1 codec"
  condition: ENABLE(WEB_CODECS)
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      "USE(GSTREAMER)": true
      default: false
    WebCore:
      "USE(GSTREAMER)": true
      default: false
  disableInLockdownMode: true

WebCodecsAudioEnabled:
  type: bool
  status: stable
  category: media
  humanReadableName: "WebCodecs Audio API"
  humanReadableDescription: "Enable WebCodecs Audio API"
  condition: ENABLE(WEB_CODECS)
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: true
    WebCore:
      default: true

WebCodecsHEVCEnabled:
  type: bool
  status: mature
  category: media
  humanReadableName: "WebCodecs HEVC codec"
  humanReadableDescription: "Enable WebCodecs HEVC codec"
  condition: ENABLE(WEB_CODECS)
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      "USE(GSTREAMER)": true
      "PLATFORM(COCOA)": true
      default: false
    WebCore:
      "USE(GSTREAMER)": true
      "PLATFORM(COCOA)": true
      default: false

WebCodecsVideoEnabled:
  type: bool
  status: mature
  category: media
  humanReadableName: "WebCodecs Video API"
  humanReadableDescription: "Enable WebCodecs Video API"
  condition: ENABLE(WEB_CODECS)
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      "USE(LIBWEBRTC) && PLATFORM(COCOA)": WebKit::defaultPeerConnectionEnabledAvailable()
      "USE(GSTREAMER)": true
      default: false
    WebCore:
      "PLATFORM(COCOA)": true
      "USE(GSTREAMER)": true
      default: false
  disableInLockdownMode: true
  sharedPreferenceForWebProcess: true
  richJavaScript: true
  mediaPlaybackRelated: true

WebCryptoSafeCurvesEnabled:
  type: bool
  status: stable
  category: dom
  humanReadableName: "Web Crypto Safe Curves"
  humanReadableDescription: "Enable Web Crypto Safe Curves"
  defaultValue:
    WebKitLegacy:
      default: true
    WebKit:
      default: true
    WebCore:
      default: true

WebCryptoX25519Enabled:
  type: bool
  status: stable
  category: dom
  humanReadableName: "Web Crypto X25519 algorithm"
  humanReadableDescription: "Enable Web Crypto X25519 algorithm"
  defaultValue:
    WebKitLegacy:
      default: true
    WebKit:
      default: true
    WebCore:
      default: true

WebExtensionBookmarksEnabled:
  type: bool
  status: testable
  category: extensions
  humanReadableName: "WebExtension Bookmarks API"
  humanReadableDescription: "Enable support for WebExtensions using the Bookmarks API"
  condition: ENABLE(WK_WEB_EXTENSIONS_BOOKMARKS)
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

WebExtensionSidebarEnabled:
  type: bool
  status: testable
  category: extensions
  humanReadableName: "WebExtension sidebarAction and sidePanel APIs"
  humanReadableDescription: "Enable support for WebExtensions using the sidebarAction / sidePanel family of APIs"
  condition: ENABLE(WK_WEB_EXTENSIONS_SIDEBAR)
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

WebGLDraftExtensionsEnabled:
  type: bool
  status: testable
  category: dom
  humanReadableName: "WebGL Draft Extensions"
  humanReadableDescription: "Enable WebGL extensions that are still in draft status"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

WebGLEnabled:
  type: bool
  status: mature
  humanReadableName: "WebGL"
  humanReadableDescription: "Enable WebGL"
  defaultValue:
    WebKitLegacy:
      default: true
    WebKit:
      default: true
    WebCore:
      default: false
  disableInLockdownMode: true
  sharedPreferenceForWebProcess: true
  richJavaScript: true

WebGLTimerQueriesEnabled:
  type: bool
  status: developer
  category: dom
  humanReadableName: "WebGL Timer Queries"
  humanReadableDescription: "Enable WebGL extensions that provide GPU timer queries"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

WebGPUEnabled:
  type: bool
  status: Webgpu_feature_status
  category: dom
  humanReadableName: "WebGPU"
  humanReadableDescription: "Enable WebGPU"
  defaultValue:
    WebKitLegacy:
      "ENABLE(WEBGPU_BY_DEFAULT)": true
      default: false
    WebKit:
      "ENABLE(WEBGPU_BY_DEFAULT)": true
      default: false
    WebCore:
      "ENABLE(WEBGPU_BY_DEFAULT)": true
      default: false
  disableInLockdownMode: true
  sharedPreferenceForWebProcess: true
  richJavaScript: true

WebGPUHDREnabled:
  type: bool
  status: Webgpuhdr_feature_status
  category: dom
  humanReadableName: "WebGPU support for HDR"
  humanReadableDescription: "WebGPU High Dynamic Range through canvas configuration tone mapping mode"
  defaultValue:
    WebKitLegacy:
      "ENABLE(WEBGPU_BY_DEFAULT) && HAVE(SUPPORT_HDR_DISPLAY)": true
      default: false
    WebKit:
      "ENABLE(WEBGPU_BY_DEFAULT) && HAVE(SUPPORT_HDR_DISPLAY)": true
      default: false
    WebCore:
      "ENABLE(WEBGPU_BY_DEFAULT) && HAVE(SUPPORT_HDR_DISPLAY)": true
      default: false
  disableInLockdownMode: true
  sharedPreferenceForWebProcess: true

WebInspectorEngineeringSettingsAllowed:
  type: bool
  status: internal
  category: dom
  defaultsOverridable: true
  humanReadableName: "WebInspector engineering settings allowed"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

WebLocksAPIEnabled:
  type: bool
  status: stable
  category: dom
  humanReadableName: "Web Locks API"
  humanReadableDescription: "Web Locks API"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: true
    WebCore:
      default: true
  disableInLockdownMode: true
  sharedPreferenceForWebProcess: true
  richJavaScript: true

WebPageSpatialBackdropEnabled:
  type: bool
  status: testable
  category: html
  condition: ENABLE(WEB_PAGE_SPATIAL_BACKDROP)
  humanReadableName: "Website environments"
  humanReadableDescription: "Enable website environments"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false
  disableInLockdownMode: true
  sharedPreferenceForWebProcess: true

WebRTCAV1CodecEnabled:
  type: bool
  status: preview
  category: media
  humanReadableName: "WebRTC AV1 codec"
  humanReadableDescription: "Enable WebRTC AV1 codec"
  condition: ENABLE(WEB_RTC)
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      "USE(GSTREAMER)": true
      default: false
    WebCore:
      "USE(GSTREAMER)": true
      default: false

WebRTCAudioLatencyAdaptationEnabled:
  type: bool
  status: internal
  category: media
  humanReadableName: "WebRTC Audio Latency Adaptation"
  humanReadableDescription: "Enable WebRTC Audio Latency Adaptation"
  webcoreBinding: DeprecatedGlobalSettings
  defaultValue:
    WebKitLegacy:
      default: true
    WebKit:
      default: true

# FIXME: Is this implemented for WebKitLegacy? If not, this should be excluded from WebKitLegacy entirely.
WebRTCDTMFEnabled:
  type: bool
  status: internal
  category: media
  humanReadableName: "WebRTC DTMF"
  humanReadableDescription: "Enable WebRTC DTMF"
  condition: ENABLE(WEB_RTC)
  defaultValue:
    WebKitLegacy:
      default: true
    WebKit:
      default: true
    WebCore:
      default: true

WebRTCEncodedTransformEnabled:
  type: bool
  status: mature
  category: media
  condition: ENABLE(WEB_RTC)
  humanReadableName: "WebRTC Encoded Transform API"
  humanReadableDescription: "Enable WebRTC Encoded Transform API"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      "USE(LIBWEBRTC) && PLATFORM(COCOA)": WebKit::defaultPeerConnectionEnabledAvailable()
      "USE(GSTREAMER_WEBRTC)": true
      default: false
    WebCore:
      "USE(LIBWEBRTC)": true
      "USE(GSTREAMER_WEBRTC)": true
      default: false
  disableInLockdownMode: true

# FIXME: Is this implemented for WebKitLegacy? If not, this should be excluded from WebKitLegacy entirely.
WebRTCH264HardwareEncoderEnabled:
  type: bool
  status: internal
  category: media
  humanReadableName: "WebRTC H264 Hardware encoder"
  humanReadableDescription: "Enable H264 Hardware encoder"
  webcoreBinding: none
  condition: ENABLE(WEB_RTC)
  defaultValue:
    WebKitLegacy:
      default: true
    WebKit:
      default: true

# FIXME: Is this implemented for WebKitLegacy? If not, this should be excluded from WebKitLegacy entirely.
WebRTCH265CodecEnabled:
  type: bool
  status: mature
  category: media
  condition: ENABLE(WEB_RTC)
  humanReadableName: "WebRTC HEVC codec"
  humanReadableDescription: "Enable WebRTC HEVC codec"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      "PLATFORM(COCOA)": true
      default: false
    WebCore:
      "PLATFORM(COCOA)": true
      default: false

WebRTCInterfaceMonitoringViaNWEnabled:
  type: bool
  status: internal
  category: media
  condition: ENABLE(WEB_RTC) && PLATFORM(COCOA)
  humanReadableName: "WebRTC interface monitoring via NW"
  humanReadableDescription: "Enable WebRTC interface monitoring via NW"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false
  sharedPreferenceForWebProcess: true

WebRTCL4SEnabled:
  type: bool
  status: testable
  category: media
  condition: ENABLE(WEB_RTC)
  humanReadableName: "WebRTC L4S support"
  humanReadableDescription: "Enable WebRTC L4S support"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

WebRTCMediaPipelineAdditionalLoggingEnabled:
  type: bool
  status: internal
  category: media
  humanReadableName: "WebRTC Media Pipeline Additional Logging"
  humanReadableDescription: "Enable WebRTC Media Pipeline Additional Logging"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

# FIXME: This is not relevant for WebKitLegacy, so should be excluded from WebKitLegacy entirely.
WebRTCPlatformCodecsInGPUProcessEnabled:
  type: bool
  status: embedder
  humanReadableName: "GPU Process: WebRTC Platform Codecs"
  humanReadableDescription: "Enable WebRTC Platform Codecs in GPU Process"
  condition: ENABLE(WEB_RTC)
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      "ENABLE(GPU_PROCESS_BY_DEFAULT)": true
      default: false
    WebCore:
      default: false

WebRTCRemoteVideoFrameEnabled:
  type: bool
  status: internal
  category: media
  humanReadableName: "WebRTC Remote Video Frame"
  humanReadableDescription: "Enable WebRTC Remote Video Frame"
  condition: ENABLE(WEB_RTC)
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      "PLATFORM(COCOA)": true
      default: false
    WebCore:
      default: false

WebRTCSFrameTransformEnabled:
  type: bool
  status: testable
  category: media
  condition: ENABLE(WEB_RTC)
  humanReadableName: "WebRTC SFrame Transform API"
  humanReadableDescription: "Enable WebRTC SFrame Transform API"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

WebRTCSocketsProxyingEnabled:
  type: bool
  status: internal
  category: media
  humanReadableName: "WebRTC Sockets Proxying"
  humanReadableDescription: "Enable WebRTC Sockets Proxying"
  condition: ENABLE(WEB_RTC)
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: true
    WebCore:
      default: false

WebRTCUDPPortRange:
  type: String
  status: embedder
  category: media
  humanReadableName: "WebRTC UDP Port Range"
  humanReadableDescription: "Set a UDP port range for WebRTC. If set to 0:0, the port range is determined by the OS"
  condition: ENABLE(WEB_RTC)
  defaultValue:
    WebKitLegacy:
      default: '"0:0"_str'
    WebKit:
      default: '"0:0"_str'
    WebCore:
      default: '"0:0"_str'

WebRTCVP9Profile0CodecEnabled:
  type: bool
  status: internal
  category: media
  humanReadableName: "WebRTC VP9 profile 0 codec"
  humanReadableDescription: "Enable WebRTC VP9 profile 0 codec"
  condition: ENABLE(WEB_RTC)
  defaultValue:
    WebKitLegacy:
      default: true
    WebKit:
      default: true
    WebCore:
      default: true

WebRTCVP9Profile2CodecEnabled:
  type: bool
  status: mature
  category: media
  humanReadableName: "WebRTC VP9 profile 2 codec"
  humanReadableDescription: "Enable WebRTC VP9 profile 2 codec"
  condition: ENABLE(WEB_RTC)
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      "PLATFORM(COCOA)": true
      default: false
    WebCore:
      "PLATFORM(COCOA)": true
      default: false

WebSQLEnabled:
  type: bool
  status: embedder
  humanReadableName: "Enable WebSQL"
  humanReadableDescription: "Enable WebSQL"
  webcoreBinding: custom
  exposed: [ WebKitLegacy ]
  defaultValue:
    WebKitLegacy:
      "PLATFORM(IOS_FAMILY)": WebKit::defaultWebSQLEnabled()
      default: true

WebSecurityEnabled:
  type: bool
  status: embedder
  inspectorOverride: true
  defaultValue:
    WebKitLegacy:
      default: true
    WebKit:
      default: true
    WebCore:
      default: true

# FIXME: Is this implemented for WebKitLegacy? If not, this should be excluded from WebKitLegacy entirely (though we should still set the default value to false when initializing settings).
WebShareEnabled:
  type: bool
  status: embedder
  humanReadableName: "Web Share"
  humanReadableDescription: "Enable support for share sheet via Web Share API"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      "PLATFORM(COCOA) && !PLATFORM(WATCHOS) && !PLATFORM(APPLETV)": true
      default: false
    WebCore:
      default: false
  sharedPreferenceForWebProcess: true
  richJavaScript: true
  disableInLockdownMode: true

WebShareFileAPIEnabled:
  type: bool
  status: stable
  category: dom
  humanReadableName: "Web Share API Level 2"
  humanReadableDescription: "Enable level 2 of Web Share API"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      "PLATFORM(COCOA) && !PLATFORM(WATCHOS) && !PLATFORM(APPLETV)": true
      default: false
    WebCore:
      default: false

WebSocketEnabled:
  type: bool
  status: embedder
  defaultValue:
    WebKitLegacy:
      "PLATFORM(WATCHOS)": false
      default: true
    WebKit:
      "PLATFORM(WATCHOS)": false
      default: true
    WebCore:
      "PLATFORM(WATCHOS)": false
      default: true
  sharedPreferenceForWebProcess: true


WebTransportEnabled:
  type: bool
  status: testable
  category: networking
  humanReadableName: "WebTransport"
  humanReadableDescription: "Enable WebTransport"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false
  sharedPreferenceForWebProcess: true
  disableInLockdownMode: true

WebXRAugmentedRealityModuleEnabled:
  type: bool
  status: testable
  category: dom
  humanReadableName: "WebXR Augmented Reality Module"
  humanReadableDescription: "Adds support for the WebXR Augmented Reality Module"
  condition: ENABLE(WEBXR)
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false
  disableInLockdownMode: true

WebXREnabled:
  type: bool
  status: stable
  category: dom
  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"
  condition: ENABLE(WEBXR)
  defaultValue:
    WebKitLegacy:
      default: true
    WebKit:
      default: true
    WebCore:
      default: true
  disableInLockdownMode: true
  sharedPreferenceForWebProcess: true

WebXRGamepadsModuleEnabled:
  type: bool
  status: stable
  category: dom
  humanReadableName: "WebXR Gamepads Module"
  humanReadableDescription: "Adds support for the WebXR Gamepads Module"
  condition: ENABLE(WEBXR)
  defaultValue:
    WebKitLegacy:
      default: true
    WebKit:
      default: true
    WebCore:
      default: true

WebXRHandInputModuleEnabled:
  type: bool
  status: stable
  category: dom
  humanReadableName: "WebXR Hand Input Module"
  humanReadableDescription: "Adds support for the Hands Input Module for WebXR"
  condition: ENABLE(WEBXR_HANDS)
  defaultValue:
    WebKitLegacy:
      default: true
    WebKit:
      default: true
    WebCore:
      default: true

WebXRLayersAPIEnabled:
  type: bool
  status: Webxr_layers_feature_status
  category: dom
  humanReadableName: "WebXR Layers API"
  humanReadableDescription: "Adds support for the WebXR Layers API"
  condition: ENABLE(WEBXR_LAYERS)
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

WebXRWebGPUBindingsEnabled:
  type: bool
  status: Webgpu_webxr_feature_status
  category: dom
  humanReadableName: "WebGPU support for WebXR"
  humanReadableDescription: "Adds WebGPU support for WebXR"
  defaultValue:
    WebKitLegacy:
      "PLATFORM(VISION) && ENABLE(WEBXR_WEBGPU)": true
      default: false
    WebKit:
      "PLATFORM(VISION) && ENABLE(WEBXR_WEBGPU)": true
      default: false
    WebCore:
      "PLATFORM(VISION) && ENABLE(WEBXR_WEBGPU)": true
      default: false
  disableInLockdownMode: true
  sharedPreferenceForWebProcess: true

WheelEventGesturesBecomeNonBlocking:
  type: bool
  status: mature
  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

WindowFocusRestricted:
  comment: When enabled, window.blur() does not change focus, and window.focus() only
    changes focus when invoked from the context that created the window.
  type: bool
  status: embedder
  defaultValue:
    WebKitLegacy:
      PLATFORM(MAC): WebKit::defaultWindowFocusRestricted()
      default: true
    WebKit:
      default: true
    WebCore:
      default: true
      
WirelessPlaybackTargetAPIEnabled:
  type: bool
  status: embedder
  defaultValue:
    WebKitLegacy:
      "PLATFORM(VISION)" : false
      default: true
    WebKit:
      "PLATFORM(VISION)" : false
      default: true
    WebCore:
      "PLATFORM(VISION)" : false
      default: true

WorkerAsynchronousURLErrorHandlingEnabled:
  type: bool
  status: preview
  category: dom
  humanReadableName: "Worker asynchronous URL error handling"
  humanReadableDescription: "Worker asynchronous URL error handling"
  defaultValue:
    WebKitLegacy:
      default: false
    WebKit:
      default: false
    WebCore:
      default: false

WriteRichTextDataWhenCopyingOrDragging:
  type: bool
  status: internal
  humanReadableName: "Write RTF on Copy"
  humanReadableDescription: "Write RTF, RTFD and attributed strings to the pasteboard when copying or dragging"
  condition: PLATFORM(COCOA)
  defaultValue:
    WebKitLegacy:
      default: true
    WebKit:
      "PLATFORM(IOS_FAMILY)": WebKit::defaultWriteRichTextDataWhenCopyingOrDragging()
      default: true
    WebCore:
      default: true

WritingSuggestionsAttributeEnabled:
  type: bool
  status: stable
  category: dom
  humanReadableName: "Writing Suggestions"
  humanReadableDescription: "Enable the writingsuggestions attribute"
  condition: ENABLE(WRITING_SUGGESTIONS)
  defaultValue:
    WebKitLegacy:
      default: true
    WebKit:
      default: true
    WebCore:
      default: true

XSLTEnabled:
  type: bool
  status: internal
  webcoreName: "xsltEnabled"
  webcoreGetter: "isXSLTEnabled"
  condition: ENABLE(XSLT)
  humanReadableName: "XSLT Support Enabled"
  humanReadableDescription: "Enables support for XSLT"
  defaultValue:
    WebKitLegacy:
      default: true
    WebKit:
      default: true
    WebCore:
      default: true
  disableInLockdownMode: true

ZoomOnDoubleTapWhenRoot:
  type: bool
  status: internal
  condition: PLATFORM(IOS_FAMILY)
  humanReadableName: "DTTZ also when root"
  humanReadableDescription: "Double taps zoom, even if we dispatched a click on the root nodes"
  webcoreBinding: none
  exposed: [ WebKit ]
  defaultValue:
    WebKit:
      default: false
