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

AcceleratedCompositedAnimationsEnabled:
  type: bool
  webcoreOnChange: setNeedsRecalcStyleInAllFrames
  defaultValue:
    WebCore:
      default: true

AnimatedImageDebugCanvasDrawingEnabled:
  type: bool
  defaultValue:
    WebCore:
      default: false

AudioPlaybackRequiresUserGesture:
  type: bool
  defaultValue:
    WebCore:
      PLATFORM(IOS_FAMILY): true
      default: false

AutoscrollForDragAndDropEnabled:
  type: bool
  defaultValue:
    WebCore:
      default: false

BackForwardCacheExpirationInterval:
  type: double
  refinedType: Seconds
  defaultValue:
    WebCore:
      default: 30_min

BackgroundShouldExtendBeyondPage:
  type: bool
  webcoreOnChange: backgroundShouldExtendBeyondPageChanged
  defaultValue:
    WebCore:
      default: false

ClientCoordinatesRelativeToLayoutViewport:
  type: bool
  webcoreOnChange: setNeedsRecalcStyleInAllFrames
  defaultValue:
    WebCore:
      default: false

ClipboardAccessPolicy:
  type: uint32_t
  refinedType: ClipboardAccessPolicy
  defaultValue:
    WebCore:
      default: ClipboardAccessPolicy::RequiresUserGesture

CrossOriginCheckInGetMatchedCSSRulesDisabled:
  type: bool
  defaultValue:
    WebCore:
      default: false

DataDetectorTypes:
  type: uint32_t
  refinedType: DataDetectorType
  condition: ENABLE(DATA_DETECTION)
  defaultValue:
    WebCore:
      default: DataDetectorType::None

DefaultVideoPosterURL:
  comment: >-
    Some apps could have a default video poster if it is not set.
  type: String
  defaultValue:
    WebCore:
      default: '{ }'

DisableScreenSizeOverride:
  type: bool
  defaultValue:
    WebCore:
      default: false

DownloadableBinaryFontsEnabled:
  comment: >-
    FIXME: This should really be disabled by default as it makes platforms that don't support the
    feature download files they can't use by. Leaving enabled for now to not change existing behavior.
  type: bool
  defaultValue:
    WebCore:
      PLATFORM(WATCHOS): false
      default: true

EditableLinkBehavior:
  type: uint32_t
  refinedType: EditableLinkBehavior
  defaultValue:
    WebCore:
      default: EditableLinkBehavior::Default

EditingBehaviorType:
  type: uint32_t
  refinedType: EditingBehaviorType
  defaultValue:
    WebCore:
      PLATFORM(IOS_FAMILY): EditingBehaviorType::iOS
      OS(DARWIN): EditingBehaviorType::Mac
      OS(WINDOWS): EditingBehaviorType::Windows
      OS(UNIX): EditingBehaviorType::Unix
      default: EditingBehaviorType::Mac

FixedBackgroundsPaintRelativeToDocument:
  type: bool
  defaultValue:
    WebCore:
      PLATFORM(IOS_FAMILY): true
      default: false

FixedElementsLayoutRelativeToFrame:
  type: bool
  defaultValue:
    WebCore:
      default: false

FontFallbackPrefersPictographs:
  type: bool
  webcoreOnChange: setNeedsRecalcStyleInAllFrames
  defaultValue:
    WebCore:
      default: false

FontLoadTimingOverride:
  type: uint32_t
  refinedType: FontLoadTimingOverride
  defaultValue:
    WebCore:
      default: FontLoadTimingOverride::None

FontRenderingMode:
  type: uint32_t
  refinedType: FontRenderingMode
  defaultValue:
    WebCore:
      default: FontRenderingMode::Normal

ForceCompositingMode:
  type: bool
  defaultValue:
    WebCore:
      default: false

ForcePendingWebGLPolicy:
  type: bool
  webcoreGetter: isForcePendingWebGLPolicy
  defaultValue:
    WebCore:
      default: false

ForcedPrefersContrastAccessibilityValue:
  type: uint32_t
  refinedType: ForcedAccessibilityValue
  defaultValue:
    WebCore:
      default: ForcedAccessibilityValue::System

ForcedColorsAreInvertedAccessibilityValue:
  type: uint32_t
  refinedType: ForcedAccessibilityValue
  defaultValue:
    WebCore:
      default: ForcedAccessibilityValue::System

ForcedDisplayIsMonochromeAccessibilityValue:
  type: uint32_t
  refinedType: ForcedAccessibilityValue
  defaultValue:
    WebCore:
      default: ForcedAccessibilityValue::System

ForcedPrefersReducedMotionAccessibilityValue:
  type: uint32_t
  refinedType: ForcedAccessibilityValue
  defaultValue:
    WebCore:
      default: ForcedAccessibilityValue::System

ForcedSupportsHighDynamicRangeValue:
  type: uint32_t
  refinedType: ForcedAccessibilityValue
  webcoreOnChange: setNeedsRecalcStyleInAllFrames
  defaultValue:
    WebCore:
      default: ForcedAccessibilityValue::System

FrameFlattening:
  type: uint32_t
  refinedType: FrameFlattening
  webcoreOnChange: setNeedsRelayoutAllFrames
  defaultValue:
    WebCore:
      default: FrameFlattening::Disabled

GeolocationFloorLevelEnabled:
  type: bool
  defaultValue:
    WebCore:
      default: true

HTMLParserScriptingFlagPolicy:
  type: uint32_t
  refinedType: HTMLParserScriptingFlagPolicy
  defaultValue:
    WebCore:
      default: HTMLParserScriptingFlagPolicy::OnlyIfScriptIsEnabled

IdempotentModeAutosizingOnlyHonorsPercentages:
  type: bool
  condition: ENABLE(TEXT_AUTOSIZING)
  defaultValue:
    WebCore:
      default: false

ImageSubsamplingEnabled:
  type: bool
  defaultValue:
    WebCore:
      PLATFORM(IOS_FAMILY): true
      default: false

ImagesEnabled:
  type: bool
  webcoreGetter: areImagesEnabled
  webcoreOnChange: imagesEnabledChanged
  inspectorOverride: true
  defaultValue:
    WebCore:
      default: true

IsAccessibilityIsolatedTreeEnabled:
  type: bool
  defaultValue:
    WebCore:
      USE(ATSPI): true
      default: false

IsPerActivityStateCPUUsageMeasurementEnabled:
  type: bool
  defaultValue:
    WebCore:
      PLATFORM(MAC): true
      default: false

IsPostBackgroundingCPUUsageMeasurementEnabled:
  type: bool
  defaultValue:
    WebCore:
      PLATFORM(MAC): true
      default: false

IsPostBackgroundingMemoryUsageMeasurementEnabled:
  type: bool
  defaultValue:
    WebCore:
      PLATFORM(MAC): true
      default: false

IsPostLoadCPUUsageMeasurementEnabled:
  type: bool
  defaultValue:
    WebCore:
      PLATFORM(COCOA): true
      default: false

IsPostLoadMemoryUsageMeasurementEnabled:
  type: bool
  defaultValue:
    WebCore:
      PLATFORM(COCOA): true
      default: false

JavaScriptRuntimeFlags:
  type: uint32_t
  refinedType: JSC::RuntimeFlags
  defaultValue:
    WebCore:
      default: '{ }'

LangAttributeAwareFormControlUIEnabled:
  type: bool
  defaultValue:
    WebCore:
      default: false

LegacyBeforeLoadEventEnabled:
  comment: >-
    FIMXE: This does not appear to ever be set to true. Remove once verified.
  type: bool
  defaultValue:
    WebCore:
      default: false

LocalStorageDatabasePath:
  type: String
  defaultValue:
    WebCore:
      default: '{ }'

MaximumAccelerated2dCanvasSize:
  type: uint32_t
  defaultValue:
    WebCore:
      default: 5120*2880

MaximumHTMLParserDOMTreeDepth:
  type: uint32_t
  defaultValue:
    WebCore:
      default: defaultMaximumHTMLParserDOMTreeDepth

MaximumSourceBufferSize:
  comment: >-
    Allow SourceBuffers to store up to 304MB each, enough for approximately five minutes
    of 1080p video and stereo audio.
  type: uint32_t
  condition: ENABLE(MEDIA_SOURCE)
  defaultValue:
    WebCore:
      default: 318767104

MediaDeviceIdentifierStorageDirectory:
  type: String
  condition: ENABLE(MEDIA_STREAM)
  defaultValue:
    WebCore:
      default: '{ }'

MediaKeysStorageDirectory:
  type: String
  defaultValue:
    WebCore:
      default: '{ }'

MediaTypeOverride:
  type: String
  webcoreOnChange: mediaTypeOverrideChanged
  defaultValue:
    WebCore:
      default: '"screen"'

MinimumAccelerated2dCanvasSize:
  comment: >-
    Number of pixels below which 2D canvas is rendered in software
    even if hardware acceleration is enabled.
    Hardware acceleration is useful for large canvases where it can avoid the
    pixel bandwidth between the CPU and GPU. But GPU acceleration comes at
    a price - extra back-buffer and texture copy. Small canvases are also
    widely used for stylized fonts. Anti-aliasing text in hardware at that
    scale is generally slower. So below a certain size it is better to
    draw canvas in software.
  type: uint32_t
  defaultValue:
    WebCore:
      default: 257*256

NeedsDeferKeyDownAndKeyPressTimersUntilNextEditingCommandQuirk:
  comment: >-
    This is an iOS-specific quirk. Unlike Mac, keyboard operations are asynchronous and hence a DOM update as
    a result of text insertion or deletion does not occur within the same event loop iteration as a dispatched
    DOM keydown event. Some sites, notably Google Sheets, schedule timers on keypress and expect on a DOM update
    to have occurred on expiration. When enabled, this quirk puts all such scheduled timers in a holding tank
    until the keyboard performs the insertion or deletion. This gives Google Sheets the illusion that the DOM
    update happened within the same event loop iteration that the keypress event was dispatched in.
  type: bool
  defaultValue:
    WebCore:
      default: false

PaymentRequestEnabled:
  type: bool
  condition: ENABLE(PAYMENT_REQUEST)
  defaultValue:
    WebCore:
      default: false

PitchCorrectionAlgorithm:
  type: uint32_t
  refinedType: MediaPlayerEnums::PitchCorrectionAlgorithm
  defaultValue:
    WebCore:
      default: MediaPlayerEnums::PitchCorrectionAlgorithm::BestAllAround

PDFImageCachingPolicy:
  type: uint32_t
  refinedType: PDFImageCachingPolicy
  defaultValue:
    WebCore:
      PLATFORM(IOS_FAMILY): PDFImageCachingPolicy::BelowMemoryLimit
      default: PDFImageCachingPolicy::Enabled

PreferMIMETypeForImages:
  type: bool
  defaultValue:
    WebCore:
      default: false

PreventKeyboardDOMEventDispatch:
  type: bool
  defaultValue:
    WebCore:
      default: false

PrivateClickMeasurementFraudPreventionEnabled:
  type: bool
  defaultValue:
    WebCore:
      "HAVE(RSA_BSSA)": true
      default: false

RepaintOutsideLayoutEnabled:
  type: bool
  defaultValue:
    WebCore:
      default: false

ScrollingCoordinatorEnabled:
  type: bool
  defaultValue:
    WebCore:
      default: false

ScrollingTreeIncludesFrames:
  type: bool
  defaultValue:
    WebCore:
      PLATFORM(IOS_FAMILY): true
      default: false

SessionStorageQuota:
  comment: >-
    Allow clients concerned with memory consumption to set a quota on session storage
    since the memory used won't be released until the Page is destroyed.
  type: uint32_t
  defaultValue:
    WebCore:
      default: 5242880

ShouldDispatchSyntheticMouseEventsWhenModifyingSelection:
  type: bool
  defaultValue:
    WebCore:
      default: false

ShouldDispatchSyntheticMouseOutAfterSyntheticClick:
  type: bool
  defaultValue:
    WebCore:
      default: false

ShouldIgnoreFontLoadCompletions:
  type: bool
  defaultValue:
    WebCore:
      default: false

ShouldInjectUserScriptsInInitialEmptyDocument:
  type: bool
  defaultValue:
    WebCore:
      default: false

StorageAccessAPIPerPageScopeEnabled:
  type: bool
  defaultValue:
    WebCore:
      default: true

StorageBlockingPolicy:
  type: uint32_t
  refinedType: StorageBlockingPolicy
  webcoreOnChange: storageBlockingPolicyChanged
  defaultValue:
    WebCore:
      default: StorageBlockingPolicy::AllowAll

SystemLayoutDirection:
  type: uint32_t
  refinedType: TextDirection
  defaultValue:
    WebCore:
      default: TextDirection::LTR

TextAutosizingWindowSizeOverrideHeight:
  type: uint32_t
  webcoreOnChange: setNeedsRecalcStyleInAllFrames
  condition: ENABLE(TEXT_AUTOSIZING)
  defaultValue:
    WebCore:
      default: 0

TextAutosizingWindowSizeOverrideWidth:
  type: uint32_t
  webcoreOnChange: setNeedsRecalcStyleInAllFrames
  condition: ENABLE(TEXT_AUTOSIZING)
  defaultValue:
    WebCore:
      default: 0

TextDirectionSubmenuInclusionBehavior:
  type: uint32_t
  refinedType: TextDirectionSubmenuInclusionBehavior
  defaultValue:
    WebCore:
      default: TextDirectionSubmenuInclusionBehavior::AutomaticallyIncluded

TimeWithoutMouseMovementBeforeHidingControls:
  type: double
  refinedType: Seconds
  defaultValue:
    WebCore:
      default: 3_s

TouchEventEmulationEnabled:
  type: bool
  webcoreGetter: isTouchEventEmulationEnabled
  condition: ENABLE(TOUCH_EVENTS)
  defaultValue:
    WebCore:
      default: false

TreatIPAddressAsDomain:
  type: bool
  defaultValue:
    WebCore:
      default: false

UnhandledPromiseRejectionToConsoleEnabled:
  type: bool
  defaultValue:
    WebCore:
      default: true

UnifiedTextCheckerEnabled:
  type: bool
  defaultValue:
    WebCore:
      USE(UNIFIED_TEXT_CHECKING): true
      default: false

UseAnonymousModeWhenFetchingMaskImages:
  type: bool
  defaultValue:
    WebCore:
      default: true

UserInterfaceDirectionPolicy:
  type: uint32_t
  refinedType: UserInterfaceDirectionPolicy
  defaultValue:
    WebCore:
      default: UserInterfaceDirectionPolicy::Content

UserStyleSheetLocation:
  type: String
  refinedType: URL
  webcoreOnChange: userStyleSheetLocationChanged
  defaultValue:
    WebCore:
      default: '{ }'

ValidationMessageTimerMagnification:
  comment: >-
    Sets the magnification value for validation message timer. If the
    magnification value is N, a validation message disappears automatically after
    message length * N / 1000 seconds.  If N is equal to or less than 0, a
    validation message doesn't disappears automaticaly.
  type: uint32_t
  defaultValue:
    WebCore:
      default: 50

VideoPlaybackRequiresUserGesture:
  type: bool
  defaultValue:
    WebCore:
      PLATFORM(IOS_FAMILY): true
      default: false

WebGLErrorsToConsoleEnabled:
  type: bool
  defaultValue:
    WebCore:
      default: true

WebRTCEncryptionEnabled:
  type: bool
  inspectorOverride: true
  defaultValue:
    WebCore:
      default: true

WebkitImageReadyEventEnabled:
  type: bool
  defaultValue:
    WebCore:
      default: false
